@quereus/quereus 0.2.1 → 0.4.5

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 (760) hide show
  1. package/README.md +12 -1
  2. package/dist/src/common/errors.js.map +1 -1
  3. package/dist/src/common/json-types.d.ts +11 -0
  4. package/dist/src/common/json-types.d.ts.map +1 -0
  5. package/dist/src/common/json-types.js +3 -0
  6. package/dist/src/common/json-types.js.map +1 -0
  7. package/dist/src/common/types.d.ts +1 -0
  8. package/dist/src/common/types.d.ts.map +1 -1
  9. package/dist/src/core/database-options.d.ts +2 -2
  10. package/dist/src/core/database-options.d.ts.map +1 -1
  11. package/dist/src/core/database-options.js.map +1 -1
  12. package/dist/src/core/database.d.ts +61 -14
  13. package/dist/src/core/database.d.ts.map +1 -1
  14. package/dist/src/core/database.js +481 -54
  15. package/dist/src/core/database.js.map +1 -1
  16. package/dist/src/core/statement.d.ts.map +1 -1
  17. package/dist/src/core/statement.js +3 -1
  18. package/dist/src/core/statement.js.map +1 -1
  19. package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
  20. package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
  21. package/dist/src/func/builtins/datetime.d.ts +2 -0
  22. package/dist/src/func/builtins/datetime.d.ts.map +1 -1
  23. package/dist/src/func/builtins/datetime.js +39 -0
  24. package/dist/src/func/builtins/datetime.js.map +1 -1
  25. package/dist/src/func/builtins/explain.d.ts +1 -0
  26. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  27. package/dist/src/func/builtins/explain.js +159 -36
  28. package/dist/src/func/builtins/explain.js.map +1 -1
  29. package/dist/src/func/builtins/index.d.ts.map +1 -1
  30. package/dist/src/func/builtins/index.js +5 -2
  31. package/dist/src/func/builtins/index.js.map +1 -1
  32. package/dist/src/func/builtins/json-helpers.d.ts +8 -8
  33. package/dist/src/func/builtins/json-helpers.d.ts.map +1 -1
  34. package/dist/src/func/builtins/json-helpers.js +3 -3
  35. package/dist/src/func/builtins/json-helpers.js.map +1 -1
  36. package/dist/src/func/builtins/json-tvf.d.ts.map +1 -1
  37. package/dist/src/func/builtins/json-tvf.js +1 -1
  38. package/dist/src/func/builtins/json-tvf.js.map +1 -1
  39. package/dist/src/func/builtins/json.d.ts.map +1 -1
  40. package/dist/src/func/builtins/json.js +3 -2
  41. package/dist/src/func/builtins/json.js.map +1 -1
  42. package/dist/src/func/builtins/schema.d.ts.map +1 -1
  43. package/dist/src/func/builtins/schema.js +22 -1
  44. package/dist/src/func/builtins/schema.js.map +1 -1
  45. package/dist/src/func/context.d.ts.map +1 -1
  46. package/dist/src/func/context.js +5 -0
  47. package/dist/src/func/context.js.map +1 -1
  48. package/dist/src/func/registration.d.ts +2 -1
  49. package/dist/src/func/registration.d.ts.map +1 -1
  50. package/dist/src/func/registration.js.map +1 -1
  51. package/dist/src/index.d.ts +2 -2
  52. package/dist/src/index.d.ts.map +1 -1
  53. package/dist/src/index.js +2 -2
  54. package/dist/src/index.js.map +1 -1
  55. package/dist/src/parser/ast.d.ts +83 -4
  56. package/dist/src/parser/ast.d.ts.map +1 -1
  57. package/dist/src/parser/lexer.d.ts +11 -0
  58. package/dist/src/parser/lexer.d.ts.map +1 -1
  59. package/dist/src/parser/lexer.js +29 -21
  60. package/dist/src/parser/lexer.js.map +1 -1
  61. package/dist/src/parser/parser.d.ts +16 -0
  62. package/dist/src/parser/parser.d.ts.map +1 -1
  63. package/dist/src/parser/parser.js +542 -26
  64. package/dist/src/parser/parser.js.map +1 -1
  65. package/dist/src/parser/visitor.d.ts.map +1 -1
  66. package/dist/src/parser/visitor.js +1 -0
  67. package/dist/src/parser/visitor.js.map +1 -1
  68. package/dist/src/planner/analysis/binding-collector.d.ts +5 -0
  69. package/dist/src/planner/analysis/binding-collector.d.ts.map +1 -0
  70. package/dist/src/planner/analysis/binding-collector.js +73 -0
  71. package/dist/src/planner/analysis/binding-collector.js.map +1 -0
  72. package/dist/src/planner/analysis/const-evaluator.js +1 -1
  73. package/dist/src/planner/analysis/const-evaluator.js.map +1 -1
  74. package/dist/src/planner/analysis/const-pass.d.ts.map +1 -1
  75. package/dist/src/planner/analysis/const-pass.js +1 -1
  76. package/dist/src/planner/analysis/const-pass.js.map +1 -1
  77. package/dist/src/planner/analysis/constraint-extractor.d.ts +67 -31
  78. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  79. package/dist/src/planner/analysis/constraint-extractor.js +513 -84
  80. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  81. package/dist/src/planner/analysis/predicate-normalizer.d.ts +17 -0
  82. package/dist/src/planner/analysis/predicate-normalizer.d.ts.map +1 -0
  83. package/dist/src/planner/analysis/predicate-normalizer.js +222 -0
  84. package/dist/src/planner/analysis/predicate-normalizer.js.map +1 -0
  85. package/dist/src/planner/building/alter-table.d.ts.map +1 -1
  86. package/dist/src/planner/building/alter-table.js +5 -2
  87. package/dist/src/planner/building/alter-table.js.map +1 -1
  88. package/dist/src/planner/building/block.d.ts.map +1 -1
  89. package/dist/src/planner/building/block.js +16 -0
  90. package/dist/src/planner/building/block.js.map +1 -1
  91. package/dist/src/planner/building/constraint-builder.d.ts +1 -1
  92. package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
  93. package/dist/src/planner/building/constraint-builder.js +52 -3
  94. package/dist/src/planner/building/constraint-builder.js.map +1 -1
  95. package/dist/src/planner/building/create-assertion.d.ts +5 -0
  96. package/dist/src/planner/building/create-assertion.d.ts.map +1 -0
  97. package/dist/src/planner/building/create-assertion.js +5 -0
  98. package/dist/src/planner/building/create-assertion.js.map +1 -0
  99. package/dist/src/planner/building/declare-schema.d.ts +8 -0
  100. package/dist/src/planner/building/declare-schema.d.ts.map +1 -0
  101. package/dist/src/planner/building/declare-schema.js +14 -0
  102. package/dist/src/planner/building/declare-schema.js.map +1 -0
  103. package/dist/src/planner/building/delete.d.ts.map +1 -1
  104. package/dist/src/planner/building/delete.js +37 -5
  105. package/dist/src/planner/building/delete.js.map +1 -1
  106. package/dist/src/planner/building/drop-assertion.d.ts +5 -0
  107. package/dist/src/planner/building/drop-assertion.d.ts.map +1 -0
  108. package/dist/src/planner/building/drop-assertion.js +8 -0
  109. package/dist/src/planner/building/drop-assertion.js.map +1 -0
  110. package/dist/src/planner/building/expression.d.ts.map +1 -1
  111. package/dist/src/planner/building/expression.js +1 -0
  112. package/dist/src/planner/building/expression.js.map +1 -1
  113. package/dist/src/planner/building/function-call.d.ts.map +1 -1
  114. package/dist/src/planner/building/function-call.js +2 -1
  115. package/dist/src/planner/building/function-call.js.map +1 -1
  116. package/dist/src/planner/building/insert.d.ts.map +1 -1
  117. package/dist/src/planner/building/insert.js +67 -10
  118. package/dist/src/planner/building/insert.js.map +1 -1
  119. package/dist/src/planner/building/pragma.d.ts.map +1 -1
  120. package/dist/src/planner/building/pragma.js +1 -0
  121. package/dist/src/planner/building/pragma.js.map +1 -1
  122. package/dist/src/planner/building/schema-resolution.d.ts +2 -2
  123. package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
  124. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  125. package/dist/src/planner/building/select-aggregates.js +3 -2
  126. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  127. package/dist/src/planner/building/select-compound.d.ts +2 -2
  128. package/dist/src/planner/building/select-compound.d.ts.map +1 -1
  129. package/dist/src/planner/building/select-compound.js +10 -1
  130. package/dist/src/planner/building/select-compound.js.map +1 -1
  131. package/dist/src/planner/building/select-context.d.ts +3 -3
  132. package/dist/src/planner/building/select-context.d.ts.map +1 -1
  133. package/dist/src/planner/building/select-context.js.map +1 -1
  134. package/dist/src/planner/building/select-modifiers.d.ts +6 -5
  135. package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
  136. package/dist/src/planner/building/select-modifiers.js +5 -4
  137. package/dist/src/planner/building/select-modifiers.js.map +1 -1
  138. package/dist/src/planner/building/select-projections.d.ts.map +1 -1
  139. package/dist/src/planner/building/select-projections.js +4 -5
  140. package/dist/src/planner/building/select-projections.js.map +1 -1
  141. package/dist/src/planner/building/select-window.d.ts.map +1 -1
  142. package/dist/src/planner/building/select-window.js +6 -3
  143. package/dist/src/planner/building/select-window.js.map +1 -1
  144. package/dist/src/planner/building/select.d.ts +3 -3
  145. package/dist/src/planner/building/select.d.ts.map +1 -1
  146. package/dist/src/planner/building/select.js +18 -8
  147. package/dist/src/planner/building/select.js.map +1 -1
  148. package/dist/src/planner/building/table-function.d.ts.map +1 -1
  149. package/dist/src/planner/building/table-function.js +1 -1
  150. package/dist/src/planner/building/table-function.js.map +1 -1
  151. package/dist/src/planner/building/table.d.ts +5 -3
  152. package/dist/src/planner/building/table.d.ts.map +1 -1
  153. package/dist/src/planner/building/table.js +7 -2
  154. package/dist/src/planner/building/table.js.map +1 -1
  155. package/dist/src/planner/building/update.d.ts.map +1 -1
  156. package/dist/src/planner/building/update.js +38 -6
  157. package/dist/src/planner/building/update.js.map +1 -1
  158. package/dist/src/planner/building/with.d.ts +3 -3
  159. package/dist/src/planner/building/with.d.ts.map +1 -1
  160. package/dist/src/planner/building/with.js.map +1 -1
  161. package/dist/src/planner/debug.d.ts.map +1 -1
  162. package/dist/src/planner/debug.js.map +1 -1
  163. package/dist/src/planner/framework/characteristics.d.ts +235 -0
  164. package/dist/src/planner/framework/characteristics.d.ts.map +1 -0
  165. package/dist/src/planner/framework/characteristics.js +299 -0
  166. package/dist/src/planner/framework/characteristics.js.map +1 -0
  167. package/dist/src/planner/framework/context.d.ts +16 -5
  168. package/dist/src/planner/framework/context.d.ts.map +1 -1
  169. package/dist/src/planner/framework/context.js +2 -0
  170. package/dist/src/planner/framework/context.js.map +1 -1
  171. package/dist/src/planner/framework/pass.d.ts +116 -0
  172. package/dist/src/planner/framework/pass.d.ts.map +1 -0
  173. package/dist/src/planner/framework/pass.js +236 -0
  174. package/dist/src/planner/framework/pass.js.map +1 -0
  175. package/dist/src/planner/nodes/aggregate-node.d.ts +16 -6
  176. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  177. package/dist/src/planner/nodes/aggregate-node.js +40 -4
  178. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  179. package/dist/src/planner/nodes/array-index-node.js.map +1 -1
  180. package/dist/src/planner/nodes/cache-node.d.ts +5 -2
  181. package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
  182. package/dist/src/planner/nodes/cache-node.js +6 -0
  183. package/dist/src/planner/nodes/cache-node.js.map +1 -1
  184. package/dist/src/planner/nodes/constraint-check-node.d.ts +10 -2
  185. package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
  186. package/dist/src/planner/nodes/constraint-check-node.js +12 -4
  187. package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
  188. package/dist/src/planner/nodes/create-assertion-node.d.ts +22 -0
  189. package/dist/src/planner/nodes/create-assertion-node.d.ts.map +1 -0
  190. package/dist/src/planner/nodes/create-assertion-node.js +41 -0
  191. package/dist/src/planner/nodes/create-assertion-node.js.map +1 -0
  192. package/dist/src/planner/nodes/create-index-node.js +2 -2
  193. package/dist/src/planner/nodes/create-index-node.js.map +1 -1
  194. package/dist/src/planner/nodes/create-table-node.js +2 -2
  195. package/dist/src/planner/nodes/create-table-node.js.map +1 -1
  196. package/dist/src/planner/nodes/cte-node.d.ts +17 -2
  197. package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
  198. package/dist/src/planner/nodes/cte-node.js +9 -1
  199. package/dist/src/planner/nodes/cte-node.js.map +1 -1
  200. package/dist/src/planner/nodes/cte-reference-node.js +1 -1
  201. package/dist/src/planner/nodes/cte-reference-node.js.map +1 -1
  202. package/dist/src/planner/nodes/declarative-schema.d.ts +62 -0
  203. package/dist/src/planner/nodes/declarative-schema.d.ts.map +1 -0
  204. package/dist/src/planner/nodes/declarative-schema.js +181 -0
  205. package/dist/src/planner/nodes/declarative-schema.js.map +1 -0
  206. package/dist/src/planner/nodes/delete-node.d.ts +8 -3
  207. package/dist/src/planner/nodes/delete-node.d.ts.map +1 -1
  208. package/dist/src/planner/nodes/delete-node.js +10 -2
  209. package/dist/src/planner/nodes/delete-node.js.map +1 -1
  210. package/dist/src/planner/nodes/distinct-node.d.ts +3 -2
  211. package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
  212. package/dist/src/planner/nodes/distinct-node.js +17 -4
  213. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  214. package/dist/src/planner/nodes/dml-executor-node.d.ts +1 -1
  215. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  216. package/dist/src/planner/nodes/drop-assertion-node.d.ts +21 -0
  217. package/dist/src/planner/nodes/drop-assertion-node.d.ts.map +1 -0
  218. package/dist/src/planner/nodes/drop-assertion-node.js +41 -0
  219. package/dist/src/planner/nodes/drop-assertion-node.js.map +1 -0
  220. package/dist/src/planner/nodes/drop-table-node.d.ts.map +1 -1
  221. package/dist/src/planner/nodes/drop-table-node.js +1 -0
  222. package/dist/src/planner/nodes/drop-table-node.js.map +1 -1
  223. package/dist/src/planner/nodes/filter.d.ts +8 -3
  224. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  225. package/dist/src/planner/nodes/filter.js +44 -0
  226. package/dist/src/planner/nodes/filter.js.map +1 -1
  227. package/dist/src/planner/nodes/insert-node.d.ts +9 -3
  228. package/dist/src/planner/nodes/insert-node.d.ts.map +1 -1
  229. package/dist/src/planner/nodes/insert-node.js +11 -2
  230. package/dist/src/planner/nodes/insert-node.js.map +1 -1
  231. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts +3 -4
  232. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts.map +1 -1
  233. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js +1 -16
  234. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +1 -1
  235. package/dist/src/planner/nodes/join-node.d.ts +12 -3
  236. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  237. package/dist/src/planner/nodes/join-node.js +111 -2
  238. package/dist/src/planner/nodes/join-node.js.map +1 -1
  239. package/dist/src/planner/nodes/limit-offset.d.ts +7 -3
  240. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  241. package/dist/src/planner/nodes/limit-offset.js +15 -0
  242. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  243. package/dist/src/planner/nodes/plan-node-type.d.ts +8 -0
  244. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  245. package/dist/src/planner/nodes/plan-node-type.js +8 -0
  246. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  247. package/dist/src/planner/nodes/plan-node.d.ts +9 -9
  248. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  249. package/dist/src/planner/nodes/plan-node.js +3 -3
  250. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  251. package/dist/src/planner/nodes/pragma.d.ts +2 -1
  252. package/dist/src/planner/nodes/pragma.d.ts.map +1 -1
  253. package/dist/src/planner/nodes/pragma.js +3 -1
  254. package/dist/src/planner/nodes/pragma.js.map +1 -1
  255. package/dist/src/planner/nodes/project-node.d.ts +16 -3
  256. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  257. package/dist/src/planner/nodes/project-node.js +82 -2
  258. package/dist/src/planner/nodes/project-node.js.map +1 -1
  259. package/dist/src/planner/nodes/recursive-cte-node.d.ts +2 -2
  260. package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
  261. package/dist/src/planner/nodes/recursive-cte-node.js +1 -1
  262. package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
  263. package/dist/src/planner/nodes/reference.d.ts +13 -4
  264. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  265. package/dist/src/planner/nodes/reference.js +16 -0
  266. package/dist/src/planner/nodes/reference.js.map +1 -1
  267. package/dist/src/planner/nodes/remote-query-node.d.ts +37 -0
  268. package/dist/src/planner/nodes/remote-query-node.d.ts.map +1 -0
  269. package/dist/src/planner/nodes/remote-query-node.js +63 -0
  270. package/dist/src/planner/nodes/remote-query-node.js.map +1 -0
  271. package/dist/src/planner/nodes/retrieve-node.d.ts +46 -0
  272. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -0
  273. package/dist/src/planner/nodes/retrieve-node.js +77 -0
  274. package/dist/src/planner/nodes/retrieve-node.js.map +1 -0
  275. package/dist/src/planner/nodes/returning-node.d.ts +4 -3
  276. package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
  277. package/dist/src/planner/nodes/returning-node.js +44 -3
  278. package/dist/src/planner/nodes/returning-node.js.map +1 -1
  279. package/dist/src/planner/nodes/sequencing-node.d.ts +1 -1
  280. package/dist/src/planner/nodes/sequencing-node.d.ts.map +1 -1
  281. package/dist/src/planner/nodes/sequencing-node.js.map +1 -1
  282. package/dist/src/planner/nodes/set-operation-node.d.ts +1 -1
  283. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  284. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  285. package/dist/src/planner/nodes/sort.d.ts +11 -2
  286. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  287. package/dist/src/planner/nodes/sort.js +23 -2
  288. package/dist/src/planner/nodes/sort.js.map +1 -1
  289. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  290. package/dist/src/planner/nodes/stream-aggregate.js +4 -1
  291. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  292. package/dist/src/planner/nodes/table-access-nodes.d.ts +7 -1
  293. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  294. package/dist/src/planner/nodes/table-access-nodes.js +22 -4
  295. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  296. package/dist/src/planner/nodes/table-function-call.d.ts +2 -1
  297. package/dist/src/planner/nodes/table-function-call.d.ts.map +1 -1
  298. package/dist/src/planner/nodes/table-function-call.js +12 -5
  299. package/dist/src/planner/nodes/table-function-call.js.map +1 -1
  300. package/dist/src/planner/nodes/transaction-node.js +2 -2
  301. package/dist/src/planner/nodes/transaction-node.js.map +1 -1
  302. package/dist/src/planner/nodes/update-node.d.ts +7 -1
  303. package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
  304. package/dist/src/planner/nodes/update-node.js +11 -2
  305. package/dist/src/planner/nodes/update-node.js.map +1 -1
  306. package/dist/src/planner/nodes/view-reference-node.js.map +1 -1
  307. package/dist/src/planner/nodes/window-function.js.map +1 -1
  308. package/dist/src/planner/nodes/window-node.js.map +1 -1
  309. package/dist/src/planner/optimizer-tuning.d.ts +11 -0
  310. package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
  311. package/dist/src/planner/optimizer-tuning.js +6 -0
  312. package/dist/src/planner/optimizer-tuning.js.map +1 -1
  313. package/dist/src/planner/optimizer.d.ts +17 -3
  314. package/dist/src/planner/optimizer.d.ts.map +1 -1
  315. package/dist/src/planner/optimizer.js +159 -67
  316. package/dist/src/planner/optimizer.js.map +1 -1
  317. package/dist/src/planner/planning-context.d.ts +5 -3
  318. package/dist/src/planner/planning-context.d.ts.map +1 -1
  319. package/dist/src/planner/planning-context.js +2 -0
  320. package/dist/src/planner/planning-context.js.map +1 -1
  321. package/dist/src/planner/resolve.d.ts +3 -2
  322. package/dist/src/planner/resolve.d.ts.map +1 -1
  323. package/dist/src/planner/resolve.js +6 -5
  324. package/dist/src/planner/resolve.js.map +1 -1
  325. package/dist/src/planner/rules/access/rule-select-access-path.d.ts +8 -3
  326. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  327. package/dist/src/planner/rules/access/rule-select-access-path.js +206 -47
  328. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  329. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.d.ts +10 -3
  330. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.d.ts.map +1 -1
  331. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js +95 -87
  332. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +1 -1
  333. package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts +8 -2
  334. package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
  335. package/dist/src/planner/rules/cache/rule-cte-optimization.js +24 -13
  336. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
  337. package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts +9 -2
  338. package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts.map +1 -1
  339. package/dist/src/planner/rules/cache/rule-materialization-advisory.js +14 -7
  340. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +1 -1
  341. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.d.ts +9 -3
  342. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.d.ts.map +1 -1
  343. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js +34 -37
  344. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +1 -1
  345. package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts +14 -0
  346. package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -0
  347. package/dist/src/planner/rules/join/rule-join-greedy-commute.js +33 -0
  348. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -0
  349. package/dist/src/planner/rules/join/rule-join-key-inference.d.ts +11 -0
  350. package/dist/src/planner/rules/join/rule-join-key-inference.d.ts.map +1 -0
  351. package/dist/src/planner/rules/join/rule-join-key-inference.js +32 -0
  352. package/dist/src/planner/rules/join/rule-join-key-inference.js.map +1 -0
  353. package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts +4 -0
  354. package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -0
  355. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +233 -0
  356. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -0
  357. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts +21 -0
  358. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -0
  359. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +125 -0
  360. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -0
  361. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts +21 -0
  362. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -0
  363. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +261 -0
  364. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -0
  365. package/dist/src/planner/scopes/registered.d.ts +1 -0
  366. package/dist/src/planner/scopes/registered.d.ts.map +1 -1
  367. package/dist/src/planner/scopes/registered.js +7 -0
  368. package/dist/src/planner/scopes/registered.js.map +1 -1
  369. package/dist/src/planner/stats/index.d.ts +0 -17
  370. package/dist/src/planner/stats/index.d.ts.map +1 -1
  371. package/dist/src/planner/stats/index.js +0 -58
  372. package/dist/src/planner/stats/index.js.map +1 -1
  373. package/dist/src/planner/util/deferred-constraint.d.ts +14 -0
  374. package/dist/src/planner/util/deferred-constraint.d.ts.map +1 -0
  375. package/dist/src/planner/util/deferred-constraint.js +85 -0
  376. package/dist/src/planner/util/deferred-constraint.js.map +1 -0
  377. package/dist/src/planner/util/key-utils.d.ts +15 -0
  378. package/dist/src/planner/util/key-utils.d.ts.map +1 -0
  379. package/dist/src/planner/util/key-utils.js +43 -0
  380. package/dist/src/planner/util/key-utils.js.map +1 -0
  381. package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
  382. package/dist/src/planner/validation/plan-validator.js +1 -0
  383. package/dist/src/planner/validation/plan-validator.js.map +1 -1
  384. package/dist/src/runtime/deferred-constraint-queue.d.ts +33 -0
  385. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -0
  386. package/dist/src/runtime/deferred-constraint-queue.js +172 -0
  387. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -0
  388. package/dist/src/runtime/emission-context.d.ts +9 -3
  389. package/dist/src/runtime/emission-context.d.ts.map +1 -1
  390. package/dist/src/runtime/emission-context.js +5 -1
  391. package/dist/src/runtime/emission-context.js.map +1 -1
  392. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  393. package/dist/src/runtime/emit/add-constraint.js +22 -4
  394. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  395. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  396. package/dist/src/runtime/emit/aggregate.js +3 -2
  397. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  398. package/dist/src/runtime/emit/array-index.js.map +1 -1
  399. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  400. package/dist/src/runtime/emit/binary.js +9 -2
  401. package/dist/src/runtime/emit/binary.js.map +1 -1
  402. package/dist/src/runtime/emit/cache.d.ts.map +1 -1
  403. package/dist/src/runtime/emit/cache.js +1 -1
  404. package/dist/src/runtime/emit/cache.js.map +1 -1
  405. package/dist/src/runtime/emit/cast.d.ts.map +1 -1
  406. package/dist/src/runtime/emit/cast.js.map +1 -1
  407. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  408. package/dist/src/runtime/emit/constraint-check.js +110 -23
  409. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  410. package/dist/src/runtime/emit/create-assertion.d.ts +5 -0
  411. package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -0
  412. package/dist/src/runtime/emit/create-assertion.js +70 -0
  413. package/dist/src/runtime/emit/create-assertion.js.map +1 -0
  414. package/dist/src/runtime/emit/cte-reference.d.ts.map +1 -1
  415. package/dist/src/runtime/emit/cte-reference.js.map +1 -1
  416. package/dist/src/runtime/emit/cte.d.ts.map +1 -1
  417. package/dist/src/runtime/emit/cte.js.map +1 -1
  418. package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
  419. package/dist/src/runtime/emit/distinct.js.map +1 -1
  420. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  421. package/dist/src/runtime/emit/dml-executor.js +17 -9
  422. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  423. package/dist/src/runtime/emit/drop-assertion.d.ts +5 -0
  424. package/dist/src/runtime/emit/drop-assertion.d.ts.map +1 -0
  425. package/dist/src/runtime/emit/drop-assertion.js +30 -0
  426. package/dist/src/runtime/emit/drop-assertion.js.map +1 -0
  427. package/dist/src/runtime/emit/filter.d.ts.map +1 -1
  428. package/dist/src/runtime/emit/filter.js.map +1 -1
  429. package/dist/src/runtime/emit/join.d.ts.map +1 -1
  430. package/dist/src/runtime/emit/join.js.map +1 -1
  431. package/dist/src/runtime/emit/limit-offset.d.ts.map +1 -1
  432. package/dist/src/runtime/emit/limit-offset.js.map +1 -1
  433. package/dist/src/runtime/emit/pragma.js.map +1 -1
  434. package/dist/src/runtime/emit/project.d.ts.map +1 -1
  435. package/dist/src/runtime/emit/project.js.map +1 -1
  436. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  437. package/dist/src/runtime/emit/recursive-cte.js +1 -1
  438. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  439. package/dist/src/runtime/emit/remote-query.d.ts +9 -0
  440. package/dist/src/runtime/emit/remote-query.d.ts.map +1 -0
  441. package/dist/src/runtime/emit/remote-query.js +30 -0
  442. package/dist/src/runtime/emit/remote-query.js.map +1 -0
  443. package/dist/src/runtime/emit/retrieve.d.ts +5 -0
  444. package/dist/src/runtime/emit/retrieve.d.ts.map +1 -0
  445. package/dist/src/runtime/emit/retrieve.js +9 -0
  446. package/dist/src/runtime/emit/retrieve.js.map +1 -0
  447. package/dist/src/runtime/emit/returning.d.ts.map +1 -1
  448. package/dist/src/runtime/emit/returning.js +1 -1
  449. package/dist/src/runtime/emit/returning.js.map +1 -1
  450. package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
  451. package/dist/src/runtime/emit/scalar-function.js.map +1 -1
  452. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  453. package/dist/src/runtime/emit/scan.js +20 -5
  454. package/dist/src/runtime/emit/scan.js.map +1 -1
  455. package/dist/src/runtime/emit/schema-declarative.d.ts +8 -0
  456. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -0
  457. package/dist/src/runtime/emit/schema-declarative.js +163 -0
  458. package/dist/src/runtime/emit/schema-declarative.js.map +1 -0
  459. package/dist/src/runtime/emit/sequencing.d.ts.map +1 -1
  460. package/dist/src/runtime/emit/sequencing.js.map +1 -1
  461. package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
  462. package/dist/src/runtime/emit/set-operation.js +6 -6
  463. package/dist/src/runtime/emit/set-operation.js.map +1 -1
  464. package/dist/src/runtime/emit/sort.d.ts.map +1 -1
  465. package/dist/src/runtime/emit/sort.js.map +1 -1
  466. package/dist/src/runtime/emit/subquery.d.ts +1 -1
  467. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  468. package/dist/src/runtime/emit/subquery.js +6 -6
  469. package/dist/src/runtime/emit/subquery.js.map +1 -1
  470. package/dist/src/runtime/emit/transaction.d.ts.map +1 -1
  471. package/dist/src/runtime/emit/transaction.js +48 -8
  472. package/dist/src/runtime/emit/transaction.js.map +1 -1
  473. package/dist/src/runtime/emit/values.d.ts.map +1 -1
  474. package/dist/src/runtime/emit/values.js.map +1 -1
  475. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  476. package/dist/src/runtime/emit/window.js.map +1 -1
  477. package/dist/src/runtime/emitters.d.ts.map +1 -1
  478. package/dist/src/runtime/emitters.js +1 -0
  479. package/dist/src/runtime/emitters.js.map +1 -1
  480. package/dist/src/runtime/register.d.ts.map +1 -1
  481. package/dist/src/runtime/register.js +16 -2
  482. package/dist/src/runtime/register.js.map +1 -1
  483. package/dist/src/runtime/scheduler.js.map +1 -1
  484. package/dist/src/runtime/types.d.ts +2 -2
  485. package/dist/src/runtime/types.d.ts.map +1 -1
  486. package/dist/src/runtime/types.js +4 -1
  487. package/dist/src/runtime/types.js.map +1 -1
  488. package/dist/src/runtime/utils.d.ts +2 -2
  489. package/dist/src/runtime/utils.d.ts.map +1 -1
  490. package/dist/src/runtime/utils.js +1 -0
  491. package/dist/src/runtime/utils.js.map +1 -1
  492. package/dist/src/schema/assertion.d.ts +19 -0
  493. package/dist/src/schema/assertion.d.ts.map +1 -0
  494. package/dist/src/schema/assertion.js +2 -0
  495. package/dist/src/schema/assertion.js.map +1 -0
  496. package/dist/src/schema/catalog.d.ts +44 -0
  497. package/dist/src/schema/catalog.d.ts.map +1 -0
  498. package/dist/src/schema/catalog.js +148 -0
  499. package/dist/src/schema/catalog.js.map +1 -0
  500. package/dist/src/schema/change-events.d.ts +2 -2
  501. package/dist/src/schema/change-events.d.ts.map +1 -1
  502. package/dist/src/schema/column.d.ts +2 -0
  503. package/dist/src/schema/column.d.ts.map +1 -1
  504. package/dist/src/schema/column.js.map +1 -1
  505. package/dist/src/schema/declared-schema-manager.d.ts +42 -0
  506. package/dist/src/schema/declared-schema-manager.d.ts.map +1 -0
  507. package/dist/src/schema/declared-schema-manager.js +71 -0
  508. package/dist/src/schema/declared-schema-manager.js.map +1 -0
  509. package/dist/src/schema/function.d.ts +3 -2
  510. package/dist/src/schema/function.d.ts.map +1 -1
  511. package/dist/src/schema/function.js.map +1 -1
  512. package/dist/src/schema/manager.d.ts +8 -3
  513. package/dist/src/schema/manager.d.ts.map +1 -1
  514. package/dist/src/schema/manager.js +32 -3
  515. package/dist/src/schema/manager.js.map +1 -1
  516. package/dist/src/schema/schema-differ.d.ts +34 -0
  517. package/dist/src/schema/schema-differ.d.ts.map +1 -0
  518. package/dist/src/schema/schema-differ.js +157 -0
  519. package/dist/src/schema/schema-differ.js.map +1 -0
  520. package/dist/src/schema/schema-hasher.d.ts +10 -0
  521. package/dist/src/schema/schema-hasher.d.ts.map +1 -0
  522. package/dist/src/schema/schema-hasher.js +39 -0
  523. package/dist/src/schema/schema-hasher.js.map +1 -0
  524. package/dist/src/schema/schema.d.ts +7 -0
  525. package/dist/src/schema/schema.d.ts.map +1 -1
  526. package/dist/src/schema/schema.js +19 -0
  527. package/dist/src/schema/schema.js.map +1 -1
  528. package/dist/src/schema/table.d.ts +28 -3
  529. package/dist/src/schema/table.d.ts.map +1 -1
  530. package/dist/src/schema/table.js +17 -2
  531. package/dist/src/schema/table.js.map +1 -1
  532. package/dist/src/schema/window-function.d.ts.map +1 -1
  533. package/dist/src/schema/window-function.js.map +1 -1
  534. package/dist/src/util/ast-stringify.d.ts.map +1 -1
  535. package/dist/src/util/ast-stringify.js +116 -3
  536. package/dist/src/util/ast-stringify.js.map +1 -1
  537. package/dist/src/util/environment.js.map +1 -1
  538. package/dist/src/util/plugin-loader.d.ts +25 -2
  539. package/dist/src/util/plugin-loader.d.ts.map +1 -1
  540. package/dist/src/util/plugin-loader.js +180 -2
  541. package/dist/src/util/plugin-loader.js.map +1 -1
  542. package/dist/src/util/row-descriptor.d.ts +1 -1
  543. package/dist/src/util/row-descriptor.d.ts.map +1 -1
  544. package/dist/src/util/row-descriptor.js.map +1 -1
  545. package/dist/src/util/serialization.d.ts +3 -0
  546. package/dist/src/util/serialization.d.ts.map +1 -1
  547. package/dist/src/util/serialization.js +1 -0
  548. package/dist/src/util/serialization.js.map +1 -1
  549. package/dist/src/vtab/best-access-plan.d.ts +1 -1
  550. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  551. package/dist/src/vtab/best-access-plan.js +1 -0
  552. package/dist/src/vtab/best-access-plan.js.map +1 -1
  553. package/dist/src/vtab/manifest.d.ts.map +1 -1
  554. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  555. package/dist/src/vtab/memory/layer/base.js +2 -0
  556. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  557. package/dist/src/vtab/memory/layer/manager.d.ts +2 -1
  558. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  559. package/dist/src/vtab/memory/layer/manager.js +24 -6
  560. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  561. package/dist/src/vtab/memory/layer/safe-iterate.d.ts.map +1 -1
  562. package/dist/src/vtab/memory/layer/safe-iterate.js.map +1 -1
  563. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  564. package/dist/src/vtab/memory/module.js +5 -0
  565. package/dist/src/vtab/memory/module.js.map +1 -1
  566. package/dist/src/vtab/memory/table.d.ts +2 -1
  567. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  568. package/dist/src/vtab/memory/table.js +3 -2
  569. package/dist/src/vtab/memory/table.js.map +1 -1
  570. package/dist/src/vtab/memory/utils/logging.d.ts +2 -2
  571. package/dist/src/vtab/memory/utils/logging.d.ts.map +1 -1
  572. package/dist/src/vtab/memory/utils/logging.js +6 -3
  573. package/dist/src/vtab/memory/utils/logging.js.map +1 -1
  574. package/dist/src/vtab/module.d.ts +25 -0
  575. package/dist/src/vtab/module.d.ts.map +1 -1
  576. package/dist/src/vtab/table.d.ts +17 -4
  577. package/dist/src/vtab/table.d.ts.map +1 -1
  578. package/dist/src/vtab/table.js.map +1 -1
  579. package/package.json +4 -2
  580. package/src/common/errors.ts +1 -1
  581. package/src/common/json-types.ts +16 -0
  582. package/src/common/types.ts +2 -0
  583. package/src/core/database-options.ts +8 -8
  584. package/src/core/database.ts +537 -71
  585. package/src/core/statement.ts +3 -1
  586. package/src/func/builtins/builtin-window-functions.ts +11 -10
  587. package/src/func/builtins/datetime.ts +42 -0
  588. package/src/func/builtins/explain.ts +186 -44
  589. package/src/func/builtins/index.ts +5 -2
  590. package/src/func/builtins/json-helpers.ts +21 -21
  591. package/src/func/builtins/json-tvf.ts +8 -9
  592. package/src/func/builtins/json.ts +10 -9
  593. package/src/func/builtins/schema.ts +24 -4
  594. package/src/func/context.ts +7 -0
  595. package/src/func/registration.ts +5 -1
  596. package/src/index.ts +2 -2
  597. package/src/parser/ast.ts +582 -481
  598. package/src/parser/lexer.ts +27 -21
  599. package/src/parser/parser.ts +3336 -2776
  600. package/src/parser/visitor.ts +1 -0
  601. package/src/planner/analysis/binding-collector.ts +83 -0
  602. package/src/planner/analysis/const-evaluator.ts +1 -1
  603. package/src/planner/analysis/const-pass.ts +3 -2
  604. package/src/planner/analysis/constraint-extractor.ts +610 -123
  605. package/src/planner/analysis/predicate-normalizer.ts +237 -0
  606. package/src/planner/building/alter-table.ts +3 -1
  607. package/src/planner/building/block.ts +93 -78
  608. package/src/planner/building/constraint-builder.ts +173 -114
  609. package/src/planner/building/create-assertion.ts +7 -0
  610. package/src/planner/building/declare-schema.ts +22 -0
  611. package/src/planner/building/delete.ts +214 -171
  612. package/src/planner/building/drop-assertion.ts +11 -0
  613. package/src/planner/building/expression.ts +1 -0
  614. package/src/planner/building/function-call.ts +6 -5
  615. package/src/planner/building/insert.ts +428 -349
  616. package/src/planner/building/pragma.ts +1 -0
  617. package/src/planner/building/schema-resolution.ts +176 -176
  618. package/src/planner/building/select-aggregates.ts +5 -3
  619. package/src/planner/building/select-compound.ts +22 -13
  620. package/src/planner/building/select-context.ts +6 -6
  621. package/src/planner/building/select-modifiers.ts +8 -7
  622. package/src/planner/building/select-projections.ts +177 -176
  623. package/src/planner/building/select-window.ts +259 -253
  624. package/src/planner/building/select.ts +531 -520
  625. package/src/planner/building/table-function.ts +49 -48
  626. package/src/planner/building/table.ts +9 -3
  627. package/src/planner/building/update.ts +319 -270
  628. package/src/planner/building/with.ts +7 -7
  629. package/src/planner/debug.ts +1 -0
  630. package/src/planner/framework/characteristics.ts +503 -0
  631. package/src/planner/framework/context.ts +23 -6
  632. package/src/planner/framework/pass.ts +354 -0
  633. package/src/planner/nodes/aggregate-node.ts +52 -7
  634. package/src/planner/nodes/array-index-node.ts +1 -1
  635. package/src/planner/nodes/cache-node.ts +11 -2
  636. package/src/planner/nodes/constraint-check-node.ts +14 -5
  637. package/src/planner/nodes/create-assertion-node.ts +51 -0
  638. package/src/planner/nodes/create-index-node.ts +2 -2
  639. package/src/planner/nodes/create-table-node.ts +2 -2
  640. package/src/planner/nodes/cte-node.ts +30 -4
  641. package/src/planner/nodes/cte-reference-node.ts +2 -2
  642. package/src/planner/nodes/declarative-schema.ts +221 -0
  643. package/src/planner/nodes/delete-node.ts +102 -96
  644. package/src/planner/nodes/distinct-node.ts +20 -6
  645. package/src/planner/nodes/dml-executor-node.ts +1 -1
  646. package/src/planner/nodes/drop-assertion-node.ts +50 -0
  647. package/src/planner/nodes/drop-table-node.ts +1 -0
  648. package/src/planner/nodes/filter.ts +56 -3
  649. package/src/planner/nodes/insert-node.ts +126 -120
  650. package/src/planner/nodes/internal-recursive-cte-ref-node.ts +5 -20
  651. package/src/planner/nodes/join-node.ts +122 -4
  652. package/src/planner/nodes/limit-offset.ts +132 -113
  653. package/src/planner/nodes/plan-node-type.ts +95 -87
  654. package/src/planner/nodes/plan-node.ts +8 -8
  655. package/src/planner/nodes/pragma.ts +6 -3
  656. package/src/planner/nodes/project-node.ts +101 -7
  657. package/src/planner/nodes/recursive-cte-node.ts +6 -6
  658. package/src/planner/nodes/reference.ts +334 -312
  659. package/src/planner/nodes/remote-query-node.ts +73 -0
  660. package/src/planner/nodes/retrieve-node.ts +86 -0
  661. package/src/planner/nodes/returning-node.ts +52 -10
  662. package/src/planner/nodes/sequencing-node.ts +2 -2
  663. package/src/planner/nodes/set-operation-node.ts +3 -3
  664. package/src/planner/nodes/sort.ts +33 -4
  665. package/src/planner/nodes/stream-aggregate.ts +5 -1
  666. package/src/planner/nodes/table-access-nodes.ts +31 -6
  667. package/src/planner/nodes/table-function-call.ts +134 -127
  668. package/src/planner/nodes/transaction-node.ts +2 -2
  669. package/src/planner/nodes/update-node.ts +138 -132
  670. package/src/planner/nodes/view-reference-node.ts +1 -1
  671. package/src/planner/nodes/window-function.ts +2 -2
  672. package/src/planner/nodes/window-node.ts +1 -1
  673. package/src/planner/optimizer-tuning.ts +18 -0
  674. package/src/planner/optimizer.ts +171 -96
  675. package/src/planner/planning-context.ts +10 -3
  676. package/src/planner/resolve.ts +10 -9
  677. package/src/planner/rules/README.md +96 -96
  678. package/src/planner/rules/access/rule-select-access-path.ts +384 -184
  679. package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +118 -104
  680. package/src/planner/rules/cache/rule-cte-optimization.ts +29 -16
  681. package/src/planner/rules/cache/rule-materialization-advisory.ts +14 -7
  682. package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +38 -44
  683. package/src/planner/rules/join/rule-join-greedy-commute.ts +48 -0
  684. package/src/planner/rules/join/rule-join-key-inference.ts +35 -0
  685. package/src/planner/rules/join/rule-quickpick-enumeration.ts +267 -0
  686. package/src/planner/rules/predicate/rule-predicate-pushdown.ts +144 -0
  687. package/src/planner/rules/retrieve/rule-grow-retrieve.ts +337 -0
  688. package/src/planner/scopes/registered.ts +8 -0
  689. package/src/planner/stats/index.ts +0 -65
  690. package/src/planner/util/key-utils.ts +46 -0
  691. package/src/planner/validation/plan-validator.ts +5 -3
  692. package/src/runtime/deferred-constraint-queue.ts +196 -0
  693. package/src/runtime/emission-context.ts +11 -5
  694. package/src/runtime/emit/add-constraint.ts +26 -5
  695. package/src/runtime/emit/aggregate.ts +9 -7
  696. package/src/runtime/emit/array-index.ts +2 -2
  697. package/src/runtime/emit/binary.ts +26 -8
  698. package/src/runtime/emit/cache.ts +2 -2
  699. package/src/runtime/emit/cast.ts +2 -2
  700. package/src/runtime/emit/constraint-check.ts +148 -26
  701. package/src/runtime/emit/create-assertion.ts +82 -0
  702. package/src/runtime/emit/cte-reference.ts +2 -2
  703. package/src/runtime/emit/cte.ts +2 -2
  704. package/src/runtime/emit/distinct.ts +2 -2
  705. package/src/runtime/emit/dml-executor.ts +20 -12
  706. package/src/runtime/emit/drop-assertion.ts +45 -0
  707. package/src/runtime/emit/filter.ts +4 -4
  708. package/src/runtime/emit/join.ts +8 -7
  709. package/src/runtime/emit/limit-offset.ts +2 -2
  710. package/src/runtime/emit/pragma.ts +2 -2
  711. package/src/runtime/emit/project.ts +2 -2
  712. package/src/runtime/emit/recursive-cte.ts +2 -2
  713. package/src/runtime/emit/remote-query.ts +47 -0
  714. package/src/runtime/emit/retrieve.ts +15 -0
  715. package/src/runtime/emit/returning.ts +4 -4
  716. package/src/runtime/emit/scalar-function.ts +2 -2
  717. package/src/runtime/emit/scan.ts +29 -13
  718. package/src/runtime/emit/schema-declarative.ts +205 -0
  719. package/src/runtime/emit/sequencing.ts +3 -3
  720. package/src/runtime/emit/set-operation.ts +7 -7
  721. package/src/runtime/emit/sort.ts +2 -2
  722. package/src/runtime/emit/subquery.ts +10 -10
  723. package/src/runtime/emit/transaction.ts +46 -8
  724. package/src/runtime/emit/values.ts +2 -2
  725. package/src/runtime/emit/window.ts +3 -3
  726. package/src/runtime/emitters.ts +1 -0
  727. package/src/runtime/register.ts +150 -135
  728. package/src/runtime/scheduler.ts +2 -2
  729. package/src/runtime/types.ts +10 -7
  730. package/src/runtime/utils.ts +3 -2
  731. package/src/schema/assertion.ts +21 -0
  732. package/src/schema/catalog.ts +208 -0
  733. package/src/schema/change-events.ts +2 -2
  734. package/src/schema/column.ts +2 -0
  735. package/src/schema/declared-schema-manager.ts +82 -0
  736. package/src/schema/function.ts +5 -2
  737. package/src/schema/manager.ts +742 -709
  738. package/src/schema/schema-differ.ts +214 -0
  739. package/src/schema/schema-hasher.ts +44 -0
  740. package/src/schema/schema.ts +23 -0
  741. package/src/schema/table.ts +398 -364
  742. package/src/schema/window-function.ts +2 -0
  743. package/src/util/ast-stringify.ts +869 -764
  744. package/src/util/environment.ts +2 -2
  745. package/src/util/plugin-loader.ts +232 -7
  746. package/src/util/row-descriptor.ts +1 -1
  747. package/src/util/serialization.ts +2 -0
  748. package/src/vtab/best-access-plan.ts +2 -1
  749. package/src/vtab/manifest.ts +1 -0
  750. package/src/vtab/memory/index.ts +178 -178
  751. package/src/vtab/memory/layer/base.ts +275 -273
  752. package/src/vtab/memory/layer/interface.ts +47 -47
  753. package/src/vtab/memory/layer/manager.ts +33 -11
  754. package/src/vtab/memory/layer/safe-iterate.ts +3 -3
  755. package/src/vtab/memory/layer/transaction.ts +229 -229
  756. package/src/vtab/memory/module.ts +24 -18
  757. package/src/vtab/memory/table.ts +256 -253
  758. package/src/vtab/memory/utils/logging.ts +6 -3
  759. package/src/vtab/module.ts +170 -140
  760. package/src/vtab/table.ts +162 -143
