@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.
Files changed (47) hide show
  1. package/.versionbot/CHANGELOG.yml +134 -4
  2. package/CHANGELOG.md +33 -2
  3. package/out/{AbstractSQLCompiler.d.ts → abstract-sql-compiler.d.ts} +55 -13
  4. package/out/{AbstractSQLCompiler.js → abstract-sql-compiler.js} +37 -19
  5. package/out/abstract-sql-compiler.js.map +1 -0
  6. package/out/abstract-sql-optimizer.d.ts +2 -0
  7. package/out/{AbstractSQLOptimiser.js → abstract-sql-optimizer.js} +35 -13
  8. package/out/abstract-sql-optimizer.js.map +1 -0
  9. package/out/{AbstractSQLRules2SQL.d.ts → abstract-sql-rules-to-sql.d.ts} +2 -2
  10. package/out/{AbstractSQLRules2SQL.js → abstract-sql-rules-to-sql.js} +74 -45
  11. package/out/abstract-sql-rules-to-sql.js.map +1 -0
  12. package/out/{AbstractSQLSchemaOptimiser.d.ts → abstract-sql-schema-optimizer.d.ts} +5 -3
  13. package/out/{AbstractSQLSchemaOptimiser.js → abstract-sql-schema-optimizer.js} +11 -9
  14. package/out/abstract-sql-schema-optimizer.js.map +1 -0
  15. package/out/referenced-fields.d.ts +1 -1
  16. package/out/referenced-fields.js +53 -4
  17. package/out/referenced-fields.js.map +1 -1
  18. package/package.json +14 -14
  19. package/src/{AbstractSQLCompiler.ts → abstract-sql-compiler.ts} +29 -38
  20. package/src/{AbstractSQLOptimiser.ts → abstract-sql-optimizer.ts} +21 -22
  21. package/src/{AbstractSQLRules2SQL.ts → abstract-sql-rules-to-sql.ts} +12 -6
  22. package/src/{AbstractSQLSchemaOptimiser.ts → abstract-sql-schema-optimizer.ts} +10 -18
  23. package/src/referenced-fields.ts +5 -5
  24. package/test/abstract-sql/case-when-else.ts +1 -1
  25. package/test/abstract-sql/dates.ts +23 -0
  26. package/test/abstract-sql/empty-query-optimisations.ts +1 -1
  27. package/test/abstract-sql/get-referenced-fields.ts +1 -1
  28. package/test/abstract-sql/get-rule-referenced-fields.ts +1 -1
  29. package/test/abstract-sql/schema-checks.ts +1 -1
  30. package/test/abstract-sql/schema-informative-reference.ts +19 -19
  31. package/test/abstract-sql/schema-rule-optimization.ts +2 -2
  32. package/test/abstract-sql/schema-rule-to-check.ts +6 -6
  33. package/test/abstract-sql/schema-views.ts +1 -1
  34. package/test/abstract-sql/test.ts +1 -1
  35. package/test/odata/filterby.ts +12 -12
  36. package/test/odata/{resource_parsing.ts → resource-parsing.ts} +3 -3
  37. package/test/odata/test.ts +1 -1
  38. package/test/sbvr/pilots.ts +12 -12
  39. package/test/sbvr/reference-type.ts +16 -16
  40. package/test/sbvr/test.ts +1 -1
  41. package/tsconfig.json +0 -1
  42. package/out/AbstractSQLCompiler.js.map +0 -1
  43. package/out/AbstractSQLOptimiser.d.ts +0 -2
  44. package/out/AbstractSQLOptimiser.js.map +0 -1
  45. package/out/AbstractSQLRules2SQL.js.map +0 -1
  46. package/out/AbstractSQLSchemaOptimiser.js.map +0 -1
  47. /package/test/abstract-sql/{functions_wrapper.ts → functions-wrapper.ts} +0 -0
@@ -4,18 +4,17 @@ export const enum Engines {
4
4
  websql = 'websql',
5
5
  }
6
6
 
7
- import { AbstractSQLOptimiser } from './AbstractSQLOptimiser.js';
8
- export { Binding, SqlResult } from './AbstractSQLRules2SQL.js';
7
+ import { AbstractSQLOptimizer } from './abstract-sql-optimizer.js';
8
+ export { Binding, SqlResult } from './abstract-sql-rules-to-sql.js';
9
9
  import $sbvrTypes from '@balena/sbvr-types';
