@balena/abstract-sql-compiler 7.22.2 → 7.22.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.versionbot/CHANGELOG.yml +13 -1
- package/CHANGELOG.md +4 -0
- package/package.json +10 -10
- package/test/odata/expand.js +2 -2
- package/test/odata/filterby.js +132 -69
- package/test/odata/resource_parsing.js +21 -20
- package/test/odata/select.js +2 -2
- package/test/odata/stress.js +14 -9
- package/test/odata/test.js +1 -1
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
- commits:
|
|
2
|
+
- subject: "Tests: update @balena/odata-to-abstract-sql to 5.x"
|
|
3
|
+
hash: e93dfd1cbf56a9df248ac199776dca44c71cbc11
|
|
4
|
+
body: ""
|
|
5
|
+
footer:
|
|
6
|
+
Change-type: patch
|
|
7
|
+
change-type: patch
|
|
8
|
+
author: Pagan Gazzard
|
|
9
|
+
nested: []
|
|
10
|
+
version: 7.22.3
|
|
11
|
+
title: ""
|
|
12
|
+
date: 2022-11-30T16:13:57.771Z
|
|
1
13
|
- commits:
|
|
2
14
|
- subject: Fix deprecation notice module name
|
|
3
15
|
hash: 7272a823a00ffd6af52228f2cab4c95e3b3474b9
|
|
@@ -9,7 +21,7 @@
|
|
|
9
21
|
nested: []
|
|
10
22
|
version: 7.22.2
|
|
11
23
|
title: ""
|
|
12
|
-
date: 2022-11-
|
|
24
|
+
date: 2022-11-30T16:12:20.310Z
|
|
13
25
|
- commits:
|
|
14
26
|
- subject: Add deprecation notices to the legacy null formats of `null` and `'Null'`
|
|
15
27
|
hash: d4a8a31911b80c4c8ad46e5b6567496c232fad9b
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file
|
|
|
4
4
|
automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY!
|
|
5
5
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
|
6
6
|
|
|
7
|
+
## 7.22.3 - 2022-11-30
|
|
8
|
+
|
|
9
|
+
* Tests: update @balena/odata-to-abstract-sql to 5.x [Pagan Gazzard]
|
|
10
|
+
|
|
7
11
|
## 7.22.2 - 2022-11-30
|
|
8
12
|
|
|
9
13
|
* Fix deprecation notice module name [Pagan Gazzard]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@balena/abstract-sql-compiler",
|
|
3
|
-
"version": "7.22.
|
|
3
|
+
"version": "7.22.3",
|
|
4
4
|
"description": "A translator for abstract sql into sql.",
|
|
5
5
|
"main": "out/AbstractSQLCompiler.js",
|
|
6
6
|
"types": "out/AbstractSQLCompiler.d.ts",
|
|
@@ -16,24 +16,24 @@
|
|
|
16
16
|
"repository": "https://github.com/balena-io-modules/abstract-sql-compiler.git",
|
|
17
17
|
"author": "",
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@balena/
|
|
19
|
+
"@balena/odata-to-abstract-sql": "^5.7.2",
|
|
20
|
+
"@balena/sbvr-types": "^3.4.18",
|
|
20
21
|
"lodash": "^4.17.21"
|
|
21
22
|
},
|
|
22
23
|
"devDependencies": {
|
|
23
|
-
"@balena/lf-to-abstract-sql": "^4.5.
|
|
24
|
+
"@balena/lf-to-abstract-sql": "^4.5.6",
|
|
24
25
|
"@balena/lint": "^6.2.1",
|
|
25
26
|
"@balena/odata-parser": "^2.4.2",
|
|
26
|
-
"@balena/sbvr-parser": "^1.4.
|
|
27
|
-
"@resin/odata-to-abstract-sql": "^3.3.0",
|
|
27
|
+
"@balena/sbvr-parser": "^1.4.3",
|
|
28
28
|
"@types/chai": "^4.3.4",
|
|
29
29
|
"@types/common-tags": "^1.8.1",
|
|
30
|
-
"@types/lodash": "^4.14.
|
|
31
|
-
"@types/mocha": "^10.0.
|
|
30
|
+
"@types/lodash": "^4.14.190",
|
|
31
|
+
"@types/mocha": "^10.0.1",
|
|
32
32
|
"@types/node": "^18.11.9",
|
|
33
33
|
"chai": "^4.3.7",
|
|
34
34
|
"common-tags": "^1.8.2",
|
|
35
|
-
"husky": "^8.0.
|
|
36
|
-
"lint-staged": "^13.0.
|
|
35
|
+
"husky": "^8.0.2",
|
|
36
|
+
"lint-staged": "^13.0.4",
|
|
37
37
|
"mocha": "^10.1.0",
|
|
38
38
|
"require-npm4-to-publish": "^1.0.0",
|
|
39
39
|
"ts-node": "^10.9.1",
|
|
@@ -58,6 +58,6 @@
|
|
|
58
58
|
]
|
|
59
59
|
},
|
|
60
60
|
"versionist": {
|
|
61
|
-
"publishedAt": "2022-11-
|
|
61
|
+
"publishedAt": "2022-11-30T16:13:58.130Z"
|
|
62
62
|
}
|
|
63
63
|
}
|
package/test/odata/expand.js
CHANGED
|
@@ -285,7 +285,7 @@ SELECT (
|
|
|
285
285
|
FROM (
|
|
286
286
|
SELECT ${fields}
|
|
287
287
|
FROM "licence" AS "pilot.licence"
|
|
288
|
-
WHERE "pilot.licence"."id" = ?
|
|
288
|
+
WHERE ("pilot.licence"."id") IS NOT NULL AND ("pilot.licence"."id") = (?)
|
|
289
289
|
AND "pilot"."licence" = "pilot.licence"."id"
|
|
290
290
|
) AS "pilot.licence"
|
|
291
291
|
) AS "licence", ${remainingPilotFields}
|
|
@@ -350,7 +350,7 @@ SELECT (
|
|
|
350
350
|
FROM "licence" AS "pilot.licence",
|
|
351
351
|
"pilot" AS "pilot.licence.is of-pilot"
|
|
352
352
|
WHERE "pilot.licence"."id" = "pilot.licence.is of-pilot"."licence"
|
|
353
|
-
AND "pilot.licence.is of-pilot"."id" = ?
|
|
353
|
+
AND ("pilot.licence.is of-pilot"."id") IS NOT NULL AND ("pilot.licence.is of-pilot"."id") = (?)
|
|
354
354
|
AND "pilot"."licence" = "pilot.licence"."id"
|
|
355
355
|
) AS "pilot.licence"
|
|
356
356
|
) AS "licence", ${remainingPilotFields}
|
package/test/odata/filterby.js
CHANGED
|
@@ -7,7 +7,7 @@ const { expect } = require('chai');
|
|
|
7
7
|
const test = require('./test');
|
|
8
8
|
const { clientModel } = test;
|
|
9
9
|
const _ = require('lodash');
|
|
10
|
-
const { odataNameToSqlName } = require('@
|
|
10
|
+
const { odataNameToSqlName } = require('@balena/odata-to-abstract-sql');
|
|
11
11
|
const {
|
|
12
12
|
pilotFields,
|
|
13
13
|
teamFields,
|
|
@@ -204,15 +204,40 @@ const createExpression = function (lhs, op, rhs) {
|
|
|
204
204
|
lhs = parseOperand(lhs);
|
|
205
205
|
rhs = parseOperand(rhs);
|
|
206
206
|
const bindings = lhs.bindings.concat(rhs.bindings);
|
|
207
|
-
if (['eq', 'ne'].includes(op)
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
207
|
+
if (['eq', 'ne'].includes(op)) {
|
|
208
|
+
if ([lhs.sql, rhs.sql].includes('NULL')) {
|
|
209
|
+
const nullCheck = op === 'eq' ? ' IS NULL' : ' IS NOT NULL';
|
|
210
|
+
if (lhs.sql === 'NULL') {
|
|
211
|
+
sql = rhs.sql + nullCheck;
|
|
212
|
+
} else {
|
|
213
|
+
sql = lhs.sql + nullCheck;
|
|
214
|
+
}
|
|
211
215
|
} else {
|
|
212
|
-
|
|
216
|
+
const nullCheck = ' IS NOT NULL';
|
|
217
|
+
const lhsNullCheck =
|
|
218
|
+
lhs.sql === '?' ? '' : `(${lhs.sql})${nullCheck} AND `;
|
|
219
|
+
const rhsNullCheck =
|
|
220
|
+
rhs.sql === '?' ? '' : `(${rhs.sql})${nullCheck} AND `;
|
|
221
|
+
const bothNullCheck =
|
|
222
|
+
lhsNullCheck.length > 0 && rhsNullCheck.length > 0
|
|
223
|
+
? ` OR (${lhs.sql}) IS NULL AND (${rhs.sql}) IS NULL`
|
|
224
|
+
: '';
|
|
225
|
+
|
|
226
|
+
if (lhsNullCheck.length > 0 || rhsNullCheck.length > 0) {
|
|
227
|
+
if (op === 'ne') {
|
|
228
|
+
const mainCheck = `(${lhs.sql})${sqlOps.eq} (${rhs.sql})`;
|
|
229
|
+
sql = `NOT(${lhsNullCheck}${rhsNullCheck}${mainCheck}${bothNullCheck})`;
|
|
230
|
+
} else {
|
|
231
|
+
const mainCheck = `(${lhs.sql})${sqlOps[op]} (${rhs.sql})`;
|
|
232
|
+
sql = `${lhsNullCheck}${rhsNullCheck}${mainCheck}${bothNullCheck}`;
|
|
233
|
+
}
|
|
234
|
+
} else {
|
|
235
|
+
const mainCheck = `${lhs.sql}${sqlOps[op]} ${rhs.sql}`;
|
|
236
|
+
sql = `${lhsNullCheck}${rhsNullCheck}${mainCheck}${bothNullCheck}`;
|
|
237
|
+
}
|
|
213
238
|
}
|
|
214
239
|
} else {
|
|
215
|
-
sql = lhs.sql
|
|
240
|
+
sql = `${lhs.sql}${sqlOps[op]} ${rhs.sql}`;
|
|
216
241
|
}
|
|
217
242
|
|
|
218
243
|
if (sqlOpBrackets[op]) {
|
|
@@ -275,25 +300,25 @@ const createMethodCall = function (method, ...args) {
|
|
|
275
300
|
case 'HOUR':
|
|
276
301
|
case 'MINUTE':
|
|
277
302
|
return {
|
|
278
|
-
sql: `EXTRACT('${method}' FROM ${args[0].sql})`,
|
|
303
|
+
sql: `EXTRACT('${method}' FROM DATE_TRUNC('milliseconds', ${args[0].sql}))`,
|
|
279
304
|
bindings: args[0].bindings,
|
|
280
305
|
odata,
|
|
281
306
|
};
|
|
282
307
|
case 'SECOND':
|
|
283
308
|
return {
|
|
284
|
-
sql: `FLOOR(EXTRACT('${method}' FROM ${args[0].sql}))`,
|
|
309
|
+
sql: `FLOOR(EXTRACT('${method}' FROM DATE_TRUNC('milliseconds', ${args[0].sql})))`,
|
|
285
310
|
bindings: args[0].bindings,
|
|
286
311
|
odata,
|
|
287
312
|
};
|
|
288
313
|
case 'FRACTIONALSECONDS':
|
|
289
314
|
return {
|
|
290
|
-
sql: `EXTRACT('SECOND' FROM ${args[0].sql}) - FLOOR(EXTRACT('SECOND' FROM ${args[0].sql}))`,
|
|
315
|
+
sql: `EXTRACT('SECOND' FROM DATE_TRUNC('milliseconds', ${args[0].sql})) - FLOOR(EXTRACT('SECOND' FROM DATE_TRUNC('milliseconds', ${args[0].sql})))`,
|
|
291
316
|
bindings: args[0].bindings,
|
|
292
317
|
odata,
|
|
293
318
|
};
|
|
294
319
|
case 'TIME':
|
|
295
320
|
return {
|
|
296
|
-
sql: `CAST(${args[0].sql} AS ${method})`,
|
|
321
|
+
sql: `CAST(DATE_TRUNC('milliseconds', ${args[0].sql}) AS ${method})`,
|
|
297
322
|
bindings: args[0].bindings,
|
|
298
323
|
odata,
|
|
299
324
|
};
|
|
@@ -303,6 +328,12 @@ const createMethodCall = function (method, ...args) {
|
|
|
303
328
|
bindings: args[0].bindings,
|
|
304
329
|
odata,
|
|
305
330
|
};
|
|
331
|
+
case 'DATE':
|
|
332
|
+
return {
|
|
333
|
+
sql: `DATE(DATE_TRUNC('milliseconds', ${args[0].sql}))`,
|
|
334
|
+
bindings: args[0].bindings,
|
|
335
|
+
odata,
|
|
336
|
+
};
|
|
306
337
|
default:
|
|
307
338
|
if (methodMaps.hasOwnProperty(method)) {
|
|
308
339
|
method = methodMaps[method];
|
|
@@ -496,7 +527,7 @@ run(function () {
|
|
|
496
527
|
`\
|
|
497
528
|
SELECT ${pilotFieldsStr}
|
|
498
529
|
FROM "pilot"
|
|
499
|
-
WHERE "pilot"."name" =
|
|
530
|
+
WHERE ("pilot"."name") IS NOT NULL AND ("pilot"."name") = (?)`,
|
|
500
531
|
);
|
|
501
532
|
});
|
|
502
533
|
},
|
|
@@ -516,8 +547,8 @@ run(function () {
|
|
|
516
547
|
`\
|
|
517
548
|
SELECT ${pilotFieldsStr}
|
|
518
549
|
FROM "pilot"
|
|
519
|
-
WHERE ("pilot"."name" = $1
|
|
520
|
-
OR "pilot"."favourite colour" = $1)`,
|
|
550
|
+
WHERE (("pilot"."name") IS NOT NULL AND ("pilot"."name") = ($1)
|
|
551
|
+
OR ("pilot"."favourite colour") IS NOT NULL AND ("pilot"."favourite colour") = ($1))`,
|
|
521
552
|
);
|
|
522
553
|
});
|
|
523
554
|
},
|
|
@@ -564,9 +595,9 @@ FROM "pilot",
|
|
|
564
595
|
"pilot-can fly-plane" AS "pilot.pilot-can fly-plane",
|
|
565
596
|
"plane" AS "pilot.pilot-can fly-plane.can fly-plane"
|
|
566
597
|
WHERE "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.can fly-plane"."id"
|
|
567
|
-
AND "pilot.pilot-can fly-plane.can fly-plane"."id" = ?
|
|
598
|
+
AND ("pilot.pilot-can fly-plane.can fly-plane"."id") IS NOT NULL AND ("pilot.pilot-can fly-plane.can fly-plane"."id") = (?)
|
|
568
599
|
AND "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
569
|
-
AND "pilot"."id" =
|
|
600
|
+
AND ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
570
601
|
);
|
|
571
602
|
},
|
|
572
603
|
);
|
|
@@ -767,7 +798,7 @@ run(function () {
|
|
|
767
798
|
`\
|
|
768
799
|
UPDATE "pilot"
|
|
769
800
|
SET "name" = ?
|
|
770
|
-
WHERE "pilot"."id" = ?
|
|
801
|
+
WHERE ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)
|
|
771
802
|
AND "pilot"."id" IN ((
|
|
772
803
|
SELECT "pilot"."id"
|
|
773
804
|
FROM "pilot"
|
|
@@ -798,7 +829,7 @@ FROM (
|
|
|
798
829
|
SELECT CAST(NULL AS TIMESTAMP) AS "created at", CAST(NULL AS TIMESTAMP) AS "modified at", CAST(? AS INTEGER) AS "id", CAST(NULL AS INTEGER) AS "person", CAST(NULL AS INTEGER) AS "is experienced", CAST(? AS VARCHAR(255)) AS "name", CAST(NULL AS INTEGER) AS "age", CAST(NULL AS INTEGER) AS "favourite colour", CAST(NULL AS INTEGER) AS "is on-team", CAST(NULL AS INTEGER) AS "licence", CAST(NULL AS TIMESTAMP) AS "hire date", CAST(NULL AS INTEGER) AS "was trained by-pilot"
|
|
799
830
|
) AS "pilot"
|
|
800
831
|
WHERE ${sql}
|
|
801
|
-
AND "pilot"."id" =
|
|
832
|
+
AND ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
802
833
|
);
|
|
803
834
|
});
|
|
804
835
|
it('and updates', () => {
|
|
@@ -818,7 +849,7 @@ SET "created at" = DEFAULT,
|
|
|
818
849
|
"licence" = DEFAULT,
|
|
819
850
|
"hire date" = DEFAULT,
|
|
820
851
|
"was trained by-pilot" = DEFAULT
|
|
821
|
-
WHERE "pilot"."id" = ?
|
|
852
|
+
WHERE ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)
|
|
822
853
|
AND "pilot"."id" IN ((
|
|
823
854
|
SELECT "pilot"."id"
|
|
824
855
|
FROM "pilot"
|
|
@@ -854,7 +885,7 @@ FROM "pilot",
|
|
|
854
885
|
"pilot-can fly-plane" AS "pilot.pilot-can fly-plane"
|
|
855
886
|
WHERE ${sql}
|
|
856
887
|
AND "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
857
|
-
AND "pilot"."id" =
|
|
888
|
+
AND ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
858
889
|
);
|
|
859
890
|
},
|
|
860
891
|
);
|
|
@@ -868,14 +899,21 @@ methodTest('startswith', 'name', "'P'");
|
|
|
868
899
|
run(() => {
|
|
869
900
|
operandTest(createMethodCall('length', 'name'), 'eq', 4);
|
|
870
901
|
});
|
|
902
|
+
|
|
871
903
|
run(() => {
|
|
872
|
-
operandTest(createMethodCall('indexof', 'name', "'Pe'"), 'eq', 0
|
|
904
|
+
operandTest(createMethodCall('indexof', 'name', "'Pe'"), 'eq', 0, {
|
|
905
|
+
sql: '(STRPOS("pilot"."name", $1) - 1) IS NOT NULL AND (STRPOS("pilot"."name", $1) - 1) = ($2)',
|
|
906
|
+
});
|
|
873
907
|
});
|
|
874
908
|
run(() => {
|
|
875
|
-
operandTest(createMethodCall('substring', 'name', 1), 'eq', "'ete'"
|
|
909
|
+
operandTest(createMethodCall('substring', 'name', 1), 'eq', "'ete'", {
|
|
910
|
+
sql: '(SUBSTRING("pilot"."name", $1 + 1)) IS NOT NULL AND (SUBSTRING("pilot"."name", $1 + 1)) = ($2)',
|
|
911
|
+
});
|
|
876
912
|
});
|
|
877
913
|
run(() => {
|
|
878
|
-
operandTest(createMethodCall('substring', 'name', 1, 2), 'eq', "'et'"
|
|
914
|
+
operandTest(createMethodCall('substring', 'name', 1, 2), 'eq', "'et'", {
|
|
915
|
+
sql: '(SUBSTRING("pilot"."name", $1 + 1, $2)) IS NOT NULL AND (SUBSTRING("pilot"."name", $1 + 1, $2)) = ($3)',
|
|
916
|
+
});
|
|
879
917
|
});
|
|
880
918
|
run(() => {
|
|
881
919
|
operandTest(createMethodCall('tolower', 'name'), 'eq', "'pete'");
|
|
@@ -892,11 +930,15 @@ run(() => {
|
|
|
892
930
|
});
|
|
893
931
|
run(function () {
|
|
894
932
|
const concat = createMethodCall('concat', 'name', "'%20'");
|
|
895
|
-
operandTest(createMethodCall('trim', concat), 'eq', "'Pete'"
|
|
933
|
+
operandTest(createMethodCall('trim', concat), 'eq', "'Pete'", {
|
|
934
|
+
sql: '(TRIM(("pilot"."name" || $1))) IS NOT NULL AND (TRIM(("pilot"."name" || $1))) = ($2)',
|
|
935
|
+
});
|
|
896
936
|
});
|
|
897
937
|
run(function () {
|
|
898
938
|
const concat = createMethodCall('concat', 'name', "'%20'");
|
|
899
|
-
operandTest(concat, 'eq', "'Pete%20'"
|
|
939
|
+
operandTest(concat, 'eq', "'Pete%20'", {
|
|
940
|
+
sql: '(("pilot"."name" || $1)) IS NOT NULL AND (("pilot"."name" || $1)) = ($2)',
|
|
941
|
+
});
|
|
900
942
|
});
|
|
901
943
|
run(() => {
|
|
902
944
|
operandTest(createMethodCall('year', 'hire_date'), 'eq', 2011);
|
|
@@ -957,6 +999,9 @@ run(() => {
|
|
|
957
999
|
createMethodCall('replace', 'name', "'ete'", "'at'"),
|
|
958
1000
|
'eq',
|
|
959
1001
|
"'Pat'",
|
|
1002
|
+
{
|
|
1003
|
+
sql: '(REPLACE("pilot"."name", $1, $2)) IS NOT NULL AND (REPLACE("pilot"."name", $1, $2)) = ($3)',
|
|
1004
|
+
},
|
|
960
1005
|
);
|
|
961
1006
|
});
|
|
962
1007
|
|
|
@@ -977,7 +1022,7 @@ WHERE EXISTS (
|
|
|
977
1022
|
"plane" AS "pilot.pilot-can fly-plane.plane"
|
|
978
1023
|
WHERE "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
979
1024
|
AND "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
980
|
-
AND "pilot.pilot-can fly-plane.plane"."name" = ?
|
|
1025
|
+
AND ("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
981
1026
|
)`,
|
|
982
1027
|
);
|
|
983
1028
|
});
|
|
@@ -1001,7 +1046,7 @@ WHERE EXISTS (
|
|
|
1001
1046
|
"plane" AS "pilot.pilot-can fly-plane.plane"
|
|
1002
1047
|
WHERE "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
1003
1048
|
AND "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
1004
|
-
AND "pilot.pilot-can fly-plane.plane"."name" = ?
|
|
1049
|
+
AND ("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
1005
1050
|
)`,
|
|
1006
1051
|
);
|
|
1007
1052
|
});
|
|
@@ -1012,11 +1057,11 @@ test(
|
|
|
1012
1057
|
"/pilot?$filter=can_fly__plane/any(d:d/plane/name eq 'Concorde') or (id eq 5 or id eq 10) or (name eq 'Peter' or name eq 'Harry')",
|
|
1013
1058
|
'GET',
|
|
1014
1059
|
[
|
|
1060
|
+
['Bind', 0],
|
|
1015
1061
|
['Bind', 1],
|
|
1016
1062
|
['Bind', 2],
|
|
1017
1063
|
['Bind', 3],
|
|
1018
1064
|
['Bind', 4],
|
|
1019
|
-
['Bind', 0],
|
|
1020
1065
|
],
|
|
1021
1066
|
(result, sqlEquals) => {
|
|
1022
1067
|
it('should select count(*) from pilot where id in (5,10)', () => {
|
|
@@ -1025,16 +1070,18 @@ test(
|
|
|
1025
1070
|
`\
|
|
1026
1071
|
SELECT ${pilotFieldsStr}
|
|
1027
1072
|
FROM "pilot"
|
|
1028
|
-
WHERE (
|
|
1029
|
-
OR "pilot"."name" IN (?, ?)
|
|
1030
|
-
OR EXISTS (
|
|
1073
|
+
WHERE (EXISTS (
|
|
1031
1074
|
SELECT 1
|
|
1032
1075
|
FROM "pilot-can fly-plane" AS "pilot.pilot-can fly-plane",
|
|
1033
1076
|
"plane" AS "pilot.pilot-can fly-plane.plane"
|
|
1034
1077
|
WHERE "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
1035
1078
|
AND "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
1036
|
-
AND "pilot.pilot-can fly-plane.plane"."name" = ?
|
|
1037
|
-
)
|
|
1079
|
+
AND ("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
1080
|
+
)
|
|
1081
|
+
OR ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)
|
|
1082
|
+
OR ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)
|
|
1083
|
+
OR ("pilot"."name") IS NOT NULL AND ("pilot"."name") = (?)
|
|
1084
|
+
OR ("pilot"."name") IS NOT NULL AND ("pilot"."name") = (?))`,
|
|
1038
1085
|
);
|
|
1039
1086
|
});
|
|
1040
1087
|
},
|
|
@@ -1044,11 +1091,11 @@ test(
|
|
|
1044
1091
|
"/pilot?$filter=not(can_fly__plane/any(d:d/plane/name eq 'Concorde') or (id eq 5 or id eq 10) or (name eq 'Peter' or name eq 'Harry'))",
|
|
1045
1092
|
'GET',
|
|
1046
1093
|
[
|
|
1094
|
+
['Bind', 0],
|
|
1047
1095
|
['Bind', 1],
|
|
1048
1096
|
['Bind', 2],
|
|
1049
1097
|
['Bind', 3],
|
|
1050
1098
|
['Bind', 4],
|
|
1051
|
-
['Bind', 0],
|
|
1052
1099
|
],
|
|
1053
1100
|
(result, sqlEquals) => {
|
|
1054
1101
|
it('should select count(*) from pilot where id in (5,10)', () => {
|
|
@@ -1058,16 +1105,18 @@ test(
|
|
|
1058
1105
|
SELECT ${pilotFieldsStr}
|
|
1059
1106
|
FROM "pilot"
|
|
1060
1107
|
WHERE NOT (
|
|
1061
|
-
(
|
|
1062
|
-
OR "pilot"."name" IN (?, ?)
|
|
1063
|
-
OR EXISTS (
|
|
1108
|
+
(EXISTS (
|
|
1064
1109
|
SELECT 1
|
|
1065
1110
|
FROM "pilot-can fly-plane" AS "pilot.pilot-can fly-plane",
|
|
1066
1111
|
"plane" AS "pilot.pilot-can fly-plane.plane"
|
|
1067
1112
|
WHERE "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
1068
1113
|
AND "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
1069
|
-
AND "pilot.pilot-can fly-plane.plane"."name" = ?
|
|
1070
|
-
)
|
|
1114
|
+
AND ("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
1115
|
+
)
|
|
1116
|
+
OR ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)
|
|
1117
|
+
OR ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)
|
|
1118
|
+
OR ("pilot"."name") IS NOT NULL AND ("pilot"."name") = (?)
|
|
1119
|
+
OR ("pilot"."name") IS NOT NULL AND ("pilot"."name") = (?))
|
|
1071
1120
|
)`,
|
|
1072
1121
|
);
|
|
1073
1122
|
});
|
|
@@ -1091,7 +1140,9 @@ WHERE NOT EXISTS (
|
|
|
1091
1140
|
"plane" AS "pilot.pilot-can fly-plane.plane"
|
|
1092
1141
|
WHERE "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
1093
1142
|
AND "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
1094
|
-
AND
|
|
1143
|
+
AND NOT (
|
|
1144
|
+
("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
1145
|
+
)
|
|
1095
1146
|
)`,
|
|
1096
1147
|
);
|
|
1097
1148
|
});
|
|
@@ -1115,7 +1166,9 @@ WHERE NOT EXISTS (
|
|
|
1115
1166
|
"plane" AS "pilot.pilot-can fly-plane.plane"
|
|
1116
1167
|
WHERE "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
1117
1168
|
AND "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
1118
|
-
AND
|
|
1169
|
+
AND NOT (
|
|
1170
|
+
("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
1171
|
+
)
|
|
1119
1172
|
)`,
|
|
1120
1173
|
);
|
|
1121
1174
|
});
|
|
@@ -1139,7 +1192,7 @@ AND EXISTS (
|
|
|
1139
1192
|
SELECT 1
|
|
1140
1193
|
FROM "plane" AS "pilot.pilot-can fly-plane.plane"
|
|
1141
1194
|
WHERE "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
1142
|
-
AND "pilot.pilot-can fly-plane.plane"."name" = ?
|
|
1195
|
+
AND ("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
1143
1196
|
)`,
|
|
1144
1197
|
);
|
|
1145
1198
|
});
|
|
@@ -1163,7 +1216,7 @@ AND EXISTS (
|
|
|
1163
1216
|
SELECT 1
|
|
1164
1217
|
FROM "plane" AS "pilot.pilot-can fly-plane.plane"
|
|
1165
1218
|
WHERE "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
1166
|
-
AND "pilot.pilot-can fly-plane.plane"."name" = ?
|
|
1219
|
+
AND ("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
1167
1220
|
)`,
|
|
1168
1221
|
);
|
|
1169
1222
|
});
|
|
@@ -1187,7 +1240,9 @@ AND NOT EXISTS (
|
|
|
1187
1240
|
SELECT 1
|
|
1188
1241
|
FROM "plane" AS "pilot.pilot-can fly-plane.plane"
|
|
1189
1242
|
WHERE "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
1190
|
-
AND
|
|
1243
|
+
AND NOT (
|
|
1244
|
+
("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
1245
|
+
)
|
|
1191
1246
|
)`,
|
|
1192
1247
|
);
|
|
1193
1248
|
});
|
|
@@ -1211,7 +1266,9 @@ AND NOT EXISTS (
|
|
|
1211
1266
|
SELECT 1
|
|
1212
1267
|
FROM "plane" AS "pilot.pilot-can fly-plane.plane"
|
|
1213
1268
|
WHERE "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
1214
|
-
AND
|
|
1269
|
+
AND NOT (
|
|
1270
|
+
("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
1271
|
+
)
|
|
1215
1272
|
)`,
|
|
1216
1273
|
);
|
|
1217
1274
|
});
|
|
@@ -1222,11 +1279,11 @@ test(
|
|
|
1222
1279
|
"/pilot?$filter=can_fly__plane/any(d:d/plane/name eq 'Concorde') or (id eq 5 or name eq 'Peter') or (id eq 10 or name eq 'Harry')",
|
|
1223
1280
|
'GET',
|
|
1224
1281
|
[
|
|
1282
|
+
['Bind', 0],
|
|
1225
1283
|
['Bind', 1],
|
|
1226
|
-
['Bind', 3],
|
|
1227
1284
|
['Bind', 2],
|
|
1285
|
+
['Bind', 3],
|
|
1228
1286
|
['Bind', 4],
|
|
1229
|
-
['Bind', 0],
|
|
1230
1287
|
],
|
|
1231
1288
|
(result, sqlEquals) => {
|
|
1232
1289
|
it('should select count(*) from pilot where id in (5,10)', () => {
|
|
@@ -1235,16 +1292,18 @@ test(
|
|
|
1235
1292
|
`\
|
|
1236
1293
|
SELECT ${pilotFieldsStr}
|
|
1237
1294
|
FROM "pilot"
|
|
1238
|
-
WHERE (
|
|
1239
|
-
OR "pilot"."name" IN (?, ?)
|
|
1240
|
-
OR EXISTS (
|
|
1295
|
+
WHERE (EXISTS (
|
|
1241
1296
|
SELECT 1
|
|
1242
1297
|
FROM "pilot-can fly-plane" AS "pilot.pilot-can fly-plane",
|
|
1243
1298
|
"plane" AS "pilot.pilot-can fly-plane.plane"
|
|
1244
1299
|
WHERE "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
1245
1300
|
AND "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
1246
|
-
AND "pilot.pilot-can fly-plane.plane"."name" = ?
|
|
1247
|
-
)
|
|
1301
|
+
AND ("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
1302
|
+
)
|
|
1303
|
+
OR ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)
|
|
1304
|
+
OR ("pilot"."name") IS NOT NULL AND ("pilot"."name") = (?)
|
|
1305
|
+
OR ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)
|
|
1306
|
+
OR ("pilot"."name") IS NOT NULL AND ("pilot"."name") = (?))`,
|
|
1248
1307
|
);
|
|
1249
1308
|
});
|
|
1250
1309
|
},
|
|
@@ -1254,11 +1313,11 @@ test(
|
|
|
1254
1313
|
"/pilot?$filter=can_fly__plane/any(d:d/plane/name eq 'Concorde') and (id ne 5 and id ne 10) and (name ne 'Peter' and name ne 'Harry')",
|
|
1255
1314
|
'GET',
|
|
1256
1315
|
[
|
|
1316
|
+
['Bind', 0],
|
|
1257
1317
|
['Bind', 1],
|
|
1258
1318
|
['Bind', 2],
|
|
1259
1319
|
['Bind', 3],
|
|
1260
1320
|
['Bind', 4],
|
|
1261
|
-
['Bind', 0],
|
|
1262
1321
|
],
|
|
1263
1322
|
(result, sqlEquals) => {
|
|
1264
1323
|
it('should select count(*) from pilot where id in (5,10)', () => {
|
|
@@ -1267,16 +1326,18 @@ test(
|
|
|
1267
1326
|
`\
|
|
1268
1327
|
SELECT ${pilotFieldsStr}
|
|
1269
1328
|
FROM "pilot"
|
|
1270
|
-
WHERE
|
|
1271
|
-
AND "pilot"."name" NOT IN (?, ?)
|
|
1272
|
-
AND EXISTS (
|
|
1329
|
+
WHERE EXISTS (
|
|
1273
1330
|
SELECT 1
|
|
1274
1331
|
FROM "pilot-can fly-plane" AS "pilot.pilot-can fly-plane",
|
|
1275
1332
|
"plane" AS "pilot.pilot-can fly-plane.plane"
|
|
1276
1333
|
WHERE "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
1277
1334
|
AND "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
1278
|
-
AND "pilot.pilot-can fly-plane.plane"."name" = ?
|
|
1279
|
-
)
|
|
1335
|
+
AND ("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
1336
|
+
)
|
|
1337
|
+
AND NOT(("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?))
|
|
1338
|
+
AND NOT(("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?))
|
|
1339
|
+
AND NOT(("pilot"."name") IS NOT NULL AND ("pilot"."name") = (?))
|
|
1340
|
+
AND NOT(("pilot"."name") IS NOT NULL AND ("pilot"."name") = (?))`,
|
|
1280
1341
|
);
|
|
1281
1342
|
});
|
|
1282
1343
|
},
|
|
@@ -1286,11 +1347,11 @@ test(
|
|
|
1286
1347
|
"/pilot?$filter=can_fly__plane/any(d:d/plane/name eq 'Concorde') and (id ne 5 and name ne 'Peter') and (id ne 10 and name ne 'Harry')",
|
|
1287
1348
|
'GET',
|
|
1288
1349
|
[
|
|
1350
|
+
['Bind', 0],
|
|
1289
1351
|
['Bind', 1],
|
|
1290
|
-
['Bind', 3],
|
|
1291
1352
|
['Bind', 2],
|
|
1353
|
+
['Bind', 3],
|
|
1292
1354
|
['Bind', 4],
|
|
1293
|
-
['Bind', 0],
|
|
1294
1355
|
],
|
|
1295
1356
|
(result, sqlEquals) => {
|
|
1296
1357
|
it('should select count(*) from pilot where id in (5,10)', () => {
|
|
@@ -1299,16 +1360,18 @@ test(
|
|
|
1299
1360
|
`\
|
|
1300
1361
|
SELECT ${pilotFieldsStr}
|
|
1301
1362
|
FROM "pilot"
|
|
1302
|
-
WHERE
|
|
1303
|
-
AND "pilot"."name" NOT IN (?, ?)
|
|
1304
|
-
AND EXISTS (
|
|
1363
|
+
WHERE EXISTS (
|
|
1305
1364
|
SELECT 1
|
|
1306
1365
|
FROM "pilot-can fly-plane" AS "pilot.pilot-can fly-plane",
|
|
1307
1366
|
"plane" AS "pilot.pilot-can fly-plane.plane"
|
|
1308
1367
|
WHERE "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
1309
1368
|
AND "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
1310
|
-
AND "pilot.pilot-can fly-plane.plane"."name" = ?
|
|
1311
|
-
)
|
|
1369
|
+
AND ("pilot.pilot-can fly-plane.plane"."name") IS NOT NULL AND ("pilot.pilot-can fly-plane.plane"."name") = (?)
|
|
1370
|
+
)
|
|
1371
|
+
AND NOT(("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?))
|
|
1372
|
+
AND NOT(("pilot"."name") IS NOT NULL AND ("pilot"."name") = (?))
|
|
1373
|
+
AND NOT(("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?))
|
|
1374
|
+
AND NOT(("pilot"."name") IS NOT NULL AND ("pilot"."name") = (?))`,
|
|
1312
1375
|
);
|
|
1313
1376
|
});
|
|
1314
1377
|
},
|
|
@@ -1380,7 +1443,7 @@ run(function () {
|
|
|
1380
1443
|
`\
|
|
1381
1444
|
SELECT ${pilotFieldsStr}
|
|
1382
1445
|
FROM "pilot"
|
|
1383
|
-
WHERE CURRENT_TIMESTAMP - "pilot"."created at" < INTERVAL '1 0:0:0.0'`,
|
|
1446
|
+
WHERE CURRENT_TIMESTAMP - DATE_TRUNC('milliseconds', "pilot"."created at") < INTERVAL '1 0:0:0.0'`,
|
|
1384
1447
|
);
|
|
1385
1448
|
});
|
|
1386
1449
|
});
|
|
@@ -1410,14 +1473,14 @@ run(function () {
|
|
|
1410
1473
|
`\
|
|
1411
1474
|
SELECT ${pilotFieldsStr}
|
|
1412
1475
|
FROM "pilot"
|
|
1413
|
-
WHERE "pilot"."created at" + INTERVAL '1 0:0:0.0' > CURRENT_TIMESTAMP`,
|
|
1476
|
+
WHERE DATE_TRUNC('milliseconds', "pilot"."created at") + INTERVAL '1 0:0:0.0' > CURRENT_TIMESTAMP`,
|
|
1414
1477
|
);
|
|
1415
1478
|
});
|
|
1416
1479
|
});
|
|
1417
1480
|
});
|
|
1418
1481
|
|
|
1419
1482
|
run(function () {
|
|
1420
|
-
const odata =
|
|
1483
|
+
const odata = "totalseconds(duration'P1D') gt 1";
|
|
1421
1484
|
test(`/pilot?$filter=${odata}`, 'GET', [['Bind', 0]], (result, sqlEquals) => {
|
|
1422
1485
|
it('should select from pilot where "' + odata + '"', () => {
|
|
1423
1486
|
sqlEquals(
|
|
@@ -1425,7 +1488,7 @@ run(function () {
|
|
|
1425
1488
|
`\
|
|
1426
1489
|
SELECT ${pilotFieldsStr}
|
|
1427
1490
|
FROM "pilot"
|
|
1428
|
-
WHERE EXTRACT(EPOCH FROM
|
|
1491
|
+
WHERE EXTRACT(EPOCH FROM INTERVAL '1 0:0:0.0') > $1`,
|
|
1429
1492
|
);
|
|
1430
1493
|
});
|
|
1431
1494
|
});
|
|
@@ -37,7 +37,7 @@ test('/pilot(1)', 'GET', [['Bind', 0]], (result, sqlEquals) => {
|
|
|
37
37
|
`\
|
|
38
38
|
SELECT ${pilotFieldsStr}
|
|
39
39
|
FROM "pilot"
|
|
40
|
-
WHERE "pilot"."id" =
|
|
40
|
+
WHERE ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
41
41
|
);
|
|
42
42
|
});
|
|
43
43
|
});
|
|
@@ -49,7 +49,7 @@ test("/pilot('TextKey')", 'GET', [['Bind', 0]], (result, sqlEquals) => {
|
|
|
49
49
|
`\
|
|
50
50
|
SELECT ${pilotFieldsStr}
|
|
51
51
|
FROM "pilot"
|
|
52
|
-
WHERE "pilot"."id" =
|
|
52
|
+
WHERE ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
53
53
|
);
|
|
54
54
|
});
|
|
55
55
|
});
|
|
@@ -63,7 +63,7 @@ SELECT ${aliasLicenceFieldsStr}
|
|
|
63
63
|
FROM "pilot",
|
|
64
64
|
"licence" AS "pilot.licence"
|
|
65
65
|
WHERE "pilot"."licence" = "pilot.licence"."id"
|
|
66
|
-
AND "pilot"."id" =
|
|
66
|
+
AND ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
67
67
|
);
|
|
68
68
|
});
|
|
69
69
|
});
|
|
@@ -77,7 +77,7 @@ SELECT ${aliasPilotLicenceFieldsStr}
|
|
|
77
77
|
FROM "licence",
|
|
78
78
|
"pilot" AS "licence.is of-pilot"
|
|
79
79
|
WHERE "licence"."id" = "licence.is of-pilot"."licence"
|
|
80
|
-
AND "licence"."id" =
|
|
80
|
+
AND ("licence"."id") IS NOT NULL AND ("licence"."id") = (?)`,
|
|
81
81
|
);
|
|
82
82
|
});
|
|
83
83
|
});
|
|
@@ -97,7 +97,7 @@ FROM "pilot",
|
|
|
97
97
|
"plane" AS "pilot.pilot-can fly-plane.plane"
|
|
98
98
|
WHERE "pilot.pilot-can fly-plane"."can fly-plane" = "pilot.pilot-can fly-plane.plane"."id"
|
|
99
99
|
AND "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
100
|
-
AND "pilot"."id" =
|
|
100
|
+
AND ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
101
101
|
);
|
|
102
102
|
});
|
|
103
103
|
},
|
|
@@ -118,7 +118,7 @@ FROM "plane",
|
|
|
118
118
|
"pilot" AS "plane.pilot-can fly-plane.pilot"
|
|
119
119
|
WHERE "plane.pilot-can fly-plane"."pilot" = "plane.pilot-can fly-plane.pilot"."id"
|
|
120
120
|
AND "plane"."id" = "plane.pilot-can fly-plane"."can fly-plane"
|
|
121
|
-
AND "plane"."id" =
|
|
121
|
+
AND ("plane"."id") IS NOT NULL AND ("plane"."id") = (?)`,
|
|
122
122
|
);
|
|
123
123
|
});
|
|
124
124
|
},
|
|
@@ -130,7 +130,7 @@ test('/pilot(1)', 'DELETE', [['Bind', 0]], (result, sqlEquals) => {
|
|
|
130
130
|
result.query,
|
|
131
131
|
`\
|
|
132
132
|
DELETE FROM "pilot"
|
|
133
|
-
WHERE "pilot"."id" =
|
|
133
|
+
WHERE ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
134
134
|
);
|
|
135
135
|
});
|
|
136
136
|
});
|
|
@@ -158,7 +158,7 @@ SELECT "pilot"."id"
|
|
|
158
158
|
FROM (
|
|
159
159
|
SELECT CAST(NULL AS TIMESTAMP) AS "created at", CAST(NULL AS TIMESTAMP) AS "modified at", CAST(? AS INTEGER) AS "id", CAST(NULL AS INTEGER) AS "person", CAST(NULL AS INTEGER) AS "is experienced", CAST(NULL AS VARCHAR(255)) AS "name", CAST(NULL AS INTEGER) AS "age", CAST(NULL AS INTEGER) AS "favourite colour", CAST(NULL AS INTEGER) AS "is on-team", CAST(NULL AS INTEGER) AS "licence", CAST(NULL AS TIMESTAMP) AS "hire date", CAST(NULL AS INTEGER) AS "was trained by-pilot"
|
|
160
160
|
) AS "pilot"
|
|
161
|
-
WHERE "pilot"."id" =
|
|
161
|
+
WHERE ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
162
162
|
);
|
|
163
163
|
sqlEquals(
|
|
164
164
|
result[1].query,
|
|
@@ -176,7 +176,7 @@ SET "created at" = DEFAULT,
|
|
|
176
176
|
"licence" = DEFAULT,
|
|
177
177
|
"hire date" = DEFAULT,
|
|
178
178
|
"was trained by-pilot" = DEFAULT
|
|
179
|
-
WHERE "pilot"."id" =
|
|
179
|
+
WHERE ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
180
180
|
);
|
|
181
181
|
});
|
|
182
182
|
},
|
|
@@ -219,7 +219,7 @@ INSERT INTO "pilot" DEFAULT VALUES`,
|
|
|
219
219
|
`\
|
|
220
220
|
UPDATE "pilot"
|
|
221
221
|
SET "is experienced" = ?
|
|
222
|
-
WHERE "pilot"."id" =
|
|
222
|
+
WHERE ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
223
223
|
);
|
|
224
224
|
});
|
|
225
225
|
};
|
|
@@ -237,7 +237,7 @@ test(
|
|
|
237
237
|
result.query,
|
|
238
238
|
`\
|
|
239
239
|
DELETE FROM "pilot-can fly-plane"
|
|
240
|
-
WHERE "pilot-can fly-plane"."id" =
|
|
240
|
+
WHERE ("pilot-can fly-plane"."id") IS NOT NULL AND ("pilot-can fly-plane"."id") = (?)`,
|
|
241
241
|
);
|
|
242
242
|
});
|
|
243
243
|
},
|
|
@@ -266,7 +266,7 @@ SELECT "pilot-can fly-plane"."id"
|
|
|
266
266
|
FROM (
|
|
267
267
|
SELECT CAST(NULL AS TIMESTAMP) AS "created at", CAST(NULL AS TIMESTAMP) AS "modified at", CAST(NULL AS INTEGER) AS "pilot", CAST(NULL AS INTEGER) AS "can fly-plane", CAST(? AS INTEGER) AS "id"
|
|
268
268
|
) AS "pilot-can fly-plane"
|
|
269
|
-
WHERE "pilot-can fly-plane"."id" =
|
|
269
|
+
WHERE ("pilot-can fly-plane"."id") IS NOT NULL AND ("pilot-can fly-plane"."id") = (?)`,
|
|
270
270
|
);
|
|
271
271
|
sqlEquals(
|
|
272
272
|
result[1].query,
|
|
@@ -277,7 +277,7 @@ SET "created at" = DEFAULT,
|
|
|
277
277
|
"pilot" = DEFAULT,
|
|
278
278
|
"can fly-plane" = DEFAULT,
|
|
279
279
|
"id" = ?
|
|
280
|
-
WHERE "pilot-can fly-plane"."id" =
|
|
280
|
+
WHERE ("pilot-can fly-plane"."id") IS NOT NULL AND ("pilot-can fly-plane"."id") = (?)`,
|
|
281
281
|
);
|
|
282
282
|
});
|
|
283
283
|
},
|
|
@@ -323,7 +323,7 @@ INSERT INTO "pilot-can fly-plane" DEFAULT VALUES`,
|
|
|
323
323
|
`\
|
|
324
324
|
UPDATE "pilot-can fly-plane"
|
|
325
325
|
SET "pilot" = ?
|
|
326
|
-
WHERE "pilot-can fly-plane"."id" =
|
|
326
|
+
WHERE ("pilot-can fly-plane"."id") IS NOT NULL AND ("pilot-can fly-plane"."id") = (?)`,
|
|
327
327
|
);
|
|
328
328
|
});
|
|
329
329
|
};
|
|
@@ -338,7 +338,7 @@ test('/pilot(1)/$links/licence', 'GET', [['Bind', 0]], (result, sqlEquals) => {
|
|
|
338
338
|
`\
|
|
339
339
|
SELECT "pilot"."licence" AS "licence"
|
|
340
340
|
FROM "pilot"
|
|
341
|
-
WHERE "pilot"."id" =
|
|
341
|
+
WHERE ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
342
342
|
);
|
|
343
343
|
});
|
|
344
344
|
});
|
|
@@ -356,7 +356,7 @@ SELECT "pilot.pilot-can fly-plane"."can fly-plane" AS "plane"
|
|
|
356
356
|
FROM "pilot",
|
|
357
357
|
"pilot-can fly-plane" AS "pilot.pilot-can fly-plane"
|
|
358
358
|
WHERE "pilot"."id" = "pilot.pilot-can fly-plane"."pilot"
|
|
359
|
-
AND "pilot"."id" =
|
|
359
|
+
AND ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
360
360
|
);
|
|
361
361
|
});
|
|
362
362
|
},
|
|
@@ -377,7 +377,7 @@ test("/team('purple')", 'GET', [['Bind', 0]], (result, sqlEquals) => {
|
|
|
377
377
|
`\
|
|
378
378
|
SELECT ${teamFieldsStr}
|
|
379
379
|
FROM "team"
|
|
380
|
-
WHERE "team"."favourite colour" =
|
|
380
|
+
WHERE ("team"."favourite colour") IS NOT NULL AND ("team"."favourite colour") = (?)`,
|
|
381
381
|
);
|
|
382
382
|
});
|
|
383
383
|
});
|
|
@@ -459,7 +459,8 @@ test(
|
|
|
459
459
|
`\
|
|
460
460
|
SELECT COUNT(*) AS "$count"
|
|
461
461
|
FROM "pilot"
|
|
462
|
-
WHERE "pilot"."id"
|
|
462
|
+
WHERE (("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)
|
|
463
|
+
OR ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?))`,
|
|
463
464
|
);
|
|
464
465
|
});
|
|
465
466
|
},
|
|
@@ -476,7 +477,7 @@ test(
|
|
|
476
477
|
`\
|
|
477
478
|
SELECT COUNT(*) AS "$count"
|
|
478
479
|
FROM "pilot"
|
|
479
|
-
WHERE ("pilot"."id" = ?
|
|
480
|
+
WHERE (("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)
|
|
480
481
|
OR "pilot"."id" IS NULL)`,
|
|
481
482
|
);
|
|
482
483
|
});
|
|
@@ -492,7 +493,7 @@ SELECT COUNT(*) AS "$count"
|
|
|
492
493
|
FROM "pilot",
|
|
493
494
|
"licence" AS "pilot.licence"
|
|
494
495
|
WHERE "pilot"."licence" = "pilot.licence"."id"
|
|
495
|
-
AND "pilot"."id" =
|
|
496
|
+
AND ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
496
497
|
);
|
|
497
498
|
});
|
|
498
499
|
});
|
package/test/odata/select.js
CHANGED
|
@@ -35,7 +35,7 @@ test(
|
|
|
35
35
|
`\
|
|
36
36
|
SELECT "pilot"."favourite colour" AS "favourite_colour"
|
|
37
37
|
FROM "pilot"
|
|
38
|
-
WHERE "pilot"."id" =
|
|
38
|
+
WHERE ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
39
39
|
);
|
|
40
40
|
});
|
|
41
41
|
},
|
|
@@ -52,7 +52,7 @@ test(
|
|
|
52
52
|
`\
|
|
53
53
|
SELECT "pilot"."favourite colour" AS "favourite_colour"
|
|
54
54
|
FROM "pilot"
|
|
55
|
-
WHERE "pilot"."id" =
|
|
55
|
+
WHERE ("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)`,
|
|
56
56
|
);
|
|
57
57
|
});
|
|
58
58
|
},
|
package/test/odata/stress.js
CHANGED
|
@@ -4,7 +4,16 @@ const { pilotFields } = require('./fields');
|
|
|
4
4
|
const pilotFieldsStr = pilotFields.join(', ');
|
|
5
5
|
|
|
6
6
|
const filterIDs = _.range(1, 5000);
|
|
7
|
-
const
|
|
7
|
+
const filterBindsInString = _.map(filterIDs, () => '?').join(', ');
|
|
8
|
+
const filterBindsOrString = _.map(
|
|
9
|
+
filterIDs,
|
|
10
|
+
() => '("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?)',
|
|
11
|
+
).join('\nOR ');
|
|
12
|
+
const filterBindsNandString = _.map(
|
|
13
|
+
filterIDs,
|
|
14
|
+
() => 'NOT(("pilot"."id") IS NOT NULL AND ("pilot"."id") = (?))',
|
|
15
|
+
).join('\nAND ');
|
|
16
|
+
|
|
8
17
|
const filterBinds = _.map(filterIDs, (_n, i) => ['Bind', i]);
|
|
9
18
|
|
|
10
19
|
let filterString = `id in (${filterIDs.join(', ')})`;
|
|
@@ -20,7 +29,7 @@ test(
|
|
|
20
29
|
SELECT ${pilotFieldsStr}
|
|
21
30
|
FROM "pilot"
|
|
22
31
|
WHERE "pilot"."id" IN (` +
|
|
23
|
-
|
|
32
|
+
filterBindsInString +
|
|
24
33
|
')',
|
|
25
34
|
);
|
|
26
35
|
});
|
|
@@ -40,7 +49,7 @@ test(
|
|
|
40
49
|
SELECT ${pilotFieldsStr}
|
|
41
50
|
FROM "pilot"
|
|
42
51
|
WHERE "pilot"."id" NOT IN (` +
|
|
43
|
-
|
|
52
|
+
filterBindsInString +
|
|
44
53
|
')',
|
|
45
54
|
);
|
|
46
55
|
});
|
|
@@ -59,9 +68,7 @@ test(
|
|
|
59
68
|
`\
|
|
60
69
|
SELECT ${pilotFieldsStr}
|
|
61
70
|
FROM "pilot"
|
|
62
|
-
WHERE
|
|
63
|
-
filterBindsString +
|
|
64
|
-
')',
|
|
71
|
+
WHERE (${filterBindsOrString})`,
|
|
65
72
|
);
|
|
66
73
|
});
|
|
67
74
|
},
|
|
@@ -79,9 +86,7 @@ test(
|
|
|
79
86
|
`\
|
|
80
87
|
SELECT ${pilotFieldsStr}
|
|
81
88
|
FROM "pilot"
|
|
82
|
-
WHERE
|
|
83
|
-
filterBindsString +
|
|
84
|
-
')',
|
|
89
|
+
WHERE ${filterBindsNandString}`,
|
|
85
90
|
);
|
|
86
91
|
});
|
|
87
92
|
},
|
package/test/odata/test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const ODataParser = require('@balena/odata-parser');
|
|
3
|
-
const { OData2AbstractSQL } = require('@
|
|
3
|
+
const { OData2AbstractSQL } = require('@balena/odata-to-abstract-sql');
|
|
4
4
|
const sbvrModel = fs.readFileSync(require.resolve('../model.sbvr'), 'utf8');
|
|
5
5
|
|
|
6
6
|
const AbstractSQLCompiler = require('../..');
|