@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
@@ -1,6 +1,56 @@
1
1
  - commits:
2
+ - subject: Standardize filenames
3
+ hash: 11f63ab3efbb0fedfafe9eec933f4f4cc45cfbb9
4
+ body: ""
5
+ footer:
6
+ Change-type: major
7
+ change-type: major
8
+ author: Pagan Gazzard
9
+ nested: []
10
+ - subject: Improve typing of `AbstractSqlField['computed']`
11
+ hash: d52172c59a9424477d3f96cbee686e02e6796b94
12
+ body: ""
13
+ footer:
14
+ Change-type: major
15
+ change-type: major
16
+ author: Pagan Gazzard
17
+ nested: []
18
+ - subject: Improve typing of `AbstractSqlModel['rules']`
19
+ hash: d1a2c50d9d4b9c3bb89030186db0b466fbf4d83d
20
+ body: ""
21
+ footer:
22
+ Change-type: major
23
+ change-type: major
24
+ author: Pagan Gazzard
25
+ nested: []
26
+ - subject: Remove support for deprecated `['Bind', string, string]` bind node format
27
+ hash: 9f16483079cd561a9fdaa741cd830c2c5eb2065a
28
+ body: |
29
+ Use `['Bind', [string, string]]` instead
30
+ footer:
31
+ Change-type: major
32
+ change-type: major
33
+ author: Pagan Gazzard
34
+ nested: []
35
+ - subject: Remove deprecated `AliasableFromTypeNodes` type, use `FromTypeNodes`
36
+ instead
37
+ hash: 1d3108b17cdc662641904c72357157a40ae0cbcb
38
+ body: ""
39
+ footer:
40
+ Change-type: major
41
+ change-type: major
42
+ author: Pagan Gazzard
43
+ nested: []
44
+ - subject: Use an options object for `optimizeSchema` rather than flags
45
+ hash: b78df1afd0c566de81efff212629a53dd6bb4219
46
+ body: ""
47
+ footer:
48
+ Change-type: major
49
+ change-type: major
50
+ author: Pagan Gazzard
51
+ nested: []
2
52
  - subject: Convert to ESM
3
- hash: db9cd30f6ec498e5293df9e060f5531cd960b1cc
53
+ hash: 195c2b8d5d4a39ba893113489620ccfa3f0a6afc
4
54
  body: ""
5
55
  footer:
6
56
  Change-type: major
@@ -8,7 +58,7 @@
8
58
  author: Pagan Gazzard
9
59
  nested: []
10
60
  - subject: Remove support for legacy `Now` nodes in favor of `CurrentTimestamp`
11
- hash: 560cbd2a4c6ef6ff913f46dfd3443fce3344a7dc
61
+ hash: 56e66dd939a87649c5d68787366562934daf65fc
12
62
  body: ""
13
63
  footer:
14
64
  Change-type: major
@@ -16,7 +66,7 @@
16
66
  author: Pagan Gazzard
17
67
  nested: []
18
68
  - subject: Switch to a separate `viewDefinition` property for creating views
19
- hash: 972bae897b593ea137f34a829d5562fd0ce39a11
69
+ hash: 0bf2e7ac0bcc3e733e3f712b51f71772666b0853
20
70
  body: |
21
71
  This removes the inference of whether to create a view from based on
22
72
  inspecting the definition and instead makes it a conscious choice to
@@ -28,9 +78,89 @@
28
78
  change-type: major
29
79
  author: Pagan Gazzard
30
80
  nested: []
81
+ - subject: "Tests: Update @balena/odata-to-abstract-sql to 8.0.1"
82
+ hash: 66ee93652310d4add5b0c8c09843dc052d796f5e
83
+ body: ""
84
+ footer:
85
+ Change-type: patch
86
+ change-type: patch
87
+ author: Pagan Gazzard
88
+ nested: []
31
89
  version: 11.0.0
32
90
  title: ""
33
- date: 2025-07-03T14:10:40.934Z
91
+ date: 2025-07-16T14:26:48.320Z
92
+ - commits:
93
+ - subject: Include comments in generated output to preserve jsdoc info
94
+ hash: 7045c5bd5244459330a7899ad0fbb974a429ca14
95
+ body: ""
96
+ footer:
97
+ Change-type: patch
98
+ change-type: patch
99
+ author: Pagan Gazzard
100
+ nested: []
101
+ version: 10.6.2
102
+ title: ""
103
+ date: 2025-07-16T12:44:51.636Z
104
+ - commits:
105
+ - subject: Update dev dependencies
106
+ hash: 444f515b81454a512eaf3a28f49f7b25938b4b9c
107
+ body: ""
108
+ footer:
109
+ Change-type: patch
110
+ change-type: patch
111
+ author: Pagan Gazzard
112
+ nested: []
113
+ version: 10.6.1
114
+ title: ""
115
+ date: 2025-07-16T11:37:51.776Z
116
+ - commits:
117
+ - subject: Export `abstractSqlContainsNode` helper function
118
+ hash: 92e7d4dd97329fb93e2f1c27b275c9cc38ab74c5
119
+ body: ""
120
+ footer:
121
+ Change-type: minor
122
+ change-type: minor
123
+ author: Pagan Gazzard
124
+ nested: []
125
+ version: 10.6.0
126
+ title: ""
127
+ date: 2025-07-14T23:48:55.689Z
128
+ - commits:
129
+ - subject: Allow sbvr-types v11
130
+ hash: 0b961faffe188162d82968df0e50522b7840eeae
131
+ body: ""
132
+ footer:
133
+ Change-type: patch
134
+ change-type: patch
135
+ author: joshbwlng
136
+ nested: []
137
+ version: 10.5.1
138
+ title: ""
139
+ date: 2025-07-08T14:05:27.340Z
140
+ - commits:
141
+ - subject: Add optional time zone argument for DateTrunc
142
+ hash: 51521852f16d12fdcd22b51d24bf6a2cea3247e3
143
+ body: ""
144
+ footer:
145
+ Change-type: minor
146
+ change-type: minor
147
+ author: joshbwlng
148
+ nested: []
149
+ version: 10.5.0
150
+ title: ""
151
+ date: 2025-07-07T23:20:12.115Z
152
+ - commits:
153
+ - subject: Correctly treat `EqualsAnyNode` as the boolean type we know it to be
154
+ hash: 862d36cf5ade46cc40be2909d6af6bafe16d5409
155
+ body: ""
156
+ footer:
157
+ Change-type: patch
158
+ change-type: patch
159
+ author: Pagan Gazzard
160
+ nested: []
161
+ version: 10.4.1
162
+ title: ""
163
+ date: 2025-07-04T23:10:21.328Z
34
164
  - commits:
35
165
  - subject: Export an `optimizeSchema` variant that is database engine agnostic
36
166
  hash: 9b52888ca68ed9298b469fbda89eb2dbbb861668
package/CHANGELOG.md CHANGED
@@ -4,11 +4,42 @@ 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
- ## 11.0.0 - 2025-07-03
8
-
7
+ ## 11.0.0 - 2025-07-16
8
+
9
+ * Standardize filenames [Pagan Gazzard]
10
+ * Improve typing of `AbstractSqlField['computed']` [Pagan Gazzard]
11
+ * Improve typing of `AbstractSqlModel['rules']` [Pagan Gazzard]
12
+ * Remove support for deprecated `['Bind', string, string]` bind node format [Pagan Gazzard]
13
+ * Remove deprecated `AliasableFromTypeNodes` type, use `FromTypeNodes` instead [Pagan Gazzard]
14
+ * Use an options object for `optimizeSchema` rather than flags [Pagan Gazzard]
9
15
  * Convert to ESM [Pagan Gazzard]
10
16
  * Remove support for legacy `Now` nodes in favor of `CurrentTimestamp` [Pagan Gazzard]
11
17
  * Switch to a separate `viewDefinition` property for creating views [Pagan Gazzard]
18
+ * Tests: Update @balena/odata-to-abstract-sql to 8.0.1 [Pagan Gazzard]
19
+
20
+ ## 10.6.2 - 2025-07-16
21
+
22
+ * Include comments in generated output to preserve jsdoc info [Pagan Gazzard]
23
+
24
+ ## 10.6.1 - 2025-07-16
25
+
26
+ * Update dev dependencies [Pagan Gazzard]
27
+
28
+ ## 10.6.0 - 2025-07-14
29
+
30
+ * Export `abstractSqlContainsNode` helper function [Pagan Gazzard]
31
+
32
+ ## 10.5.1 - 2025-07-08
33
+
34
+ * Allow sbvr-types v11 [joshbwlng]
35
+
36
+ ## 10.5.0 - 2025-07-07
37
+
38
+ * Add optional time zone argument for DateTrunc [joshbwlng]
39
+
40
+ ## 10.4.1 - 2025-07-04
41
+
42
+ * Correctly treat `EqualsAnyNode` as the boolean type we know it to be [Pagan Gazzard]
12
43
 
13
44
  ## 10.4.0 - 2025-06-20
14
45
 
@@ -3,9 +3,9 @@ export declare const enum Engines {
3
3
  mysql = "mysql",
4
4
  websql = "websql"
5
5
  }
6
- import type { Binding, SqlResult } from './AbstractSQLRules2SQL.js';
7
- export { Binding, SqlResult } from './AbstractSQLRules2SQL.js';
8
- import { optimizeSchema } from './AbstractSQLSchemaOptimiser.js';
6
+ import type { Binding, SqlResult } from './abstract-sql-rules-to-sql.js';
7
+ export { Binding, SqlResult } from './abstract-sql-rules-to-sql.js';
8
+ import { optimizeSchema } from './abstract-sql-schema-optimizer.js';
9
9
  import type { ReferencedFields, RuleReferencedFields, ModifiedFields } from './referenced-fields.js';
10
10
  export type { ReferencedFields, RuleReferencedFields, ModifiedFields };
11
11
  export type NullNode = ['Null'];
@@ -102,7 +102,7 @@ export type StrictNumberTypeNodes = NumberNode | IntegerNode | RealNode | AddNod
102
102
  export type NumberTypeNodes = StrictNumberTypeNodes | UnknownTypeNodes;
103
103
  export type FieldNode = ['Field', string];
104
104
  export type ReferencedFieldNode = ['ReferencedField', string, string];
105
- export type DateTruncNode = ['DateTrunc', TextTypeNodes, DateTypeNodes];
105
+ export type DateTruncNode = ['DateTrunc', TextTypeNodes, DateTypeNodes] | ['DateTrunc', TextTypeNodes, DateTypeNodes, TextTypeNodes];
106
106
  export type ToDateNode = ['ToDate', DateTypeNodes];
107
107
  export type ToTimeNode = ['ToTime', DateTypeNodes];
108
108
  export type CurrentTimestampNode = ['CurrentTimestamp'];
