@harperfast/harper 5.2.0-alpha.6 → 5.2.0-beta.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 (173) hide show
  1. package/dataLayer/harperBridge/ResourceBridge.ts +7 -0
  2. package/dist/dataLayer/harperBridge/ResourceBridge.js +8 -0
  3. package/dist/dataLayer/harperBridge/ResourceBridge.js.map +1 -1
  4. package/dist/resources/Resource.js +5 -2
  5. package/dist/resources/Resource.js.map +1 -1
  6. package/dist/resources/Table.d.ts +3 -1
  7. package/dist/resources/Table.js +13 -3
  8. package/dist/resources/Table.js.map +1 -1
  9. package/dist/resources/databases.js +21 -0
  10. package/dist/resources/databases.js.map +1 -1
  11. package/dist/sqlEngine/binder/bind.d.ts +72 -0
  12. package/dist/sqlEngine/binder/bind.js +289 -0
  13. package/dist/sqlEngine/binder/bind.js.map +1 -0
  14. package/dist/sqlEngine/config.d.ts +35 -0
  15. package/dist/sqlEngine/config.js +62 -0
  16. package/dist/sqlEngine/config.js.map +1 -0
  17. package/dist/sqlEngine/diff/differential.d.ts +23 -0
  18. package/dist/sqlEngine/diff/differential.js +90 -0
  19. package/dist/sqlEngine/diff/differential.js.map +1 -0
  20. package/dist/sqlEngine/errors.d.ts +22 -0
  21. package/dist/sqlEngine/errors.js +36 -0
  22. package/dist/sqlEngine/errors.js.map +1 -0
  23. package/dist/sqlEngine/executor/runMutation.d.ts +35 -0
  24. package/dist/sqlEngine/executor/runMutation.js +352 -0
  25. package/dist/sqlEngine/executor/runMutation.js.map +1 -0
  26. package/dist/sqlEngine/executor/runSelect.d.ts +7 -0
  27. package/dist/sqlEngine/executor/runSelect.js +14 -0
  28. package/dist/sqlEngine/executor/runSelect.js.map +1 -0
  29. package/dist/sqlEngine/expressions/compile.d.ts +24 -0
  30. package/dist/sqlEngine/expressions/compile.js +326 -0
  31. package/dist/sqlEngine/expressions/compile.js.map +1 -0
  32. package/dist/sqlEngine/functions/aggregates.d.ts +12 -0
  33. package/dist/sqlEngine/functions/aggregates.js +299 -0
  34. package/dist/sqlEngine/functions/aggregates.js.map +1 -0
  35. package/dist/sqlEngine/functions/registry.d.ts +36 -0
  36. package/dist/sqlEngine/functions/registry.js +33 -0
  37. package/dist/sqlEngine/functions/registry.js.map +1 -0
  38. package/dist/sqlEngine/functions/standard.d.ts +9 -0
  39. package/dist/sqlEngine/functions/standard.js +86 -0
  40. package/dist/sqlEngine/functions/standard.js.map +1 -0
  41. package/dist/sqlEngine/index.d.ts +29 -0
  42. package/dist/sqlEngine/index.js +62 -0
  43. package/dist/sqlEngine/index.js.map +1 -0
  44. package/dist/sqlEngine/logical/build.d.ts +20 -0
  45. package/dist/sqlEngine/logical/build.js +326 -0
  46. package/dist/sqlEngine/logical/build.js.map +1 -0
  47. package/dist/sqlEngine/logical/op.d.ts +105 -0
  48. package/dist/sqlEngine/logical/op.js +10 -0
  49. package/dist/sqlEngine/logical/op.js.map +1 -0
  50. package/dist/sqlEngine/optimizer/joinAnalysis.d.ts +37 -0
  51. package/dist/sqlEngine/optimizer/joinAnalysis.js +144 -0
  52. package/dist/sqlEngine/optimizer/joinAnalysis.js.map +1 -0
  53. package/dist/sqlEngine/optimizer/optimize.d.ts +13 -0
  54. package/dist/sqlEngine/optimizer/optimize.js +53 -0
  55. package/dist/sqlEngine/optimizer/optimize.js.map +1 -0
  56. package/dist/sqlEngine/optimizer/ruleEngine.d.ts +7 -0
  57. package/dist/sqlEngine/optimizer/ruleEngine.js +26 -0
  58. package/dist/sqlEngine/optimizer/ruleEngine.js.map +1 -0
  59. package/dist/sqlEngine/optimizer/rules/limitPushdown.d.ts +19 -0
  60. package/dist/sqlEngine/optimizer/rules/limitPushdown.js +55 -0
  61. package/dist/sqlEngine/optimizer/rules/limitPushdown.js.map +1 -0
  62. package/dist/sqlEngine/optimizer/rules/planJoins.d.ts +19 -0
  63. package/dist/sqlEngine/optimizer/rules/planJoins.js +62 -0
  64. package/dist/sqlEngine/optimizer/rules/planJoins.js.map +1 -0
  65. package/dist/sqlEngine/optimizer/rules/predicateNormalize.d.ts +18 -0
  66. package/dist/sqlEngine/optimizer/rules/predicateNormalize.js +80 -0
  67. package/dist/sqlEngine/optimizer/rules/predicateNormalize.js.map +1 -0
  68. package/dist/sqlEngine/optimizer/rules/predicatePushdown.d.ts +11 -0
  69. package/dist/sqlEngine/optimizer/rules/predicatePushdown.js +48 -0
  70. package/dist/sqlEngine/optimizer/rules/predicatePushdown.js.map +1 -0
  71. package/dist/sqlEngine/optimizer/rules/projectionPushdown.d.ts +23 -0
  72. package/dist/sqlEngine/optimizer/rules/projectionPushdown.js +160 -0
  73. package/dist/sqlEngine/optimizer/rules/projectionPushdown.js.map +1 -0
  74. package/dist/sqlEngine/optimizer/rules/sortFromIndex.d.ts +14 -0
  75. package/dist/sqlEngine/optimizer/rules/sortFromIndex.js +49 -0
  76. package/dist/sqlEngine/optimizer/rules/sortFromIndex.js.map +1 -0
  77. package/dist/sqlEngine/optimizer/rules/validateScannable.d.ts +15 -0
  78. package/dist/sqlEngine/optimizer/rules/validateScannable.js +60 -0
  79. package/dist/sqlEngine/optimizer/rules/validateScannable.js.map +1 -0
  80. package/dist/sqlEngine/optimizer/whereToConditions.d.ts +85 -0
  81. package/dist/sqlEngine/optimizer/whereToConditions.js +484 -0
  82. package/dist/sqlEngine/optimizer/whereToConditions.js.map +1 -0
  83. package/dist/sqlEngine/parser/ast.d.ts +139 -0
  84. package/dist/sqlEngine/parser/ast.js +10 -0
  85. package/dist/sqlEngine/parser/ast.js.map +1 -0
  86. package/dist/sqlEngine/parser/normalizer.d.ts +28 -0
  87. package/dist/sqlEngine/parser/normalizer.js +413 -0
  88. package/dist/sqlEngine/parser/normalizer.js.map +1 -0
  89. package/dist/sqlEngine/parser/parse.d.ts +14 -0
  90. package/dist/sqlEngine/parser/parse.js +20 -0
  91. package/dist/sqlEngine/parser/parse.js.map +1 -0
  92. package/dist/sqlEngine/physical/PhysicalDistinct.d.ts +9 -0
  93. package/dist/sqlEngine/physical/PhysicalDistinct.js +29 -0
  94. package/dist/sqlEngine/physical/PhysicalDistinct.js.map +1 -0
  95. package/dist/sqlEngine/physical/PhysicalFilter.d.ts +10 -0
  96. package/dist/sqlEngine/physical/PhysicalFilter.js +25 -0
  97. package/dist/sqlEngine/physical/PhysicalFilter.js.map +1 -0
  98. package/dist/sqlEngine/physical/PhysicalHashAggregate.d.ts +27 -0
  99. package/dist/sqlEngine/physical/PhysicalHashAggregate.js +100 -0
  100. package/dist/sqlEngine/physical/PhysicalHashAggregate.js.map +1 -0
  101. package/dist/sqlEngine/physical/PhysicalHashJoin.d.ts +29 -0
  102. package/dist/sqlEngine/physical/PhysicalHashJoin.js +93 -0
  103. package/dist/sqlEngine/physical/PhysicalHashJoin.js.map +1 -0
  104. package/dist/sqlEngine/physical/PhysicalIndexNestedLoopJoin.d.ts +36 -0
  105. package/dist/sqlEngine/physical/PhysicalIndexNestedLoopJoin.js +78 -0
  106. package/dist/sqlEngine/physical/PhysicalIndexNestedLoopJoin.js.map +1 -0
  107. package/dist/sqlEngine/physical/PhysicalIndexScan.d.ts +22 -0
  108. package/dist/sqlEngine/physical/PhysicalIndexScan.js +77 -0
  109. package/dist/sqlEngine/physical/PhysicalIndexScan.js.map +1 -0
  110. package/dist/sqlEngine/physical/PhysicalLimit.d.ts +5 -0
  111. package/dist/sqlEngine/physical/PhysicalLimit.js +28 -0
  112. package/dist/sqlEngine/physical/PhysicalLimit.js.map +1 -0
  113. package/dist/sqlEngine/physical/PhysicalNestedLoopJoin.d.ts +20 -0
  114. package/dist/sqlEngine/physical/PhysicalNestedLoopJoin.js +51 -0
  115. package/dist/sqlEngine/physical/PhysicalNestedLoopJoin.js.map +1 -0
  116. package/dist/sqlEngine/physical/PhysicalProject.d.ts +18 -0
  117. package/dist/sqlEngine/physical/PhysicalProject.js +117 -0
  118. package/dist/sqlEngine/physical/PhysicalProject.js.map +1 -0
  119. package/dist/sqlEngine/physical/PhysicalQualify.d.ts +13 -0
  120. package/dist/sqlEngine/physical/PhysicalQualify.js +29 -0
  121. package/dist/sqlEngine/physical/PhysicalQualify.js.map +1 -0
  122. package/dist/sqlEngine/physical/PhysicalSort.d.ts +12 -0
  123. package/dist/sqlEngine/physical/PhysicalSort.js +59 -0
  124. package/dist/sqlEngine/physical/PhysicalSort.js.map +1 -0
  125. package/dist/sqlEngine/physical/op.d.ts +11 -0
  126. package/dist/sqlEngine/physical/op.js +9 -0
  127. package/dist/sqlEngine/physical/op.js.map +1 -0
  128. package/dist/sqlEngine/physical/plan.d.ts +23 -0
  129. package/dist/sqlEngine/physical/plan.js +162 -0
  130. package/dist/sqlEngine/physical/plan.js.map +1 -0
  131. package/dist/sqlEngine/router.d.ts +26 -0
  132. package/dist/sqlEngine/router.js +48 -0
  133. package/dist/sqlEngine/router.js.map +1 -0
  134. package/dist/sqlEngine/types.d.ts +37 -0
  135. package/dist/sqlEngine/types.js +13 -0
  136. package/dist/sqlEngine/types.js.map +1 -0
  137. package/dist/sqlTranslator/index.js +7 -1
  138. package/dist/sqlTranslator/index.js.map +1 -1
  139. package/dist/validation/deleteValidator.js +10 -2
  140. package/dist/validation/deleteValidator.js.map +1 -1
  141. package/npm-shrinkwrap.json +2 -2
  142. package/package.json +1 -1
  143. package/resources/DESIGN.md +17 -16
  144. package/resources/Resource.ts +5 -2
  145. package/resources/Table.ts +23 -3
  146. package/resources/databases.ts +24 -0
  147. package/sqlTranslator/index.ts +16 -6
  148. package/studio/web/assets/{Chat-CTjtL8Z4.js → Chat-BZks8dVF.js} +2 -2
  149. package/studio/web/assets/{Chat-CTjtL8Z4.js.map → Chat-BZks8dVF.js.map} +1 -1
  150. package/studio/web/assets/{FloatingChat-CafHR4Ur.js → FloatingChat-Dic8paVO.js} +4 -4
  151. package/studio/web/assets/{FloatingChat-CafHR4Ur.js.map → FloatingChat-Dic8paVO.js.map} +1 -1
  152. package/studio/web/assets/{applications-Buh_q0Vj.js → applications-uOXkeUIN.js} +2 -2
  153. package/studio/web/assets/{applications-Buh_q0Vj.js.map → applications-uOXkeUIN.js.map} +1 -1
  154. package/studio/web/assets/{index-0hXeECkS.js → index-i-2wrKhv.js} +6 -6
  155. package/studio/web/assets/{index-0hXeECkS.js.map → index-i-2wrKhv.js.map} +1 -1
  156. package/studio/web/assets/{index.lazy-B00B7VBT.js → index.lazy-Csk8eCoB.js} +4 -4
  157. package/studio/web/assets/{index.lazy-B00B7VBT.js.map → index.lazy-Csk8eCoB.js.map} +1 -1
  158. package/studio/web/assets/{profile-Cg2wwYPn.js → profile-Sb3mGDl6.js} +2 -2
  159. package/studio/web/assets/{profile-Cg2wwYPn.js.map → profile-Sb3mGDl6.js.map} +1 -1
  160. package/studio/web/assets/{setComponentFile-DCaDIvyB.js → setComponentFile-BgZcaPJ2.js} +2 -2
  161. package/studio/web/assets/{setComponentFile-DCaDIvyB.js.map → setComponentFile-BgZcaPJ2.js.map} +1 -1
  162. package/studio/web/assets/{setup-CAVcAQjK.js → setup-DKtlLgmT.js} +2 -2
  163. package/studio/web/assets/{setup-CAVcAQjK.js.map → setup-DKtlLgmT.js.map} +1 -1
  164. package/studio/web/assets/{status-BRXorNdD.js → status-B45iLeug.js} +2 -2
  165. package/studio/web/assets/{status-BRXorNdD.js.map → status-B45iLeug.js.map} +1 -1
  166. package/studio/web/assets/{swagger-ui-react-Dy1D62vO.js → swagger-ui-react-Csu4026e.js} +2 -2
  167. package/studio/web/assets/{swagger-ui-react-Dy1D62vO.js.map → swagger-ui-react-Csu4026e.js.map} +1 -1
  168. package/studio/web/assets/{tsMode-A8gbL74v.js → tsMode-DVgxUr_l.js} +2 -2
  169. package/studio/web/assets/{tsMode-A8gbL74v.js.map → tsMode-DVgxUr_l.js.map} +1 -1
  170. package/studio/web/assets/{useEntityRestURL-cDodrVcQ.js → useEntityRestURL-yfDQMV1f.js} +2 -2
  171. package/studio/web/assets/{useEntityRestURL-cDodrVcQ.js.map → useEntityRestURL-yfDQMV1f.js.map} +1 -1
  172. package/studio/web/index.html +1 -1
  173. package/validation/deleteValidator.ts +11 -2
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ /**
3
+ * Lowers an ExprNode to a row-context closure.
4
+ *
5
+ * The compiler runs once per query at physical-plan time; the resulting
6
+ * closure is invoked per row by Filter/Project operators. SQL three-valued
7
+ * logic for AND/OR/NOT is handled here so residual filters match Resource API
8
+ * semantics (NULL → drop). Coercion is loose to match AlaSQL behavior.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.compileExpr = compileExpr;
12
+ const errors_ts_1 = require("../errors.js");
13
+ const registry_ts_1 = require("../functions/registry.js");
14
+ /**
15
+ * Compiles an expression to a per-row closure.
16
+ *
17
+ * When `qualified` is true (join queries), column references are looked up by
18
+ * their canonical `<alias>.<name>` key — the binder has set `column.table` to
19
+ * the owning alias and the scan output is keyed the same way (see
20
+ * physical/PhysicalQualify). Single-table queries pass `qualified = false` and
21
+ * columns resolve by bare name.
22
+ */
23
+ function compileExpr(expr, qualified = false) {
24
+ switch (expr.kind) {
25
+ case 'literal':
26
+ return { eval: () => expr.value, type: expr.sqlType };
27
+ case 'column': {
28
+ const key = qualified && expr.table ? `${expr.table}.${expr.name}` : expr.name;
29
+ return { eval: (row) => row[key], type: 'unknown' };
30
+ }
31
+ case 'star':
32
+ throw new errors_ts_1.EngineUnsupportedError('star expression cannot be compiled directly');
33
+ case 'binop': {
34
+ const l = compileExpr(expr.left, qualified);
35
+ const r = compileExpr(expr.right, qualified);
36
+ const op = expr.op;
37
+ return {
38
+ eval: (row) => {
39
+ const a = l.eval(row);
40
+ const b = r.eval(row);
41
+ return applyBinaryOp(op, a, b);
42
+ },
43
+ type: arithmeticType(op),
44
+ };
45
+ }
46
+ case 'logical': {
47
+ if (expr.op === 'not') {
48
+ const inner = compileExpr(expr.args[0], qualified);
49
+ return {
50
+ eval: (row) => {
51
+ const v = inner.eval(row);
52
+ if (v == null)
53
+ return null;
54
+ return !truthy(v);
55
+ },
56
+ type: 'boolean',
57
+ };
58
+ }
59
+ const args = expr.args.map((a) => compileExpr(a, qualified));
60
+ if (expr.op === 'and') {
61
+ return {
62
+ eval: (row) => {
63
+ let sawNull = false;
64
+ for (const a of args) {
65
+ const v = a.eval(row);
66
+ if (v == null)
67
+ sawNull = true;
68
+ else if (!truthy(v))
69
+ return false;
70
+ }
71
+ return sawNull ? null : true;
72
+ },
73
+ type: 'boolean',
74
+ };
75
+ }
76
+ return {
77
+ eval: (row) => {
78
+ let sawNull = false;
79
+ for (const a of args) {
80
+ const v = a.eval(row);
81
+ if (v == null)
82
+ sawNull = true;
83
+ else if (truthy(v))
84
+ return true;
85
+ }
86
+ return sawNull ? null : false;
87
+ },
88
+ type: 'boolean',
89
+ };
90
+ }
91
+ case 'in': {
92
+ if (!Array.isArray(expr.list)) {
93
+ throw new errors_ts_1.EngineUnsupportedError('subquery IN list is not supported in phase 1');
94
+ }
95
+ const target = compileExpr(expr.expr, qualified);
96
+ const list = expr.list.map((e) => compileExpr(e, qualified));
97
+ const negated = expr.negated;
98
+ return {
99
+ eval: (row) => {
100
+ const v = target.eval(row);
101
+ if (v == null)
102
+ return null;
103
+ let sawNull = false;
104
+ for (const l of list) {
105
+ const lv = l.eval(row);
106
+ if (lv == null)
107
+ sawNull = true;
108
+ else if (looseEquals(v, lv))
109
+ return !negated;
110
+ }
111
+ if (sawNull)
112
+ return null;
113
+ return negated;
114
+ },
115
+ type: 'boolean',
116
+ };
117
+ }
118
+ case 'between': {
119
+ const e = compileExpr(expr.expr, qualified);
120
+ const lo = compileExpr(expr.low, qualified);
121
+ const hi = compileExpr(expr.high, qualified);
122
+ const negated = expr.negated;
123
+ return {
124
+ eval: (row) => {
125
+ const v = e.eval(row);
126
+ const a = lo.eval(row);
127
+ const b = hi.eval(row);
128
+ if (v == null || a == null || b == null)
129
+ return null;
130
+ const r = compare(v, a) >= 0 && compare(v, b) <= 0;
131
+ return negated ? !r : r;
132
+ },
133
+ type: 'boolean',
134
+ };
135
+ }
136
+ case 'like': {
137
+ const e = compileExpr(expr.expr, qualified);
138
+ const p = compileExpr(expr.pattern, qualified);
139
+ const negated = expr.negated;
140
+ return {
141
+ eval: (row) => {
142
+ const v = e.eval(row);
143
+ const pat = p.eval(row);
144
+ if (v == null || pat == null)
145
+ return null;
146
+ if (typeof pat !== 'string')
147
+ return null;
148
+ const re = likeToRegex(pat);
149
+ const r = re.test(String(v));
150
+ return negated ? !r : r;
151
+ },
152
+ type: 'boolean',
153
+ };
154
+ }
155
+ case 'isNull': {
156
+ const e = compileExpr(expr.expr, qualified);
157
+ const negated = expr.negated;
158
+ return {
159
+ eval: (row) => {
160
+ const v = e.eval(row);
161
+ const r = v == null;
162
+ return negated ? !r : r;
163
+ },
164
+ type: 'boolean',
165
+ };
166
+ }
167
+ case 'funcCall': {
168
+ const desc = registry_ts_1.functionRegistry.lookup(expr.name);
169
+ if (!desc) {
170
+ throw new errors_ts_1.EngineUnsupportedError(`unknown function: ${expr.name}`);
171
+ }
172
+ if (desc.kind !== 'scalar') {
173
+ throw new errors_ts_1.EngineUnsupportedError(`${expr.name} is an aggregate; not allowed here`);
174
+ }
175
+ const args = expr.args.map((a) => compileExpr(a, qualified));
176
+ const fn = desc.impl;
177
+ return {
178
+ eval: (row) => fn(args.map((a) => a.eval(row))),
179
+ type: desc.returnType,
180
+ };
181
+ }
182
+ case 'case': {
183
+ const branches = expr.cases.map((c) => ({
184
+ when: compileExpr(c.when, qualified),
185
+ then: compileExpr(c.then, qualified),
186
+ }));
187
+ const otherwise = expr.else ? compileExpr(expr.else, qualified) : undefined;
188
+ return {
189
+ eval: (row) => {
190
+ for (const b of branches) {
191
+ const cond = b.when.eval(row);
192
+ if (cond != null && truthy(cond))
193
+ return b.then.eval(row);
194
+ }
195
+ return otherwise ? otherwise.eval(row) : null;
196
+ },
197
+ type: 'unknown',
198
+ };
199
+ }
200
+ case 'cast':
201
+ throw new errors_ts_1.EngineUnsupportedError('CAST is not supported in phase 1');
202
+ case 'aggCall':
203
+ throw new errors_ts_1.EngineUnsupportedError('aggregate call cannot be compiled as a row expression');
204
+ case 'subquery':
205
+ throw new errors_ts_1.EngineUnsupportedError('subqueries are not supported in phase 1');
206
+ }
207
+ }
208
+ function applyBinaryOp(op, a, b) {
209
+ if (a == null || b == null) {
210
+ switch (op) {
211
+ case '=':
212
+ case '!=':
213
+ case '<>':
214
+ case '<':
215
+ case '<=':
216
+ case '>':
217
+ case '>=':
218
+ return null;
219
+ default:
220
+ return null;
221
+ }
222
+ }
223
+ switch (op) {
224
+ case '=':
225
+ return looseEquals(a, b);
226
+ case '!=':
227
+ case '<>':
228
+ return !looseEquals(a, b);
229
+ case '<':
230
+ return compare(a, b) < 0;
231
+ case '<=':
232
+ return compare(a, b) <= 0;
233
+ case '>':
234
+ return compare(a, b) > 0;
235
+ case '>=':
236
+ return compare(a, b) >= 0;
237
+ case '+':
238
+ return numeric(a) + numeric(b);
239
+ case '-':
240
+ return numeric(a) - numeric(b);
241
+ case '*':
242
+ return numeric(a) * numeric(b);
243
+ case '/':
244
+ return numeric(a) / numeric(b);
245
+ case '%':
246
+ return numeric(a) % numeric(b);
247
+ case '||':
248
+ return String(a) + String(b);
249
+ default:
250
+ throw new errors_ts_1.EngineUnsupportedError(`unsupported binary op: ${op}`);
251
+ }
252
+ }
253
+ function arithmeticType(op) {
254
+ if (op === '||')
255
+ return 'string';
256
+ switch (op) {
257
+ case '+':
258
+ case '-':
259
+ case '*':
260
+ case '/':
261
+ case '%':
262
+ return 'number';
263
+ default:
264
+ return 'boolean';
265
+ }
266
+ }
267
+ function truthy(v) {
268
+ if (typeof v === 'boolean')
269
+ return v;
270
+ if (typeof v === 'number')
271
+ return v !== 0;
272
+ if (typeof v === 'string')
273
+ return v.length > 0;
274
+ return v != null;
275
+ }
276
+ function looseEquals(a, b) {
277
+ if (a === b)
278
+ return true;
279
+ if (typeof a === 'number' && typeof b === 'string')
280
+ return a === Number(b);
281
+ if (typeof a === 'string' && typeof b === 'number')
282
+ return Number(a) === b;
283
+ return false;
284
+ }
285
+ function compare(a, b) {
286
+ if (typeof a === 'number' && typeof b === 'number')
287
+ return a - b;
288
+ if (typeof a === 'string' && typeof b === 'string')
289
+ return a < b ? -1 : a > b ? 1 : 0;
290
+ const ax = numeric(a);
291
+ const bx = numeric(b);
292
+ if (!Number.isNaN(ax) && !Number.isNaN(bx))
293
+ return ax - bx;
294
+ const as = String(a);
295
+ const bs = String(b);
296
+ return as < bs ? -1 : as > bs ? 1 : 0;
297
+ }
298
+ function numeric(v) {
299
+ if (typeof v === 'number')
300
+ return v;
301
+ if (typeof v === 'string')
302
+ return Number(v);
303
+ if (typeof v === 'boolean')
304
+ return v ? 1 : 0;
305
+ if (v instanceof Date)
306
+ return v.getTime();
307
+ return Number.NaN;
308
+ }
309
+ function likeToRegex(pattern) {
310
+ let r = '^';
311
+ let i = 0;
312
+ while (i < pattern.length) {
313
+ const ch = pattern[i++];
314
+ if (ch === '%')
315
+ r += '.*';
316
+ else if (ch === '_')
317
+ r += '.';
318
+ else if (/[\\^$+?.()|{}[\]]/.test(ch))
319
+ r += '\\' + ch;
320
+ else
321
+ r += ch;
322
+ }
323
+ r += '$';
324
+ return new RegExp(r);
325
+ }
326
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../../sqlEngine/expressions/compile.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAqBH,kCA2KC;AA5LD,4CAAsD;AACtD,0DAA4D;AAO5D;;;;;;;;GAQG;AACH,SAAgB,WAAW,CAAC,IAAc,EAAE,SAAS,GAAG,KAAK;IAC5D,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACb,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACvD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,GAAG,GAAG,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/E,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACrD,CAAC;QACD,KAAK,MAAM;YACV,MAAM,IAAI,kCAAsB,CAAC,6CAA6C,CAAC,CAAC;QACjF,KAAK,OAAO,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACnB,OAAO;gBACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACb,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtB,OAAO,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChC,CAAC;gBACD,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;aACxB,CAAC;QACH,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACnD,OAAO;oBACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;wBACb,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC1B,IAAI,CAAC,IAAI,IAAI;4BAAE,OAAO,IAAI,CAAC;wBAC3B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACnB,CAAC;oBACD,IAAI,EAAE,SAAS;iBACf,CAAC;YACH,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YAC7D,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;gBACvB,OAAO;oBACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;wBACb,IAAI,OAAO,GAAG,KAAK,CAAC;wBACpB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;4BACtB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACtB,IAAI,CAAC,IAAI,IAAI;gCAAE,OAAO,GAAG,IAAI,CAAC;iCACzB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gCAAE,OAAO,KAAK,CAAC;wBACnC,CAAC;wBACD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC9B,CAAC;oBACD,IAAI,EAAE,SAAS;iBACf,CAAC;YACH,CAAC;YACD,OAAO;gBACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACb,IAAI,OAAO,GAAG,KAAK,CAAC;oBACpB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;wBACtB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACtB,IAAI,CAAC,IAAI,IAAI;4BAAE,OAAO,GAAG,IAAI,CAAC;6BACzB,IAAI,MAAM,CAAC,CAAC,CAAC;4BAAE,OAAO,IAAI,CAAC;oBACjC,CAAC;oBACD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC/B,CAAC;gBACD,IAAI,EAAE,SAAS;aACf,CAAC;QACH,CAAC;QACD,KAAK,IAAI,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,kCAAsB,CAAC,8CAA8C,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,OAAO;gBACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACb,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC3B,IAAI,CAAC,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC;oBAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;oBACpB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;wBACtB,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACvB,IAAI,EAAE,IAAI,IAAI;4BAAE,OAAO,GAAG,IAAI,CAAC;6BAC1B,IAAI,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC;4BAAE,OAAO,CAAC,OAAO,CAAC;oBAC9C,CAAC;oBACD,IAAI,OAAO;wBAAE,OAAO,IAAI,CAAC;oBACzB,OAAO,OAAO,CAAC;gBAChB,CAAC;gBACD,IAAI,EAAE,SAAS;aACf,CAAC;QACH,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC5C,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC5C,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,OAAO;gBACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACb,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACvB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACvB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC;oBACrD,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBACnD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;gBACD,IAAI,EAAE,SAAS;aACf,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,OAAO;gBACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACb,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACxB,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC;oBAC1C,IAAI,OAAO,GAAG,KAAK,QAAQ;wBAAE,OAAO,IAAI,CAAC;oBACzC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;oBAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7B,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;gBACD,IAAI,EAAE,SAAS;aACf,CAAC;QACH,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,OAAO;gBACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACb,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtB,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;oBACpB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;gBACD,IAAI,EAAE,SAAS;aACf,CAAC;QACH,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,8BAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,MAAM,IAAI,kCAAsB,CAAC,qBAAqB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,IAAI,kCAAsB,CAAC,GAAG,IAAI,CAAC,IAAI,oCAAoC,CAAC,CAAC;YACpF,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,IAAoC,CAAC;YACrD,OAAO;gBACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/C,IAAI,EAAE,IAAI,CAAC,UAAU;aACrB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC;gBACpC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC;aACpC,CAAC,CAAC,CAAC;YACJ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5E,OAAO;gBACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACb,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;wBAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC9B,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;4BAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC3D,CAAC;oBACD,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC/C,CAAC;gBACD,IAAI,EAAE,SAAS;aACf,CAAC;QACH,CAAC;QACD,KAAK,MAAM;YACV,MAAM,IAAI,kCAAsB,CAAC,kCAAkC,CAAC,CAAC;QACtE,KAAK,SAAS;YACb,MAAM,IAAI,kCAAsB,CAAC,uDAAuD,CAAC,CAAC;QAC3F,KAAK,UAAU;YACd,MAAM,IAAI,kCAAsB,CAAC,yCAAyC,CAAC,CAAC;IAC9E,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAC,EAAU,EAAE,CAAU,EAAE,CAAU;IACxD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,QAAQ,EAAE,EAAE,CAAC;YACZ,KAAK,GAAG,CAAC;YACT,KAAK,IAAI,CAAC;YACV,KAAK,IAAI,CAAC;YACV,KAAK,GAAG,CAAC;YACT,KAAK,IAAI,CAAC;YACV,KAAK,GAAG,CAAC;YACT,KAAK,IAAI;gBACR,OAAO,IAAI,CAAC;YACb;gBACC,OAAO,IAAI,CAAC;QACd,CAAC;IACF,CAAC;IACD,QAAQ,EAAE,EAAE,CAAC;QACZ,KAAK,GAAG;YACP,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC;QACV,KAAK,IAAI;YACR,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,KAAK,GAAG;YACP,OAAO,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1B,KAAK,IAAI;YACR,OAAO,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,GAAG;YACP,OAAO,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1B,KAAK,IAAI;YACR,OAAO,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,GAAG;YACP,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,GAAG;YACP,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,GAAG;YACP,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,GAAG;YACP,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,GAAG;YACP,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,IAAI;YACR,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9B;YACC,MAAM,IAAI,kCAAsB,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,EAAU;IACjC,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACjC,QAAQ,EAAE,EAAE,CAAC;QACZ,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACP,OAAO,QAAQ,CAAC;QACjB;YACC,OAAO,SAAS,CAAC;IACnB,CAAC;AACF,CAAC;AAED,SAAS,MAAM,CAAC,CAAU;IACzB,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,IAAI,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,CAAU,EAAE,CAAU;IAC1C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,OAAO,CAAC,CAAU,EAAE,CAAU;IACtC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,OAAO,CAAC,CAAU;IAC1B,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,YAAY,IAAI;QAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1C,OAAO,MAAM,CAAC,GAAG,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IACnC,IAAI,CAAC,GAAG,GAAG,CAAC;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,EAAE,KAAK,GAAG;YAAE,CAAC,IAAI,IAAI,CAAC;aACrB,IAAI,EAAE,KAAK,GAAG;YAAE,CAAC,IAAI,GAAG,CAAC;aACzB,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;;YACjD,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IACD,CAAC,IAAI,GAAG,CAAC;IACT,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Aggregate function registrations for the new SQL engine.
3
+ *
4
+ * Standard aggregates: COUNT, SUM, AVG, MIN, MAX.
5
+ * Custom aggregates (ported from alaSQLExtension.js): MEAN, PROD, MEDIAN, MODE, MAD.
6
+ * MEAN is an alias for AVG.
7
+ * PROD, MEDIAN, MODE, MAD buffer all values (same as mathjs-backed originals).
8
+ *
9
+ * DISTINCT_ARRAY scalar is also registered here since it shares the extensions file.
10
+ * SEARCH_JSON is intentionally omitted in phase 2 (depends on AlaSQL context).
11
+ */
12
+ export declare function registerAggregateFunctions(): void;
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ /**
3
+ * Aggregate function registrations for the new SQL engine.
4
+ *
5
+ * Standard aggregates: COUNT, SUM, AVG, MIN, MAX.
6
+ * Custom aggregates (ported from alaSQLExtension.js): MEAN, PROD, MEDIAN, MODE, MAD.
7
+ * MEAN is an alias for AVG.
8
+ * PROD, MEDIAN, MODE, MAD buffer all values (same as mathjs-backed originals).
9
+ *
10
+ * DISTINCT_ARRAY scalar is also registered here since it shares the extensions file.
11
+ * SEARCH_JSON is intentionally omitted in phase 2 (depends on AlaSQL context).
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.registerAggregateFunctions = registerAggregateFunctions;
15
+ const registry_ts_1 = require("./registry.js");
16
+ let registered = false;
17
+ function registerAggregateFunctions() {
18
+ if (registered)
19
+ return;
20
+ registered = true;
21
+ // -------------------------------------------------------------------------
22
+ // COUNT
23
+ // -------------------------------------------------------------------------
24
+ registry_ts_1.functionRegistry.register({
25
+ name: 'count',
26
+ aliases: ['COUNT'],
27
+ kind: 'aggregate',
28
+ returnType: 'int',
29
+ impl: {
30
+ factory: () => {
31
+ let n = 0;
32
+ return {
33
+ step: (v) => {
34
+ if (v != null)
35
+ n++;
36
+ },
37
+ finalize: () => n,
38
+ };
39
+ },
40
+ },
41
+ });
42
+ // -------------------------------------------------------------------------
43
+ // SUM
44
+ // -------------------------------------------------------------------------
45
+ registry_ts_1.functionRegistry.register({
46
+ name: 'sum',
47
+ aliases: ['SUM'],
48
+ kind: 'aggregate',
49
+ returnType: 'number',
50
+ impl: {
51
+ factory: () => {
52
+ let total = null;
53
+ return {
54
+ step: (v) => {
55
+ if (v == null)
56
+ return;
57
+ const n = Number(v);
58
+ if (Number.isNaN(n))
59
+ return;
60
+ total = (total ?? 0) + n;
61
+ },
62
+ finalize: () => total,
63
+ };
64
+ },
65
+ },
66
+ });
67
+ // -------------------------------------------------------------------------
68
+ // AVG / MEAN
69
+ // -------------------------------------------------------------------------
70
+ const avgFactory = () => {
71
+ let sum = 0;
72
+ let count = 0;
73
+ return {
74
+ step: (v) => {
75
+ if (v == null)
76
+ return;
77
+ const n = Number(v);
78
+ if (Number.isNaN(n))
79
+ return;
80
+ sum += n;
81
+ count++;
82
+ },
83
+ finalize: () => (count === 0 ? null : sum / count),
84
+ };
85
+ };
86
+ registry_ts_1.functionRegistry.register({
87
+ name: 'avg',
88
+ aliases: ['AVG', 'mean', 'MEAN'],
89
+ kind: 'aggregate',
90
+ returnType: 'number',
91
+ impl: { factory: avgFactory },
92
+ });
93
+ // -------------------------------------------------------------------------
94
+ // MIN
95
+ // -------------------------------------------------------------------------
96
+ registry_ts_1.functionRegistry.register({
97
+ name: 'min',
98
+ aliases: ['MIN'],
99
+ kind: 'aggregate',
100
+ returnType: 'unknown',
101
+ impl: {
102
+ factory: () => {
103
+ let minVal = null;
104
+ return {
105
+ step: (v) => {
106
+ if (v == null)
107
+ return;
108
+ if (minVal === null || compareValues(v, minVal) < 0)
109
+ minVal = v;
110
+ },
111
+ finalize: () => minVal,
112
+ };
113
+ },
114
+ },
115
+ });
116
+ // -------------------------------------------------------------------------
117
+ // MAX
118
+ // -------------------------------------------------------------------------
119
+ registry_ts_1.functionRegistry.register({
120
+ name: 'max',
121
+ aliases: ['MAX'],
122
+ kind: 'aggregate',
123
+ returnType: 'unknown',
124
+ impl: {
125
+ factory: () => {
126
+ let maxVal = null;
127
+ return {
128
+ step: (v) => {
129
+ if (v == null)
130
+ return;
131
+ if (maxVal === null || compareValues(v, maxVal) > 0)
132
+ maxVal = v;
133
+ },
134
+ finalize: () => maxVal,
135
+ };
136
+ },
137
+ },
138
+ });
139
+ // -------------------------------------------------------------------------
140
+ // PROD
141
+ // -------------------------------------------------------------------------
142
+ registry_ts_1.functionRegistry.register({
143
+ name: 'prod',
144
+ aliases: ['PROD'],
145
+ kind: 'aggregate',
146
+ returnType: 'number',
147
+ impl: {
148
+ factory: () => {
149
+ let product = null;
150
+ return {
151
+ step: (v) => {
152
+ if (v == null)
153
+ return;
154
+ const n = Number(v);
155
+ if (Number.isNaN(n))
156
+ return;
157
+ product = (product ?? 1) * n;
158
+ },
159
+ finalize: () => product,
160
+ };
161
+ },
162
+ },
163
+ });
164
+ // -------------------------------------------------------------------------
165
+ // MEDIAN — buffers all values, O(n log n) finalize
166
+ // -------------------------------------------------------------------------
167
+ registry_ts_1.functionRegistry.register({
168
+ name: 'median',
169
+ aliases: ['MEDIAN'],
170
+ kind: 'aggregate',
171
+ returnType: 'number',
172
+ impl: {
173
+ factory: () => {
174
+ const vals = [];
175
+ return {
176
+ step: (v) => {
177
+ if (v == null)
178
+ return;
179
+ const n = Number(v);
180
+ if (!Number.isNaN(n))
181
+ vals.push(n);
182
+ },
183
+ finalize: () => {
184
+ if (vals.length === 0)
185
+ return null;
186
+ const s = [...vals].sort((a, b) => a - b);
187
+ const m = Math.floor(s.length / 2);
188
+ return s.length % 2 === 0 ? (s[m - 1] + s[m]) / 2 : s[m];
189
+ },
190
+ };
191
+ },
192
+ },
193
+ });
194
+ // -------------------------------------------------------------------------
195
+ // MODE — returns the most frequent value (first occurrence wins on tie)
196
+ // -------------------------------------------------------------------------
197
+ registry_ts_1.functionRegistry.register({
198
+ name: 'mode',
199
+ aliases: ['MODE'],
200
+ kind: 'aggregate',
201
+ returnType: 'unknown',
202
+ impl: {
203
+ factory: () => {
204
+ const counts = new Map();
205
+ return {
206
+ step: (v) => {
207
+ if (v == null)
208
+ return;
209
+ const key = JSON.stringify(v);
210
+ const entry = counts.get(key);
211
+ if (entry)
212
+ entry.count++;
213
+ else
214
+ counts.set(key, { val: v, count: 1 });
215
+ },
216
+ finalize: () => {
217
+ if (counts.size === 0)
218
+ return null;
219
+ let best = null;
220
+ for (const entry of counts.values()) {
221
+ if (!best || entry.count > best.count)
222
+ best = entry;
223
+ }
224
+ return best.val;
225
+ },
226
+ };
227
+ },
228
+ },
229
+ });
230
+ // -------------------------------------------------------------------------
231
+ // MAD (median absolute deviation)
232
+ // -------------------------------------------------------------------------
233
+ registry_ts_1.functionRegistry.register({
234
+ name: 'mad',
235
+ aliases: ['MAD'],
236
+ kind: 'aggregate',
237
+ returnType: 'number',
238
+ impl: {
239
+ factory: () => {
240
+ const vals = [];
241
+ return {
242
+ step: (v) => {
243
+ if (v == null)
244
+ return;
245
+ const n = Number(v);
246
+ if (!Number.isNaN(n))
247
+ vals.push(n);
248
+ },
249
+ finalize: () => {
250
+ if (vals.length === 0)
251
+ return null;
252
+ const sorted = [...vals].sort((a, b) => a - b);
253
+ const m = Math.floor(sorted.length / 2);
254
+ const med = sorted.length % 2 === 0 ? (sorted[m - 1] + sorted[m]) / 2 : sorted[m];
255
+ const devs = sorted.map((v) => Math.abs(v - med)).sort((a, b) => a - b);
256
+ const m2 = Math.floor(devs.length / 2);
257
+ return devs.length % 2 === 0 ? (devs[m2 - 1] + devs[m2]) / 2 : devs[m2];
258
+ },
259
+ };
260
+ },
261
+ },
262
+ });
263
+ // -------------------------------------------------------------------------
264
+ // DISTINCT_ARRAY scalar (deduplicates an array-valued column)
265
+ // -------------------------------------------------------------------------
266
+ registry_ts_1.functionRegistry.register({
267
+ name: 'distinct_array',
268
+ aliases: ['DISTINCT_ARRAY'],
269
+ kind: 'scalar',
270
+ returnType: 'unknown',
271
+ impl: (args) => {
272
+ const arr = args[0];
273
+ if (!Array.isArray(arr))
274
+ return arr;
275
+ const seen = new Set();
276
+ return arr.filter((item) => {
277
+ const key = JSON.stringify(item);
278
+ if (seen.has(key))
279
+ return false;
280
+ seen.add(key);
281
+ return true;
282
+ });
283
+ },
284
+ });
285
+ }
286
+ function compareValues(a, b) {
287
+ if (typeof a === 'number' && typeof b === 'number')
288
+ return a - b;
289
+ if (typeof a === 'string' && typeof b === 'string')
290
+ return a < b ? -1 : a > b ? 1 : 0;
291
+ const an = Number(a);
292
+ const bn = Number(b);
293
+ if (!Number.isNaN(an) && !Number.isNaN(bn))
294
+ return an - bn;
295
+ const as = String(a);
296
+ const bs = String(b);
297
+ return as < bs ? -1 : as > bs ? 1 : 0;
298
+ }
299
+ //# sourceMappingURL=aggregates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregates.js","sourceRoot":"","sources":["../../../sqlEngine/functions/aggregates.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAMH,gEA6PC;AAjQD,+CAAiD;AAEjD,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,SAAgB,0BAA0B;IACzC,IAAI,UAAU;QAAE,OAAO;IACvB,UAAU,GAAG,IAAI,CAAC;IAElB,4EAA4E;IAC5E,QAAQ;IACR,4EAA4E;IAC5E,8BAAgB,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,OAAO,CAAC;QAClB,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE;YACL,OAAO,EAAE,GAAG,EAAE;gBACb,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,OAAO;oBACN,IAAI,EAAE,CAAC,CAAU,EAAE,EAAE;wBACpB,IAAI,CAAC,IAAI,IAAI;4BAAE,CAAC,EAAE,CAAC;oBACpB,CAAC;oBACD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;iBACjB,CAAC;YACH,CAAC;SACD;KACD,CAAC,CAAC;IAEH,4EAA4E;IAC5E,MAAM;IACN,4EAA4E;IAC5E,8BAAgB,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,CAAC,KAAK,CAAC;QAChB,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,QAAQ;QACpB,IAAI,EAAE;YACL,OAAO,EAAE,GAAG,EAAE;gBACb,IAAI,KAAK,GAAkB,IAAI,CAAC;gBAChC,OAAO;oBACN,IAAI,EAAE,CAAC,CAAU,EAAE,EAAE;wBACpB,IAAI,CAAC,IAAI,IAAI;4BAAE,OAAO;wBACtB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;4BAAE,OAAO;wBAC5B,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBAC1B,CAAC;oBACD,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;iBACrB,CAAC;YACH,CAAC;SACD;KACD,CAAC,CAAC;IAEH,4EAA4E;IAC5E,aAAa;IACb,4EAA4E;IAC5E,MAAM,UAAU,GAAG,GAAG,EAAE;QACvB,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO;YACN,IAAI,EAAE,CAAC,CAAU,EAAE,EAAE;gBACpB,IAAI,CAAC,IAAI,IAAI;oBAAE,OAAO;gBACtB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBAAE,OAAO;gBAC5B,GAAG,IAAI,CAAC,CAAC;gBACT,KAAK,EAAE,CAAC;YACT,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;SAClD,CAAC;IACH,CAAC,CAAC;IACF,8BAAgB,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;QAChC,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,QAAQ;QACpB,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;KAC7B,CAAC,CAAC;IAEH,4EAA4E;IAC5E,MAAM;IACN,4EAA4E;IAC5E,8BAAgB,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,CAAC,KAAK,CAAC;QAChB,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE;YACL,OAAO,EAAE,GAAG,EAAE;gBACb,IAAI,MAAM,GAAY,IAAI,CAAC;gBAC3B,OAAO;oBACN,IAAI,EAAE,CAAC,CAAU,EAAE,EAAE;wBACpB,IAAI,CAAC,IAAI,IAAI;4BAAE,OAAO;wBACtB,IAAI,MAAM,KAAK,IAAI,IAAI,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;4BAAE,MAAM,GAAG,CAAC,CAAC;oBACjE,CAAC;oBACD,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM;iBACtB,CAAC;YACH,CAAC;SACD;KACD,CAAC,CAAC;IAEH,4EAA4E;IAC5E,MAAM;IACN,4EAA4E;IAC5E,8BAAgB,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,CAAC,KAAK,CAAC;QAChB,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE;YACL,OAAO,EAAE,GAAG,EAAE;gBACb,IAAI,MAAM,GAAY,IAAI,CAAC;gBAC3B,OAAO;oBACN,IAAI,EAAE,CAAC,CAAU,EAAE,EAAE;wBACpB,IAAI,CAAC,IAAI,IAAI;4BAAE,OAAO;wBACtB,IAAI,MAAM,KAAK,IAAI,IAAI,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;4BAAE,MAAM,GAAG,CAAC,CAAC;oBACjE,CAAC;oBACD,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM;iBACtB,CAAC;YACH,CAAC;SACD;KACD,CAAC,CAAC;IAEH,4EAA4E;IAC5E,OAAO;IACP,4EAA4E;IAC5E,8BAAgB,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,QAAQ;QACpB,IAAI,EAAE;YACL,OAAO,EAAE,GAAG,EAAE;gBACb,IAAI,OAAO,GAAkB,IAAI,CAAC;gBAClC,OAAO;oBACN,IAAI,EAAE,CAAC,CAAU,EAAE,EAAE;wBACpB,IAAI,CAAC,IAAI,IAAI;4BAAE,OAAO;wBACtB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;4BAAE,OAAO;wBAC5B,OAAO,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBAC9B,CAAC;oBACD,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO;iBACvB,CAAC;YACH,CAAC;SACD;KACD,CAAC,CAAC;IAEH,4EAA4E;IAC5E,mDAAmD;IACnD,4EAA4E;IAC5E,8BAAgB,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,QAAQ;QACpB,IAAI,EAAE;YACL,OAAO,EAAE,GAAG,EAAE;gBACb,MAAM,IAAI,GAAa,EAAE,CAAC;gBAC1B,OAAO;oBACN,IAAI,EAAE,CAAC,CAAU,EAAE,EAAE;wBACpB,IAAI,CAAC,IAAI,IAAI;4BAAE,OAAO;wBACtB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;4BAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpC,CAAC;oBACD,QAAQ,EAAE,GAAG,EAAE;wBACd,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;4BAAE,OAAO,IAAI,CAAC;wBACnC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACnC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,CAAC;iBACD,CAAC;YACH,CAAC;SACD;KACD,CAAC,CAAC;IAEH,4EAA4E;IAC5E,wEAAwE;IACxE,4EAA4E;IAC5E,8BAAgB,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE;YACL,OAAO,EAAE,GAAG,EAAE;gBACb,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2C,CAAC;gBAClE,OAAO;oBACN,IAAI,EAAE,CAAC,CAAU,EAAE,EAAE;wBACpB,IAAI,CAAC,IAAI,IAAI;4BAAE,OAAO;wBACtB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;wBAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAC9B,IAAI,KAAK;4BAAE,KAAK,CAAC,KAAK,EAAE,CAAC;;4BACpB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC5C,CAAC;oBACD,QAAQ,EAAE,GAAG,EAAE;wBACd,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;4BAAE,OAAO,IAAI,CAAC;wBACnC,IAAI,IAAI,GAA2C,IAAI,CAAC;wBACxD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;4BACrC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;gCAAE,IAAI,GAAG,KAAK,CAAC;wBACrD,CAAC;wBACD,OAAO,IAAK,CAAC,GAAG,CAAC;oBAClB,CAAC;iBACD,CAAC;YACH,CAAC;SACD;KACD,CAAC,CAAC;IAEH,4EAA4E;IAC5E,kCAAkC;IAClC,4EAA4E;IAC5E,8BAAgB,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,CAAC,KAAK,CAAC;QAChB,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,QAAQ;QACpB,IAAI,EAAE;YACL,OAAO,EAAE,GAAG,EAAE;gBACb,MAAM,IAAI,GAAa,EAAE,CAAC;gBAC1B,OAAO;oBACN,IAAI,EAAE,CAAC,CAAU,EAAE,EAAE;wBACpB,IAAI,CAAC,IAAI,IAAI;4BAAE,OAAO;wBACtB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;4BAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpC,CAAC;oBACD,QAAQ,EAAE,GAAG,EAAE;wBACd,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;4BAAE,OAAO,IAAI,CAAC;wBACnC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACxC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBAClF,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACxE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACvC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACzE,CAAC;iBACD,CAAC;YACH,CAAC;SACD;KACD,CAAC,CAAC;IAEH,4EAA4E;IAC5E,8DAA8D;IAC9D,4EAA4E;IAC5E,8BAAgB,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,CAAC,gBAAgB,CAAC;QAC3B,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,CAAC,IAAe,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,OAAO,GAAG,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACjC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,IAAI,CAAC;YACb,CAAC,CAAC,CAAC;QACJ,CAAC;KACD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,CAAU,EAAE,CAAU;IAC5C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC"}