Adding test case based on capture of real failing query.
This commit is contained in:
parent
5b6be81c3a
commit
5d2ba68fae
|
@ -683,3 +683,110 @@ describe("SQL query builder", () => {
|
|||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe("Captures of real examples", () => {
|
||||
const limit = 5000
|
||||
|
||||
it("should handle filtering by relationship", () => {
|
||||
const queryJson = {
|
||||
endpoint: {
|
||||
datasourceId: "datasource_plus_8066e56456784eb2a00129d31be5c3e7",
|
||||
entityId: "products",
|
||||
operation: "READ",
|
||||
alias: "a",
|
||||
},
|
||||
resource: {
|
||||
fields: [
|
||||
"a.productname",
|
||||
"a.productid",
|
||||
"b.executorid",
|
||||
"b.taskname",
|
||||
"b.taskid",
|
||||
"b.completed",
|
||||
"b.qaid",
|
||||
],
|
||||
},
|
||||
filters: {
|
||||
equal: {
|
||||
"1:tasks.taskname": "assembling",
|
||||
},
|
||||
onEmptyFilter: "all",
|
||||
},
|
||||
sort: {
|
||||
productname: {
|
||||
direction: "ASCENDING",
|
||||
},
|
||||
},
|
||||
paginate: {
|
||||
limit: 100,
|
||||
page: 1,
|
||||
},
|
||||
relationships: [
|
||||
{
|
||||
tableName: "tasks",
|
||||
column: "tasks",
|
||||
through: "products_tasks",
|
||||
from: "productid",
|
||||
to: "taskid",
|
||||
fromPrimary: "productid",
|
||||
toPrimary: "taskid",
|
||||
aliases: {
|
||||
products_tasks: "c",
|
||||
tasks: "b",
|
||||
products: "a",
|
||||
},
|
||||
},
|
||||
],
|
||||
meta: {
|
||||
table: {
|
||||
type: "table",
|
||||
_id: "datasource_plus_8066e56456784eb2a00129d31be5c3e7__products",
|
||||
primary: ["productid"],
|
||||
name: "a",
|
||||
schema: {
|
||||
productname: {
|
||||
type: "string",
|
||||
externalType: "character varying",
|
||||
autocolumn: false,
|
||||
name: "productname",
|
||||
constraints: {
|
||||
presence: false,
|
||||
},
|
||||
},
|
||||
productid: {
|
||||
type: "number",
|
||||
externalType: "integer",
|
||||
autocolumn: true,
|
||||
name: "productid",
|
||||
constraints: {
|
||||
presence: false,
|
||||
},
|
||||
},
|
||||
tasks: {
|
||||
tableId:
|
||||
"datasource_plus_8066e56456784eb2a00129d31be5c3e7__tasks",
|
||||
name: "tasks",
|
||||
relationshipType: "many-to-many",
|
||||
fieldName: "taskid",
|
||||
through:
|
||||
"datasource_plus_8066e56456784eb2a00129d31be5c3e7__products_tasks",
|
||||
throughFrom: "taskid",
|
||||
throughTo: "productid",
|
||||
type: "link",
|
||||
main: true,
|
||||
_id: "ca6862d9ba09146dd8a68e3b5b7055a09",
|
||||
},
|
||||
},
|
||||
sourceId: "datasource_plus_8066e56456784eb2a00129d31be5c3e7",
|
||||
sourceType: "external",
|
||||
primaryDisplay: "productname",
|
||||
},
|
||||
},
|
||||
}
|
||||
let query = new Sql(SqlClient.POSTGRES, limit)._query(queryJson)
|
||||
expect(query).toEqual({
|
||||
bindings: [100, "assembling", limit],
|
||||
sql: `select "a"."productname" as "a.productname", "a"."productid" as "a.productid", "b"."executorid" as "b.executorid", "b"."taskname" as "b.taskname", "b"."taskid" as "b.taskid", "b"."completed" as "b.completed", "b"."qaid" as "b.qaid" from (select * from "products" as "a" order by "a"."productname" asc limit $1) as "a" left join "products_tasks" as "c" on "a"."productid" = "c"."productid" left join "tasks" as "b" on "b"."taskid" = "c"."taskid" where "b"."taskname" = $2 order by "a"."productname" asc limit $3`,
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue