Merge branch 'master' into binding-ts-improvements
This commit is contained in:
commit
a79c1e1019
|
@ -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": {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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", () => {
|
|
@ -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({
|
||||||
|
|
|
@ -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)
|
|
@ -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
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue