Merge branch 'master' into binding-ts-improvements

This commit is contained in:
Adria Navarro 2025-01-17 09:56:39 +01:00 committed by GitHub
commit a79c1e1019
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 78 additions and 28 deletions

View File

@ -1,6 +1,6 @@
{ {
"$schema": "node_modules/lerna/schemas/lerna-schema.json", "$schema": "node_modules/lerna/schemas/lerna-schema.json",
"version": "3.2.44", "version": "3.2.45",
"npmClient": "yarn", "npmClient": "yarn",
"concurrency": 20, "concurrency": 20,
"command": { "command": {

View File

@ -1,6 +1,6 @@
import env from "../../environment" import env from "../../environment"
export const getCouchInfo = (connection?: string) => { export const getCouchInfo = (connection?: string | null) => {
// clean out any auth credentials // clean out any auth credentials
const urlInfo = getUrlInfo(connection) const urlInfo = getUrlInfo(connection)
let username let username
@ -45,7 +45,7 @@ export const getCouchInfo = (connection?: string) => {
} }
} }
export const getUrlInfo = (url = env.COUCH_DB_URL) => { export const getUrlInfo = (url: string | null = env.COUCH_DB_URL) => {
let cleanUrl, username, password, host let cleanUrl, username, password, host
if (url) { if (url) {
// Ensure the URL starts with a protocol // Ensure the URL starts with a protocol

View File

@ -1,5 +1,6 @@
require("../../../tests") require("../../../tests")
const getUrlInfo = require("../couch").getUrlInfo
import { getUrlInfo } from "../couch"
describe("pouch", () => { describe("pouch", () => {
describe("Couch DB URL parsing", () => { describe("Couch DB URL parsing", () => {

View File

@ -1172,20 +1172,22 @@ class InternalBuilder {
nulls = value.direction === SortOrder.ASCENDING ? "first" : "last" nulls = value.direction === SortOrder.ASCENDING ? "first" : "last"
} }
const composite = `${aliased}.${key}`
let identifier
if (this.isAggregateField(key)) { if (this.isAggregateField(key)) {
query = query.orderBy(key, direction, nulls) identifier = this.rawQuotedIdentifier(key)
} else if (this.client === SqlClient.ORACLE) {
identifier = this.convertClobs(composite)
} else { } else {
let composite = `${aliased}.${key}` identifier = this.rawQuotedIdentifier(composite)
if (this.client === SqlClient.ORACLE) { }
query = query.orderByRaw(`?? ?? nulls ??`, [
this.convertClobs(composite), query = query.orderByRaw(`?? ?? ${nulls ? "nulls ??" : ""}`, [
identifier,
this.knex.raw(direction), this.knex.raw(direction),
this.knex.raw(nulls as string), ...(nulls ? [this.knex.raw(nulls as string)] : []),
]) ])
} else {
query = query.orderBy(composite, direction, nulls)
}
}
} }
} }
@ -1344,14 +1346,16 @@ class InternalBuilder {
// add the correlation to the overall query // add the correlation to the overall query
subQuery = subQuery.where( subQuery = subQuery.where(
correlatedTo, this.rawQuotedIdentifier(correlatedTo),
"=", "=",
this.rawQuotedIdentifier(correlatedFrom) this.rawQuotedIdentifier(correlatedFrom)
) )
const standardWrap = (select: Knex.Raw): Knex.QueryBuilder => { const standardWrap = (select: Knex.Raw): Knex.QueryBuilder => {
subQuery = subQuery subQuery = subQuery
.select(relationshipFields) .select(
relationshipFields.map(field => this.rawQuotedIdentifier(field))
)
.limit(getRelationshipLimit()) .limit(getRelationshipLimit())
// @ts-ignore - the from alias syntax isn't in Knex typing // @ts-ignore - the from alias syntax isn't in Knex typing
return knex.select(select).from({ return knex.select(select).from({

View File

@ -1,17 +1,17 @@
const _ = require("lodash/fp") import { range } from "lodash/fp"
const { structures } = require("../../../tests") import { structures } from "../.."
jest.mock("../../../src/context") jest.mock("../../../src/context")
jest.mock("../../../src/db") jest.mock("../../../src/db")
const context = require("../../../src/context") import * as context from "../../../src/context"
const db = require("../../../src/db") import * as db from "../../../src/db"
const { getCreatorCount } = require("../../../src/users/users") import { getCreatorCount } from "../../../src/users/users"
describe("Users", () => { describe("Users", () => {
let getGlobalDBMock let getGlobalDBMock: jest.SpyInstance
let paginationMock let paginationMock: jest.SpyInstance
beforeEach(() => { beforeEach(() => {
jest.resetAllMocks() jest.resetAllMocks()
@ -22,11 +22,10 @@ describe("Users", () => {
jest.spyOn(db, "getGlobalUserParams") jest.spyOn(db, "getGlobalUserParams")
}) })
it("Retrieves the number of creators", async () => { it("retrieves the number of creators", async () => {
const getUsers = (offset, limit, creators = false) => { const getUsers = (offset: number, limit: number, creators = false) => {
const range = _.range(offset, limit)
const opts = creators ? { builder: { global: true } } : undefined const opts = creators ? { builder: { global: true } } : undefined
return range.map(() => structures.users.user(opts)) return range(offset, limit).map(() => structures.users.user(opts))
} }
const page1Data = getUsers(0, 8) const page1Data = getUsers(0, 8)
const page2Data = getUsers(8, 12, true) const page2Data = getUsers(8, 12, true)

View File

@ -3650,6 +3650,51 @@ if (descriptions.length) {
}) })
}) })
if (isInternal || isMSSQL) {
describe("Fields with spaces", () => {
let table: Table
let otherTable: Table
let relatedRow: Row
beforeAll(async () => {
otherTable = await config.api.table.save(defaultTable())
table = await config.api.table.save(
saveTableRequest({
schema: {
links: {
name: "links",
fieldName: "links",
type: FieldType.LINK,
tableId: otherTable._id!,
relationshipType: RelationshipType.ONE_TO_MANY,
},
"nameWithSpace ": {
name: "nameWithSpace ",
type: FieldType.STRING,
},
},
})
)
relatedRow = await config.api.row.save(otherTable._id!, {
name: generator.word(),
description: generator.paragraph(),
})
await config.api.row.save(table._id!, {
"nameWithSpace ": generator.word(),
tableId: table._id!,
links: [relatedRow._id],
})
})
it("Successfully returns rows that have spaces in their field names", async () => {
const { rows } = await config.api.row.search(table._id!)
expect(rows.length).toBe(1)
const row = rows[0]
expect(row["nameWithSpace "]).toBeDefined()
})
})
}
if (!isInternal && !isOracle) { if (!isInternal && !isOracle) {
describe("bigint ids", () => { describe("bigint ids", () => {
let table1: Table, table2: Table let table1: Table, table2: Table

View File

@ -276,6 +276,7 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
encrypt, encrypt,
enableArithAbort: true, enableArithAbort: true,
requestTimeout: env.QUERY_THREAD_TIMEOUT, requestTimeout: env.QUERY_THREAD_TIMEOUT,
connectTimeout: env.QUERY_THREAD_TIMEOUT,
}, },
} }
if (encrypt) { if (encrypt) {