@balena/abstract-sql-compiler 11.0.0-build-11-x-db9cd30f6ec498e5293df9e060f5531cd960b1cc-1 → 11.0.0-build-11-x-1d6801364e84c467215b1a2bd54345172071bdc2-1
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 +134 -4
- package/CHANGELOG.md +33 -2
- package/out/{AbstractSQLCompiler.d.ts → abstract-sql-compiler.d.ts} +55 -13
- package/out/{AbstractSQLCompiler.js → abstract-sql-compiler.js} +37 -19
- package/out/abstract-sql-compiler.js.map +1 -0
- package/out/abstract-sql-optimizer.d.ts +2 -0
- package/out/{AbstractSQLOptimiser.js → abstract-sql-optimizer.js} +35 -13
- package/out/abstract-sql-optimizer.js.map +1 -0
- package/out/{AbstractSQLRules2SQL.d.ts → abstract-sql-rules-to-sql.d.ts} +2 -2
- package/out/{AbstractSQLRules2SQL.js → abstract-sql-rules-to-sql.js} +74 -45
- package/out/abstract-sql-rules-to-sql.js.map +1 -0
- package/out/{AbstractSQLSchemaOptimiser.d.ts → abstract-sql-schema-optimizer.d.ts} +5 -3
- package/out/{AbstractSQLSchemaOptimiser.js → abstract-sql-schema-optimizer.js} +11 -9
- package/out/abstract-sql-schema-optimizer.js.map +1 -0
- package/out/referenced-fields.d.ts +1 -1
- package/out/referenced-fields.js +53 -4
- package/out/referenced-fields.js.map +1 -1
- package/package.json +14 -14
- package/src/{AbstractSQLCompiler.ts → abstract-sql-compiler.ts} +29 -38
- package/src/{AbstractSQLOptimiser.ts → abstract-sql-optimizer.ts} +21 -22
- package/src/{AbstractSQLRules2SQL.ts → abstract-sql-rules-to-sql.ts} +12 -6
- package/src/{AbstractSQLSchemaOptimiser.ts → abstract-sql-schema-optimizer.ts} +10 -18
- package/src/referenced-fields.ts +5 -5
- package/test/abstract-sql/case-when-else.ts +1 -1
- package/test/abstract-sql/dates.ts +23 -0
- package/test/abstract-sql/empty-query-optimisations.ts +1 -1
- package/test/abstract-sql/get-referenced-fields.ts +1 -1
- package/test/abstract-sql/get-rule-referenced-fields.ts +1 -1
- package/test/abstract-sql/schema-checks.ts +1 -1
- package/test/abstract-sql/schema-informative-reference.ts +19 -19
- package/test/abstract-sql/schema-rule-optimization.ts +2 -2
- package/test/abstract-sql/schema-rule-to-check.ts +6 -6
- package/test/abstract-sql/schema-views.ts +1 -1
- package/test/abstract-sql/test.ts +1 -1
- package/test/odata/filterby.ts +12 -12
- package/test/odata/{resource_parsing.ts → resource-parsing.ts} +3 -3
- package/test/odata/test.ts +1 -1
- package/test/sbvr/pilots.ts +12 -12
- package/test/sbvr/reference-type.ts +16 -16
- package/test/sbvr/test.ts +1 -1
- package/tsconfig.json +0 -1
- package/out/AbstractSQLCompiler.js.map +0 -1
- package/out/AbstractSQLOptimiser.d.ts +0 -2
- package/out/AbstractSQLOptimiser.js.map +0 -1
- package/out/AbstractSQLRules2SQL.js.map +0 -1
- package/out/AbstractSQLSchemaOptimiser.js.map +0 -1
- /package/test/abstract-sql/{functions_wrapper.ts → functions-wrapper.ts} +0 -0
package/out/referenced-fields.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
import { isAliasNode, isFromNode, isSelectNode, isSelectQueryNode, isTableNode, isWhereNode, } from './
|
2
|
-
import {
|
3
|
-
import { isAbstractSqlQuery } from './
|
1
|
+
import { isAliasNode, isFromNode, isSelectNode, isSelectQueryNode, isTableNode, isWhereNode, } from './abstract-sql-compiler.js';
|
2
|
+
import { AbstractSQLOptimizer } from './abstract-sql-optimizer.js';
|
3
|
+
import { isAbstractSqlQuery } from './abstract-sql-rules-to-sql.js';
|
4
4
|
export const getReferencedFields = (ruleBody) => {
|
5
5
|
const referencedFields = getRuleReferencedFields(ruleBody);
|
6
6
|
const result = {};
|
@@ -32,6 +32,9 @@ const getRuleReferencedScope = (rulePart, scope, isSafe) => {
|
|
32
32
|
scope[alias] = { tableName: from[1], isSafe };
|
33
33
|
break;
|
34
34
|
case 'SelectQuery':
|
35
|
+
// Ignore SelectQuery in the From as we'll handle any fields it selects
|
36
|
+
// when we recurse in. With true scope handling however we could prune
|
37
|
+
// fields that don't affect the end result and avoid false positives
|
35
38
|
scope[alias] = { tableName: '', isSafe };
|
36
39
|
break;
|
37
40
|
default:
|
@@ -50,6 +53,8 @@ const getRuleReferencedScope = (rulePart, scope, isSafe) => {
|
|
50
53
|
};
|
51
54
|
const addReference = (referencedFields, scope, aliasName, fieldName) => {
|
52
55
|
const a = scope[aliasName];
|
56
|
+
// The scoped tableName is empty in the case of an aliased from query
|
57
|
+
// and those fields will be covered when we recurse into them
|
53
58
|
if (a.tableName !== '') {
|
54
59
|
referencedFields[a.tableName] ??= {
|
55
60
|
create: [],
|
@@ -74,6 +79,7 @@ const $getRuleReferencedFields = (referencedFields, rulePart, isSafe, { scope, c
|
|
74
79
|
}
|
75
80
|
switch (rulePart[0]) {
|
76
81
|
case 'SelectQuery':
|
82
|
+
// Update the current scope before trying to resolve field references
|
77
83
|
({ scope, currentlyScopedAliases } = getRuleReferencedScope(rulePart, scope, isSafe));
|
78
84
|
rulePart.forEach((node) => {
|
79
85
|
$getRuleReferencedFields(referencedFields, node, isSafe, {
|
@@ -96,18 +102,21 @@ const $getRuleReferencedFields = (referencedFields, rulePart, isSafe, { scope, c
|
|
96
102
|
throw new Error(`Invalid ReferencedField: ${rulePart}`);
|
97
103
|
}
|
98
104
|
for (const aliasName of Object.keys(scope)) {
|
105
|
+
// We assume any unreferenced field can come from any of the scoped tables
|
99
106
|
addReference(referencedFields, scope, aliasName, fieldName);
|
100
107
|
}
|
101
108
|
return;
|
102
109
|
}
|
103
110
|
case 'Not':
|
104
111
|
case 'NotExists':
|
112
|
+
// When hitting a `Not` we invert the safety rule
|
105
113
|
if (isSafe === IsSafe.Insert) {
|
106
114
|
isSafe = IsSafe.Delete;
|
107
115
|
}
|
108
116
|
else if (isSafe === IsSafe.Delete) {
|
109
117
|
isSafe = IsSafe.Insert;
|
110
118
|
}
|
119
|
+
// eslint-disable-next-line no-fallthrough -- Fallthrough
|
111
120
|
case 'Where':
|
112
121
|
case 'And':
|
113
122
|
case 'Exists':
|
@@ -121,6 +130,8 @@ const $getRuleReferencedFields = (referencedFields, rulePart, isSafe, { scope, c
|
|
121
130
|
case 'Having':
|
122
131
|
scope = { ...scope };
|
123
132
|
for (const key of Object.keys(scope)) {
|
133
|
+
// Treat all entries under a `HAVING` as unknown since it can include counts in such a way
|
134
|
+
// that our expectations of safety do not hold
|
124
135
|
scope[key] = { ...scope[key], isSafe: IsSafe.Unknown };
|
125
136
|
}
|
126
137
|
rulePart.forEach((node) => {
|
@@ -135,6 +146,7 @@ const $getRuleReferencedFields = (referencedFields, rulePart, isSafe, { scope, c
|
|
135
146
|
throw new Error('Only COUNT(*) is supported for rule referenced fields');
|
136
147
|
}
|
137
148
|
for (const aliasName of currentlyScopedAliases) {
|
149
|
+
// We use '' as it means that only operations that affect every field will match against it
|
138
150
|
addReference(referencedFields, scope, aliasName, '');
|
139
151
|
}
|
140
152
|
return;
|
@@ -148,7 +160,7 @@ const $getRuleReferencedFields = (referencedFields, rulePart, isSafe, { scope, c
|
|
148
160
|
}
|
149
161
|
};
|
150
162
|
export const getRuleReferencedFields = (ruleBody) => {
|
151
|
-
ruleBody =
|
163
|
+
ruleBody = AbstractSQLOptimizer(ruleBody);
|
152
164
|
const referencedFields = {};
|
153
165
|
if (ruleBody[0] === 'Equals' &&
|
154
166
|
ruleBody[2][0] === 'Number' &&
|
@@ -187,6 +199,7 @@ const checkQuery = (query) => {
|
|
187
199
|
tableName = table[1];
|
188
200
|
}
|
189
201
|
else if (typeof table === 'string') {
|
202
|
+
// Deprecated: Remove this when we drop implicit tables
|
190
203
|
tableName = table;
|
191
204
|
}
|
192
205
|
else {
|
@@ -214,15 +227,22 @@ export const getModifiedFields = (abstractSqlQuery) => {
|
|
214
227
|
return checkQuery(abstractSqlQuery);
|
215
228
|
}
|
216
229
|
};
|
230
|
+
// TS requires this to be a funtion declaration
|
217
231
|
function assertAbstractSqlIsNotLegacy(abstractSql) {
|
218
232
|
if (!isAbstractSqlQuery(abstractSql)) {
|
219
233
|
throw new Error('cannot introspect into the string form of AbstractSqlQuery');
|
220
234
|
}
|
221
235
|
}
|
236
|
+
// Find how many times an abstract sql fragment selects from the given table
|
237
|
+
// TODO:
|
238
|
+
// - Not all abstract sql nodes are supported here yet but hopefully nothing
|
239
|
+
// important is missing atm
|
240
|
+
// - Create missing node types
|
222
241
|
const countTableSelects = (abstractSql, table) => {
|
223
242
|
assertAbstractSqlIsNotLegacy(abstractSql);
|
224
243
|
let sum = 0;
|
225
244
|
switch (abstractSql[0]) {
|
245
|
+
// Unary nodes
|
226
246
|
case 'Alias':
|
227
247
|
case 'Any':
|
228
248
|
case 'Average':
|
@@ -242,6 +262,7 @@ const countTableSelects = (abstractSql, table) => {
|
|
242
262
|
assertAbstractSqlIsNotLegacy(unaryOperation[1]);
|
243
263
|
return countTableSelects(unaryOperation[1], table);
|
244
264
|
}
|
265
|
+
// `COUNT` is an unary function but we only support the `COUNT(*)` form
|
245
266
|
case 'Count': {
|
246
267
|
const countNode = abstractSql;
|
247
268
|
if (countNode[1] !== '*') {
|
@@ -249,6 +270,7 @@ const countTableSelects = (abstractSql, table) => {
|
|
249
270
|
}
|
250
271
|
return 0;
|
251
272
|
}
|
273
|
+
// Binary nodes
|
252
274
|
case 'AddDateDuration':
|
253
275
|
case 'AddDateNumber':
|
254
276
|
case 'DateTrunc':
|
@@ -272,6 +294,7 @@ const countTableSelects = (abstractSql, table) => {
|
|
272
294
|
return (countTableSelects(leftOperand, table) +
|
273
295
|
countTableSelects(rightOperand, table));
|
274
296
|
}
|
297
|
+
// Binary nodes with optional `ON` second argument
|
275
298
|
case 'FullJoin':
|
276
299
|
case 'Join':
|
277
300
|
case 'LeftJoin':
|
@@ -284,6 +307,7 @@ const countTableSelects = (abstractSql, table) => {
|
|
284
307
|
}
|
285
308
|
return sum + countTableSelects(joinNode[1], table);
|
286
309
|
}
|
310
|
+
// n-ary nodes
|
287
311
|
case 'And':
|
288
312
|
case 'Or':
|
289
313
|
case 'SelectQuery':
|
@@ -296,6 +320,7 @@ const countTableSelects = (abstractSql, table) => {
|
|
296
320
|
}
|
297
321
|
return sum;
|
298
322
|
}
|
323
|
+
// n-ary nodes but the slice starts at the third argument
|
299
324
|
case 'In':
|
300
325
|
case 'NotIn': {
|
301
326
|
const inNode = abstractSql;
|
@@ -305,6 +330,7 @@ const countTableSelects = (abstractSql, table) => {
|
|
305
330
|
}
|
306
331
|
return sum;
|
307
332
|
}
|
333
|
+
// n-ary-like node
|
308
334
|
case 'Select': {
|
309
335
|
const selectNode = abstractSql;
|
310
336
|
for (const arg of selectNode[1]) {
|
@@ -313,6 +339,7 @@ const countTableSelects = (abstractSql, table) => {
|
|
313
339
|
}
|
314
340
|
return sum;
|
315
341
|
}
|
342
|
+
// Uninteresting atomic nodes
|
316
343
|
case 'Boolean':
|
317
344
|
case 'Date':
|
318
345
|
case 'Duration':
|
@@ -324,6 +351,7 @@ const countTableSelects = (abstractSql, table) => {
|
|
324
351
|
case 'ReferencedField':
|
325
352
|
case 'Text':
|
326
353
|
return 0;
|
354
|
+
// The atomic node we're looking for: a table selection
|
327
355
|
case 'Table': {
|
328
356
|
const tableNode = abstractSql;
|
329
357
|
if (tableNode[1] === table) {
|
@@ -337,6 +365,24 @@ const countTableSelects = (abstractSql, table) => {
|
|
337
365
|
throw new Error(`unknown abstract sql type: ${abstractSql[0]}`);
|
338
366
|
}
|
339
367
|
};
|
368
|
+
// TODO:
|
369
|
+
// - This function only narrows the root table of the rule. This is always
|
370
|
+
// safe when the root table isn't selected from more than once and it is not
|
371
|
+
// negated in the LF. Right now we conservatively check for the former but
|
372
|
+
// not the second. The negative forms (e.g. it is forbidden that ...) are
|
373
|
+
// not fully supported anyway.
|
374
|
+
// - Removing multiple candidates selecting from the same database table to
|
375
|
+
// avoid visibility issues is too conservative. The correct criteria is to
|
376
|
+
// just remove any that are present in at least 2 disjoint subqueries.
|
377
|
+
// Because in this case the problem is that in those cases there is not a
|
378
|
+
// single place in the query that has visibility inside both disjoint
|
379
|
+
// subqueries and that is a requirement for adding the corrent binds for
|
380
|
+
// narrowing.
|
381
|
+
// - We assume the ID column is named "id".
|
382
|
+
// - This is a very restricted implementation of narrowing which could be
|
383
|
+
// expanded to cover more situations.
|
384
|
+
//
|
385
|
+
// This function modifies `abstractSql` in place.
|
340
386
|
export const insertAffectedIdsBinds = (abstractSql, lfRuleInfo) => {
|
341
387
|
const rootTableSelectCount = countTableSelects(abstractSql, lfRuleInfo.root.table);
|
342
388
|
if (rootTableSelectCount !== 1) {
|
@@ -351,6 +397,9 @@ export const insertAffectedIdsBinds = (abstractSql, lfRuleInfo) => {
|
|
351
397
|
['Any', ['Bind', lfRuleInfo.root.table], 'Integer'],
|
352
398
|
],
|
353
399
|
];
|
400
|
+
// Assume (but check) that the query is of the form:
|
401
|
+
//
|
402
|
+
// SELECT (SELECT COUNT(*) ...) = 0
|
354
403
|
if (abstractSql[0] !== 'Equals' ||
|
355
404
|
abstractSql[1][0] !== 'SelectQuery' ||
|
356
405
|
abstractSql[2][0] !== 'Number') {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"referenced-fields.js","sourceRoot":"","sources":["../src/referenced-fields.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"referenced-fields.js","sourceRoot":"","sources":["../src/referenced-fields.ts"],"names":[],"mappings":"AAmDA,OAAO,EACN,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,WAAW,GACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAYpE,MAAM,CAAC,MAAM,mBAAmB,GAA0C,CACzE,QAAQ,EACP,EAAE;IACH,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AASF,IAAK,MAIJ;AAJD,WAAK,MAAM;IACV,wBAAc,CAAA;IACd,wBAAc,CAAA;IACd,sBAAY,CAAA;AACb,CAAC,EAJI,MAAM,KAAN,MAAM,QAIV;AAOD,MAAM,sBAAsB,GAAG,CAC9B,QAA0B,EAC1B,KAA0B,EAC1B,MAAc,EACqD,EAAE;IACrE,MAAM,sBAAsB,GAAa,EAAE,CAAC;IAC5C,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IACrB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9C,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC;YAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACrD,CAAC;YACD,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjB,KAAK,OAAO;oBACX,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;oBAC9C,MAAM;gBACP,KAAK,aAAa;oBACjB,uEAAuE;oBACvE,sEAAsE;oBACtE,oEAAoE;oBACpE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;oBACzC,MAAM;gBACP;oBACC,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC5D,CAAC;QACF,CAAC;aAAM,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YAClC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;QACrD,CAAC;aAAM,CAAC;YACP,MAAM,KAAK,CAAC,qCAAqC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;AAC1C,CAAC,CAAC;AACF,MAAM,YAAY,GAAG,CACpB,gBAAsC,EACtC,KAA0B,EAC1B,SAAiB,EACjB,SAAiB,EAChB,EAAE;IACH,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3B,qEAAqE;IACrE,6DAA6D;IAC7D,IAAI,CAAC,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;QACxB,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK;YACjC,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;SACV,CAAC;QACF,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;QACD,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;AACF,CAAC,CAAC;AACF,MAAM,wBAAwB,GAAG,CAChC,gBAAsC,EACtC,QAA0B,EAC1B,MAAc,EACd,EACC,KAAK,EACL,sBAAsB,MACwB;IAC9C,KAAK,EAAE,EAAE;IACT,sBAAsB,EAAE,EAAE;CAC1B,EACA,EAAE;IACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO;IACR,CAAC;IACD,QAAQ,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,KAAK,aAAa;YACjB,qEAAqE;YACrE,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,GAAG,sBAAsB,CAC1D,QAAQ,EACR,KAAK,EACL,MAAM,CACN,CAAC,CAAC;YACH,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAsB,EAAE,EAAE;gBAC3C,wBAAwB,CAAC,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE;oBACxD,KAAK;oBACL,sBAAsB;iBACtB,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO;QACR,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;YAC1C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,YAAY,CAAC,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAC5D,OAAO;QACR,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;YAC/B,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5C,0EAA0E;gBAC1E,YAAY,CAAC,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO;QACR,CAAC;QACD,KAAK,KAAK,CAAC;QACX,KAAK,WAAW;YACf,iDAAiD;YACjD,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC9B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACxB,CAAC;iBAAM,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;gBACrC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACxB,CAAC;QACF,yDAAyD;QACzD,KAAK,OAAO,CAAC;QACb,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ;YACZ,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAsB,EAAE,EAAE;gBAC3C,wBAAwB,CAAC,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE;oBACxD,KAAK;oBACL,sBAAsB;iBACtB,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO;QACR,KAAK,QAAQ;YACZ,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;YACrB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,0FAA0F;gBAC1F,8CAA8C;gBAC9C,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YACxD,CAAC;YACD,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAsB,EAAE,EAAE;gBAC3C,wBAAwB,CAAC,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE;oBACxD,KAAK;oBACL,sBAAsB;iBACtB,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO;QACR,KAAK,OAAO;YACX,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACd,uDAAuD,CACvD,CAAC;YACH,CAAC;YACD,KAAK,MAAM,SAAS,IAAI,sBAAsB,EAAE,CAAC;gBAChD,2FAA2F;gBAC3F,YAAY,CAAC,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,OAAO;QACR;YACC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAsB,EAAE,EAAE;gBAC3C,wBAAwB,CAAC,gBAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;oBAChE,KAAK;oBACL,sBAAsB;iBACtB,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;IACL,CAAC;AACF,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,uBAAuB,GACnC,CAAC,QAAQ,EAAE,EAAE;IACZ,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,gBAAgB,GAAyB,EAAE,CAAC;IAClD,IACC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ;QACxB,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ;QAC3B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACpB,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAC7B,CAAC;QACF,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAE,CAAC;QAC/C,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACf,wBAAwB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACP,wBAAwB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAEzC,EAAE,CAAC;YACH,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;IACF,CAAC;IAED,OAAO,gBAAgB,CAAC;AACzB,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC,KAAuB,EAA8B,EAAE;IAC1E,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACxE,OAAO;IACR,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;IACR,CAAC;IAED,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,SAAiB,CAAC;IACtB,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACtC,uDAAuD;QACvD,SAAS,GAAG,KAAK,CAAC;IACnB,CAAC;SAAM,CAAC;QACP,OAAO;IACR,CAAC;IAED,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;QACjC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;QACjC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,MAAM,GAAG,KAAK;SAClB,MAAM,CAAC,CAAC,CAAC,EAAmB,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;SAC9D,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACvD,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAwC,CACrE,gBAAkC,EACjC,EAAE;IACH,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;QAC3C,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,OAAO,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACP,OAAO,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACrC,CAAC;AACF,CAAC,CAAC;AAEF,+CAA+C;AAC/C,SAAS,4BAA4B,CACpC,WAA4B;IAE5B,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACd,4DAA4D,CAC5D,CAAC;IACH,CAAC;AACF,CAAC;AAED,4EAA4E;AAC5E,QAAQ;AACR,4EAA4E;AAC5E,6BAA6B;AAC7B,8BAA8B;AAC9B,MAAM,iBAAiB,GAAG,CACzB,WAA6B,EAC7B,KAAa,EACJ,EAAE;IACX,4BAA4B,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,QAAQ,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,cAAc;QACd,KAAK,OAAO,CAAC;QACb,KAAK,KAAK,CAAC;QACX,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,iBAAiB,CAAC;QACvB,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,KAAK,CAAC;QACX,KAAK,WAAW,CAAC;QACjB,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC,CAAC,CAAC;YACd,MAAM,cAAc,GAAG,WAcX,CAAC;YACb,4BAA4B,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhD,OAAO,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;QACD,uEAAuE;QACvE,KAAK,OAAO,CAAC,CAAC,CAAC;YACd,MAAM,SAAS,GAAG,WAAwB,CAAC;YAC3C,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC/C,CAAC;YAED,OAAO,CAAC,CAAC;QACV,CAAC;QACD,eAAe;QACf,KAAK,iBAAiB,CAAC;QACvB,KAAK,eAAe,CAAC;QACrB,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,uBAAuB,CAAC;QAC7B,KAAK,aAAa,CAAC;QACnB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,gBAAgB,CAAC;QACtB,KAAK,mBAAmB,CAAC;QACzB,KAAK,UAAU,CAAC;QAChB,KAAK,iBAAiB,CAAC;QACvB,KAAK,WAAW,CAAC;QACjB,KAAK,kBAAkB,CAAC;QACxB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC3B,MAAM,eAAe,GAAG,WAeC,CAAC;YAC1B,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACvC,4BAA4B,CAAC,WAAW,CAAC,CAAC;YAC1C,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACxC,4BAA4B,CAAC,YAAY,CAAC,CAAC;YAE3C,OAAO,CACN,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC;gBACrC,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,CACtC,CAAC;QACH,CAAC;QACD,kDAAkD;QAClD,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC,CAAC,CAAC;YAClB,MAAM,QAAQ,GAAG,WAID,CAAC;YACjB,4BAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC/B,4BAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,GAAG,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAChD,CAAC;YAED,OAAO,GAAG,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;QACD,cAAc;QACd,KAAK,KAAK,CAAC;QACX,KAAK,IAAI,CAAC;QACV,KAAK,aAAa,CAAC;QACnB,KAAK,WAAW,CAAC;QACjB,KAAK,YAAY,CAAC,CAAC,CAAC;YACnB,MAAM,eAAe,GAAG,WAKP,CAAC;YAClB,KAAK,MAAM,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,4BAA4B,CAAC,GAAG,CAAC,CAAC;gBAClC,GAAG,IAAI,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC;YAED,OAAO,GAAG,CAAC;QACZ,CAAC;QACD,yDAAyD;QACzD,KAAK,IAAI,CAAC;QACV,KAAK,OAAO,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,WAAiC,CAAC;YACjD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,4BAA4B,CAAC,GAAG,CAAC,CAAC;gBAClC,GAAG,IAAI,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC;YAED,OAAO,GAAG,CAAC;QACZ,CAAC;QACD,kBAAkB;QAClB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,UAAU,GAAG,WAAyB,CAAC;YAC7C,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjC,4BAA4B,CAAC,GAAG,CAAC,CAAC;gBAClC,GAAG,IAAI,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC;YAED,OAAO,GAAG,CAAC;QACZ,CAAC;QACD,6BAA6B;QAC7B,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc,CAAC;QACpB,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,iBAAiB,CAAC;QACvB,KAAK,MAAM;YACV,OAAO,CAAC,CAAC;QAEV,uDAAuD;QACvD,KAAK,OAAO,CAAC,CAAC,CAAC;YACd,MAAM,SAAS,GAAG,WAAwB,CAAC;YAE3C,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC5B,OAAO,CAAC,CAAC;YACV,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,CAAC;YACV,CAAC;QACF,CAAC;QACD;YACC,MAAM,IAAI,KAAK,CAAC,8BAA8B,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;AACF,CAAC,CAAC;AAEF,QAAQ;AACR,0EAA0E;AAC1E,8EAA8E;AAC9E,4EAA4E;AAC5E,2EAA2E;AAC3E,gCAAgC;AAChC,2EAA2E;AAC3E,4EAA4E;AAC5E,wEAAwE;AACxE,2EAA2E;AAC3E,uEAAuE;AACvE,0EAA0E;AAC1E,eAAe;AACf,2CAA2C;AAC3C,yEAAyE;AACzE,uCAAuC;AACvC,EAAE;AACF,iDAAiD;AACjD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACrC,WAA6B,EAC7B,UAAsB,EACrB,EAAE;IACH,MAAM,oBAAoB,GAAG,iBAAiB,CAC7C,WAAW,EACX,UAAU,CAAC,IAAI,CAAC,KAAK,CACrB,CAAC;IACF,IAAI,oBAAoB,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;IACR,CAAC;IAED,MAAM,SAAS,GAAW;QACzB,IAAI;QACJ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACnE;YACC,QAAQ;YACR,CAAC,iBAAiB,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;YAChD,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;SACnD;KACD,CAAC;IAEF,oDAAoD;IACpD,EAAE;IACF,mCAAmC;IACnC,IACC,WAAW,CAAC,CAAC,CAAC,KAAK,QAAQ;QAC3B,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa;QACnC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAC7B,CAAC;QACF,MAAM,IAAI,KAAK,CACd,4DAA4D,CAC5D,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,CAAoB,CAAC;IAC1D,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC7B,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACP,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;AACF,CAAC,CAAC"}
|
package/package.json
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
{
|
2
2
|
"name": "@balena/abstract-sql-compiler",
|
3
|
-
"version": "11.0.0-build-11-x-
|
3
|
+
"version": "11.0.0-build-11-x-1d6801364e84c467215b1a2bd54345172071bdc2-1",
|
4
4
|
"description": "A translator for abstract sql into sql.",
|
5
5
|
"type": "module",
|
6
|
-
"main": "out/
|
7
|
-
"types": "out/
|
6
|
+
"main": "out/abstract-sql-compiler.js",
|
7
|
+
"types": "out/abstract-sql-compiler.d.ts",
|
8
8
|
"scripts": {
|
9
9
|
"build": "tsc --project ./tsconfig.build.json",
|
10
10
|
"pretest": "npm run build",
|
@@ -17,27 +17,27 @@
|
|
17
17
|
"repository": "https://github.com/balena-io-modules/abstract-sql-compiler.git",
|
18
18
|
"author": "",
|
19
19
|
"peerDependencies": {
|
20
|
-
"@balena/sbvr-types": "^7.1.0 || ^8.0.0 || ^9.0.2 || ^10.0.0"
|
20
|
+
"@balena/sbvr-types": "^7.1.0 || ^8.0.0 || ^9.0.2 || ^10.0.0 || ^11.0.0"
|
21
21
|
},
|
22
22
|
"devDependencies": {
|
23
|
-
"@balena/lf-to-abstract-sql": "^5.0.
|
24
|
-
"@balena/lint": "^9.
|
23
|
+
"@balena/lf-to-abstract-sql": "^5.0.9",
|
24
|
+
"@balena/lint": "^9.3.2",
|
25
25
|
"@balena/odata-parser": "^3.1.2",
|
26
|
-
"@balena/odata-to-abstract-sql": "^
|
27
|
-
"@balena/sbvr-parser": "^1.4.
|
26
|
+
"@balena/odata-to-abstract-sql": "^8.0.1",
|
27
|
+
"@balena/sbvr-parser": "^1.4.12",
|
28
28
|
"@types/chai": "^4.3.20",
|
29
29
|
"@types/common-tags": "^1.8.4",
|
30
|
-
"@types/lodash": "^4.17.
|
30
|
+
"@types/lodash": "^4.17.20",
|
31
31
|
"@types/mocha": "^10.0.10",
|
32
|
-
"@types/node": "^20.
|
32
|
+
"@types/node": "^20.19.8",
|
33
33
|
"chai": "^4.5.0",
|
34
34
|
"common-tags": "^1.8.2",
|
35
35
|
"husky": "^9.1.7",
|
36
|
-
"lint-staged": "^16.
|
36
|
+
"lint-staged": "^16.1.2",
|
37
37
|
"lodash": "^4.17.21",
|
38
|
-
"mocha": "^11.
|
38
|
+
"mocha": "^11.7.1",
|
39
39
|
"ts-node": "^10.9.2",
|
40
|
-
"typescript": "^5.8.
|
40
|
+
"typescript": "^5.8.3"
|
41
41
|
},
|
42
42
|
"lint-staged": {
|
43
43
|
"*.ts": [
|
@@ -56,6 +56,6 @@
|
|
56
56
|
"npm": ">=10.7.0"
|
57
57
|
},
|
58
58
|
"versionist": {
|
59
|
-
"publishedAt": "2025-07-
|
59
|
+
"publishedAt": "2025-07-16T14:26:48.746Z"
|
60
60
|
}
|
61
61
|
}
|
@@ -6,17 +6,17 @@ export const enum Engines {
|
|
6
6
|
/* eslint-enable @typescript-eslint/no-shadow */
|
7
7
|
}
|
8
8
|
|
9
|
-
import {
|
10
|
-
import type { Binding, SqlResult } from './
|
11
|
-
import { AbstractSQLRules2SQL } from './
|
12
|
-
export { Binding, SqlResult } from './
|
9
|
+
import { AbstractSQLOptimizer } from './abstract-sql-optimizer.js';
|
10
|
+
import type { Binding, SqlResult } from './abstract-sql-rules-to-sql.js';
|
11
|
+
import { AbstractSQLRules2SQL } from './abstract-sql-rules-to-sql.js';
|
12
|
+
export { Binding, SqlResult } from './abstract-sql-rules-to-sql.js';
|
13
13
|
import type { SbvrType } from '@balena/sbvr-types';
|
14
14
|
import $sbvrTypes from '@balena/sbvr-types';
|
15
15
|
const { default: sbvrTypes } = $sbvrTypes;
|
16
16
|
import {
|
17
17
|
optimizeSchema,
|
18
18
|
generateRuleSlug,
|
19
|
-
} from './
|
19
|
+
} from './abstract-sql-schema-optimizer.js';
|
20
20
|
import type {
|
21
21
|
ReferencedFields,
|
22
22
|
RuleReferencedFields,
|
@@ -178,7 +178,9 @@ export type NumberTypeNodes = StrictNumberTypeNodes | UnknownTypeNodes;
|
|
178
178
|
|
179
179
|
export type FieldNode = ['Field', string];
|
180
180
|
export type ReferencedFieldNode = ['ReferencedField', string, string];
|
181
|
-
export type DateTruncNode =
|
181
|
+
export type DateTruncNode =
|
182
|
+
| ['DateTrunc', TextTypeNodes, DateTypeNodes]
|
183
|
+
| ['DateTrunc', TextTypeNodes, DateTypeNodes, TextTypeNodes];
|
182
184
|
export type ToDateNode = ['ToDate', DateTypeNodes];
|
183
185
|
export type ToTimeNode = ['ToTime', DateTypeNodes];
|
184
186
|
export type CurrentTimestampNode = ['CurrentTimestamp'];
|
@@ -236,14 +238,7 @@ export type CaseNode =
|
|
236
238
|
| ['Case', ...WhenNode[]]
|
237
239
|
| ['Case', ...WhenNode[], ElseNode];
|
238
240
|
|
239
|
-
|
240
|
-
* @deprecated This gets converted to the `['Bind', [string, string]]` form during compilation
|
241
|
-
*/
|
242
|
-
type BackCompatBindNode = ['Bind', string, string];
|
243
|
-
export type BindNode =
|
244
|
-
| ['Bind', number | string]
|
245
|
-
| ['Bind', [string, string]]
|
246
|
-
| BackCompatBindNode;
|
241
|
+
export type BindNode = ['Bind', number | string] | ['Bind', [string, string]];
|
247
242
|
export type CastNode = ['Cast', AnyTypeNodes, string];
|
248
243
|
export type CoalesceNode = [
|
249
244
|
'Coalesce',
|
@@ -258,7 +253,6 @@ export type UnknownTypeNodes =
|
|
258
253
|
| NullNode
|
259
254
|
| FieldNode
|
260
255
|
| ReferencedFieldNode
|
261
|
-
| EqualsAnyNode
|
262
256
|
| BindNode
|
263
257
|
| CastNode
|
264
258
|
| CaseNode
|
@@ -383,11 +377,6 @@ export type FromTypeNodes =
|
|
383
377
|
| FromTypeNode[keyof FromTypeNode]
|
384
378
|
| AliasNode<FromTypeNode[keyof FromTypeNode]>;
|
385
379
|
|
386
|
-
/**
|
387
|
-
* @deprecated `FromTypeNodes` already includes aliased versions
|
388
|
-
*/
|
389
|
-
export type AliasableFromTypeNodes = FromTypeNodes;
|
390
|
-
|
391
380
|
export type SelectNode = ['Select', AnyTypeNodes[]];
|
392
381
|
export type FromNode = ['From', FromTypeNodes];
|
393
382
|
export type InnerJoinNode = ['Join', FromTypeNodes, OnNode?];
|
@@ -458,7 +447,7 @@ export interface AbstractSqlField {
|
|
458
447
|
type?: string;
|
459
448
|
};
|
460
449
|
defaultValue?: string;
|
461
|
-
computed?:
|
450
|
+
computed?: AnyTypeNodes;
|
462
451
|
checks?: BooleanTypeNodes[];
|
463
452
|
}
|
464
453
|
export interface Trigger {
|
@@ -540,7 +529,9 @@ export interface AbstractSqlModel {
|
|
540
529
|
tables: {
|
541
530
|
[resourceName: string]: AbstractSqlTable;
|
542
531
|
};
|
543
|
-
rules:
|
532
|
+
rules: Array<
|
533
|
+
['Rule', ['Body', AbstractSqlQuery], ['StructuredEnglish', string]]
|
534
|
+
>;
|
544
535
|
functions?: Record<
|
545
536
|
string,
|
546
537
|
{
|
@@ -691,7 +682,7 @@ export const isFieldTypeNode = (
|
|
691
682
|
* @param n The abstract sql to check
|
692
683
|
* @param checkNodeTypeFn A function that checks if a given node is the correct type
|
693
684
|
*/
|
694
|
-
const
|
685
|
+
export const abstractSqlContainsNode = (
|
695
686
|
n: AnyTypeNodes,
|
696
687
|
checkNodeTypeFn: (n: AnyTypeNodes) => boolean,
|
697
688
|
): boolean => {
|
@@ -699,7 +690,10 @@ const containsNode = (
|
|
699
690
|
return true;
|
700
691
|
}
|
701
692
|
for (const p of n) {
|
702
|
-
if (
|
693
|
+
if (
|
694
|
+
Array.isArray(p) &&
|
695
|
+
abstractSqlContainsNode(p as AnyTypeNodes, checkNodeTypeFn)
|
696
|
+
) {
|
703
697
|
return true;
|
704
698
|
}
|
705
699
|
}
|
@@ -746,7 +740,7 @@ export function compileRule(
|
|
746
740
|
engine: Engines,
|
747
741
|
noBinds = false,
|
748
742
|
): SqlResult | [SqlResult, SqlResult] | string | [string, string] {
|
749
|
-
abstractSQL =
|
743
|
+
abstractSQL = AbstractSQLOptimizer(abstractSQL, noBinds);
|
750
744
|
return AbstractSQLRules2SQL(abstractSQL, engine, noBinds);
|
751
745
|
}
|
752
746
|
|
@@ -755,7 +749,9 @@ const compileSchema = (
|
|
755
749
|
engine: Engines,
|
756
750
|
ifNotExists: boolean,
|
757
751
|
): SqlModel => {
|
758
|
-
abstractSqlModel = optimizeSchema(abstractSqlModel,
|
752
|
+
abstractSqlModel = optimizeSchema(abstractSqlModel, {
|
753
|
+
createCheckConstraints: false,
|
754
|
+
});
|
759
755
|
|
760
756
|
let ifNotExistsStr = '';
|
761
757
|
let orReplaceStr = '';
|
@@ -830,8 +826,10 @@ $$;`);
|
|
830
826
|
if (viewDefinition != null) {
|
831
827
|
let definitionAbstractSql = viewDefinition.abstractSql;
|
832
828
|
// If there are any resource nodes then it's a dynamic definition and cannot become a view
|
833
|
-
if (
|
834
|
-
|
829
|
+
if (abstractSqlContainsNode(definitionAbstractSql, isResourceNode)) {
|
830
|
+
throw new Error(
|
831
|
+
`Cannot create a view from a dynamic viewDefinition, found for table resourceName: '${table.resourceName}', name: '${table.name}'`,
|
832
|
+
);
|
835
833
|
}
|
836
834
|
if (isTableNode(definitionAbstractSql)) {
|
837
835
|
// If the definition is a table node we need to wrap it in a select query for the view creation
|
@@ -1063,22 +1061,15 @@ CREATE TABLE ${ifNotExistsStr}"${table.name}" (
|
|
1063
1061
|
|
1064
1062
|
const ruleStatements: SqlRule[] = abstractSqlModel.rules.map(
|
1065
1063
|
(rule): SqlRule => {
|
1066
|
-
const ruleBodyNode = rule
|
1067
|
-
|
1068
|
-
AbstractSqlQuery,
|
1069
|
-
];
|
1070
|
-
if (ruleBodyNode == null || typeof ruleBodyNode === 'string') {
|
1064
|
+
const [, ruleBodyNode, ruleSENode] = rule;
|
1065
|
+
if (ruleBodyNode == null || ruleBodyNode[0] !== 'Body') {
|
1071
1066
|
throw new Error('Invalid rule');
|
1072
1067
|
}
|
1073
1068
|
const ruleBody = ruleBodyNode[1];
|
1074
1069
|
if (typeof ruleBody === 'string') {
|
1075
1070
|
throw new Error('Invalid rule');
|
1076
1071
|
}
|
1077
|
-
|
1078
|
-
'StructuredEnglish',
|
1079
|
-
string,
|
1080
|
-
];
|
1081
|
-
if (ruleSENode == null) {
|
1072
|
+
if (ruleSENode == null || ruleSENode[0] !== 'StructuredEnglish') {
|
1082
1073
|
throw new Error('Invalid structured English');
|
1083
1074
|
}
|
1084
1075
|
const ruleSE = ruleSENode[1];
|
@@ -25,7 +25,6 @@ import type {
|
|
25
25
|
CrossJoinNode,
|
26
26
|
CurrentDateNode,
|
27
27
|
CurrentTimestampNode,
|
28
|
-
DateTruncNode,
|
29
28
|
DeleteQueryNode,
|
30
29
|
DivideNode,
|
31
30
|
DurationNode,
|
@@ -104,9 +103,9 @@ import type {
|
|
104
103
|
EscapeForLikeNode,
|
105
104
|
EqualsAnyNode,
|
106
105
|
NotInNode,
|
107
|
-
} from './
|
108
|
-
import { isFieldTypeNode } from './
|
109
|
-
import * as AbstractSQLRules2SQL from './
|
106
|
+
} from './abstract-sql-compiler.js';
|
107
|
+
import { isFieldTypeNode } from './abstract-sql-compiler.js';
|
108
|
+
import * as AbstractSQLRules2SQL from './abstract-sql-rules-to-sql.js';
|
110
109
|
|
111
110
|
const {
|
112
111
|
isAbstractSqlQuery,
|
@@ -217,7 +216,6 @@ const UnknownValue: MetaMatchFn<UnknownTypeNodes> = (args) => {
|
|
217
216
|
case 'Null':
|
218
217
|
case 'Field':
|
219
218
|
case 'ReferencedField':
|
220
|
-
case 'EqualsAny':
|
221
219
|
case 'Bind':
|
222
220
|
case 'Cast':
|
223
221
|
case 'Case':
|
@@ -884,7 +882,16 @@ const typeRules = {
|
|
884
882
|
Floor: matchArgs<FloorNode>('Floor', NumericValue),
|
885
883
|
Ceiling: matchArgs<CeilingNode>('Ceiling', NumericValue),
|
886
884
|
ToDate: matchArgs<ToDateNode>('ToDate', DateValue),
|
887
|
-
DateTrunc:
|
885
|
+
DateTrunc: (args) => {
|
886
|
+
checkMinArgs('DateTrunc', args, 2);
|
887
|
+
const precision = TextValue(getAbstractSqlQuery(args, 0));
|
888
|
+
const date = DateValue(getAbstractSqlQuery(args, 1));
|
889
|
+
const timeZone =
|
890
|
+
args.length === 3 ? TextValue(getAbstractSqlQuery(args, 2)) : undefined;
|
891
|
+
return timeZone
|
892
|
+
? ['DateTrunc', precision, date, timeZone]
|
893
|
+
: ['DateTrunc', precision, date];
|
894
|
+
},
|
888
895
|
ToTime: matchArgs<ToTimeNode>('ToTime', DateValue),
|
889
896
|
ExtractJSONPathAsText: (args): ExtractJSONPathAsTextNode => {
|
890
897
|
checkMinArgs('ExtractJSONPathAsText', args, 1);
|
@@ -1209,21 +1216,13 @@ const typeRules = {
|
|
1209
1216
|
];
|
1210
1217
|
},
|
1211
1218
|
),
|
1212
|
-
Bind:
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1216
|
-
|
1217
|
-
|
1218
|
-
|
1219
|
-
(args) => {
|
1220
|
-
if (noBinds) {
|
1221
|
-
throw new SyntaxError('Cannot use a bind whilst they are disabled');
|
1222
|
-
}
|
1223
|
-
checkArgs('Bind', args, 1);
|
1224
|
-
return ['Bind', ...args] as BindNode;
|
1225
|
-
},
|
1226
|
-
),
|
1219
|
+
Bind: (args) => {
|
1220
|
+
if (noBinds) {
|
1221
|
+
throw new SyntaxError('Cannot use a bind whilst they are disabled');
|
1222
|
+
}
|
1223
|
+
checkArgs('Bind', args, 1);
|
1224
|
+
return ['Bind', ...args] as BindNode;
|
1225
|
+
},
|
1227
1226
|
Text,
|
1228
1227
|
Value: Text,
|
1229
1228
|
Date: matchArgs('Date', identity),
|
@@ -1590,7 +1589,7 @@ const typeRules = {
|
|
1590
1589
|
),
|
1591
1590
|
} satisfies Record<string, MatchFn<AnyTypeNodes>>;
|
1592
1591
|
|
1593
|
-
export const
|
1592
|
+
export const AbstractSQLOptimizer = (
|
1594
1593
|
abstractSQL: AbstractSqlQuery,
|
1595
1594
|
$noBinds = false,
|
1596
1595
|
): AbstractSqlQuery => {
|
@@ -18,8 +18,8 @@ import type {
|
|
18
18
|
StrictDurationTypeNodes,
|
19
19
|
StrictTextArrayTypeNodes,
|
20
20
|
StrictJSONTypeNodes,
|
21
|
-
} from './
|
22
|
-
import { Engines, isFieldTypeNode } from './
|
21
|
+
} from './abstract-sql-compiler.js';
|
22
|
+
import { Engines, isFieldTypeNode } from './abstract-sql-compiler.js';
|
23
23
|
|
24
24
|
export type Binding =
|
25
25
|
| [string, any]
|
@@ -76,7 +76,6 @@ const UnknownValue: MetaMatchFn = (args, indent) => {
|
|
76
76
|
case 'Null':
|
77
77
|
case 'Field':
|
78
78
|
case 'ReferencedField':
|
79
|
-
case 'EqualsAny':
|
80
79
|
case 'Bind':
|
81
80
|
case 'Cast':
|
82
81
|
case 'Case':
|
@@ -176,7 +175,8 @@ export const isBooleanValue = (
|
|
176
175
|
type === 'Like' ||
|
177
176
|
type === 'IsNotDistinctFrom' ||
|
178
177
|
type === 'IsDistinctFrom' ||
|
179
|
-
type === 'StartsWith'
|
178
|
+
type === 'StartsWith' ||
|
179
|
+
type === 'EqualsAny'
|
180
180
|
);
|
181
181
|
};
|
182
182
|
const BooleanValue = MatchValue(isBooleanValue);
|
@@ -1208,7 +1208,7 @@ const typeRules: Record<string, MatchFn> = {
|
|
1208
1208
|
return `DATE(${date})`;
|
1209
1209
|
},
|
1210
1210
|
DateTrunc: (args, indent) => {
|
1211
|
-
|
1211
|
+
checkMinArgs('DateTrunc', args, 2);
|
1212
1212
|
const precision = TextValue(getAbstractSqlQuery(args, 0), indent);
|
1213
1213
|
const date = DateValue(getAbstractSqlQuery(args, 1), indent);
|
1214
1214
|
// Postgres generated timestamps have a microseconds precision
|
@@ -1216,7 +1216,13 @@ const typeRules: Record<string, MatchFn> = {
|
|
1216
1216
|
// js timestamps that have only milliseconds precision
|
1217
1217
|
// thus supporting for truncating to a given precision
|
1218
1218
|
if (engine === Engines.postgres) {
|
1219
|
-
|
1219
|
+
const timeZone =
|
1220
|
+
args.length === 3
|
1221
|
+
? TextValue(getAbstractSqlQuery(args, 2), indent)
|
1222
|
+
: undefined;
|
1223
|
+
return timeZone
|
1224
|
+
? `DATE_TRUNC(${precision}, ${date}, ${timeZone})`
|
1225
|
+
: `DATE_TRUNC(${precision}, ${date})`;
|
1220
1226
|
} else if (
|
1221
1227
|
// not postgresql ==> no need to truncate ==> return timestamp as is (milliseconds precision)
|
1222
1228
|
precision === "'milliseconds'" ||
|