@harperfast/harper 5.2.0-alpha.6 → 5.2.0-beta.2

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 (276) hide show
  1. package/bin/cliOperations.ts +76 -12
  2. package/bin/run.ts +10 -0
  3. package/bin/status.ts +1 -1
  4. package/components/Application.ts +146 -83
  5. package/components/Scope.ts +4 -0
  6. package/components/componentLoader.ts +7 -0
  7. package/components/operations.js +21 -1
  8. package/config/configUtils.ts +139 -5
  9. package/config-app.schema.json +70 -0
  10. package/dataLayer/harperBridge/ResourceBridge.ts +7 -0
  11. package/dist/bin/cliOperations.js +76 -12
  12. package/dist/bin/cliOperations.js.map +1 -1
  13. package/dist/bin/run.js +9 -0
  14. package/dist/bin/run.js.map +1 -1
  15. package/dist/bin/status.js +1 -1
  16. package/dist/bin/status.js.map +1 -1
  17. package/dist/components/Application.d.ts +12 -5
  18. package/dist/components/Application.js +121 -60
  19. package/dist/components/Application.js.map +1 -1
  20. package/dist/components/Scope.d.ts +1 -0
  21. package/dist/components/Scope.js +4 -0
  22. package/dist/components/Scope.js.map +1 -1
  23. package/dist/components/componentLoader.js +7 -0
  24. package/dist/components/componentLoader.js.map +1 -1
  25. package/dist/components/operations.js +20 -1
  26. package/dist/components/operations.js.map +1 -1
  27. package/dist/config/configUtils.d.ts +31 -0
  28. package/dist/config/configUtils.js +127 -5
  29. package/dist/config/configUtils.js.map +1 -1
  30. package/dist/dataLayer/harperBridge/ResourceBridge.js +8 -0
  31. package/dist/dataLayer/harperBridge/ResourceBridge.js.map +1 -1
  32. package/dist/resources/DatabaseTransaction.d.ts +12 -0
  33. package/dist/resources/DatabaseTransaction.js +97 -0
  34. package/dist/resources/DatabaseTransaction.js.map +1 -1
  35. package/dist/resources/RequestTarget.js +13 -3
  36. package/dist/resources/RequestTarget.js.map +1 -1
  37. package/dist/resources/Resource.js +21 -2
  38. package/dist/resources/Resource.js.map +1 -1
  39. package/dist/resources/Table.d.ts +3 -1
  40. package/dist/resources/Table.js +48 -5
  41. package/dist/resources/Table.js.map +1 -1
  42. package/dist/resources/analytics/metadata.d.ts +3 -0
  43. package/dist/resources/analytics/metadata.js +3 -0
  44. package/dist/resources/analytics/metadata.js.map +1 -1
  45. package/dist/resources/analytics/write.js +22 -0
  46. package/dist/resources/analytics/write.js.map +1 -1
  47. package/dist/resources/databases.js +21 -0
  48. package/dist/resources/databases.js.map +1 -1
  49. package/dist/resources/defineResource.js +20 -7
  50. package/dist/resources/defineResource.js.map +1 -1
  51. package/dist/resources/jsResource.d.ts +24 -0
  52. package/dist/resources/jsResource.js +58 -2
  53. package/dist/resources/jsResource.js.map +1 -1
  54. package/dist/resources/openApi.js +45 -20
  55. package/dist/resources/openApi.js.map +1 -1
  56. package/dist/resources/scheduler/CronExpression.d.ts +71 -0
  57. package/dist/resources/scheduler/CronExpression.js +367 -0
  58. package/dist/resources/scheduler/CronExpression.js.map +1 -0
  59. package/dist/resources/scheduler/engine.d.ts +91 -0
  60. package/dist/resources/scheduler/engine.js +767 -0
  61. package/dist/resources/scheduler/engine.js.map +1 -0
  62. package/dist/resources/scheduler/scheduler.d.ts +33 -0
  63. package/dist/resources/scheduler/scheduler.js +200 -0
  64. package/dist/resources/scheduler/scheduler.js.map +1 -0
  65. package/dist/security/auth.js +1 -0
  66. package/dist/security/auth.js.map +1 -1
  67. package/dist/security/jsLoader.js +8 -0
  68. package/dist/security/jsLoader.js.map +1 -1
  69. package/dist/security/keys.d.ts +32 -0
  70. package/dist/security/keys.js +147 -0
  71. package/dist/security/keys.js.map +1 -1
  72. package/dist/server/REST.js +67 -1
  73. package/dist/server/REST.js.map +1 -1
  74. package/dist/server/Server.d.ts +6 -0
  75. package/dist/server/Server.js.map +1 -1
  76. package/dist/server/http.d.ts +2 -0
  77. package/dist/server/http.js +139 -14
  78. package/dist/server/http.js.map +1 -1
  79. package/dist/server/operationsServer.js +3 -3
  80. package/dist/server/operationsServer.js.map +1 -1
  81. package/dist/server/serverHelpers/progressEmitter.js +5 -1
  82. package/dist/server/serverHelpers/progressEmitter.js.map +1 -1
  83. package/dist/server/threads/threadServer.js +9 -5
  84. package/dist/server/threads/threadServer.js.map +1 -1
  85. package/dist/sqlEngine/binder/bind.d.ts +72 -0
  86. package/dist/sqlEngine/binder/bind.js +289 -0
  87. package/dist/sqlEngine/binder/bind.js.map +1 -0
  88. package/dist/sqlEngine/config.d.ts +35 -0
  89. package/dist/sqlEngine/config.js +62 -0
  90. package/dist/sqlEngine/config.js.map +1 -0
  91. package/dist/sqlEngine/diff/differential.d.ts +23 -0
  92. package/dist/sqlEngine/diff/differential.js +90 -0
  93. package/dist/sqlEngine/diff/differential.js.map +1 -0
  94. package/dist/sqlEngine/errors.d.ts +22 -0
  95. package/dist/sqlEngine/errors.js +36 -0
  96. package/dist/sqlEngine/errors.js.map +1 -0
  97. package/dist/sqlEngine/executor/runMutation.d.ts +35 -0
  98. package/dist/sqlEngine/executor/runMutation.js +352 -0
  99. package/dist/sqlEngine/executor/runMutation.js.map +1 -0
  100. package/dist/sqlEngine/executor/runSelect.d.ts +7 -0
  101. package/dist/sqlEngine/executor/runSelect.js +14 -0
  102. package/dist/sqlEngine/executor/runSelect.js.map +1 -0
  103. package/dist/sqlEngine/expressions/compile.d.ts +24 -0
  104. package/dist/sqlEngine/expressions/compile.js +326 -0
  105. package/dist/sqlEngine/expressions/compile.js.map +1 -0
  106. package/dist/sqlEngine/functions/aggregates.d.ts +12 -0
  107. package/dist/sqlEngine/functions/aggregates.js +299 -0
  108. package/dist/sqlEngine/functions/aggregates.js.map +1 -0
  109. package/dist/sqlEngine/functions/registry.d.ts +36 -0
  110. package/dist/sqlEngine/functions/registry.js +33 -0
  111. package/dist/sqlEngine/functions/registry.js.map +1 -0
  112. package/dist/sqlEngine/functions/standard.d.ts +9 -0
  113. package/dist/sqlEngine/functions/standard.js +86 -0
  114. package/dist/sqlEngine/functions/standard.js.map +1 -0
  115. package/dist/sqlEngine/index.d.ts +29 -0
  116. package/dist/sqlEngine/index.js +62 -0
  117. package/dist/sqlEngine/index.js.map +1 -0
  118. package/dist/sqlEngine/logical/build.d.ts +20 -0
  119. package/dist/sqlEngine/logical/build.js +326 -0
  120. package/dist/sqlEngine/logical/build.js.map +1 -0
  121. package/dist/sqlEngine/logical/op.d.ts +105 -0
  122. package/dist/sqlEngine/logical/op.js +10 -0
  123. package/dist/sqlEngine/logical/op.js.map +1 -0
  124. package/dist/sqlEngine/optimizer/joinAnalysis.d.ts +37 -0
  125. package/dist/sqlEngine/optimizer/joinAnalysis.js +144 -0
  126. package/dist/sqlEngine/optimizer/joinAnalysis.js.map +1 -0
  127. package/dist/sqlEngine/optimizer/optimize.d.ts +13 -0
  128. package/dist/sqlEngine/optimizer/optimize.js +53 -0
  129. package/dist/sqlEngine/optimizer/optimize.js.map +1 -0
  130. package/dist/sqlEngine/optimizer/ruleEngine.d.ts +7 -0
  131. package/dist/sqlEngine/optimizer/ruleEngine.js +26 -0
  132. package/dist/sqlEngine/optimizer/ruleEngine.js.map +1 -0
  133. package/dist/sqlEngine/optimizer/rules/limitPushdown.d.ts +19 -0
  134. package/dist/sqlEngine/optimizer/rules/limitPushdown.js +55 -0
  135. package/dist/sqlEngine/optimizer/rules/limitPushdown.js.map +1 -0
  136. package/dist/sqlEngine/optimizer/rules/planJoins.d.ts +19 -0
  137. package/dist/sqlEngine/optimizer/rules/planJoins.js +62 -0
  138. package/dist/sqlEngine/optimizer/rules/planJoins.js.map +1 -0
  139. package/dist/sqlEngine/optimizer/rules/predicateNormalize.d.ts +18 -0
  140. package/dist/sqlEngine/optimizer/rules/predicateNormalize.js +80 -0
  141. package/dist/sqlEngine/optimizer/rules/predicateNormalize.js.map +1 -0
  142. package/dist/sqlEngine/optimizer/rules/predicatePushdown.d.ts +11 -0
  143. package/dist/sqlEngine/optimizer/rules/predicatePushdown.js +48 -0
  144. package/dist/sqlEngine/optimizer/rules/predicatePushdown.js.map +1 -0
  145. package/dist/sqlEngine/optimizer/rules/projectionPushdown.d.ts +23 -0
  146. package/dist/sqlEngine/optimizer/rules/projectionPushdown.js +160 -0
  147. package/dist/sqlEngine/optimizer/rules/projectionPushdown.js.map +1 -0
  148. package/dist/sqlEngine/optimizer/rules/sortFromIndex.d.ts +14 -0
  149. package/dist/sqlEngine/optimizer/rules/sortFromIndex.js +49 -0
  150. package/dist/sqlEngine/optimizer/rules/sortFromIndex.js.map +1 -0
  151. package/dist/sqlEngine/optimizer/rules/validateScannable.d.ts +15 -0
  152. package/dist/sqlEngine/optimizer/rules/validateScannable.js +60 -0
  153. package/dist/sqlEngine/optimizer/rules/validateScannable.js.map +1 -0
  154. package/dist/sqlEngine/optimizer/whereToConditions.d.ts +85 -0
  155. package/dist/sqlEngine/optimizer/whereToConditions.js +484 -0
  156. package/dist/sqlEngine/optimizer/whereToConditions.js.map +1 -0
  157. package/dist/sqlEngine/parser/ast.d.ts +139 -0
  158. package/dist/sqlEngine/parser/ast.js +10 -0
  159. package/dist/sqlEngine/parser/ast.js.map +1 -0
  160. package/dist/sqlEngine/parser/normalizer.d.ts +28 -0
  161. package/dist/sqlEngine/parser/normalizer.js +413 -0
  162. package/dist/sqlEngine/parser/normalizer.js.map +1 -0
  163. package/dist/sqlEngine/parser/parse.d.ts +14 -0
  164. package/dist/sqlEngine/parser/parse.js +20 -0
  165. package/dist/sqlEngine/parser/parse.js.map +1 -0
  166. package/dist/sqlEngine/physical/PhysicalDistinct.d.ts +9 -0
  167. package/dist/sqlEngine/physical/PhysicalDistinct.js +29 -0
  168. package/dist/sqlEngine/physical/PhysicalDistinct.js.map +1 -0
  169. package/dist/sqlEngine/physical/PhysicalFilter.d.ts +10 -0
  170. package/dist/sqlEngine/physical/PhysicalFilter.js +25 -0
  171. package/dist/sqlEngine/physical/PhysicalFilter.js.map +1 -0
  172. package/dist/sqlEngine/physical/PhysicalHashAggregate.d.ts +27 -0
  173. package/dist/sqlEngine/physical/PhysicalHashAggregate.js +100 -0
  174. package/dist/sqlEngine/physical/PhysicalHashAggregate.js.map +1 -0
  175. package/dist/sqlEngine/physical/PhysicalHashJoin.d.ts +29 -0
  176. package/dist/sqlEngine/physical/PhysicalHashJoin.js +93 -0
  177. package/dist/sqlEngine/physical/PhysicalHashJoin.js.map +1 -0
  178. package/dist/sqlEngine/physical/PhysicalIndexNestedLoopJoin.d.ts +36 -0
  179. package/dist/sqlEngine/physical/PhysicalIndexNestedLoopJoin.js +78 -0
  180. package/dist/sqlEngine/physical/PhysicalIndexNestedLoopJoin.js.map +1 -0
  181. package/dist/sqlEngine/physical/PhysicalIndexScan.d.ts +22 -0
  182. package/dist/sqlEngine/physical/PhysicalIndexScan.js +77 -0
  183. package/dist/sqlEngine/physical/PhysicalIndexScan.js.map +1 -0
  184. package/dist/sqlEngine/physical/PhysicalLimit.d.ts +5 -0
  185. package/dist/sqlEngine/physical/PhysicalLimit.js +28 -0
  186. package/dist/sqlEngine/physical/PhysicalLimit.js.map +1 -0
  187. package/dist/sqlEngine/physical/PhysicalNestedLoopJoin.d.ts +20 -0
  188. package/dist/sqlEngine/physical/PhysicalNestedLoopJoin.js +51 -0
  189. package/dist/sqlEngine/physical/PhysicalNestedLoopJoin.js.map +1 -0
  190. package/dist/sqlEngine/physical/PhysicalProject.d.ts +18 -0
  191. package/dist/sqlEngine/physical/PhysicalProject.js +117 -0
  192. package/dist/sqlEngine/physical/PhysicalProject.js.map +1 -0
  193. package/dist/sqlEngine/physical/PhysicalQualify.d.ts +13 -0
  194. package/dist/sqlEngine/physical/PhysicalQualify.js +29 -0
  195. package/dist/sqlEngine/physical/PhysicalQualify.js.map +1 -0
  196. package/dist/sqlEngine/physical/PhysicalSort.d.ts +12 -0
  197. package/dist/sqlEngine/physical/PhysicalSort.js +59 -0
  198. package/dist/sqlEngine/physical/PhysicalSort.js.map +1 -0
  199. package/dist/sqlEngine/physical/op.d.ts +11 -0
  200. package/dist/sqlEngine/physical/op.js +9 -0
  201. package/dist/sqlEngine/physical/op.js.map +1 -0
  202. package/dist/sqlEngine/physical/plan.d.ts +23 -0
  203. package/dist/sqlEngine/physical/plan.js +162 -0
  204. package/dist/sqlEngine/physical/plan.js.map +1 -0
  205. package/dist/sqlEngine/router.d.ts +26 -0
  206. package/dist/sqlEngine/router.js +48 -0
  207. package/dist/sqlEngine/router.js.map +1 -0
  208. package/dist/sqlEngine/types.d.ts +37 -0
  209. package/dist/sqlEngine/types.js +13 -0
  210. package/dist/sqlEngine/types.js.map +1 -0
  211. package/dist/sqlTranslator/index.js +7 -1
  212. package/dist/sqlTranslator/index.js.map +1 -1
  213. package/dist/utility/common_utils.js +25 -0
  214. package/dist/utility/common_utils.js.map +1 -1
  215. package/dist/utility/install/installer.d.ts +9 -1
  216. package/dist/utility/install/installer.js +21 -0
  217. package/dist/utility/install/installer.js.map +1 -1
  218. package/dist/validation/configValidator.js +3 -0
  219. package/dist/validation/configValidator.js.map +1 -1
  220. package/dist/validation/deleteValidator.js +10 -2
  221. package/dist/validation/deleteValidator.js.map +1 -1
  222. package/npm-shrinkwrap.json +272 -230
  223. package/package.json +3 -3
  224. package/resources/DESIGN.md +17 -16
  225. package/resources/DatabaseTransaction.ts +95 -0
  226. package/resources/RequestTarget.ts +12 -3
  227. package/resources/Resource.ts +23 -2
  228. package/resources/Table.ts +57 -6
  229. package/resources/analytics/metadata.ts +3 -0
  230. package/resources/analytics/write.ts +23 -0
  231. package/resources/databases.ts +24 -0
  232. package/resources/defineResource.ts +17 -4
  233. package/resources/jsResource.ts +61 -2
  234. package/resources/openApi.ts +44 -19
  235. package/resources/scheduler/CronExpression.ts +394 -0
  236. package/resources/scheduler/engine.ts +812 -0
  237. package/resources/scheduler/scheduler.ts +236 -0
  238. package/security/auth.ts +1 -0
  239. package/security/jsLoader.ts +8 -0
  240. package/security/keys.ts +152 -0
  241. package/server/REST.ts +70 -1
  242. package/server/Server.ts +6 -0
  243. package/server/http.ts +122 -15
  244. package/server/operationsServer.ts +5 -3
  245. package/server/serverHelpers/progressEmitter.ts +5 -1
  246. package/server/threads/threadServer.js +9 -5
  247. package/sqlTranslator/index.ts +16 -6
  248. package/studio/web/assets/{Chat-CTjtL8Z4.js → Chat-DHP4XpID.js} +2 -2
  249. package/studio/web/assets/{Chat-CTjtL8Z4.js.map → Chat-DHP4XpID.js.map} +1 -1
  250. package/studio/web/assets/{FloatingChat-CafHR4Ur.js → FloatingChat-CJ7PssCv.js} +4 -4
  251. package/studio/web/assets/{FloatingChat-CafHR4Ur.js.map → FloatingChat-CJ7PssCv.js.map} +1 -1
  252. package/studio/web/assets/{applications-Buh_q0Vj.js → applications-DxXiGpsR.js} +2 -2
  253. package/studio/web/assets/{applications-Buh_q0Vj.js.map → applications-DxXiGpsR.js.map} +1 -1
  254. package/studio/web/assets/{index-0hXeECkS.js → index-BdbBanDP.js} +6 -6
  255. package/studio/web/assets/{index-0hXeECkS.js.map → index-BdbBanDP.js.map} +1 -1
  256. package/studio/web/assets/{index.lazy-B00B7VBT.js → index.lazy-B2eH28zD.js} +4 -4
  257. package/studio/web/assets/{index.lazy-B00B7VBT.js.map → index.lazy-B2eH28zD.js.map} +1 -1
  258. package/studio/web/assets/{profile-Cg2wwYPn.js → profile-DK5hgucv.js} +2 -2
  259. package/studio/web/assets/{profile-Cg2wwYPn.js.map → profile-DK5hgucv.js.map} +1 -1
  260. package/studio/web/assets/{setComponentFile-DCaDIvyB.js → setComponentFile-BVDWRYxx.js} +2 -2
  261. package/studio/web/assets/{setComponentFile-DCaDIvyB.js.map → setComponentFile-BVDWRYxx.js.map} +1 -1
  262. package/studio/web/assets/{setup-CAVcAQjK.js → setup-DJ9BInoK.js} +2 -2
  263. package/studio/web/assets/{setup-CAVcAQjK.js.map → setup-DJ9BInoK.js.map} +1 -1
  264. package/studio/web/assets/{status-BRXorNdD.js → status-B_qzmgfD.js} +2 -2
  265. package/studio/web/assets/{status-BRXorNdD.js.map → status-B_qzmgfD.js.map} +1 -1
  266. package/studio/web/assets/{swagger-ui-react-Dy1D62vO.js → swagger-ui-react-DOL5jCqg.js} +2 -2
  267. package/studio/web/assets/{swagger-ui-react-Dy1D62vO.js.map → swagger-ui-react-DOL5jCqg.js.map} +1 -1
  268. package/studio/web/assets/{tsMode-A8gbL74v.js → tsMode-DpxUxfTW.js} +2 -2
  269. package/studio/web/assets/{tsMode-A8gbL74v.js.map → tsMode-DpxUxfTW.js.map} +1 -1
  270. package/studio/web/assets/{useEntityRestURL-cDodrVcQ.js → useEntityRestURL-CU_lY6XW.js} +2 -2
  271. package/studio/web/assets/{useEntityRestURL-cDodrVcQ.js.map → useEntityRestURL-CU_lY6XW.js.map} +1 -1
  272. package/studio/web/index.html +1 -1
  273. package/utility/common_utils.ts +26 -0
  274. package/utility/install/installer.ts +26 -1
  275. package/validation/configValidator.ts +3 -0
  276. package/validation/deleteValidator.ts +11 -2
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Normalizes the AlaSQL AST into the internal IR.
3
+ *
4
+ * The full AlaSQL AST shape is documented inline. Highlights:
5
+ * - WHERE wraps the predicate as { expression: ExprAst }.
6
+ * - Binary expressions are { left, op, right }.
7
+ * - BETWEEN uses { op: 'BETWEEN', left, right1, right2 }.
8
+ * - IN uses { op: 'IN', left, right: [values] }.
9
+ * - IS NULL uses { op: 'IS', left, right: {} }.
10
+ * - NOT uses { op: 'NOT', right }.
11
+ * - Column refs are { columnid, tableid? }.
12
+ * - Literals are { value }.
13
+ * - Aggregates are columns with { aggregatorid, expression, as? }.
14
+ * - Function calls are { funcid, args }.
15
+ *
16
+ * Phase 1 only handles SELECT. INSERT/UPDATE/DELETE throw
17
+ * EngineUnsupportedError.
18
+ */
19
+ import type { StatementNode } from './ast.ts';
20
+ interface AlaSqlNode {
21
+ [key: string]: unknown;
22
+ }
23
+ /**
24
+ * Entry point. The caller passes `parsedSqlObject.ast.statements[0]` (an
25
+ * `alasql.yy.Select` instance) plus the variant string.
26
+ */
27
+ export declare function normalizeStatement(stmt: AlaSqlNode, variant: string): StatementNode;
28
+ export {};
@@ -0,0 +1,413 @@
1
+ "use strict";
2
+ /**
3
+ * Normalizes the AlaSQL AST into the internal IR.
4
+ *
5
+ * The full AlaSQL AST shape is documented inline. Highlights:
6
+ * - WHERE wraps the predicate as { expression: ExprAst }.
7
+ * - Binary expressions are { left, op, right }.
8
+ * - BETWEEN uses { op: 'BETWEEN', left, right1, right2 }.
9
+ * - IN uses { op: 'IN', left, right: [values] }.
10
+ * - IS NULL uses { op: 'IS', left, right: {} }.
11
+ * - NOT uses { op: 'NOT', right }.
12
+ * - Column refs are { columnid, tableid? }.
13
+ * - Literals are { value }.
14
+ * - Aggregates are columns with { aggregatorid, expression, as? }.
15
+ * - Function calls are { funcid, args }.
16
+ *
17
+ * Phase 1 only handles SELECT. INSERT/UPDATE/DELETE throw
18
+ * EngineUnsupportedError.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.normalizeStatement = normalizeStatement;
22
+ const errors_ts_1 = require("../errors.js");
23
+ const registry_ts_1 = require("../functions/registry.js");
24
+ /**
25
+ * Entry point. The caller passes `parsedSqlObject.ast.statements[0]` (an
26
+ * `alasql.yy.Select` instance) plus the variant string.
27
+ */
28
+ function normalizeStatement(stmt, variant) {
29
+ switch (variant) {
30
+ case 'select':
31
+ return normalizeSelect(stmt);
32
+ case 'insert':
33
+ return normalizeInsert(stmt);
34
+ case 'update':
35
+ return normalizeUpdate(stmt);
36
+ case 'delete':
37
+ return normalizeDelete(stmt);
38
+ default:
39
+ throw new errors_ts_1.EngineUnsupportedError(`unknown SQL variant: ${variant}`);
40
+ }
41
+ }
42
+ /**
43
+ * AlaSQL INSERT shape: { into: { databaseid, tableid }, columns: [{ columnid }],
44
+ * values: [[ {value}|expr, … ], …] }. `INSERT … SELECT` (no `values`) is rejected
45
+ * for now so 'auto' mode falls back to legacy.
46
+ */
47
+ function normalizeInsert(stmt) {
48
+ const into = stmt.into;
49
+ if (!into)
50
+ throw new errors_ts_1.EngineUnsupportedError('INSERT requires an INTO clause', stmt);
51
+ const table = normalizeTableRef(into);
52
+ if (!Array.isArray(stmt.columns)) {
53
+ throw new errors_ts_1.EngineUnsupportedError('INSERT requires an explicit column list', stmt);
54
+ }
55
+ const columns = stmt.columns.map((c) => {
56
+ const id = c.columnid;
57
+ if (typeof id !== 'string')
58
+ throw new errors_ts_1.EngineUnsupportedError('INSERT column must be a plain name', c);
59
+ return id;
60
+ });
61
+ if (!Array.isArray(stmt.values)) {
62
+ throw new errors_ts_1.EngineUnsupportedError('INSERT … SELECT is not supported yet (v1: VALUES only)', stmt);
63
+ }
64
+ const values = stmt.values.map((row) => {
65
+ if (!Array.isArray(row))
66
+ throw new errors_ts_1.EngineUnsupportedError('INSERT VALUES row must be a list', stmt);
67
+ if (row.length !== columns.length) {
68
+ throw new errors_ts_1.EngineUnsupportedError('INSERT values do not match the number of columns', stmt);
69
+ }
70
+ return row.map((v) => normalizeExpr(v));
71
+ });
72
+ return { kind: 'insert', table, columns, values };
73
+ }
74
+ /**
75
+ * AlaSQL UPDATE shape: { table: { databaseid, tableid }, columns: [{ column: {
76
+ * columnid }, expression }], where }.
77
+ */
78
+ function normalizeUpdate(stmt) {
79
+ const tableNode = stmt.table;
80
+ if (!tableNode)
81
+ throw new errors_ts_1.EngineUnsupportedError('UPDATE requires a table', stmt);
82
+ const table = normalizeTableRef(tableNode);
83
+ if (!Array.isArray(stmt.columns) || stmt.columns.length === 0) {
84
+ throw new errors_ts_1.EngineUnsupportedError('UPDATE requires a SET clause', stmt);
85
+ }
86
+ const assignments = stmt.columns.map((c) => {
87
+ const column = c.column?.columnid;
88
+ if (typeof column !== 'string')
89
+ throw new errors_ts_1.EngineUnsupportedError('UPDATE SET target must be a column', c);
90
+ return { column, expr: normalizeExpr(c.expression) };
91
+ });
92
+ const where = stmt.where ? normalizeExpr(extractWhere(stmt.where)) : undefined;
93
+ return { kind: 'update', table, assignments, where };
94
+ }
95
+ /** AlaSQL DELETE shape: { table: { databaseid, tableid }, where }. */
96
+ function normalizeDelete(stmt) {
97
+ const tableNode = stmt.table;
98
+ if (!tableNode)
99
+ throw new errors_ts_1.EngineUnsupportedError('DELETE requires a table', stmt);
100
+ const table = normalizeTableRef(tableNode);
101
+ const where = stmt.where ? normalizeExpr(extractWhere(stmt.where)) : undefined;
102
+ return { kind: 'delete', table, where };
103
+ }
104
+ function normalizeSelect(stmt) {
105
+ if (!Array.isArray(stmt.from) || stmt.from.length === 0) {
106
+ throw new errors_ts_1.EngineUnsupportedError('SELECT requires a FROM clause', stmt);
107
+ }
108
+ const fromList = stmt.from;
109
+ const from = normalizeTableRef(fromList[0]);
110
+ // JOINs arrive in two AlaSQL shapes:
111
+ // - explicit `stmt.joins`: [{ joinmode, table, as, on, using }]
112
+ // - comma-separated FROM (`FROM a, b`): the extra `stmt.from` entries,
113
+ // which are implicit CROSS joins (any join predicate lands in WHERE).
114
+ const joins = [];
115
+ for (let i = 1; i < fromList.length; i++) {
116
+ joins.push({ type: 'cross', table: normalizeTableRef(fromList[i]) });
117
+ }
118
+ if (Array.isArray(stmt.joins)) {
119
+ for (const j of stmt.joins) {
120
+ joins.push(normalizeJoin(j));
121
+ }
122
+ }
123
+ const columns = stmt.columns;
124
+ if (!Array.isArray(columns)) {
125
+ throw new errors_ts_1.EngineUnsupportedError('SELECT requires a column list');
126
+ }
127
+ const projections = columns.map((c) => normalizeProjection(c));
128
+ const groupBy = stmt.group != null && Array.isArray(stmt.group) && stmt.group.length > 0
129
+ ? stmt.group.map(normalizeExpr)
130
+ : undefined;
131
+ const having = stmt.having != null ? normalizeExpr(extractWhere(stmt.having)) : undefined;
132
+ const where = stmt.where ? normalizeExpr(extractWhere(stmt.where)) : undefined;
133
+ const orderBy = stmt.order ? stmt.order.map(normalizeSort) : undefined;
134
+ const limit = readNumValue(stmt.limit);
135
+ const offset = readNumValue(stmt.offset);
136
+ const distinct = !!stmt.distinct;
137
+ return {
138
+ kind: 'select',
139
+ distinct,
140
+ projections,
141
+ from,
142
+ joins,
143
+ where,
144
+ groupBy,
145
+ having,
146
+ orderBy,
147
+ limit,
148
+ offset,
149
+ };
150
+ }
151
+ function extractWhere(where) {
152
+ if (where.expression != null)
153
+ return where.expression;
154
+ return where;
155
+ }
156
+ function normalizeTableRef(node) {
157
+ const database = node.databaseid ?? '';
158
+ const table = node.tableid ?? '';
159
+ if (!table)
160
+ throw new errors_ts_1.EngineUnsupportedError('FROM requires a table name', node);
161
+ const alias = node.as;
162
+ return { database, table, alias };
163
+ }
164
+ /**
165
+ * AlaSQL join shape: { joinmode, table: { databaseid, tableid, as }, as?, on?, using? }.
166
+ * `joinmode` is one of 'INNER' | 'LEFT' | 'RIGHT' | 'OUTER' | 'CROSS' (sometimes
167
+ * suffixed with ' OUTER'). RIGHT/FULL OUTER are rejected per the v1 plan.
168
+ */
169
+ function normalizeJoin(node) {
170
+ const rawMode = String(node.joinmode ?? 'INNER').toUpperCase();
171
+ let type;
172
+ if (rawMode.startsWith('LEFT'))
173
+ type = 'left';
174
+ else if (rawMode.startsWith('CROSS'))
175
+ type = 'cross';
176
+ else if (rawMode.startsWith('INNER') || rawMode === 'JOIN' || rawMode === '')
177
+ type = 'inner';
178
+ else if (rawMode.startsWith('RIGHT')) {
179
+ throw new errors_ts_1.EngineUnsupportedError('RIGHT JOIN is not supported (v1)', node);
180
+ }
181
+ else if (rawMode.startsWith('FULL') || rawMode.startsWith('OUTER')) {
182
+ throw new errors_ts_1.EngineUnsupportedError('FULL OUTER JOIN is not supported (v1)', node);
183
+ }
184
+ else {
185
+ throw new errors_ts_1.EngineUnsupportedError(`unsupported join mode: ${rawMode}`, node);
186
+ }
187
+ const tableNode = node.table;
188
+ if (!tableNode)
189
+ throw new errors_ts_1.EngineUnsupportedError('JOIN requires a table', node);
190
+ const table = normalizeTableRef({ ...tableNode, as: tableNode.as ?? node.as });
191
+ const on = node.on != null ? normalizeExpr(extractWhere(node.on)) : undefined;
192
+ const using = Array.isArray(node.using)
193
+ ? node.using.map((u) => String(u.columnid ?? u))
194
+ : undefined;
195
+ if (type !== 'cross' && !on && !using) {
196
+ throw new errors_ts_1.EngineUnsupportedError('JOIN requires an ON or USING clause', node);
197
+ }
198
+ return { type, table, on, using };
199
+ }
200
+ function normalizeProjection(col) {
201
+ const alias = col.as;
202
+ if (typeof col.columnid === 'string' && col.tableid == null && col.aggregatorid == null && col.funcid == null) {
203
+ if (col.columnid === '*') {
204
+ return { expr: { kind: 'star' }, alias };
205
+ }
206
+ return { expr: { kind: 'column', name: col.columnid }, alias };
207
+ }
208
+ if (typeof col.columnid === 'string' && typeof col.tableid === 'string') {
209
+ if (col.columnid === '*') {
210
+ return { expr: { kind: 'star', table: col.tableid }, alias };
211
+ }
212
+ return { expr: { kind: 'column', table: col.tableid, name: col.columnid }, alias };
213
+ }
214
+ const expr = normalizeExpr(col);
215
+ // Give an unaliased aggregate the legacy AlaSQL column label (`COUNT(*)`,
216
+ // `SUM(price)`, …) so its output key matches the legacy engine. Other
217
+ // expressions keep the existing label fallback.
218
+ return { expr, alias, label: alias ? undefined : aggregateLabel(expr) };
219
+ }
220
+ /** Legacy AlaSQL default column name for an unaliased aggregate, else undefined. */
221
+ function aggregateLabel(expr) {
222
+ if (expr.kind !== 'aggCall')
223
+ return undefined;
224
+ const arg = expr.arg.kind === 'star'
225
+ ? '*'
226
+ : expr.arg.kind === 'column'
227
+ ? expr.arg.table
228
+ ? `${expr.arg.table}.${expr.arg.name}`
229
+ : expr.arg.name
230
+ : undefined;
231
+ if (arg === undefined)
232
+ return undefined;
233
+ return `${expr.name.toUpperCase()}(${expr.distinct ? 'DISTINCT ' : ''}${arg})`;
234
+ }
235
+ function normalizeSort(node) {
236
+ return {
237
+ expr: normalizeExpr(node.expression),
238
+ descending: node.direction === 'DESC',
239
+ };
240
+ }
241
+ function readNumValue(node) {
242
+ if (node == null)
243
+ return undefined;
244
+ const v = node.value;
245
+ if (typeof v === 'number')
246
+ return v;
247
+ if (typeof v === 'string')
248
+ return Number(v);
249
+ return undefined;
250
+ }
251
+ const ALASQL_BINARY_OPS = {
252
+ '=': '=',
253
+ '==': '=',
254
+ '!=': '!=',
255
+ '<>': '<>',
256
+ '<': '<',
257
+ '<=': '<=',
258
+ '>': '>',
259
+ '>=': '>=',
260
+ '+': '+',
261
+ '-': '-',
262
+ '*': '*',
263
+ '/': '/',
264
+ '%': '%',
265
+ '||': '||',
266
+ };
267
+ function normalizeExpr(node) {
268
+ if (node == null) {
269
+ throw new errors_ts_1.EngineUnsupportedError('null expression');
270
+ }
271
+ if (typeof node !== 'object') {
272
+ throw new errors_ts_1.EngineUnsupportedError(`unexpected non-object expression: ${typeof node}`);
273
+ }
274
+ if (node.aggregatorid != null && node.expression != null) {
275
+ // AlaSQL uses aggregatorid='REDUCE' with funcid set for user-defined aggregates
276
+ // (e.g. MEDIAN). Use funcid as the real name when aggregatorid is REDUCE.
277
+ const rawName = String(node.aggregatorid).toUpperCase() === 'REDUCE' && node.funcid != null
278
+ ? String(node.funcid)
279
+ : String(node.aggregatorid);
280
+ const arg = node.expression.columnid === '*'
281
+ ? { kind: 'star' }
282
+ : normalizeExpr(node.expression);
283
+ return {
284
+ kind: 'aggCall',
285
+ name: rawName.toLowerCase(),
286
+ arg,
287
+ distinct: !!node.distinct,
288
+ };
289
+ }
290
+ if (node.funcid != null) {
291
+ const fnName = String(node.funcid).toLowerCase();
292
+ const args = Array.isArray(node.args) ? node.args.map(normalizeExpr) : [];
293
+ // If this funcCall is a registered aggregate (e.g. PROD, MEAN that AlaSQL
294
+ // doesn't recognize as aggregates), treat it as an aggCall.
295
+ const desc = registry_ts_1.functionRegistry.lookup(fnName);
296
+ if (desc?.kind === 'aggregate') {
297
+ const arg = args.length === 0 ? { kind: 'star' } : args[0];
298
+ return { kind: 'aggCall', name: fnName, arg, distinct: !!node.distinct };
299
+ }
300
+ return {
301
+ kind: 'funcCall',
302
+ name: fnName,
303
+ args,
304
+ distinct: !!node.distinct,
305
+ };
306
+ }
307
+ if (typeof node.columnid === 'string' && node.aggregatorid == null && node.funcid == null) {
308
+ if (node.columnid === '*') {
309
+ return { kind: 'star', table: node.tableid };
310
+ }
311
+ return {
312
+ kind: 'column',
313
+ table: node.tableid,
314
+ name: node.columnid,
315
+ };
316
+ }
317
+ if (Object.prototype.hasOwnProperty.call(node, 'value') && node.left == null && node.op == null) {
318
+ const val = node.value;
319
+ const sqlType = val === null
320
+ ? 'null'
321
+ : typeof val === 'number'
322
+ ? 'number'
323
+ : typeof val === 'string'
324
+ ? 'string'
325
+ : typeof val === 'boolean'
326
+ ? 'boolean'
327
+ : 'unknown';
328
+ return { kind: 'literal', value: val, sqlType };
329
+ }
330
+ if (typeof node.op === 'string') {
331
+ const op = node.op.toUpperCase();
332
+ switch (op) {
333
+ case '=':
334
+ case '==':
335
+ case '!=':
336
+ case '<>':
337
+ case '<':
338
+ case '<=':
339
+ case '>':
340
+ case '>=':
341
+ case '+':
342
+ case '-':
343
+ case '*':
344
+ case '/':
345
+ case '%':
346
+ case '||':
347
+ return {
348
+ kind: 'binop',
349
+ op: ALASQL_BINARY_OPS[op] ?? op,
350
+ left: normalizeExpr(node.left),
351
+ right: normalizeExpr(node.right),
352
+ };
353
+ case 'AND':
354
+ case 'OR':
355
+ return {
356
+ kind: 'logical',
357
+ op: op === 'AND' ? 'and' : 'or',
358
+ args: [normalizeExpr(node.left), normalizeExpr(node.right)],
359
+ };
360
+ case 'NOT':
361
+ return {
362
+ kind: 'logical',
363
+ op: 'not',
364
+ args: [normalizeExpr((node.right ?? node.left))],
365
+ };
366
+ case 'IN':
367
+ case 'NOT IN': {
368
+ const list = Array.isArray(node.right)
369
+ ? node.right.map(normalizeExpr)
370
+ : [normalizeExpr(node.right)];
371
+ return {
372
+ kind: 'in',
373
+ expr: normalizeExpr(node.left),
374
+ list,
375
+ negated: op === 'NOT IN',
376
+ };
377
+ }
378
+ case 'BETWEEN':
379
+ case 'NOT BETWEEN':
380
+ return {
381
+ kind: 'between',
382
+ expr: normalizeExpr(node.left),
383
+ low: normalizeExpr(node.right1),
384
+ high: normalizeExpr(node.right2),
385
+ negated: op === 'NOT BETWEEN',
386
+ };
387
+ case 'LIKE':
388
+ case 'NOT LIKE':
389
+ return {
390
+ kind: 'like',
391
+ expr: normalizeExpr(node.left),
392
+ pattern: normalizeExpr(node.right),
393
+ negated: op === 'NOT LIKE',
394
+ };
395
+ case 'IS': {
396
+ const right = node.right;
397
+ const isEmpty = right != null && Object.keys(right).length === 0;
398
+ const negated = !!node.not;
399
+ if (isEmpty) {
400
+ return { kind: 'isNull', expr: normalizeExpr(node.left), negated };
401
+ }
402
+ if (right != null && Object.prototype.hasOwnProperty.call(right, 'value') && right.value == null) {
403
+ return { kind: 'isNull', expr: normalizeExpr(node.left), negated };
404
+ }
405
+ throw new errors_ts_1.EngineUnsupportedError(`IS expression with non-null right side is not supported`, node);
406
+ }
407
+ default:
408
+ throw new errors_ts_1.EngineUnsupportedError(`unsupported operator ${op}`, node);
409
+ }
410
+ }
411
+ throw new errors_ts_1.EngineUnsupportedError(`could not normalize expression`, node);
412
+ }
413
+ //# sourceMappingURL=normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.js","sourceRoot":"","sources":["../../../sqlEngine/parser/normalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Thin wrapper around alasql.parse.
3
+ *
4
+ * The new engine never owns the raw AlaSQL parse output beyond this file —
5
+ * normalizer.ts converts it into the internal IR (ast.ts) and the rest of the
6
+ * pipeline only sees the IR.
7
+ */
8
+ declare const alasql: any;
9
+ export interface AlaSqlParseResult {
10
+ ast: unknown;
11
+ variant: string;
12
+ }
13
+ export declare function parseSql(sql: string): AlaSqlParseResult;
14
+ export { alasql };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * Thin wrapper around alasql.parse.
4
+ *
5
+ * The new engine never owns the raw AlaSQL parse output beyond this file —
6
+ * normalizer.ts converts it into the internal IR (ast.ts) and the rest of the
7
+ * pipeline only sees the IR.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.alasql = void 0;
11
+ exports.parseSql = parseSql;
12
+ const alasql = require('alasql');
13
+ exports.alasql = alasql;
14
+ function parseSql(sql) {
15
+ const trimmed = sql.trim();
16
+ const ast = alasql.parse(trimmed);
17
+ const variant = trimmed.split(/\s+/)[0]?.toLowerCase() ?? '';
18
+ return { ast, variant };
19
+ }
20
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../sqlEngine/parser/parse.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AASH,4BAKC;AAZD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAcxB,wBAAM;AAPf,SAAgB,QAAQ,CAAC,GAAW;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC7D,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * PhysicalDistinct: in-memory deduplication using a Set of JSON-serialised rows.
3
+ *
4
+ * Streaming: rows are yielded as they arrive; the Set grows until the iterator
5
+ * is exhausted. There is no row-count cap here — callers that need to bound
6
+ * memory should reject DISTINCT on large inputs at the optimiser level.
7
+ */
8
+ import type { PhysicalOp } from './op.ts';
9
+ export declare function physicalDistinct(input: PhysicalOp): PhysicalOp;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /**
3
+ * PhysicalDistinct: in-memory deduplication using a Set of JSON-serialised rows.
4
+ *
5
+ * Streaming: rows are yielded as they arrive; the Set grows until the iterator
6
+ * is exhausted. There is no row-count cap here — callers that need to bound
7
+ * memory should reject DISTINCT on large inputs at the optimiser level.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.physicalDistinct = physicalDistinct;
11
+ function physicalDistinct(input) {
12
+ return {
13
+ schema: input.schema,
14
+ execute(ctx) {
15
+ return dedup(input, ctx);
16
+ },
17
+ };
18
+ }
19
+ async function* dedup(input, ctx) {
20
+ const seen = new Set();
21
+ for await (const row of input.execute(ctx)) {
22
+ const key = JSON.stringify(row);
23
+ if (!seen.has(key)) {
24
+ seen.add(key);
25
+ yield row;
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=PhysicalDistinct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhysicalDistinct.js","sourceRoot":"","sources":["../../../sqlEngine/physical/PhysicalDistinct.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAKH,4CAOC;AAPD,SAAgB,gBAAgB,CAAC,KAAiB;IACjD,OAAO;QACN,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,CAAC,GAAqB;YAC5B,OAAO,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC;KACD,CAAC;AACH,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,KAAK,CAAC,KAAiB,EAAE,GAAqB;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,GAAG,CAAC;QACX,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * PhysicalFilter: lazy residual filter on top of a child iterable.
3
+ *
4
+ * Drops rows when the compiled predicate evaluates to anything other than
5
+ * truthy (`null`/`undefined`/`false`). Three-valued logic for the predicate
6
+ * itself is handled inside compileExpr.
7
+ */
8
+ import type { ExprNode } from '../parser/ast.ts';
9
+ import type { PhysicalOp } from './op.ts';
10
+ export declare function physicalFilter(child: PhysicalOp, predicate: ExprNode, qualified?: boolean): PhysicalOp;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ /**
3
+ * PhysicalFilter: lazy residual filter on top of a child iterable.
4
+ *
5
+ * Drops rows when the compiled predicate evaluates to anything other than
6
+ * truthy (`null`/`undefined`/`false`). Three-valued logic for the predicate
7
+ * itself is handled inside compileExpr.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.physicalFilter = physicalFilter;
11
+ const compile_ts_1 = require("../expressions/compile.js");
12
+ function physicalFilter(child, predicate, qualified = false) {
13
+ const compiled = (0, compile_ts_1.compileExpr)(predicate, qualified);
14
+ return {
15
+ schema: child.schema,
16
+ async *execute(ctx) {
17
+ for await (const row of child.execute(ctx)) {
18
+ const v = compiled.eval(row);
19
+ if (v != null && v !== false)
20
+ yield row;
21
+ }
22
+ },
23
+ };
24
+ }
25
+ //# sourceMappingURL=PhysicalFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhysicalFilter.js","sourceRoot":"","sources":["../../../sqlEngine/physical/PhysicalFilter.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAOH,wCAWC;AAbD,0DAAwD;AAExD,SAAgB,cAAc,CAAC,KAAiB,EAAE,SAAmB,EAAE,SAAS,GAAG,KAAK;IACvF,MAAM,QAAQ,GAAG,IAAA,wBAAW,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACnD,OAAO;QACN,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,CAAC,CAAC,OAAO,CAAC,GAAqB;YACnC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK;oBAAE,MAAM,GAAG,CAAC;YACzC,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * PhysicalHashAggregate: groups all input rows in a Map keyed on JSON-serialised
3
+ * group-key values, then finalises accumulators and yields one output row per
4
+ * group.
5
+ *
6
+ * Memory is bounded by maxHashRows (total input rows consumed), after which an
7
+ * EngineUnsupportedError is thrown so the router falls back to legacy in 'auto'
8
+ * mode (runSelect fully materializes before returning, so nothing has been
9
+ * emitted when the cap trips).
10
+ *
11
+ * Special cases:
12
+ * - No GROUP BY + no rows → emit one row with default aggregate values
13
+ * (e.g. COUNT(*) = 0).
14
+ * - COUNT(*) arg is a star placeholder; we pass the sentinel value 1 to step()
15
+ * so the accumulator counts every row unconditionally.
16
+ */
17
+ import type { ExprNode } from '../parser/ast.ts';
18
+ import type { PhysicalOp } from './op.ts';
19
+ export interface AggOpSpec {
20
+ name: string;
21
+ arg: ExprNode | {
22
+ kind: 'star';
23
+ };
24
+ outputName: string;
25
+ distinct?: boolean;
26
+ }
27
+ export declare function physicalHashAggregate(input: PhysicalOp, groupKeys: ExprNode[], aggs: AggOpSpec[], maxHashRows: number, qualified?: boolean): PhysicalOp;