@@ -138,8 +138,7 @@ export type AddDateDurationNode = [
138
138
  export type WhenNode = ['When', BooleanTypeNodes, AnyTypeNodes];
139
139
  export type ElseNode = ['Else', AnyTypeNodes];
140
140
  export type CaseNode = ['Case', ...WhenNode[]] | ['Case', ...WhenNode[], ElseNode];
141
- type BackCompatBindNode = ['Bind', string, string];
142
- export type BindNode = ['Bind', number | string] | ['Bind', [string, string]] | BackCompatBindNode;
141
+ export type BindNode = ['Bind', number | string] | ['Bind', [string, string]];
143
142
  export type CastNode = ['Cast', AnyTypeNodes, string];
144
143
  export type CoalesceNode = [
145
144
  'Coalesce',
@@ -148,7 +147,7 @@ export type CoalesceNode = [
148
147
  ...AnyTypeNodes[]
149
148
  ];
150
149
  export type AnyNode = ['Any', AnyTypeNodes, string];
151
- export type UnknownTypeNodes = SelectQueryNode | UnionQueryNode | NullNode | FieldNode | ReferencedFieldNode | EqualsAnyNode | BindNode | CastNode | CaseNode | CoalesceNode | AnyNode;
150
+ export type UnknownTypeNodes = SelectQueryNode | UnionQueryNode | NullNode | FieldNode | ReferencedFieldNode | BindNode | CastNode | CaseNode | CoalesceNode | AnyNode;
152
151
  export type ToJSONNode = ['ToJSON', AnyTypeNodes];
153
152
  export type AggregateJSONNode = [
154
153
  'AggregateJSON',
@@ -213,15 +212,25 @@ export type UpdateQueryNode = [
213
212
  ];
214
213
  export type DeleteQueryNode = ['DeleteQuery', ...Array<FromNode | WhereNode>];
215
214
  export type UpsertQueryNode = ['UpsertQuery', InsertQueryNode, UpdateQueryNode];
215
+ /**
216
+ * This interface allows adding to the valid set of FromTypeNodes using interface merging, eg
217
+ * declare module '@balena/abstract-sql-compiler' {
218
+ * interface FromTypeNode {
219
+ * MyNode: MyNode;
220
+ * }
221
+ * }
222
+ */
216
223
  export interface FromTypeNode {
217
224
  SelectQueryNode: SelectQueryNode;
218
225
  UnionQueryNode: UnionQueryNode;
219
226
  TableNode: TableNode;
220
227
  ResourceNode: ResourceNode;
221
228
  }
229
+ /**
230
+ * This is not currently understood by the abstract-sql-compiler but is a placeholder for future support
231
+ */
222
232
  export type ResourceNode = ['Resource', string];
223
233
  export type FromTypeNodes = FromTypeNode[keyof FromTypeNode] | AliasNode<FromTypeNode[keyof FromTypeNode]>;
224
- export type AliasableFromTypeNodes = FromTypeNodes;
225
234
  export type SelectNode = ['Select', AnyTypeNodes[]];
226
235
  export type FromNode = ['From', FromTypeNodes];
227
236
  export type InnerJoinNode = ['Join', FromTypeNodes, OnNode?];
@@ -262,7 +271,7 @@ export interface AbstractSqlField {
262
271
  type?: string;
263
272
  };
264
273
  defaultValue?: string;
265
- computed?: AbstractSqlQuery;
274
+ computed?: AnyTypeNodes;
266
275
  checks?: BooleanTypeNodes[];
267
276
  }
268
277
  export interface Trigger {
@@ -275,6 +284,7 @@ export interface Index {
275
284
  type: string;
276
285
  fields: string[];
277
286
  name?: string;
287
+ /** For rules converted to partial unique indexes this holds the actual rule expression */
278
288
  description?: string;
279
289
  distinctNulls?: boolean;
280
290
  predicate?: BooleanTypeNodes;
@@ -312,6 +322,19 @@ export interface SqlRule {
312
322
  referencedFields?: ReferencedFields | undefined;
313
323
  ruleReferencedFields?: RuleReferencedFields | undefined;
314
324
  }
325
+ /**
326
+ * The RelationshipMapping can either describe a relationship to another term, or
327
+ * a relationship to a local term (since simple terms are also defined and referenced).
328
+ * A local term basically describes the fields of the term that are available.
329
+ *
330
+ * - RelationshipMapping[0] is the local field
331
+ *
332
+ * If this relationship points to a foreign term (a different table)
333
+ *
334
+ * - RelationshipMapping[1] is the reference to the other resource, that joins this resource
335
+ * - RelationshipMapping[1][0] is the name of the other resource (or the other table)
336
+ * - RelationshipMapping[1][1] is the name of the field on the other resource
337
+ */
315
338
  export type RelationshipMapping = [string, [string, string]?];
316
339
  export interface RelationshipLeafNode {
317
340
  $: RelationshipMapping;
@@ -330,7 +353,11 @@ export interface AbstractSqlModel {
330
353
  tables: {
331
354
  [resourceName: string]: AbstractSqlTable;
332
355
  };
333
- rules: AbstractSqlQuery[];
356
+ rules: Array<[
357
+ 'Rule',
358
+ ['Body', AbstractSqlQuery],
359
+ ['StructuredEnglish', string]
360
+ ]>;
334
361
  functions?: Record<string, {
335
362
  type: 'trigger';
336
363
  body: string;
@@ -367,6 +394,9 @@ export interface EngineInstance {
367
394
  compileRule: (abstractSQL: AbstractSqlQuery) => SqlResult | [SqlResult, SqlResult];
368
395
  dataTypeValidate: (value: any, field: Pick<AbstractSqlField, 'dataType' | 'required'>) => Promise<any>;
369
396
  getReferencedFields: (ruleBody: AbstractSqlQuery) => ReferencedFields;
397
+ /**
398
+ * This gets referenced fields for a query that is expected to always return true and only return fields that could change it to false
399
+ */
370
400
  getRuleReferencedFields: (ruleBody: AbstractSqlQuery) => RuleReferencedFields;
371
401
  getModifiedFields: (abstractSqlQuery: AbstractSqlQuery) => undefined | ModifiedFields | Array<undefined | ModifiedFields>;
372
402
  }
@@ -378,6 +408,12 @@ export declare const isSelectQueryNode: (n: AbstractSqlType) => n is SelectQuery
378
408
  export declare const isSelectNode: (n: AbstractSqlType) => n is SelectNode;
379
409
  export declare const isWhereNode: (n: AbstractSqlType) => n is WhereNode;
380
410
  export declare const isFieldTypeNode: (n: AbstractSqlType) => n is FieldNode | ReferencedFieldNode;
411
+ /**
412
+ *
413
+ * @param n The abstract sql to check
414
+ * @param checkNodeTypeFn A function that checks if a given node is the correct type
415
+ */
416
+ export declare const abstractSqlContainsNode: (n: AnyTypeNodes, checkNodeTypeFn: (n: AnyTypeNodes) => boolean) => boolean;
381
417
  export declare function compileRule(abstractSQL: UpsertQueryNode, engine: Engines, noBinds: true): [string, string];
382
418
  export declare function compileRule(abstractSQL: AbstractSqlQuery, engine: Engines, noBinds: true): string;
383
419
  export declare function compileRule(abstractSQL: UpsertQueryNode, engine: Engines, noBinds?: false): [SqlResult, SqlResult];
@@ -386,7 +422,9 @@ export declare function compileRule(abstractSQL: AbstractSqlQuery, engine: Engin
386
422
  export declare function compileRule(abstractSQL: AbstractSqlQuery, engine: Engines, noBinds?: boolean): SqlResult | [SqlResult, SqlResult] | string;
387
423
  export { optimizeSchema };
388
424
  export declare const postgres: {
389
- optimizeSchema: (abstractSqlModel: AbstractSqlModel, createCheckConstraints?: boolean) => AbstractSqlModel;
425
+ optimizeSchema: (abstractSqlModel: AbstractSqlModel, { createCheckConstraints }?: {
426
+ createCheckConstraints?: boolean | undefined;
427
+ }) => AbstractSqlModel;
390
428
  generateRuleSlug: (tableName: string, ruleBody: AbstractSqlType) => string;
391
429
  compileSchema: (abstractSqlModel: AbstractSqlModel) => SqlModel;
392
430
  compileRule: (abstractSQL: AbstractSqlQuery) => SqlResult | [SqlResult, SqlResult];
@@ -396,7 +434,9 @@ export declare const postgres: {
396
434
  getModifiedFields: (abstractSqlQuery: AbstractSqlQuery) => undefined | ModifiedFields | Array<undefined | ModifiedFields>;
397
435
  };
398
436
  export declare const mysql: {
399
- optimizeSchema: (abstractSqlModel: AbstractSqlModel, createCheckConstraints?: boolean) => AbstractSqlModel;
437
+ optimizeSchema: (abstractSqlModel: AbstractSqlModel, { createCheckConstraints }?: {
438
+ createCheckConstraints?: boolean | undefined;
439
+ }) => AbstractSqlModel;
400
440
  generateRuleSlug: (tableName: string, ruleBody: AbstractSqlType) => string;
401
441
  compileSchema: (abstractSqlModel: AbstractSqlModel) => SqlModel;
402
442
  compileRule: (abstractSQL: AbstractSqlQuery) => SqlResult | [SqlResult, SqlResult];
@@ -406,7 +446,9 @@ export declare const mysql: {
406
446
  getModifiedFields: (abstractSqlQuery: AbstractSqlQuery) => undefined | ModifiedFields | Array<undefined | ModifiedFields>;
407
447
  };
408
448
  export declare const websql: {
409
- optimizeSchema: (abstractSqlModel: AbstractSqlModel, createCheckConstraints?: boolean) => AbstractSqlModel;
449
+ optimizeSchema: (abstractSqlModel: AbstractSqlModel, { createCheckConstraints }?: {
450
+ createCheckConstraints?: boolean | undefined;
451
+ }) => AbstractSqlModel;
410
452
  generateRuleSlug: (tableName: string, ruleBody: AbstractSqlType) => string;
411
453
  compileSchema: (abstractSqlModel: AbstractSqlModel) => SqlModel;
412
454
  compileRule: (abstractSQL: AbstractSqlQuery) => SqlResult | [SqlResult, SqlResult];
@@ -1,14 +1,16 @@
1
1
  export var Engines;
2
2
  (function (Engines) {
3
+ /* eslint-disable @typescript-eslint/no-shadow -- this is fine since we only assign plain string values to the enum items */
3
4
  Engines["postgres"] = "postgres";
4
5
  Engines["mysql"] = "mysql";
5
6
  Engines["websql"] = "websql";
7
+ /* eslint-enable @typescript-eslint/no-shadow */
6
8
  })(Engines || (Engines = {}));
7
- import { AbstractSQLOptimiser } from './AbstractSQLOptimiser.js';
8
- import { AbstractSQLRules2SQL } from './AbstractSQLRules2SQL.js';
9
+ import { AbstractSQLOptimizer } from './abstract-sql-optimizer.js';
10
+ import { AbstractSQLRules2SQL } from './abstract-sql-rules-to-sql.js';
9
11
  import $sbvrTypes from '@balena/sbvr-types';
10
12
  const { default: sbvrTypes } = $sbvrTypes;
11
- import { optimizeSchema, generateRuleSlug, } from './AbstractSQLSchemaOptimiser.js';
13
+ import { optimizeSchema, generateRuleSlug, } from './abstract-sql-schema-optimizer.js';
12
14
  import { getReferencedFields, getRuleReferencedFields, getModifiedFields, insertAffectedIdsBinds, } from './referenced-fields.js';
13
15
  const validateTypes = (() => {
14
16
  const result = {};
@@ -18,7 +20,10 @@ const validateTypes = (() => {
18
20
  return result;
19
21
  })();
20
22
  const dataTypeValidate = async (value, field) => {
23
+ // In case one of the validation types throws an error.
21
24
  const { dataType, required = false } = field;
25
+ // Without the `: SbvrType['validate']` widening TS complains that
26
+ // "none of those signatures are compatible with each other".
22
27
  const validateFn = validateTypes[dataType];
23
28
  if (validateFn != null) {
24
29
  return validateFn(value, required);
@@ -74,23 +79,31 @@ export const isSelectQueryNode = (n) => n[0] === 'SelectQuery';
74
79
  export const isSelectNode = (n) => n[0] === 'Select';
75
80
  export const isWhereNode = (n) => n[0] === 'Where';
76
81
  export const isFieldTypeNode = (n) => n[0] === 'ReferencedField' || n[0] === 'Field';
77
- const containsNode = (n, checkNodeTypeFn) => {
82
+ /**
83
+ *
84
+ * @param n The abstract sql to check
85
+ * @param checkNodeTypeFn A function that checks if a given node is the correct type
86
+ */
87
+ export const abstractSqlContainsNode = (n, checkNodeTypeFn) => {
78
88
  if (checkNodeTypeFn(n)) {
79
89
  return true;
80
90
  }
81
91
  for (const p of n) {
82
- if (Array.isArray(p) && containsNode(p, checkNodeTypeFn)) {
92
+ if (Array.isArray(p) &&
93
+ abstractSqlContainsNode(p, checkNodeTypeFn)) {
83
94
  return true;
84
95
  }
85
96
  }
86
97
  return false;
87
98
  };
88
99
  export function compileRule(abstractSQL, engine, noBinds = false) {
89
- abstractSQL = AbstractSQLOptimiser(abstractSQL, noBinds);
100
+ abstractSQL = AbstractSQLOptimizer(abstractSQL, noBinds);
90
101
  return AbstractSQLRules2SQL(abstractSQL, engine, noBinds);
91
102
  }
92
103
  const compileSchema = (abstractSqlModel, engine, ifNotExists) => {
93
- abstractSqlModel = optimizeSchema(abstractSqlModel, false);
104
+ abstractSqlModel = optimizeSchema(abstractSqlModel, {
105
+ createCheckConstraints: false,
106
+ });
94
107
  let ifNotExistsStr = '';
95
108
  let orReplaceStr = '';
96
109
  if (ifNotExists) {
@@ -104,7 +117,7 @@ const compileSchema = (abstractSqlModel, engine, ifNotExists) => {
104
117
  if (abstractSqlModel.functions) {
105
118
  for (const fnName of Object.keys(abstractSqlModel.functions)) {
106
119
  const fnDefinition = abstractSqlModel.functions[fnName];
107
- if (engine !== "postgres") {
120
+ if (engine !== "postgres" /* Engines.postgres */) {
108
121
  throw new Error('Functions are only supported on postgres currently');
109
122
  }
110
123
  if (fnDefinition.language !== 'plpgsql') {
@@ -148,10 +161,12 @@ $$;`);
148
161
  }
149
162
  if (viewDefinition != null) {
150
163
  let definitionAbstractSql = viewDefinition.abstractSql;
151
- if (containsNode(definitionAbstractSql, isResourceNode)) {
152
- return;
164
+ // If there are any resource nodes then it's a dynamic definition and cannot become a view
165
+ if (abstractSqlContainsNode(definitionAbstractSql, isResourceNode)) {
166
+ throw new Error(`Cannot create a view from a dynamic viewDefinition, found for table resourceName: '${table.resourceName}', name: '${table.name}'`);
153
167
  }
154
168
  if (isTableNode(definitionAbstractSql)) {
169
+ // If the definition is a table node we need to wrap it in a select query for the view creation
155
170
  definitionAbstractSql = [
156
171
  'SelectQuery',
157
172
  ['Select', [['Field', '*']]],
@@ -186,9 +201,10 @@ ${compileRule(definitionAbstractSql, engine, true).replace(/^/gm, ' ')}
186
201
  const fkDefinition = `FOREIGN KEY ("${fieldName}") REFERENCES "${referencedTable.name}" ("${references.fieldName}")`;
187
202
  const schemaInfo = schemaDependencyMap[references.resourceName];
188
203
  if (schemaInfo?.depends.includes(table.resourceName)) {
189
- if (engine !== "postgres") {
204
+ if (engine !== "postgres" /* Engines.postgres */) {
190
205
  throw new Error('Circular dependencies are only supported on postgres currently');
191
206
  }
207
+ // It's a simple circular dependency so we switch it to an ALTER TABLE
192
208
  alterSchemaStatements.push(`\
193
209
  DO $$
194
210
  BEGIN
@@ -231,6 +247,7 @@ $$;`);
231
247
  ? ` NULLS NOT DISTINCT`
232
248
  : ` NULLS DISTINCT`;
233
249
  }
250
+ // Non-partial indexes are added directly to the CREATE TABLE statement
234
251
  if (index.predicate == null) {
235
252
  createSqlElements.push(index.type + nullsSql + '("' + index.fields.join('", "') + '")');
236
253
  continue;
@@ -266,6 +283,7 @@ ${comment}${constraintName}CHECK (${sql})`);
266
283
  if (!fns[trigger.fnName]) {
267
284
  throw new Error(`No such function '${trigger.fnName}' declared`);
268
285
  }
286
+ // Trim the trigger name to a max of 63 characters
269
287
  const triggerName = `${table.name}_${trigger.fnName}`.slice(0, 63);
270
288
  createTriggers.push(`\
271
289
  DO
@@ -310,6 +328,7 @@ CREATE TABLE ${ifNotExistsStr}"${table.name}" (
310
328
  const schemaInfo = schemaDependencyMap[resourceName];
311
329
  let unsolvedDependency = false;
312
330
  for (const dependency of schemaInfo.depends) {
331
+ // Self-dependencies are ok.
313
332
  if (dependency !== resourceName &&
314
333
  Object.prototype.hasOwnProperty.call(schemaDependencyMap, dependency)) {
315
334
  unsolvedDependency = true;
@@ -336,16 +355,15 @@ CREATE TABLE ${ifNotExistsStr}"${table.name}" (
336
355
  createSchemaStatements.push(...alterSchemaStatements);
337
356
  dropSchemaStatements = dropSchemaStatements.reverse();
338
357
  const ruleStatements = abstractSqlModel.rules.map((rule) => {
339
- const ruleBodyNode = rule.find((r) => r[0] === 'Body');
340
- if (ruleBodyNode == null || typeof ruleBodyNode === 'string') {
358
+ const [, ruleBodyNode, ruleSENode] = rule;
359
+ if (ruleBodyNode == null || ruleBodyNode[0] !== 'Body') {
341
360
  throw new Error('Invalid rule');
342
361
  }
343
362
  const ruleBody = ruleBodyNode[1];
344
363
  if (typeof ruleBody === 'string') {
345
364
  throw new Error('Invalid rule');
346
365
  }
347
- const ruleSENode = rule.find((r) => r[0] === 'StructuredEnglish');
348
- if (ruleSENode == null) {
366
+ if (ruleSENode == null || ruleSENode[0] !== 'StructuredEnglish') {
349
367
  throw new Error('Invalid structured English');
350
368
  }
351
369
  const ruleSE = ruleSENode[1];
@@ -398,7 +416,7 @@ const generateExport = (engine, ifNotExists) => {
398
416
  };
399
417
  };
400
418
  export { optimizeSchema };
401
- export const postgres = generateExport("postgres", true);
402
- export const mysql = generateExport("mysql", true);
403
- export const websql = generateExport("websql", false);
404
- //# sourceMappingURL=AbstractSQLCompiler.js.map
419
+ export const postgres = generateExport("postgres" /* Engines.postgres */, true);
420
+ export const mysql = generateExport("mysql" /* Engines.mysql */, true);
421
+ export const websql = generateExport("websql" /* Engines.websql */, false);
422
+ //# sourceMappingURL=abstract-sql-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-sql-compiler.js","sourceRoot":"","sources":["../src/abstract-sql-compiler.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAkB,OAMjB;AAND,WAAkB,OAAO;IACxB,4HAA4H;IAC5H,gCAAqB,CAAA;IACrB,0BAAe,CAAA;IACf,4BAAiB,CAAA;IACjB,gDAAgD;AACjD,CAAC,EANiB,OAAO,KAAP,OAAO,QAMxB;AAED,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC;AAC1C,OAAO,EACN,cAAc,EACd,gBAAgB,GAChB,MAAM,oCAAoC,CAAC;AAM5C,OAAO,EACN,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,wBAAwB,CAAC;AAkjBhC,MAAM,aAAa,GAAkB,CAAC,GAAG,EAAE;IAC1C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAkC,EAAE,CAAC;QAC3E,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAe,CAAC;IAC9C,CAAC;IACD,OAAO,MAAuB,CAAC;AAChC,CAAC,CAAC,EAAE,CAAC;AACL,MAAM,gBAAgB,GAAuC,KAAK,EACjE,KAAK,EACL,KAAK,EACJ,EAAE;IACH,uDAAuD;IACvD,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IAC7C,kEAAkE;IAClE,6DAA6D;IAC7D,MAAM,UAAU,GACf,aAAa,CAAC,QAAkC,CAAC,CAAC;IACnD,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACP,OAAO,IAAI,KAAK,CAAC,0BAA0B,GAAG,QAAQ,CAAC,CAAC;IACzD,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CACnB,MAAe,EACf,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAoB,EAC5D,EAAE;IACX,IAAI,WAAW,CAAC;IAChB,IAAI,QAAQ,EAAE,CAAC;QACd,WAAW,GAAG,WAAW,CAAC;IAC3B,CAAC;SAAM,CAAC;QACP,WAAW,GAAG,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QAC1B,YAAY,GAAG,YAAY,YAAY,EAAE,CAAC;IAC3C,CAAC;SAAM,CAAC;QACP,YAAY,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACpB,YAAY,GAAG,MAAM;aACnB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,OAAO,WAAW,WAAW,CAC5B,KAAyB,EACzB,MAAM,EACN,IAAI,CACJ,GAAG,CAAC;QACN,CAAC,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;IACD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACnB,KAAK,GAAG,EAAE,CAAC;IACZ,CAAC;SAAM,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACzB,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;IACrB,CAAC;IACD,MAAM,MAAM,GACX,SAAS,EAAE,CAAC,QAAkC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;IAClE,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACpB,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,KAAK,CAAC;IACnE,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,iBAAiB,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAC1B,CAAiC,EACb,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;AACzC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAkB,EAAiB,EAAE,CAC/D,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;AACjB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAkB,EAAkB,EAAE,CACjE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;AAClB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAkB,EAAqB,EAAE,CACvE,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC;AACrB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAkB,EAAwB,EAAE,CAC7E,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC;AACxB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAkB,EAAmB,EAAE,CACnE,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;AACnB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAkB,EAAkB,EAAE,CACjE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;AAClB,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,CAAkB,EACqB,EAAE,CACzC,CAAC,CAAC,CAAC,CAAC,KAAK,iBAAiB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;AAEhD;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACtC,CAAe,EACf,eAA6C,EACnC,EAAE;IACZ,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,IACC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAChB,uBAAuB,CAAC,CAAiB,EAAE,eAAe,CAAC,EAC1D,CAAC;YACF,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAqCF,MAAM,UAAU,WAAW,CAC1B,WAA6B,EAC7B,MAAe,EACf,OAAO,GAAG,KAAK;IAEf,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzD,OAAO,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,aAAa,GAAG,CACrB,gBAAkC,EAClC,MAAe,EACf,WAAoB,EACT,EAAE;IACb,gBAAgB,GAAG,cAAc,CAAC,gBAAgB,EAAE;QACnD,sBAAsB,EAAE,KAAK;KAC7B,CAAC,CAAC;IAEH,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,WAAW,EAAE,CAAC;QACjB,cAAc,GAAG,gBAAgB,CAAC;QAClC,YAAY,GAAG,aAAa,CAAC;IAC9B,CAAC;IAED,MAAM,sBAAsB,GAAa,EAAE,CAAC;IAC5C,MAAM,qBAAqB,GAAa,EAAE,CAAC;IAC3C,IAAI,oBAAoB,GAAa,EAAE,CAAC;IAExC,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC;QAChC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9D,MAAM,YAAY,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACxD,IAAI,MAAM,sCAAqB,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,YAAY,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC/D,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;YACnB,sBAAsB,CAAC,IAAI,CAAC;;;oBAGX,MAAM;;;IAGtB,YAAY,CAAC,IAAI;;iBAEJ,YAAY,CAAC,QAAQ;;;;IAIlC,CAAC,CAAC;YACH,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,MAAM,MAAM,CAAC,CAAC;QAC3D,CAAC;IACF,CAAC;IAED,MAAM,aAAa,GAEf,EAAE,CAAC;IACP,MAAM,mBAAmB,GAQrB,EAAE,CAAC;IACP,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO;QACR,CAAC;QACD,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;QAC7C,IAAI,cAAc,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,UAAU,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;YAClD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CACd,4GAA4G,KAAK,CAAC,YAAY,aAAa,KAAK,CAAC,IAAI,GAAG,CACxJ,CAAC;YACH,CAAC;QACF,CAAC;QACD,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;YAC5B,IAAI,qBAAqB,GAAG,cAAc,CAAC,WAAW,CAAC;YACvD,0FAA0F;YAC1F,IAAI,uBAAuB,CAAC,qBAAqB,EAAE,cAAc,CAAC,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CACd,sFAAsF,KAAK,CAAC,YAAY,aAAa,KAAK,CAAC,IAAI,GAAG,CAClI,CAAC;YACH,CAAC;YACD,IAAI,WAAW,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBACxC,+FAA+F;gBAC/F,qBAAqB,GAAG;oBACvB,aAAa;oBACb,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC5B,CAAC,MAAM,EAAE,qBAAqB,CAAC;iBAC/B,CAAC;YACH,CAAC;YACD,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG;gBACzC,YAAY;gBACZ,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE;oBACV;SACI,YAAY,SAAS,KAAK,CAAC,IAAI;EACtC,WAAW,CAAC,qBAAyC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAC7E,KAAK,EACL,GAAG,CACH;GACE;iBACE;gBACD,OAAO,EAAE,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,CAAC;gBACvC,OAAO,EAAE,EAAE;aACX,CAAC;YACF,OAAO;QACR,CAAC;QACD,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,iBAAiB,GAAa,EAAE,CAAC;QACvC,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;YAC5D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,iBAAiB,CAAC,IAAI,CACrB,GAAG,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CACnD,CAAC;gBACF,IACC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAChD,UAAU,IAAI,IAAI,EACjB,CAAC;oBACF,MAAM,eAAe,GACpB,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;oBAClD,MAAM,YAAY,GAAG,iBAAiB,SAAS,kBAAkB,eAAe,CAAC,IAAI,OAAO,UAAU,CAAC,SAAS,IAAI,CAAC;oBAErH,MAAM,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;oBAChE,IAAI,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;wBACtD,IAAI,MAAM,sCAAqB,EAAE,CAAC;4BACjC,MAAM,IAAI,KAAK,CACd,gEAAgE,CAChE,CAAC;wBACH,CAAC;wBACD,sEAAsE;wBACtE,qBAAqB,CAAC,IAAI,CAAC;;;;;;;;;;0BAUP,KAAK,CAAC,IAAI;4BACR,SAAS;;2BAEV,eAAe,CAAC,IAAI;4BACnB,UAAU,CAAC,SAAS;;iBAE/B,KAAK,CAAC,IAAI;oBACP,KAAK,CAAC,IAAI,IAAI,SAAS;IACvC,YAAY;;;IAGZ,CAAC,CAAC;oBACD,CAAC;yBAAM,CAAC;wBACP,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;4BACvC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBAChC,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;wBACtC,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;oBAC/C,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QAED,iBAAiB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC;gBACjC,QAAQ;oBACP,KAAK,CAAC,aAAa,KAAK,KAAK;wBAC5B,CAAC,CAAC,qBAAqB;wBACvB,CAAC,CAAC,iBAAiB,CAAC;YACvB,CAAC;YACD,uEAAuE;YACvE,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;gBAC7B,iBAAiB,CAAC,IAAI,CACrB,KAAK,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAC/D,CAAC;gBACF,SAAS;YACV,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW;gBAChC,CAAC,CAAC,MAAM,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI;gBAC3D,CAAC,CAAC,EAAE,CAAC;YACN,MAAM,QAAQ,GAAG,WAAW,CAC3B,KAAK,CAAC,SAA6B,EACnC,MAAM,EACN,IAAI,CACJ,CAAC;YACF,aAAa,CAAC,IAAI,CAAC;EACpB,OAAO;SACA,KAAK,CAAC,IAAI,yBAAyB,KAAK,CAAC,IAAI;MAChD,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ;SACpD,QAAQ,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW;oBAChC,CAAC,CAAC,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;oBAC1D,CAAC,CAAC,EAAE,CAAC;gBACN,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,MAAM,GAAG,GAAG,WAAW,CACtB,KAAK,CAAC,WAA+B,EACrC,MAAM,EACN,IAAI,CACJ,CAAC;gBACF,iBAAiB,CAAC,IAAI,CAAC;EACzB,OAAO,GAAG,cAAc,UAAU,GAAG,GAAG,CAAC,CAAC;YACzC,CAAC;QACF,CAAC;QAED,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACtC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;gBAClE,CAAC;gBACD,kDAAkD;gBAClD,MAAM,WAAW,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnE,cAAc,CAAC,IAAI,CAAC;;;;;;;iCAOS,KAAK,CAAC,IAAI;yBAClB,WAAW;;mBAEjB,WAAW;GAC3B,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,SAAS,QAAQ,KAAK,CAAC,IAAI;YAC1C,OAAO,CAAC,KAAK;sBACH,OAAO,CAAC,MAAM;;;IAGhC,CAAC,CAAC;gBACF,YAAY,CAAC,IAAI,CAAC,iBAAiB,WAAW,IAAI,CAAC,CAAC;YACrD,CAAC;QACF,CAAC;QAED,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG;YACzC,YAAY;YACZ,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE;gBACV;eACW,cAAc,IAAI,KAAK,CAAC,IAAI;GACxC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;GAC/B;gBACC,GAAG,aAAa;gBAChB,GAAG,cAAc;aACjB;YACD,OAAO,EAAE,CAAC,GAAG,YAAY,EAAE,eAAe,KAAK,CAAC,IAAI,IAAI,CAAC;YACzD,OAAO;SACP,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,aAAa,GAAa,EAAE,CAAC;IACjC,OACC,aAAa,CAAC,MAAM;QACnB,CAAC,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM;QAC1D,aAAa,CAAC,MAAM,GAAG,CAAC,EACvB,CAAC;QACF,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;YACrD,IAAI,kBAAkB,GAAG,KAAK,CAAC;YAC/B,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBAC7C,4BAA4B;gBAC5B,IACC,UAAU,KAAK,YAAY;oBAC3B,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,EACpE,CAAC;oBACF,kBAAkB,GAAG,IAAI,CAAC;oBAC1B,MAAM;gBACP,CAAC;YACF,CAAC;YACD,IAAI,kBAAkB,KAAK,KAAK,EAAE,CAAC;gBAClC,IACC,UAAU,CAAC,SAAS,KAAK,KAAK;oBAC9B,aAAa,CAAC,YAAY,CAAC,IAAI,IAAI,EAClC,CAAC;oBACF,IAAI,UAAU,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;wBACpC,OAAO,CAAC,IAAI,CACX,kCAAkC,EAClC,UAAU,CAAC,YAAY,CACvB,CAAC;oBACH,CAAC;oBACD,sBAAsB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;oBACrD,oBAAoB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;gBAClD,CAAC;gBACD,OAAO,mBAAmB,CAAC,YAAY,CAAC,CAAC;YAC1C,CAAC;QACF,CAAC;IACF,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,CACZ,2CAA2C,EAC3C,mBAAmB,CACnB,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC9D,CAAC;IACD,sBAAsB,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,CAAC;IACtD,oBAAoB,GAAG,oBAAoB,CAAC,OAAO,EAAE,CAAC;IAEtD,MAAM,cAAc,GAAc,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAC3D,CAAC,IAAI,EAAW,EAAE;QACjB,MAAM,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC;QAC1C,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,mBAAmB,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC/C,CAAC;QACD,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,WAAW,CAC7D,QAAQ,EACR,MAAM,CACO,CAAC;QACf,IAAI,gBAA8C,CAAC;QACnD,IAAI,CAAC;YACJ,gBAAgB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,oBAAsD,CAAC;QAC3D,IAAI,CAAC;YACJ,oBAAoB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO;YACN,iBAAiB,EAAE,MAAM;YACzB,GAAG,EAAE,OAAO;YACZ,QAAQ,EAAE,YAAY;YACtB,gBAAgB;YAChB,oBAAoB;SACpB,CAAC;IACH,CAAC,CACD,CAAC;IAEF,OAAO;QACN,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;QACnC,aAAa,EAAE,gBAAgB,CAAC,aAAa;QAC7C,MAAM,EAAE,gBAAgB,CAAC,MAAM;QAC/B,YAAY,EAAE,sBAAsB;QACpC,UAAU,EAAE,oBAAoB;QAChC,KAAK,EAAE,cAAc;KACrB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,MAAe,EAAE,WAAoB,EAAE,EAAE;IAChE,OAAO;QACN,cAAc;QACd,gBAAgB;QAChB,aAAa,EAAE,CAAC,gBAAkC,EAAE,EAAE,CACrD,aAAa,CAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,CAAC;QACrD,WAAW,EAAE,CAAC,WAA6B,EAAE,EAAE,CAC9C,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC;QACxC,gBAAgB;QAChB,mBAAmB;QACnB,uBAAuB;QACvB,iBAAiB;KACjB,CAAC;AACH,CAAC,CAAC;AACF,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,oCAAmB,IAAI,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,KAAK,GAAG,cAAc,8BAAgB,IAAI,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,gCAAiB,KAAK,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AbstractSqlQuery } from './abstract-sql-compiler.js';
2
+ export declare const AbstractSQLOptimizer: (abstractSQL: AbstractSqlQuery, $noBinds?: boolean) => AbstractSqlQuery;