10
10
  const { default: sbvrTypes } = $sbvrTypes;
11
11
  import type {
12
12
  AbstractSqlModel,
13
- AbstractSqlQuery,
14
13
  AbstractSqlType,
15
14
  BooleanTypeNodes,
16
15
  WhereNode,
17
- } from './AbstractSQLCompiler.js';
18
- import { isFromNode, isSelectQueryNode } from './AbstractSQLCompiler.js';
16
+ } from './abstract-sql-compiler.js';
17
+ import { isFromNode, isSelectQueryNode } from './abstract-sql-compiler.js';
19
18
 
20
19
  const countFroms = (n: AbstractSqlType[]) => {
21
20
  let count = 0;
@@ -44,26 +43,19 @@ export const generateRuleSlug = (
44
43
 
45
44
  export const optimizeSchema = (
46
45
  abstractSqlModel: AbstractSqlModel,
47
- createCheckConstraints = true,
46
+ { createCheckConstraints = true } = {},
48
47
  ): AbstractSqlModel => {
49
48
  abstractSqlModel.rules = abstractSqlModel.rules
50
- .map((rule): AbstractSqlQuery | undefined => {
51
- const ruleBodyNode = rule.find((r) => r[0] === 'Body') as [
52
- 'Body',
53
- AbstractSqlQuery,
54
- ];
55
- if (ruleBodyNode == null || typeof ruleBodyNode === 'string') {
49
+ .map((rule) => {
50
+ const [, ruleBodyNode, ruleSENode] = rule;
51
+ if (ruleBodyNode == null || ruleBodyNode[0] !== 'Body') {
56
52
  throw new Error('Invalid rule');
57
53
  }
58
54
  let ruleBody = ruleBodyNode[1];
59
55
  if (typeof ruleBody === 'string') {
60
56
  throw new Error('Invalid rule');
61
57
  }
62
- const ruleSENode = rule.find((r) => r[0] === 'StructuredEnglish') as [
63
- 'StructuredEnglish',
64
- string,
65
- ];
66
- if (ruleSENode == null) {
58
+ if (ruleSENode == null || ruleSENode[0] !== 'StructuredEnglish') {
67
59
  throw new Error('Invalid structured English');
68
60
  }
69
61
  const ruleSE = ruleSENode[1];
@@ -72,7 +64,7 @@ export const optimizeSchema = (
72
64
  }
73
65
 
74
66
  // Optimize the rule body, this also normalizes it making the check constraint check easier
75
- ruleBodyNode[1] = ruleBody = AbstractSQLOptimiser(ruleBody, true);
67
+ ruleBodyNode[1] = ruleBody = AbstractSQLOptimizer(ruleBody, true);
76
68
 
77
69
  const count = countFroms(ruleBody);
78
70
  if (
@@ -48,7 +48,7 @@ import type {
48
48
  ToJSONNode,
49
49
  UnionQueryNode,
50
50
  WhereNode,
51
- } from './AbstractSQLCompiler.js';
51
+ } from './abstract-sql-compiler.js';
52
52
  import {
53
53
  isAliasNode,
54
54
  isFromNode,
@@ -56,9 +56,9 @@ import {
56
56
  isSelectQueryNode,
57
57
  isTableNode,
58
58
  isWhereNode,
59
- } from './AbstractSQLCompiler.js';
60
- import { AbstractSQLOptimiser } from './AbstractSQLOptimiser.js';
61
- import { isAbstractSqlQuery } from './AbstractSQLRules2SQL.js';
59
+ } from './abstract-sql-compiler.js';
60
+ import { AbstractSQLOptimizer } from './abstract-sql-optimizer.js';
61
+ import { isAbstractSqlQuery } from './abstract-sql-rules-to-sql.js';
62
62
 
63
63
  export interface ReferencedFields {
64
64
  [alias: string]: string[];
@@ -266,7 +266,7 @@ const $getRuleReferencedFields = (
266
266
  };
267
267
  export const getRuleReferencedFields: EngineInstance['getRuleReferencedFields'] =
268
268
  (ruleBody) => {
269
- ruleBody = AbstractSQLOptimiser(ruleBody);
269
+ ruleBody = AbstractSQLOptimizer(ruleBody);
270
270
  const referencedFields: RuleReferencedFields = {};
271
271
  if (
272
272
  ruleBody[0] === 'Equals' &&
@@ -1,7 +1,7 @@
1
1
  import type {
2
2
  CaseNode,
3
3
  SelectQueryNode,
4
- } from '../../out/AbstractSQLCompiler.js';
4
+ } from '../../out/abstract-sql-compiler.js';
5
5
  import test from './test.js';
6
6
 
7
7
  const buildSelect = (withElse: boolean): SelectQueryNode => {
@@ -127,6 +127,29 @@ describe('DateTrunc', () => {
127
127
  });
128
128
  },
129
129
  );
130
+
131
+ test(
132
+ [
133
+ 'SelectQuery',
134
+ [
135
+ 'Select',
136
+ [
137
+ [
138
+ 'DateTrunc',
139
+ ['EmbeddedText', 'year'],
140
+ ['Date', '2022-10-10'],
141
+ ['EmbeddedText', 'UTC'],
142
+ ],
143
+ ],
144
+ ],
145
+ ],
146
+ [['Date', '2022-10-10']],
147
+ (result, sqlEquals) => {
148
+ it('should produce a valid DateTrunc statement', () => {
149
+ sqlEquals(result, `SELECT DATE_TRUNC('year', $1, 'UTC')`);
150
+ });
151
+ },
152
+ );
130
153
  });
131
154
 
132
155
  describe('ToTime', () => {
@@ -1,5 +1,5 @@
1
1
  import { stripIndent } from 'common-tags';
2
- import type { SelectQueryNode } from '../../out/AbstractSQLCompiler.js';
2
+ import type { SelectQueryNode } from '../../out/abstract-sql-compiler.js';
3
3
 
4
4
  import test from './test.js';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { expect } from 'chai';
2
- import * as AbstractSqlCompiler from '../../out/AbstractSQLCompiler.js';
2
+ import * as AbstractSqlCompiler from '../../out/abstract-sql-compiler.js';
3
3
 
4
4
  describe('getReferencedFields', () => {
5
5
  it('should work with selected fields', () => {
@@ -1,5 +1,5 @@
1
1
  import { expect } from 'chai';
2
- import * as AbstractSqlCompiler from '../../out/AbstractSQLCompiler.js';
2
+ import * as AbstractSqlCompiler from '../../out/abstract-sql-compiler.js';
3
3
 
4
4
  describe('getRuleReferencedFields', () => {
5
5
  it('should work with single table NOT EXISTS', () => {
@@ -1,4 +1,4 @@
1
- import * as AbstractSQLCompiler from '../../out/AbstractSQLCompiler.js';
1
+ import * as AbstractSQLCompiler from '../../out/abstract-sql-compiler.js';
2
2
  import { expect } from 'chai';
3
3
 
4
4
  it('an empty abstractSql model should produce an empty schema', () => {
@@ -1,4 +1,4 @@
1
- import * as AbstractSQLCompiler from '../../out/AbstractSQLCompiler.js';
1
+ import * as AbstractSQLCompiler from '../../out/abstract-sql-compiler.js';
2
2
  import { expect } from 'chai';
3
3
 
4
4
  describe('generate informative reference schema', () => {
@@ -81,14 +81,14 @@ describe('generate informative reference schema', () => {
81
81
  .that.deep.equals([
82
82
  `\
83
83
  CREATE TABLE IF NOT EXISTS "term" (
84
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
85
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
84
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
85
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
86
86
  , "id" SERIAL NOT NULL PRIMARY KEY
87
87
  );`,
88
88
  `\
89
89
  CREATE TABLE IF NOT EXISTS "term history" (
90
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
91
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
90
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
91
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
92
92
  , "id" SERIAL NOT NULL PRIMARY KEY
93
93
  , "references-term" INTEGER NOT NULL
94
94
  );`,
@@ -210,20 +210,20 @@ CREATE TABLE IF NOT EXISTS "term history" (
210
210
  .that.deep.equals([
211
211
  `\
212
212
  CREATE TABLE IF NOT EXISTS "term" (
213
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
214
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
213
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
214
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
215
215
  , "id" SERIAL NOT NULL PRIMARY KEY
216
216
  );`,
217
217
  `\
218
218
  CREATE TABLE IF NOT EXISTS "termterm" (
219
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
220
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
219
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
220
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
221
221
  , "id" SERIAL NOT NULL PRIMARY KEY
222
222
  );`,
223
223
  `\
224
224
  CREATE TABLE IF NOT EXISTS "term history" (
225
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
226
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
225
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
226
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
227
227
  , "id" SERIAL NOT NULL PRIMARY KEY
228
228
  , "references-term" INTEGER NOT NULL
229
229
  , "references-termterm" INTEGER NOT NULL
@@ -310,14 +310,14 @@ CREATE TABLE IF NOT EXISTS "term history" (
310
310
  .that.deep.equals([
311
311
  `\
312
312
  CREATE TABLE IF NOT EXISTS "term" (
313
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
314
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
313
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
314
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
315
315
  , "id" SERIAL NOT NULL PRIMARY KEY
316
316
  );`,
317
317
  `\
318
318
  CREATE TABLE IF NOT EXISTS "term history" (
319
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
320
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
319
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
320
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
321
321
  , "id" SERIAL NOT NULL PRIMARY KEY
322
322
  , "references-term" INTEGER NOT NULL
323
323
  , FOREIGN KEY ("references-term") REFERENCES "term" ("id")
@@ -403,14 +403,14 @@ CREATE TABLE IF NOT EXISTS "term history" (
403
403
  .that.deep.equals([
404
404
  `\
405
405
  CREATE TABLE IF NOT EXISTS "term" (
406
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
407
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
406
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
407
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
408
408
  , "id" SERIAL NOT NULL PRIMARY KEY
409
409
  );`,
410
410
  `\
411
411
  CREATE TABLE IF NOT EXISTS "term history" (
412
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
413
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
412
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
413
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
414
414
  , "id" SERIAL NOT NULL PRIMARY KEY
415
415
  , "references-term" INTEGER NOT NULL
416
416
  , FOREIGN KEY ("references-term") REFERENCES "term" ("id")
@@ -1,4 +1,4 @@
1
- import * as AbstractSQLCompiler from '../../out/AbstractSQLCompiler.js';
1
+ import * as AbstractSQLCompiler from '../../out/abstract-sql-compiler.js';
2
2
  import { expect } from 'chai';
3
3
 
4
4
  const generateSchema = (
@@ -70,7 +70,7 @@ it('should convert a basic rule to a check', () => {
70
70
  ],
71
71
  ],
72
72
  ],
73
- ] as AbstractSQLCompiler.AbstractSqlQuery,
73
+ ],
74
74
  ['StructuredEnglish', 'Test rule abstract sql optimization'],
75
75
  ],
76
76
  ],
@@ -1,4 +1,4 @@
1
- import * as AbstractSQLCompiler from '../../out/AbstractSQLCompiler.js';
1
+ import * as AbstractSQLCompiler from '../../out/abstract-sql-compiler.js';
2
2
  import { expect } from 'chai';
3
3
 
4
4
  const generateSchema = (
@@ -60,7 +60,7 @@ it('should convert a basic rule to a check using NOT EXISTS', () => {
60
60
  ],
61
61
  ],
62
62
  ],
63
- ] as AbstractSQLCompiler.AbstractSqlQuery,
63
+ ],
64
64
  [
65
65
  'StructuredEnglish',
66
66
  'It is necessary that each test has an id that is greater than 0.',
@@ -132,7 +132,7 @@ it('should convert a basic rule to a check using COUNT(*) = 0', () => {
132
132
  ],
133
133
  ['Number', 0],
134
134
  ],
135
- ] as AbstractSQLCompiler.AbstractSqlQuery,
135
+ ],
136
136
  [
137
137
  'StructuredEnglish',
138
138
  'It is necessary that each test has an id that is greater than 0.',
@@ -224,7 +224,7 @@ it('should correctly shorten a converted check rule with a long name', () => {
224
224
  ],
225
225
  ],
226
226
  ],
227
- ] as AbstractSQLCompiler.AbstractSqlQuery,
227
+ ],
228
228
  [
229
229
  'StructuredEnglish',
230
230
  'It is necessary that each test_table_with_very_very_long_name has an id that is greater than 0.',
@@ -298,7 +298,7 @@ it('should work with differing table/resource names using NOT EXISTS', () => {
298
298
  ],
299
299
  ],
300
300
  ],
301
- ] as AbstractSQLCompiler.AbstractSqlQuery,
301
+ ],
302
302
  [
303
303
  'StructuredEnglish',
304
304
  'It is necessary that each test has an id that is greater than 0.',
@@ -370,7 +370,7 @@ it('should work with differing table/resource names using COUNT(*) = 0', () => {
370
370
  ],
371
371
  ['Number', 0],
372
372
  ],
373
- ] as AbstractSQLCompiler.AbstractSqlQuery,
373
+ ],
374
374
  [
375
375
  'StructuredEnglish',
376
376
  'It is necessary that each test has an id that is greater than 0.',
@@ -1,4 +1,4 @@
1
- import * as AbstractSQLCompiler from '../../out/AbstractSQLCompiler.js';
1
+ import * as AbstractSQLCompiler from '../../out/abstract-sql-compiler.js';
2
2
  import { expect } from 'chai';
3
3
 
4
4
  it('a table with a static definition should not produce a view', () => {
@@ -1,4 +1,4 @@
1
- import * as AbstractSQLCompiler from '../../out/AbstractSQLCompiler.js';
1
+ import * as AbstractSQLCompiler from '../../out/abstract-sql-compiler.js';
2
2
 
3
3
  import { expect } from 'chai';
4
4
  import _ from 'lodash';
@@ -17,7 +17,7 @@ import type {
17
17
  Binding,
18
18
  DurationNode,
19
19
  SqlResult,
20
- } from '../../out/AbstractSQLCompiler.js';
20
+ } from '../../out/abstract-sql-compiler.js';
21
21
 
22
22
  const pilotFieldsStr = pilotFields.join(', ');
23
23
  const aliasPilotCanFlyPlaneFieldsStr = aliasPilotCanFlyPlaneFields.join(', ');
@@ -318,25 +318,25 @@ const createMethodCall = function (method: string, ...args: Operand[]) {
318
318
  case 'HOUR':
319
319
  case 'MINUTE':
320
320
  return {
321
- sql: `EXTRACT('${method}' FROM DATE_TRUNC('milliseconds', ${parsedArgs[0].sql}))`,
321
+ sql: `EXTRACT('${method}' FROM DATE_TRUNC('milliseconds', ${parsedArgs[0].sql}, 'UTC'))`,
322
322
  bindings: parsedArgs[0].bindings,
323
323
  odata,
324
324
  };
325
325
  case 'SECOND':
326
326
  return {
327
- sql: `FLOOR(EXTRACT('${method}' FROM DATE_TRUNC('milliseconds', ${parsedArgs[0].sql})))`,
327
+ sql: `FLOOR(EXTRACT('${method}' FROM DATE_TRUNC('milliseconds', ${parsedArgs[0].sql}, 'UTC')))`,
328
328
  bindings: parsedArgs[0].bindings,
329
329
  odata,
330
330
  };
331
331
  case 'FRACTIONALSECONDS':
332
332
  return {
333
- sql: `EXTRACT('SECOND' FROM DATE_TRUNC('milliseconds', ${parsedArgs[0].sql})) - FLOOR(EXTRACT('SECOND' FROM DATE_TRUNC('milliseconds', ${parsedArgs[0].sql})))`,
333
+ sql: `EXTRACT('SECOND' FROM DATE_TRUNC('milliseconds', ${parsedArgs[0].sql}, 'UTC')) - FLOOR(EXTRACT('SECOND' FROM DATE_TRUNC('milliseconds', ${parsedArgs[0].sql}, 'UTC')))`,
334
334
  bindings: parsedArgs[0].bindings,
335
335
  odata,
336
336
  };
337
337
  case 'TIME':
338
338
  return {
339
- sql: `CAST(DATE_TRUNC('milliseconds', ${parsedArgs[0].sql}) AS ${method})`,
339
+ sql: `CAST(DATE_TRUNC('milliseconds', ${parsedArgs[0].sql}, 'UTC') AS ${method})`,
340
340
  bindings: parsedArgs[0].bindings,
341
341
  odata,
342
342
  };
@@ -348,7 +348,7 @@ const createMethodCall = function (method: string, ...args: Operand[]) {
348
348
  };
349
349
  case 'DATE':
350
350
  return {
351
- sql: `DATE(DATE_TRUNC('milliseconds', ${parsedArgs[0].sql}))`,
351
+ sql: `DATE(DATE_TRUNC('milliseconds', ${parsedArgs[0].sql}, 'UTC'))`,
352
352
  bindings: parsedArgs[0].bindings,
353
353
  odata,
354
354
  };
@@ -637,7 +637,7 @@ run(function () {
637
637
  INSERT INTO "pilot" ("name")
638
638
  SELECT "$insert"."name"
639
639
  FROM (
640
- SELECT CAST(NULL AS TIMESTAMP) AS "created at", CAST(NULL AS TIMESTAMP) AS "modified at", CAST(NULL AS INTEGER) AS "id", CAST(NULL AS INTEGER) AS "person", CAST(NULL AS BOOLEAN) 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"
640
+ SELECT CAST(NULL AS TIMESTAMPTZ) AS "created at", CAST(NULL AS TIMESTAMPTZ) AS "modified at", CAST(NULL AS INTEGER) AS "id", CAST(NULL AS INTEGER) AS "person", CAST(NULL AS BOOLEAN) 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 TIMESTAMPTZ) AS "hire date", CAST(NULL AS INTEGER) AS "was trained by-pilot"
641
641
  ) AS "$insert"
642
642
  WHERE EXISTS (
643
643
  SELECT 1
@@ -778,7 +778,7 @@ run(function () {
778
778
  INSERT INTO "pilot" ("name")
779
779
  SELECT "$insert"."name"
780
780
  FROM (
781
- SELECT CAST(NULL AS TIMESTAMP) AS "created at", CAST(NULL AS TIMESTAMP) AS "modified at", CAST(NULL AS INTEGER) AS "id", CAST(NULL AS INTEGER) AS "person", CAST(NULL AS BOOLEAN) 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"
781
+ SELECT CAST(NULL AS TIMESTAMPTZ) AS "created at", CAST(NULL AS TIMESTAMPTZ) AS "modified at", CAST(NULL AS INTEGER) AS "id", CAST(NULL AS INTEGER) AS "person", CAST(NULL AS BOOLEAN) 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 TIMESTAMPTZ) AS "hire date", CAST(NULL AS INTEGER) AS "was trained by-pilot"
782
782
  ) AS "$insert"
783
783
  WHERE EXISTS (
784
784
  SELECT 1
@@ -853,7 +853,7 @@ AND "pilot"."id" IN ((
853
853
  INSERT INTO "pilot" ("id", "name")
854
854
  SELECT "$insert"."id", "$insert"."name"
855
855
  FROM (
856
- 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 BOOLEAN) 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"
856
+ SELECT CAST(NULL AS TIMESTAMPTZ) AS "created at", CAST(NULL AS TIMESTAMPTZ) AS "modified at", CAST(? AS INTEGER) AS "id", CAST(NULL AS INTEGER) AS "person", CAST(NULL AS BOOLEAN) 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 TIMESTAMPTZ) AS "hire date", CAST(NULL AS INTEGER) AS "was trained by-pilot"
857
857
  ) AS "$insert"
858
858
  WHERE EXISTS (
859
859
  SELECT 1
@@ -1420,7 +1420,7 @@ run(function () {
1420
1420
  INSERT INTO "team" ("favourite colour")
1421
1421
  SELECT "$insert"."favourite colour"
1422
1422
  FROM (
1423
- SELECT CAST(NULL AS TIMESTAMP) AS "created at", CAST(NULL AS TIMESTAMP) AS "modified at", CAST(? AS INTEGER) AS "favourite colour"
1423
+ SELECT CAST(NULL AS TIMESTAMPTZ) AS "created at", CAST(NULL AS TIMESTAMPTZ) AS "modified at", CAST(? AS INTEGER) AS "favourite colour"
1424
1424
  ) AS "$insert"
1425
1425
  WHERE EXISTS (
1426
1426
  SELECT 1
@@ -1466,7 +1466,7 @@ run(function () {
1466
1466
  `\
1467
1467
  SELECT ${pilotFieldsStr}
1468
1468
  FROM "pilot"
1469
- WHERE CURRENT_TIMESTAMP - DATE_TRUNC('milliseconds', "pilot"."created at") < INTERVAL '1 0:0:0.0'`,
1469
+ WHERE CURRENT_TIMESTAMP - DATE_TRUNC('milliseconds', "pilot"."created at", 'UTC') < INTERVAL '1 0:0:0.0'`,
1470
1470
  );
1471
1471
  });
1472
1472
  });
@@ -1495,7 +1495,7 @@ run(function () {
1495
1495
  `\
1496
1496
  SELECT ${pilotFieldsStr}
1497
1497
  FROM "pilot"
1498
- WHERE DATE_TRUNC('milliseconds', "pilot"."created at") + INTERVAL '1 0:0:0.0' > CURRENT_TIMESTAMP`,
1498
+ WHERE DATE_TRUNC('milliseconds', "pilot"."created at", 'UTC') + INTERVAL '1 0:0:0.0' > CURRENT_TIMESTAMP`,
1499
1499
  );
1500
1500
  });
1501
1501
  });
@@ -10,7 +10,7 @@ import {
10
10
  aliasPilotLicenceFields,
11
11
  aliasLicenceFields,
12
12
  } from './fields.js';
13
- import type { SqlResult } from '../../out/AbstractSQLCompiler.js';
13
+ import type { SqlResult } from '../../out/abstract-sql-compiler.js';
14
14
  const aliasPilotFields = aliasFields(
15
15
  'plane.pilot-can fly-plane.pilot',
16
16
  pilotFields,
@@ -158,7 +158,7 @@ test(
158
158
  INSERT INTO "pilot" ("id")
159
159
  SELECT "$insert"."id"
160
160
  FROM (
161
- 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 BOOLEAN) 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"
161
+ SELECT CAST(NULL AS TIMESTAMPTZ) AS "created at", CAST(NULL AS TIMESTAMPTZ) AS "modified at", CAST(? AS INTEGER) AS "id", CAST(NULL AS INTEGER) AS "person", CAST(NULL AS BOOLEAN) 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 TIMESTAMPTZ) AS "hire date", CAST(NULL AS INTEGER) AS "was trained by-pilot"
162
162
  ) AS "$insert"
163
163
  WHERE EXISTS (
164
164
  SELECT 1
@@ -272,7 +272,7 @@ test(
272
272
  INSERT INTO "pilot-can fly-plane" ("id")
273
273
  SELECT "$insert"."id"
274
274
  FROM (
275
- 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"
275
+ SELECT CAST(NULL AS TIMESTAMPTZ) AS "created at", CAST(NULL AS TIMESTAMPTZ) AS "modified at", CAST(NULL AS INTEGER) AS "pilot", CAST(NULL AS INTEGER) AS "can fly-plane", CAST(? AS INTEGER) AS "id"
276
276
  ) AS "$insert"
277
277
  WHERE EXISTS (
278
278
  SELECT 1
@@ -17,7 +17,7 @@ const typeVocab = await fs.promises.readFile(
17
17
  'utf8',
18
18
  );
19
19
 
20
- import * as AbstractSQLCompiler from '../../out/AbstractSQLCompiler.js';
20
+ import * as AbstractSQLCompiler from '../../out/abstract-sql-compiler.js';
21
21
 
22
22
  import { expect } from 'chai';
23
23
  import _ from 'lodash';
@@ -73,38 +73,38 @@ END;
73
73
  $$;`,
74
74
  `\
75
75
  CREATE TABLE IF NOT EXISTS "person" (
76
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
77
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
76
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
77
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
78
78
  , "id" SERIAL NOT NULL PRIMARY KEY
79
79
  );`,
80
80
  modifiedAtTrigger('person'),
81
81
  `\
82
82
  CREATE TABLE IF NOT EXISTS "plane" (
83
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
84
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
83
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
84
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
85
85
  , "id" SERIAL NOT NULL PRIMARY KEY
86
86
  , "name" VARCHAR(255) NOT NULL CHECK ("name" IN ('planeA', 'planeB', 'planeC'))
87
87
  );`,
88
88
  modifiedAtTrigger('plane'),
89
89
  `\
90
90
  CREATE TABLE IF NOT EXISTS "veteran pilot" (
91
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
92
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
91
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
92
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
93
93
  , "id" SERIAL NOT NULL PRIMARY KEY
94
94
  );`,
95
95
  modifiedAtTrigger('veteran pilot'),
96
96
  `\
97
97
  CREATE TABLE IF NOT EXISTS "licence" (
98
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
99
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
98
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
99
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
100
100
  , "id" SERIAL NOT NULL PRIMARY KEY
101
101
  , "was granted by-pilot" INTEGER NOT NULL
102
102
  );`,
103
103
  modifiedAtTrigger('licence'),
104
104
  `\
105
105
  CREATE TABLE IF NOT EXISTS "pilot" (
106
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
107
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
106
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
107
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
108
108
  , "id" SERIAL NOT NULL PRIMARY KEY
109
109
  , "person" INTEGER NOT NULL
110
110
  , "name" VARCHAR(255) NOT NULL
@@ -117,8 +117,8 @@ CREATE TABLE IF NOT EXISTS "pilot" (
117
117
  modifiedAtTrigger('pilot'),
118
118
  `\
119
119
  CREATE TABLE IF NOT EXISTS "pilot-can fly-plane" (
120
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
121
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
120
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
121
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
122
122
  , "pilot" INTEGER NOT NULL
123
123
  , "can fly-plane" INTEGER NOT NULL
124
124
  , "id" SERIAL NOT NULL PRIMARY KEY
@@ -58,15 +58,15 @@ $$;`,
58
58
 
59
59
  `\
60
60
  CREATE TABLE IF NOT EXISTS "term" (
61
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
62
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
61
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
62
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
63
63
  , "id" SERIAL NOT NULL PRIMARY KEY
64
64
  );`,
65
65
  modifiedAtTrigger('term'),
66
66
  `\
67
67
  CREATE TABLE IF NOT EXISTS "term history" (
68
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
69
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
68
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
69
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
70
70
  , "id" SERIAL NOT NULL PRIMARY KEY
71
71
  , "references-term" INTEGER NOT NULL
72
72
  );`,
@@ -103,15 +103,15 @@ $$;`,
103
103
 
104
104
  `\
105
105
  CREATE TABLE IF NOT EXISTS "term" (
106
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
107
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
106
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
107
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
108
108
  , "id" SERIAL NOT NULL PRIMARY KEY
109
109
  );`,
110
110
  modifiedAtTrigger('term'),
111
111
  `\
112
112
  CREATE TABLE IF NOT EXISTS "term history" (
113
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
114
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
113
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
114
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
115
115
  , "id" SERIAL NOT NULL PRIMARY KEY
116
116
  , "references-term" INTEGER NOT NULL
117
117
  );`,
@@ -147,15 +147,15 @@ $$;`,
147
147
 
148
148
  `\
149
149
  CREATE TABLE IF NOT EXISTS "term" (
150
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
151
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
150
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
151
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
152
152
  , "id" SERIAL NOT NULL PRIMARY KEY
153
153
  );`,
154
154
  modifiedAtTrigger('term'),
155
155
  `\
156
156
  CREATE TABLE IF NOT EXISTS "term history" (
157
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
158
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
157
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
158
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
159
159
  , "id" SERIAL NOT NULL PRIMARY KEY
160
160
  , "references-term" INTEGER NOT NULL
161
161
  , FOREIGN KEY ("references-term") REFERENCES "term" ("id")
@@ -191,15 +191,15 @@ $$;`,
191
191
 
192
192
  `\
193
193
  CREATE TABLE IF NOT EXISTS "term" (
194
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
195
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
194
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
195
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
196
196
  , "id" SERIAL NOT NULL PRIMARY KEY
197
197
  );`,
198
198
  modifiedAtTrigger('term'),
199
199
  `\
200
200
  CREATE TABLE IF NOT EXISTS "term history" (
201
- "created at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
202
- , "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
201
+ "created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
202
+ , "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
203
203
  , "id" SERIAL NOT NULL PRIMARY KEY
204
204
  , "references-term" INTEGER NOT NULL
205
205
  , FOREIGN KEY ("references-term") REFERENCES "term" ("id")
package/test/sbvr/test.ts CHANGED
@@ -7,7 +7,7 @@ import { SBVRParser } from '@balena/sbvr-parser';
7
7
  import LF2AbstractSQL from '@balena/lf-to-abstract-sql';
8
8
 
9
9
  import { expect } from 'chai';
10
- import * as AbstractSQLCompiler from '../../out/AbstractSQLCompiler.js';
10
+ import * as AbstractSQLCompiler from '../../out/abstract-sql-compiler.js';
11
11
 
12
12
  export function getTestHelpers(builtInVocab: string | boolean = false) {
13
13
  const sbvrParser = SBVRParser.createInstance();
package/tsconfig.json CHANGED
@@ -8,7 +8,6 @@
8
8
  "noUnusedParameters": true,
9
9
  "noUnusedLocals": true,
10
10
  "preserveConstEnums": true,
11
- "removeComments": true,
12
11
  "sourceMap": true,
13
12
  "declaration": true,
14
13
  "skipLibCheck": true,