@@ -1,5 +1,5 @@
1
1
  import type { WindowNode } from '../../planner/nodes/window-node.js';
2
- import type { Instruction, RuntimeContext } from '../types.js';
2
+ import type { Instruction, RuntimeContext, InstructionRun } from '../types.js';
3
3
  import type { OutputValue, Row, SqlValue } from '../../common/types.js';
4
4
  import type { EmissionContext } from '../emission-context.js';
5
5
  import { emitPlanNode, emitCallFromPlan } from '../emitters.js';
@@ -100,14 +100,14 @@ export function emitWindow(plan: WindowNode, ctx: EmissionContext): Instruction
100
100
 
101
101
  return {
102
102
  params: [sourceInstruction, ...allCallbacks],
103
- run: run as any,
103
+ run: run as InstructionRun,
104
104
  note: `window(${plan.functions.map(f => f.functionName).join(', ')})`
105
105
  };
106
106
  }
107
107
 
108
108
  async function groupByPartitions(
109
109
  rows: Row[],
110
- partitionCallbacks: Array<(ctx: RuntimeContext) => any>,
110
+ partitionCallbacks: Array<(ctx: RuntimeContext) => OutputValue>,
111
111
  rctx: RuntimeContext,
112
112
  sourceRowDescriptor: RowDescriptor
113
113
  ): Promise<Map<string, Row[]>> {
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import { QuereusError } from "../common/errors.js";
2
3
  import type { PlanNode } from "../planner/nodes/plan-node.js";
3
4
  import type { PlanNodeType } from "../planner/nodes/plan-node-type.js";
@@ -1,135 +1,150 @@
1
- import { PlanNodeType } from "../planner/nodes/plan-node-type.js";
2
- import { registerEmitter, type EmitterFunc } from "./emitters.js";
3
- import { emitBinaryOp } from "./emit/binary.js";
4
- import { emitUnaryOp } from "./emit/unary.js";
5
- import { emitLiteral } from "./emit/literal.js";
6
- import { emitSeqScan } from "./emit/scan.js";
7
- import { emitIn, emitScalarSubquery, emitExists } from "./emit/subquery.js";
8
- import { emitBlock } from "./emit/block.js";
9
- import { emitParameterReference } from './emit/parameter.js';
10
- import { emitCreateTable } from './emit/create-table.js';
11
- import { emitCreateIndex } from './emit/create-index.js';
12
- import { emitDropTable } from './emit/drop-table.js';
13
- import { emitCreateView } from './emit/create-view.js';
14
- import { emitDropView } from './emit/drop-view.js';
15
- import { emitCTE } from './emit/cte.js';
16
- import { emitCTEReference } from './emit/cte-reference.js';
17
- import { emitInternalRecursiveCTERef } from './emit/internal-recursive-cte-ref.js';
18
- import { emitInsert } from './emit/insert.js';
19
- import { emitUpdate } from './emit/update.js';
20
- import { emitDmlExecutor } from './emit/dml-executor.js';
21
- import { emitDelete } from './emit/delete.js';
22
- import { emitProject } from './emit/project.js';
23
- import { emitColumnReference } from './emit/column-reference.js';
24
- import { emitArrayIndex } from './emit/array-index.js';
25
- import { emitValues, emitSingleRow, emitTableLiteral } from './emit/values.js';
26
- import { emitFilter } from './emit/filter.js';
27
- import { emitDistinct } from './emit/distinct.js';
28
- import { emitScalarFunctionCall } from './emit/scalar-function.js';
29
- import { emitLimitOffset } from './emit/limit-offset.js';
30
- import { emitStreamAggregate } from './emit/aggregate.js';
31
- import { emitCaseExpr } from './emit/case.js';
32
- import { emitCast } from './emit/cast.js';
33
- import { emitCollate } from "./emit/collate.js";
34
- import { emitTableValuedFunctionCall } from './emit/table-valued-function.js';
35
- import { emitTransaction } from './emit/transaction.js';
36
- import { emitPragma } from './emit/pragma.js';
37
- import { emitSort } from './emit/sort.js';
38
- import { emitWindow } from './emit/window.js';
39
- import { emitWindowFunctionCall } from './emit/window-function.js';
40
- import { emitSequencing } from './emit/sequencing.js';
41
- import { emitRecursiveCTE } from './emit/recursive-cte.js';
42
- import { emitSetOperation } from './emit/set-operation.js';
43
- import { emitConstraintCheck } from './emit/constraint-check.js';
44
- import { emitAddConstraint } from './emit/add-constraint.js';
45
- import { emitLoopJoin } from './emit/join.js';
46
- import { emitCache } from './emit/cache.js';
47
- import { emitReturning } from './emit/returning.js';
48
- import { emitSink } from './emit/sink.js';
49
- import { emitBetween } from './emit/between.js';
50
-
51
- let registered = false;
52
-
53
- export function registerEmitters() {
54
- if (registered) {
55
- return;
56
- }
57
- registered = true;
58
-
59
- // Scalar expression emitters
60
- registerEmitter(PlanNodeType.BinaryOp, emitBinaryOp as EmitterFunc);
61
- registerEmitter(PlanNodeType.UnaryOp, emitUnaryOp as EmitterFunc);
62
- registerEmitter(PlanNodeType.Literal, emitLiteral as EmitterFunc);
63
- registerEmitter(PlanNodeType.ColumnReference, emitColumnReference as EmitterFunc);
64
- registerEmitter(PlanNodeType.ArrayIndex, emitArrayIndex as EmitterFunc);
65
- registerEmitter(PlanNodeType.ParameterReference, emitParameterReference as EmitterFunc);
66
- registerEmitter(PlanNodeType.ScalarFunctionCall, emitScalarFunctionCall as EmitterFunc);
67
- registerEmitter(PlanNodeType.WindowFunctionCall, emitWindowFunctionCall as EmitterFunc);
68
- registerEmitter(PlanNodeType.CaseExpr, emitCaseExpr as EmitterFunc);
69
- registerEmitter(PlanNodeType.Cast, emitCast as EmitterFunc);
70
- registerEmitter(PlanNodeType.Collate, emitCollate as EmitterFunc);
71
- registerEmitter(PlanNodeType.Between, emitBetween as EmitterFunc);
72
- registerEmitter(PlanNodeType.ScalarSubquery, emitScalarSubquery as EmitterFunc);
73
- registerEmitter(PlanNodeType.Exists, emitExists as EmitterFunc);
74
-
75
- // Relational emitters (mix of logical and physical for now)
76
- registerEmitter(PlanNodeType.Block, emitBlock as EmitterFunc);
77
- registerEmitter(PlanNodeType.CTEReference, emitCTEReference as EmitterFunc);
78
- registerEmitter(PlanNodeType.InternalRecursiveCTERef, emitInternalRecursiveCTERef as EmitterFunc);
79
-
80
- // Physical access node emitters (Phase 1)
81
- registerEmitter(PlanNodeType.SeqScan, emitSeqScan as EmitterFunc);
82
- registerEmitter(PlanNodeType.IndexScan, emitSeqScan as EmitterFunc); // Reuse for now
83
- registerEmitter(PlanNodeType.IndexSeek, emitSeqScan as EmitterFunc); // Reuse for now
84
-
85
- registerEmitter(PlanNodeType.Values, emitValues as EmitterFunc);
86
- registerEmitter(PlanNodeType.TableLiteral, emitTableLiteral as EmitterFunc);
87
- registerEmitter(PlanNodeType.SingleRow, emitSingleRow as EmitterFunc);
88
- registerEmitter(PlanNodeType.Filter, emitFilter as EmitterFunc);
89
- registerEmitter(PlanNodeType.Project, emitProject as EmitterFunc);
90
- registerEmitter(PlanNodeType.Distinct, emitDistinct as EmitterFunc);
91
- registerEmitter(PlanNodeType.Sort, emitSort as EmitterFunc);
92
- registerEmitter(PlanNodeType.LimitOffset, emitLimitOffset as EmitterFunc);
93
- registerEmitter(PlanNodeType.TableFunctionCall, emitTableValuedFunctionCall as EmitterFunc);
94
- registerEmitter(PlanNodeType.In, emitIn as EmitterFunc);
95
- registerEmitter(PlanNodeType.Window, emitWindow as EmitterFunc);
96
- registerEmitter(PlanNodeType.Sequencing, emitSequencing as EmitterFunc);
97
- registerEmitter(PlanNodeType.CTE, emitCTE as EmitterFunc);
98
- registerEmitter(PlanNodeType.RecursiveCTE, emitRecursiveCTE as EmitterFunc);
99
-
100
- // Physical aggregate emitters
101
- registerEmitter(PlanNodeType.StreamAggregate, emitStreamAggregate as EmitterFunc);
102
- // For now, logical aggregates also use the stream aggregate emitter
103
- registerEmitter(PlanNodeType.Aggregate, emitStreamAggregate as EmitterFunc);
104
- // TODO: registerEmitter(PlanNodeType.HashAggregate, emitHashAggregate as EmitterFunc);
105
-
106
- // DML/DDL emitters
107
- registerEmitter(PlanNodeType.CreateTable, emitCreateTable as EmitterFunc);
108
- registerEmitter(PlanNodeType.CreateIndex, emitCreateIndex as EmitterFunc);
109
- registerEmitter(PlanNodeType.DropTable, emitDropTable as EmitterFunc);
110
- registerEmitter(PlanNodeType.CreateView, emitCreateView as EmitterFunc);
111
- registerEmitter(PlanNodeType.DropView, emitDropView as EmitterFunc);
112
- registerEmitter(PlanNodeType.Insert, emitInsert as EmitterFunc);
113
- registerEmitter(PlanNodeType.Update, emitUpdate as EmitterFunc);
114
- registerEmitter(PlanNodeType.UpdateExecutor, emitDmlExecutor as EmitterFunc);
115
- registerEmitter(PlanNodeType.Delete, emitDelete as EmitterFunc);
116
- registerEmitter(PlanNodeType.ConstraintCheck, emitConstraintCheck as EmitterFunc);
117
- registerEmitter(PlanNodeType.AddConstraint, emitAddConstraint as EmitterFunc);
118
- registerEmitter(PlanNodeType.Returning, emitReturning as EmitterFunc);
119
-
120
- // Transaction control emitters
121
- registerEmitter(PlanNodeType.Transaction, emitTransaction as EmitterFunc);
122
- registerEmitter(PlanNodeType.Pragma, emitPragma as EmitterFunc);
123
-
124
- // Set operation emitter
125
- registerEmitter(PlanNodeType.SetOperation, emitSetOperation as EmitterFunc);
126
-
127
- // Join emitters
128
- registerEmitter(PlanNodeType.Join, emitLoopJoin as EmitterFunc);
129
-
130
- // Cache emitter
131
- registerEmitter(PlanNodeType.Cache, emitCache as EmitterFunc);
132
-
133
- // Sink emitter
134
- registerEmitter(PlanNodeType.Sink, emitSink as EmitterFunc);
135
- }
1
+ import { PlanNodeType } from "../planner/nodes/plan-node-type.js";
2
+ import { registerEmitter, type EmitterFunc } from "./emitters.js";
3
+ import { emitBinaryOp } from "./emit/binary.js";
4
+ import { emitUnaryOp } from "./emit/unary.js";
5
+ import { emitLiteral } from "./emit/literal.js";
6
+ import { emitSeqScan } from "./emit/scan.js";
7
+ import { emitIn, emitScalarSubquery, emitExists } from "./emit/subquery.js";
8
+ import { emitBlock } from "./emit/block.js";
9
+ import { emitParameterReference } from './emit/parameter.js';
10
+ import { emitCreateTable } from './emit/create-table.js';
11
+ import { emitCreateIndex } from './emit/create-index.js';
12
+ import { emitDropTable } from './emit/drop-table.js';
13
+ import { emitCreateView } from './emit/create-view.js';
14
+ import { emitDropView } from './emit/drop-view.js';
15
+ import { emitCreateAssertion } from './emit/create-assertion.js';
16
+ import { emitDropAssertion } from './emit/drop-assertion.js';
17
+ import { emitCTE } from './emit/cte.js';
18
+ import { emitCTEReference } from './emit/cte-reference.js';
19
+ import { emitInternalRecursiveCTERef } from './emit/internal-recursive-cte-ref.js';
20
+ import { emitInsert } from './emit/insert.js';
21
+ import { emitUpdate } from './emit/update.js';
22
+ import { emitDmlExecutor } from './emit/dml-executor.js';
23
+ import { emitDelete } from './emit/delete.js';
24
+ import { emitProject } from './emit/project.js';
25
+ import { emitColumnReference } from './emit/column-reference.js';
26
+ import { emitArrayIndex } from './emit/array-index.js';
27
+ import { emitValues, emitSingleRow, emitTableLiteral } from './emit/values.js';
28
+ import { emitFilter } from './emit/filter.js';
29
+ import { emitDistinct } from './emit/distinct.js';
30
+ import { emitScalarFunctionCall } from './emit/scalar-function.js';
31
+ import { emitLimitOffset } from './emit/limit-offset.js';
32
+ import { emitStreamAggregate } from './emit/aggregate.js';
33
+ import { emitCaseExpr } from './emit/case.js';
34
+ import { emitCast } from './emit/cast.js';
35
+ import { emitCollate } from "./emit/collate.js";
36
+ import { emitTableValuedFunctionCall } from './emit/table-valued-function.js';
37
+ import { emitTransaction } from './emit/transaction.js';
38
+ import { emitPragma } from './emit/pragma.js';
39
+ import { emitSort } from './emit/sort.js';
40
+ import { emitWindow } from './emit/window.js';
41
+ import { emitWindowFunctionCall } from './emit/window-function.js';
42
+ import { emitSequencing } from './emit/sequencing.js';
43
+ import { emitRecursiveCTE } from './emit/recursive-cte.js';
44
+ import { emitSetOperation } from './emit/set-operation.js';
45
+ import { emitConstraintCheck } from './emit/constraint-check.js';
46
+ import { emitAddConstraint } from './emit/add-constraint.js';
47
+ import { emitLoopJoin } from './emit/join.js';
48
+ import { emitCache } from './emit/cache.js';
49
+ import { emitReturning } from './emit/returning.js';
50
+ import { emitSink } from './emit/sink.js';
51
+ import { emitBetween } from './emit/between.js';
52
+ import { emitRetrieve } from './emit/retrieve.js';
53
+ import { emitRemoteQuery } from './emit/remote-query.js';
54
+ import { emitDeclareSchema, emitDiffSchema, emitApplySchema, emitExplainSchema } from './emit/schema-declarative.js';
55
+
56
+ let registered = false;
57
+
58
+ export function registerEmitters() {
59
+ if (registered) {
60
+ return;
61
+ }
62
+ registered = true;
63
+
64
+ // Scalar expression emitters
65
+ registerEmitter(PlanNodeType.BinaryOp, emitBinaryOp as EmitterFunc);
66
+ registerEmitter(PlanNodeType.UnaryOp, emitUnaryOp as EmitterFunc);
67
+ registerEmitter(PlanNodeType.Literal, emitLiteral as EmitterFunc);
68
+ registerEmitter(PlanNodeType.ColumnReference, emitColumnReference as EmitterFunc);
69
+ registerEmitter(PlanNodeType.ArrayIndex, emitArrayIndex as EmitterFunc);
70
+ registerEmitter(PlanNodeType.ParameterReference, emitParameterReference as EmitterFunc);
71
+ registerEmitter(PlanNodeType.ScalarFunctionCall, emitScalarFunctionCall as EmitterFunc);
72
+ registerEmitter(PlanNodeType.WindowFunctionCall, emitWindowFunctionCall as EmitterFunc);
73
+ registerEmitter(PlanNodeType.CaseExpr, emitCaseExpr as EmitterFunc);
74
+ registerEmitter(PlanNodeType.Cast, emitCast as EmitterFunc);
75
+ registerEmitter(PlanNodeType.Collate, emitCollate as EmitterFunc);
76
+ registerEmitter(PlanNodeType.Between, emitBetween as EmitterFunc);
77
+ registerEmitter(PlanNodeType.ScalarSubquery, emitScalarSubquery as EmitterFunc);
78
+ registerEmitter(PlanNodeType.Exists, emitExists as EmitterFunc);
79
+
80
+ // Relational emitters (mix of logical and physical for now)
81
+ registerEmitter(PlanNodeType.Block, emitBlock as EmitterFunc);
82
+ registerEmitter(PlanNodeType.CTEReference, emitCTEReference as EmitterFunc);
83
+ registerEmitter(PlanNodeType.InternalRecursiveCTERef, emitInternalRecursiveCTERef as EmitterFunc);
84
+ registerEmitter(PlanNodeType.Retrieve, emitRetrieve as EmitterFunc);
85
+
86
+ // Physical access node emitters (Phase 1)
87
+ registerEmitter(PlanNodeType.SeqScan, emitSeqScan as EmitterFunc);
88
+ registerEmitter(PlanNodeType.IndexScan, emitSeqScan as EmitterFunc); // Reuse for now
89
+ registerEmitter(PlanNodeType.IndexSeek, emitSeqScan as EmitterFunc); // Reuse for now
90
+ registerEmitter(PlanNodeType.RemoteQuery, emitRemoteQuery as EmitterFunc);
91
+
92
+ registerEmitter(PlanNodeType.Values, emitValues as EmitterFunc);
93
+ registerEmitter(PlanNodeType.TableLiteral, emitTableLiteral as EmitterFunc);
94
+ registerEmitter(PlanNodeType.SingleRow, emitSingleRow as EmitterFunc);
95
+ registerEmitter(PlanNodeType.Filter, emitFilter as EmitterFunc);
96
+ registerEmitter(PlanNodeType.Project, emitProject as EmitterFunc);
97
+ registerEmitter(PlanNodeType.Distinct, emitDistinct as EmitterFunc);
98
+ registerEmitter(PlanNodeType.Sort, emitSort as EmitterFunc);
99
+ registerEmitter(PlanNodeType.LimitOffset, emitLimitOffset as EmitterFunc);
100
+ registerEmitter(PlanNodeType.TableFunctionCall, emitTableValuedFunctionCall as EmitterFunc);
101
+ registerEmitter(PlanNodeType.In, emitIn as EmitterFunc);
102
+ registerEmitter(PlanNodeType.Window, emitWindow as EmitterFunc);
103
+ registerEmitter(PlanNodeType.Sequencing, emitSequencing as EmitterFunc);
104
+ registerEmitter(PlanNodeType.CTE, emitCTE as EmitterFunc);
105
+ registerEmitter(PlanNodeType.RecursiveCTE, emitRecursiveCTE as EmitterFunc);
106
+
107
+ // Physical aggregate emitters
108
+ registerEmitter(PlanNodeType.StreamAggregate, emitStreamAggregate as EmitterFunc);
109
+ // Do not map the aggregate node to an emitter. It is logical only.
110
+ // NO: registerEmitter(PlanNodeType.Aggregate, emitStreamAggregate as EmitterFunc);
111
+ // TODO: registerEmitter(PlanNodeType.HashAggregate, emitHashAggregate as EmitterFunc);
112
+
113
+ // DML/DDL emitters
114
+ registerEmitter(PlanNodeType.CreateTable, emitCreateTable as EmitterFunc);
115
+ registerEmitter(PlanNodeType.CreateIndex, emitCreateIndex as EmitterFunc);
116
+ registerEmitter(PlanNodeType.DropTable, emitDropTable as EmitterFunc);
117
+ registerEmitter(PlanNodeType.CreateView, emitCreateView as EmitterFunc);
118
+ registerEmitter(PlanNodeType.DropView, emitDropView as EmitterFunc);
119
+ registerEmitter(PlanNodeType.CreateAssertion, emitCreateAssertion as EmitterFunc);
120
+ registerEmitter(PlanNodeType.DropAssertion, emitDropAssertion as EmitterFunc);
121
+ registerEmitter(PlanNodeType.Insert, emitInsert as EmitterFunc);
122
+ registerEmitter(PlanNodeType.Update, emitUpdate as EmitterFunc);
123
+ registerEmitter(PlanNodeType.UpdateExecutor, emitDmlExecutor as EmitterFunc);
124
+ registerEmitter(PlanNodeType.Delete, emitDelete as EmitterFunc);
125
+ registerEmitter(PlanNodeType.ConstraintCheck, emitConstraintCheck as EmitterFunc);
126
+ registerEmitter(PlanNodeType.AddConstraint, emitAddConstraint as EmitterFunc);
127
+ registerEmitter(PlanNodeType.Returning, emitReturning as EmitterFunc);
128
+
129
+ // Transaction control emitters
130
+ registerEmitter(PlanNodeType.Transaction, emitTransaction as EmitterFunc);
131
+ registerEmitter(PlanNodeType.Pragma, emitPragma as EmitterFunc);
132
+
133
+ // Declarative schema
134
+ registerEmitter(PlanNodeType.DeclareSchema, emitDeclareSchema as EmitterFunc);
135
+ registerEmitter(PlanNodeType.DiffSchema, emitDiffSchema as EmitterFunc);
136
+ registerEmitter(PlanNodeType.ApplySchema, emitApplySchema as EmitterFunc);
137
+ registerEmitter(PlanNodeType.ExplainSchema, emitExplainSchema as EmitterFunc);
138
+
139
+ // Set operation emitter
140
+ registerEmitter(PlanNodeType.SetOperation, emitSetOperation as EmitterFunc);
141
+
142
+ // Join emitters
143
+ registerEmitter(PlanNodeType.Join, emitLoopJoin as EmitterFunc);
144
+
145
+ // Cache emitter
146
+ registerEmitter(PlanNodeType.Cache, emitCache as EmitterFunc);
147
+
148
+ // Sink emitter
149
+ registerEmitter(PlanNodeType.Sink, emitSink as EmitterFunc);
150
+ }
@@ -22,7 +22,7 @@ function wrapIterableForTracing<T>(
22
22
  instruction: Instruction
23
23
  ): AsyncIterable<T> {
24
24
  // Prevent double-wrapping
25
- if ((src as any)[TRACED_ITERABLE_SYMBOL]) {
25
+ if ((src as unknown as Record<symbol, boolean>)[TRACED_ITERABLE_SYMBOL]) {
26
26
  return src;
27
27
  }
28
28
 
@@ -39,7 +39,7 @@ function wrapIterableForTracing<T>(
39
39
  })();
40
40
 
41
41
  // Mark as already wrapped
42
- (wrapped as any)[TRACED_ITERABLE_SYMBOL] = true;
42
+ (wrapped as unknown as Record<symbol, boolean>)[TRACED_ITERABLE_SYMBOL] = true;
43
43
  return wrapped;
44
44
  }
45
45
 
@@ -9,7 +9,7 @@ import type { PlanNode } from '../planner/nodes/plan-node.js';
9
9
 
10
10
  export type RuntimeContext = {
11
11
  db: Database;
12
- stmt: Statement | null; // Can be null for transient exec statements
12
+ stmt: Statement | undefined; // Undefined for transient exec statements
13
13
  params: SqlParameters; // User-provided values for the current execution
14
14
  /** Row contexts by row descriptor */
15
15
  context: Map<RowDescriptor, RowGetter>;
@@ -27,7 +27,7 @@ export type RuntimeContext = {
27
27
  planStack?: PlanNode[];
28
28
  };
29
29
 
30
- export type InstructionRun = (ctx: RuntimeContext, ...args: any[]) => OutputValue;
30
+ export type InstructionRun = (ctx: RuntimeContext, ...args: RuntimeValue[]) => OutputValue;
31
31
 
32
32
  export type Instruction = {
33
33
  params: Instruction[];
@@ -182,16 +182,19 @@ export class CollectingInstructionTracer implements InstructionTracer {
182
182
  }
183
183
 
184
184
  private cloneResult(result: OutputValue): OutputValue {
185
- return this.cloneValue(result);
185
+ if (result instanceof Promise) {
186
+ return result.then(resolved => this.cloneValue(resolved as RuntimeValue));
187
+ }
188
+ return this.cloneValue(result as RuntimeValue);
186
189
  }
187
190
 
188
- private cloneValue(value: any): any {
191
+ private cloneValue(value: RuntimeValue): RuntimeValue {
189
192
  if (value === null || value === undefined) return value;
190
193
  if (typeof value === 'function') return '[Function]';
191
- if (typeof value === 'object' && Symbol.asyncIterator in value) return '[AsyncIterable]';
192
- if (Array.isArray(value)) return value.map(v => this.cloneValue(v));
194
+ if (typeof value === 'object' && value && Symbol.asyncIterator in value) return '[AsyncIterable]';
195
+ if (Array.isArray(value)) return value.map(v => this.cloneValue(v as RuntimeValue)) as RuntimeValue;
193
196
  if (typeof value === 'object') return '[Object]';
194
- return value;
197
+ return value as RuntimeValue;
195
198
  }
196
199
  }
197
200
 
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import { QuereusError } from '../common/errors.js';
2
3
  import { StatusCode } from '../common/types.js';
3
4
  import type { TableSchema } from '../schema/table.js';
@@ -7,7 +8,7 @@ import type { VirtualTableConnection } from '../vtab/connection.js';
7
8
  import { createLogger } from '../common/logger.js';
8
9
  import type { MemoryVirtualTableConnection } from '../vtab/memory/connection.js';
9
10
  import type { MemoryTable } from '../vtab/memory/table.js';
10
- import type { RowDescriptor } from '../planner/nodes/plan-node.js';
11
+ import type { RowDescriptor, Attribute } from '../planner/nodes/plan-node.js';
11
12
 
12
13
  const log = createLogger('runtime:utils');
13
14
  const errorLog = log.extend('error');
@@ -121,7 +122,7 @@ export async function disconnectVTable(ctx: RuntimeContext, vtab: VirtualTable):
121
122
  /**
122
123
  * Helper function to log context push operations
123
124
  */
124
- export function logContextPush(descriptor: RowDescriptor, note: string, attributes?: any[]) {
125
+ export function logContextPush(descriptor: RowDescriptor, note: string, attributes?: readonly Attribute[]) {
125
126
  const attrs = Object.keys(descriptor).filter(k => descriptor[parseInt(k)] !== undefined);
126
127
  const attrNames = attributes ? attributes.map(attr => `${attr.name}(#${attr.id})`).join(',') : 'unknown';
127
128
  ctxLog('PUSH context %s: attrs=[%s] names=[%s]', note, attrs.join(','), attrNames);
@@ -0,0 +1,21 @@
1
+ export interface AssertionDependentTable {
2
+ /** Instance-unique table reference key, e.g. schema.table#nodeId */
3
+ relationKey: string;
4
+ /** Base table identifier, e.g. schema.table */
5
+ base: string;
6
+ }
7
+
8
+ export interface IntegrityAssertionSchema {
9
+ /** Unique assertion name */
10
+ name: string;
11
+ /** SQL text of the violation-producing query. Any returned row indicates a violation. */
12
+ violationSql: string;
13
+ /** Whether the assertion is deferrable. Currently always enforced at COMMIT. */
14
+ deferrable: boolean;
15
+ /** If true, initially deferred. Currently informational. */
16
+ initiallyDeferred: boolean;
17
+ /** Base tables referenced; filled during assertion preparation/creation. */
18
+ dependentTables?: AssertionDependentTable[];
19
+ }
20
+
21
+
@@ -0,0 +1,208 @@
1
+ import type { Database } from '../core/database.js';
2
+ import type { TableSchema } from './table.js';
3
+ import type { ViewSchema } from './view.js';
4
+ import type { IntegrityAssertionSchema } from './assertion.js';
5
+ import { createTableToString } from '../util/ast-stringify.js';
6
+ import type * as AST from '../parser/ast.js';
7
+
8
+ /**
9
+ * Represents a catalog snapshot of the current database schema state
10
+ */
11
+ export interface SchemaCatalog {
12
+ schemaName: string;
13
+ tables: CatalogTable[];
14
+ views: CatalogView[];
15
+ indexes: CatalogIndex[];
16
+ assertions: CatalogAssertion[];
17
+ }
18
+
19
+ export interface CatalogTable {
20
+ name: string;
21
+ ddl: string;
22
+ columns: Array<{ name: string; type: string; notNull: boolean; primaryKey: boolean }>;
23
+ }
24
+
25
+ export interface CatalogView {
26
+ name: string;
27
+ ddl: string;
28
+ }
29
+
30
+ export interface CatalogIndex {
31
+ name: string;
32
+ tableName: string;
33
+ ddl: string;
34
+ }
35
+
36
+ export interface CatalogAssertion {
37
+ name: string;
38
+ ddl: string;
39
+ }
40
+
41
+ /**
42
+ * Collects current schema state from the database into a catalog representation
43
+ */
44
+ export function collectSchemaCatalog(db: Database, schemaName: string = 'main'): SchemaCatalog {
45
+ const schema = db.schemaManager.getSchema(schemaName);
46
+ if (!schema) {
47
+ return {
48
+ schemaName,
49
+ tables: [],
50
+ views: [],
51
+ indexes: [],
52
+ assertions: []
53
+ };
54
+ }
55
+
56
+ const tables: CatalogTable[] = [];
57
+ const views: CatalogView[] = [];
58
+ const indexes: CatalogIndex[] = [];
59
+ const assertions: CatalogAssertion[] = [];
60
+
61
+ // Collect tables
62
+ for (const tableSchema of schema.getAllTables()) {
63
+ if (!tableSchema.isView) {
64
+ tables.push(tableSchemaToCatalog(tableSchema));
65
+ }
66
+ }
67
+
68
+ // Collect views
69
+ for (const viewSchema of schema.getAllViews()) {
70
+ views.push(viewSchemaToCatalog(viewSchema));
71
+ }
72
+
73
+ // Collect assertions
74
+ for (const assertionSchema of schema.getAllAssertions()) {
75
+ assertions.push(assertionSchemaToCatalog(assertionSchema));
76
+ }
77
+
78
+ return {
79
+ schemaName,
80
+ tables,
81
+ views,
82
+ indexes,
83
+ assertions
84
+ };
85
+ }
86
+
87
+ function tableSchemaToCatalog(tableSchema: TableSchema): CatalogTable {
88
+ // Generate canonical DDL from TableSchema
89
+ const ddl = generateTableDDL(tableSchema);
90
+
91
+ const columns = tableSchema.columns.map(col => ({
92
+ name: col.name,
93
+ type: col.affinity?.toString() || 'TEXT',
94
+ notNull: col.notNull,
95
+ primaryKey: col.primaryKey
96
+ }));
97
+
98
+ return {
99
+ name: tableSchema.name,
100
+ ddl,
101
+ columns
102
+ };
103
+ }
104
+
105
+ function viewSchemaToCatalog(viewSchema: ViewSchema): CatalogView {
106
+ return {
107
+ name: viewSchema.name,
108
+ ddl: viewSchema.sql
109
+ };
110
+ }
111
+
112
+ function assertionSchemaToCatalog(assertionSchema: IntegrityAssertionSchema): CatalogAssertion {
113
+ return {
114
+ name: assertionSchema.name,
115
+ ddl: `CREATE ASSERTION ${assertionSchema.name} CHECK (${assertionSchema.violationSql})`
116
+ };
117
+ }
118
+
119
+ /**
120
+ * Generates canonical DDL for a table from its schema
121
+ */
122
+ function generateTableDDL(tableSchema: TableSchema): string {
123
+ const parts: string[] = ['CREATE TABLE'];
124
+
125
+ if (tableSchema.isTemporary) {
126
+ parts.push('TEMP');
127
+ }
128
+
129
+ parts.push(`"${tableSchema.name}"`);
130
+
131
+ // Generate column definitions
132
+ const columnDefs: string[] = [];
133
+ for (const col of tableSchema.columns) {
134
+ let colDef = `"${col.name}"`;
135
+ if (col.affinity) {
136
+ colDef += ` ${col.affinity}`;
137
+ }
138
+ if (col.notNull) {
139
+ colDef += ' NOT NULL';
140
+ }
141
+ if (col.primaryKey && tableSchema.primaryKeyDefinition.length === 1) {
142
+ colDef += ' PRIMARY KEY';
143
+ }
144
+ columnDefs.push(colDef);
145
+ }
146
+
147
+ // Add table-level PRIMARY KEY if composite
148
+ if (tableSchema.primaryKeyDefinition.length > 1) {
149
+ const pkCols = tableSchema.primaryKeyDefinition
150
+ .map(pk => `"${tableSchema.columns[pk.index].name}"`)
151
+ .join(', ');
152
+ columnDefs.push(`PRIMARY KEY (${pkCols})`);
153
+ }
154
+
155
+ parts.push(`(${columnDefs.join(', ')})`);
156
+
157
+ // Add USING clause
158
+ if (tableSchema.vtabModuleName) {
159
+ parts.push(`USING ${tableSchema.vtabModuleName}`);
160
+ if (tableSchema.vtabArgs && Object.keys(tableSchema.vtabArgs).length > 0) {
161
+ const args = Object.entries(tableSchema.vtabArgs)
162
+ .map(([key, value]) => `${key} = ${JSON.stringify(value)}`)
163
+ .join(', ');
164
+ parts.push(`(${args})`);
165
+ }
166
+ }
167
+
168
+ return parts.join(' ');
169
+ }
170
+
171
+ /**
172
+ * Generates canonical DDL from a declared schema AST
173
+ */
174
+ export function generateDeclaredDDL(declaredSchema: AST.DeclareSchemaStmt, targetSchema?: string): string[] {
175
+ const ddlStatements: string[] = [];
176
+
177
+ for (const item of declaredSchema.items) {
178
+ switch (item.type) {
179
+ case 'declaredTable': {
180
+ // Qualify table name with schema if specified
181
+ const tableStmt = item.tableStmt;
182
+ if (targetSchema && targetSchema !== 'main' && !tableStmt.table.schema) {
183
+ const qualifiedStmt: AST.CreateTableStmt = {
184
+ ...tableStmt,
185
+ table: {
186
+ ...tableStmt.table,
187
+ schema: targetSchema
188
+ }
189
+ };
190
+ ddlStatements.push(createTableToString(qualifiedStmt));
191
+ } else {
192
+ ddlStatements.push(createTableToString(tableStmt));
193
+ }
194
+ break;
195
+ }
196
+ case 'declaredIndex':
197
+ // TODO: Implement index DDL generation
198
+ break;
199
+ case 'declaredView':
200
+ // TODO: Implement view DDL generation
201
+ break;
202
+ }
203
+ }
204
+
205
+ return ddlStatements;
206
+ }
207
+
208
+
@@ -11,8 +11,8 @@ export interface SchemaChangeEvent {
11
11
  'module_added' | 'module_removed' | 'collation_added' | 'collation_removed';
12
12
  schemaName?: string;
13
13
  objectName: string;
14
- oldObject?: any;
15
- newObject?: any;
14
+ oldObject?: unknown;
15
+ newObject?: unknown;
16
16
  }
17
17
 
18
18
  /**