@quereus/quereus 0.2.1 → 0.4.0

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 -0
  539. package/dist/src/util/plugin-loader.d.ts.map +1 -1
  540. package/dist/src/util/plugin-loader.js +137 -0
  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 +184 -0
  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
package/src/parser/ast.ts CHANGED
@@ -1,481 +1,582 @@
1
- import type { MaybePromise, RowOp, SqlValue } from '../common/types.js';
2
- import type { ConflictResolution } from '../common/constants.js';
3
-
4
- /**
5
- * SQL Abstract Syntax Tree (AST) definitions
6
- * These interfaces define the structure of parsed SQL statements
7
- */
8
-
9
- // Base for all AST nodes
10
- export interface AstNode {
11
- type: 'literal' | 'identifier' | 'column' | 'binary' | 'unary' | 'function' | 'cast' | 'parameter' | 'subquery' | 'select'
12
- | 'insert' | 'update' | 'delete' | 'createTable' | 'createIndex' | 'createView' | 'alterTable' | 'drop' | 'begin' | 'commit'
13
- | 'rollback' | 'table' | 'join' | 'savepoint' | 'release' | 'functionSource' | 'with' | 'commonTableExpr' | 'pragma'
14
- | 'collate' | 'primaryKey' | 'notNull' | 'null' | 'unique' | 'check' | 'default' | 'foreignKey' | 'generated' | 'windowFunction'
15
- | 'windowDefinition' | 'windowFrame' | 'currentRow' | 'unboundedPreceding' | 'unboundedFollowing' | 'preceding' | 'following'
16
- | 'subquerySource' | 'mutatingSubquerySource' | 'case' | 'in' | 'exists' | 'values' | 'between';
17
- loc?: {
18
- start: { line: number, column: number, offset: number };
19
- end: { line: number, column: number, offset: number };
20
- };
21
- }
22
-
23
- // Expression types
24
- export type Expression = LiteralExpr | IdentifierExpr | BinaryExpr | UnaryExpr | FunctionExpr | CastExpr
25
- | ParameterExpr | SubqueryExpr | ColumnExpr | FunctionSource | CollateExpr | WindowFunctionExpr | CaseExpr
26
- | InExpr | ExistsExpr | BetweenExpr;
27
-
28
- // Literal value expression (number, string, null, etc.)
29
- export interface LiteralExpr extends AstNode {
30
- type: 'literal';
31
- value: MaybePromise<SqlValue>;
32
- lexeme?: string; // Optional: Original text representation, e.g., for numbers like '2.0'
33
- }
34
-
35
- // Identifier expression (table name or pragma name)
36
- export interface IdentifierExpr extends AstNode {
37
- type: 'identifier';
38
- name: string;
39
- schema?: string; // Optional schema qualifier
40
- }
41
-
42
- // Column reference expression
43
- export interface ColumnExpr extends AstNode {
44
- type: 'column';
45
- name: string;
46
- table?: string; // Optional table qualifier
47
- schema?: string; // Optional schema qualifier
48
- alias?: string; // Optional column alias
49
- }
50
-
51
- // Binary operation expression
52
- export interface BinaryExpr extends AstNode {
53
- type: 'binary';
54
- operator: string; // +, -, *, /, AND, OR, =, <, etc.
55
- left: Expression;
56
- right: Expression;
57
- }
58
-
59
- // Unary operation expression
60
- export interface UnaryExpr extends AstNode {
61
- type: 'unary';
62
- operator: string; // NOT, -, +, etc.
63
- expr: Expression;
64
- }
65
-
66
- // Function call expression
67
- export interface FunctionExpr extends AstNode {
68
- type: 'function';
69
- name: string;
70
- args: Expression[];
71
- distinct?: boolean; // For DISTINCT in aggregate functions like COUNT(DISTINCT col)
72
- }
73
-
74
- // Window function expression
75
- export interface WindowFunctionExpr extends AstNode {
76
- type: 'windowFunction';
77
- function: FunctionExpr;
78
- window?: WindowDefinition;
79
- alias?: string;
80
- }
81
-
82
- // Window definition (OVER clause)
83
- export interface WindowDefinition extends AstNode {
84
- type: 'windowDefinition';
85
- partitionBy?: Expression[];
86
- orderBy?: OrderByClause[];
87
- frame?: WindowFrame;
88
- }
89
-
90
- // Window frame clause
91
- export interface WindowFrame {
92
- type: WindowFrameUnits; // Changed from 'windowFrame' to WindowFrameUnits
93
- start: WindowFrameBound;
94
- end: WindowFrameBound | null; // Can be just START bound
95
- exclusion?: WindowFrameExclusion;
96
- }
97
-
98
- // Window frame bound
99
- export type WindowFrameBound =
100
- | { type: 'currentRow' }
101
- | { type: 'unboundedPreceding' }
102
- | { type: 'unboundedFollowing' }
103
- | { type: 'preceding', value: Expression }
104
- | { type: 'following', value: Expression };
105
-
106
- // Window frame units
107
- export type WindowFrameUnits = 'rows' | 'range';
108
-
109
- // Window frame exclusion
110
- export type WindowFrameExclusion = 'no others' | 'current row' | 'group' | 'ties';
111
-
112
- // CAST expression
113
- export interface CastExpr extends AstNode {
114
- type: 'cast';
115
- expr: Expression;
116
- targetType: string;
117
- }
118
-
119
- // Parameter expression (? or :name or $name)
120
- export interface ParameterExpr extends AstNode {
121
- type: 'parameter';
122
- index?: number; // For positional parameters (?)
123
- name?: string; // For named parameters (:name or $name)
124
- }
125
-
126
- // Subquery expression
127
- export interface SubqueryExpr extends AstNode {
128
- type: 'subquery';
129
- query: SelectStmt;
130
- }
131
-
132
- // BETWEEN expression
133
- export interface BetweenExpr extends AstNode {
134
- type: 'between';
135
- expr: Expression; // Left side of BETWEEN
136
- lower: Expression; // Lower bound
137
- upper: Expression; // Upper bound
138
- not?: boolean; // For NOT BETWEEN
139
- }
140
-
141
- // IN expression
142
- export interface InExpr extends AstNode {
143
- type: 'in';
144
- expr: Expression; // Left side of IN
145
- values?: Expression[]; // For IN (value1, value2, ...)
146
- subquery?: SelectStmt; // For IN (SELECT ...)
147
- }
148
-
149
- // EXISTS expression
150
- export interface ExistsExpr extends AstNode {
151
- type: 'exists';
152
- subquery: SelectStmt; // EXISTS (SELECT ...)
153
- }
154
-
155
- // --- Statement Types ---
156
-
157
- // --- Add FunctionSource type ---
158
- export interface FunctionSource extends AstNode {
159
- type: 'functionSource';
160
- name: IdentifierExpr; // Function name (potentially schema.name)
161
- args: Expression[]; // Arguments passed to the function
162
- alias?: string; // Optional alias for the generated table
163
- }
164
-
165
- // SELECT statement
166
- export interface SelectStmt extends AstNode {
167
- type: 'select';
168
- withClause?: WithClause;
169
- columns: ResultColumn[];
170
- from?: FromClause[];
171
- where?: Expression;
172
- groupBy?: Expression[];
173
- having?: Expression;
174
- orderBy?: OrderByClause[];
175
- limit?: Expression;
176
- offset?: Expression;
177
- distinct?: boolean;
178
- all?: boolean;
179
- union?: SelectStmt;
180
- unionAll?: boolean;
181
- compound?: { op: 'union' | 'unionAll' | 'intersect' | 'except'; select: SelectStmt };
182
- }
183
-
184
- // INSERT statement
185
- export interface InsertStmt extends AstNode {
186
- type: 'insert';
187
- withClause?: WithClause;
188
- table: IdentifierExpr;
189
- columns?: string[];
190
- values?: Expression[][]; // For VALUES (...), (...), ...
191
- select?: SelectStmt; // For INSERT ... SELECT
192
- onConflict?: ConflictResolution;
193
- returning?: ResultColumn[];
194
- }
195
-
196
- // UPDATE statement
197
- export interface UpdateStmt extends AstNode {
198
- type: 'update';
199
- withClause?: WithClause;
200
- table: IdentifierExpr;
201
- assignments: { column: string; value: Expression }[];
202
- where?: Expression;
203
- onConflict?: ConflictResolution;
204
- returning?: ResultColumn[];
205
- }
206
-
207
- // DELETE statement
208
- export interface DeleteStmt extends AstNode {
209
- type: 'delete';
210
- withClause?: WithClause;
211
- table: IdentifierExpr;
212
- where?: Expression;
213
- returning?: ResultColumn[];
214
- }
215
-
216
- // VALUES statement
217
- export interface ValuesStmt extends AstNode {
218
- type: 'values';
219
- values: Expression[][]; // Array of value lists: VALUES (1, 'a'), (2, 'b'), ...
220
- }
221
-
222
- // CREATE TABLE statement
223
- export interface CreateTableStmt extends AstNode {
224
- type: 'createTable';
225
- table: IdentifierExpr;
226
- ifNotExists: boolean;
227
- columns: ColumnDef[];
228
- constraints: TableConstraint[];
229
- isTemporary?: boolean;
230
- moduleName?: string; // Optional module name from USING clause
231
- moduleArgs?: Record<string, SqlValue>; // Optional module arguments from USING clause
232
- }
233
-
234
- // CREATE INDEX statement
235
- export interface CreateIndexStmt extends AstNode {
236
- type: 'createIndex';
237
- index: IdentifierExpr;
238
- table: IdentifierExpr;
239
- ifNotExists: boolean;
240
- columns: IndexedColumn[];
241
- where?: Expression;
242
- isUnique?: boolean;
243
- }
244
-
245
- // CREATE VIEW statement
246
- export interface CreateViewStmt extends AstNode {
247
- type: 'createView';
248
- view: IdentifierExpr;
249
- ifNotExists: boolean;
250
- columns?: string[];
251
- select: SelectStmt;
252
- isTemporary?: boolean;
253
- }
254
-
255
- // ALTER TABLE statement
256
- export interface AlterTableStmt extends AstNode {
257
- type: 'alterTable';
258
- table: IdentifierExpr;
259
- action: AlterTableAction;
260
- }
261
-
262
- // DROP statement
263
- export interface DropStmt extends AstNode {
264
- type: 'drop';
265
- objectType: 'table' | 'view' | 'index' | 'trigger';
266
- name: IdentifierExpr;
267
- ifExists: boolean;
268
- }
269
-
270
- // TRANSACTION statements
271
- export interface BeginStmt extends AstNode {
272
- type: 'begin';
273
- mode?: 'deferred' | 'immediate' | 'exclusive';
274
- }
275
-
276
- export interface CommitStmt extends AstNode {
277
- type: 'commit';
278
- }
279
-
280
- export interface RollbackStmt extends AstNode {
281
- type: 'rollback';
282
- savepoint?: string;
283
- }
284
-
285
- // --- Add Savepoint/Release ---
286
- export interface SavepointStmt extends AstNode {
287
- type: 'savepoint';
288
- name: string;
289
- }
290
-
291
- export interface ReleaseStmt extends AstNode {
292
- type: 'release';
293
- savepoint?: string; // Optional savepoint name
294
- }
295
-
296
- // --- Supporting Types ---
297
-
298
- export type ResultColumnExpr = {
299
- type: 'column',
300
- expr: Expression,
301
- alias?: string
302
- }
303
-
304
- // Result column in SELECT
305
- export type ResultColumn =
306
- | { type: 'all', table?: string }
307
- | ResultColumnExpr;
308
-
309
- // FROM clause item (table, join, function call, or subquery)
310
- export type FromClause = TableSource | JoinClause | FunctionSource | SubquerySource | MutatingSubquerySource;
311
-
312
- // Table source in FROM clause
313
- export interface TableSource extends AstNode {
314
- type: 'table';
315
- table: IdentifierExpr;
316
- alias?: string;
317
- }
318
-
319
- // Subquery source in FROM clause: (SELECT ...) AS alias
320
- export interface SubquerySource extends AstNode {
321
- type: 'subquerySource';
322
- subquery: SelectStmt | ValuesStmt;
323
- alias: string;
324
- columns?: string[]; // Optional column list: AS alias(col1, col2, ...)
325
- }
326
-
327
- // Mutating subquery source in FROM clause: (INSERT/UPDATE/DELETE ... RETURNING ...) AS alias
328
- export interface MutatingSubquerySource extends AstNode {
329
- type: 'mutatingSubquerySource';
330
- stmt: InsertStmt | UpdateStmt | DeleteStmt; // Must have RETURNING clause
331
- alias: string;
332
- columns?: string[]; // Optional column list: AS alias(col1, col2, ...)
333
- }
334
-
335
- // JOIN clause in FROM
336
- export interface JoinClause extends AstNode {
337
- type: 'join';
338
- joinType: 'inner' | 'left' | 'right' | 'full' | 'cross';
339
- left: FromClause;
340
- right: FromClause;
341
- condition?: Expression; // For ON clause
342
- columns?: string[]; // For USING clause
343
- }
344
-
345
- // ORDER BY clause
346
- export interface OrderByClause {
347
- expr: Expression;
348
- direction: 'asc' | 'desc';
349
- nulls?: 'first' | 'last';
350
- }
351
-
352
- // Column definition in CREATE TABLE
353
- export interface ColumnDef {
354
- name: string;
355
- dataType?: string;
356
- constraints: ColumnConstraint[];
357
- }
358
-
359
- // Column constraint (PRIMARY KEY, NOT NULL, etc.)
360
- export interface ColumnConstraint extends AstNode {
361
- type: 'primaryKey' | 'notNull' | 'null' | 'unique' | 'check' | 'default' | 'foreignKey' | 'collate' | 'generated';
362
- name?: string;
363
- expr?: Expression; // For CHECK or DEFAULT
364
- operations?: RowOp[]; // ADDED: For CHECK ON (...)
365
- collation?: string; // For COLLATE
366
- autoincrement?: boolean; // For PRIMARY KEY AUTOINCREMENT
367
- direction?: 'asc' | 'desc'; // ADDED: For PRIMARY KEY ASC/DESC
368
- onConflict?: ConflictResolution;
369
- foreignKey?: ForeignKeyClause;
370
- generated?: {
371
- expr: Expression;
372
- stored: boolean; // STORED or VIRTUAL
373
- };
374
- }
375
-
376
- // Table constraint (PRIMARY KEY, UNIQUE, etc.)
377
- export interface TableConstraint extends AstNode {
378
- type: 'primaryKey' | 'unique' | 'check' | 'foreignKey';
379
- name?: string;
380
- columns?: { name: string; direction?: 'asc' | 'desc' }[];
381
- expr?: Expression; // For CHECK
382
- operations?: RowOp[]; // ADDED: For CHECK ON (...)
383
- onConflict?: ConflictResolution;
384
- foreignKey?: ForeignKeyClause;
385
- }
386
-
387
- // Foreign key clause
388
- export interface ForeignKeyClause {
389
- table: string;
390
- columns?: string[];
391
- onDelete?: ForeignKeyAction;
392
- onUpdate?: ForeignKeyAction;
393
- deferrable?: boolean;
394
- initiallyDeferred?: boolean;
395
- }
396
-
397
- // Foreign key action
398
- export type ForeignKeyAction = 'setNull' | 'setDefault' | 'cascade' | 'restrict' | 'noAction';
399
-
400
- // Column in index definition
401
- export interface IndexedColumn {
402
- name?: string; // Column name
403
- expr?: Expression; // Or expression
404
- collation?: string;
405
- direction?: 'asc' | 'desc';
406
- }
407
-
408
- // Alter table action
409
- export type AlterTableAction =
410
- | { type: 'renameTable', newName: string }
411
- | { type: 'renameColumn', oldName: string, newName: string }
412
- | { type: 'addColumn', column: ColumnDef }
413
- | { type: 'dropColumn', name: string }
414
- | { type: 'addConstraint', constraint: TableConstraint };
415
-
416
- // Add PragmaStmt interface
417
- export interface PragmaStmt extends AstNode {
418
- type: 'pragma';
419
- name: string; // Name of the pragma
420
- value?: LiteralExpr | IdentifierExpr; // Value being assigned (optional for some pragmas)
421
- }
422
-
423
- export interface WithClause extends AstNode {
424
- type: 'with';
425
- recursive: boolean;
426
- ctes: CommonTableExpr[];
427
- options?: WithClauseOptions;
428
- }
429
-
430
- export interface WithClauseOptions {
431
- maxRecursion?: number;
432
- }
433
-
434
- export interface CommonTableExpr extends AstNode {
435
- type: 'commonTableExpr';
436
- name: string;
437
- columns?: string[];
438
- query: SelectStmt | InsertStmt | UpdateStmt | DeleteStmt; // CTE body
439
- materializationHint?: 'materialized' | 'not_materialized';
440
- }
441
-
442
- /**
443
- * Represents a COLLATE expression in SQL, which specifies the collation sequence
444
- * to use for a string operation
445
- */
446
- export interface CollateExpr extends AstNode {
447
- type: 'collate';
448
- expr: Expression;
449
- collation: string;
450
- }
451
-
452
- export interface CaseExprWhenThenClause {
453
- when: Expression;
454
- then: Expression;
455
- }
456
-
457
- export interface CaseExpr extends AstNode {
458
- type: 'case'; // New type
459
- baseExpr?: Expression; // Optional: for CASE expr WHEN ...
460
- whenThenClauses: CaseExprWhenThenClause[];
461
- elseExpr?: Expression; // Optional: for ELSE ...
462
- }
463
-
464
- // --- Utility Type for Top-Level Statements ---
465
- export type Statement =
466
- | SelectStmt
467
- | InsertStmt
468
- | UpdateStmt
469
- | DeleteStmt
470
- | ValuesStmt
471
- | CreateTableStmt
472
- | CreateIndexStmt
473
- | CreateViewStmt
474
- | DropStmt
475
- | AlterTableStmt
476
- | BeginStmt
477
- | CommitStmt
478
- | RollbackStmt
479
- | SavepointStmt
480
- | ReleaseStmt
481
- | PragmaStmt;
1
+ import type { MaybePromise, RowOp, SqlValue } from '../common/types.js';
2
+ import type { ConflictResolution } from '../common/constants.js';
3
+
4
+ /**
5
+ * SQL Abstract Syntax Tree (AST) definitions
6
+ * These interfaces define the structure of parsed SQL statements
7
+ */
8
+
9
+ // Base for all AST nodes
10
+ export interface AstNode {
11
+ type: 'literal' | 'identifier' | 'column' | 'binary' | 'unary' | 'function' | 'cast' | 'parameter' | 'subquery' | 'select'
12
+ | 'insert' | 'update' | 'delete' | 'createTable' | 'createIndex' | 'createView' | 'createAssertion' | 'alterTable' | 'drop' | 'begin' | 'commit'
13
+ | 'rollback' | 'table' | 'join' | 'savepoint' | 'release' | 'functionSource' | 'with' | 'commonTableExpr' | 'pragma'
14
+ | 'collate' | 'primaryKey' | 'notNull' | 'null' | 'unique' | 'check' | 'default' | 'foreignKey' | 'generated' | 'windowFunction'
15
+ | 'windowDefinition' | 'windowFrame' | 'currentRow' | 'unboundedPreceding' | 'unboundedFollowing' | 'preceding' | 'following'
16
+ | 'subquerySource' | 'mutatingSubquerySource' | 'case' | 'in' | 'exists' | 'values' | 'between'
17
+ | 'declareSchema' | 'diffSchema' | 'applySchema' | 'explainSchema'
18
+ | 'declaredTable' | 'declaredIndex' | 'declaredView' | 'declaredSeed' | 'declareIgnored';
19
+ loc?: {
20
+ start: { line: number, column: number, offset: number };
21
+ end: { line: number, column: number, offset: number };
22
+ };
23
+ }
24
+
25
+ // Expression types
26
+ export type Expression = LiteralExpr | IdentifierExpr | BinaryExpr | UnaryExpr | FunctionExpr | CastExpr
27
+ | ParameterExpr | SubqueryExpr | ColumnExpr | FunctionSource | CollateExpr | WindowFunctionExpr | CaseExpr
28
+ | InExpr | ExistsExpr | BetweenExpr;
29
+
30
+ // Literal value expression (number, string, null, etc.)
31
+ export interface LiteralExpr extends AstNode {
32
+ type: 'literal';
33
+ value: MaybePromise<SqlValue>;
34
+ lexeme?: string; // Optional: Original text representation, e.g., for numbers like '2.0'
35
+ }
36
+
37
+ // Identifier expression (table name or pragma name)
38
+ export interface IdentifierExpr extends AstNode {
39
+ type: 'identifier';
40
+ name: string;
41
+ schema?: string; // Optional schema qualifier
42
+ }
43
+
44
+ // Column reference expression
45
+ export interface ColumnExpr extends AstNode {
46
+ type: 'column';
47
+ name: string;
48
+ table?: string; // Optional table qualifier
49
+ schema?: string; // Optional schema qualifier
50
+ alias?: string; // Optional column alias
51
+ }
52
+
53
+ // Binary operation expression
54
+ export interface BinaryExpr extends AstNode {
55
+ type: 'binary';
56
+ operator: string; // +, -, *, /, AND, OR, =, <, etc.
57
+ left: Expression;
58
+ right: Expression;
59
+ }
60
+
61
+ // Unary operation expression
62
+ export interface UnaryExpr extends AstNode {
63
+ type: 'unary';
64
+ operator: string; // NOT, -, +, etc.
65
+ expr: Expression;
66
+ }
67
+
68
+ // Function call expression
69
+ export interface FunctionExpr extends AstNode {
70
+ type: 'function';
71
+ name: string;
72
+ args: Expression[];
73
+ distinct?: boolean; // For DISTINCT in aggregate functions like COUNT(DISTINCT col)
74
+ }
75
+
76
+ // Window function expression
77
+ export interface WindowFunctionExpr extends AstNode {
78
+ type: 'windowFunction';
79
+ function: FunctionExpr;
80
+ window?: WindowDefinition;
81
+ alias?: string;
82
+ }
83
+
84
+ // Window definition (OVER clause)
85
+ export interface WindowDefinition extends AstNode {
86
+ type: 'windowDefinition';
87
+ partitionBy?: Expression[];
88
+ orderBy?: OrderByClause[];
89
+ frame?: WindowFrame;
90
+ }
91
+
92
+ // Window frame clause
93
+ export interface WindowFrame {
94
+ type: WindowFrameUnits; // Changed from 'windowFrame' to WindowFrameUnits
95
+ start: WindowFrameBound;
96
+ end: WindowFrameBound | null; // Can be just START bound
97
+ exclusion?: WindowFrameExclusion;
98
+ }
99
+
100
+ // Window frame bound
101
+ export type WindowFrameBound =
102
+ | { type: 'currentRow' }
103
+ | { type: 'unboundedPreceding' }
104
+ | { type: 'unboundedFollowing' }
105
+ | { type: 'preceding', value: Expression }
106
+ | { type: 'following', value: Expression };
107
+
108
+ // Window frame units
109
+ export type WindowFrameUnits = 'rows' | 'range';
110
+
111
+ // Window frame exclusion
112
+ export type WindowFrameExclusion = 'no others' | 'current row' | 'group' | 'ties';
113
+
114
+ // CAST expression
115
+ export interface CastExpr extends AstNode {
116
+ type: 'cast';
117
+ expr: Expression;
118
+ targetType: string;
119
+ }
120
+
121
+ // Parameter expression (? or :name or $name)
122
+ export interface ParameterExpr extends AstNode {
123
+ type: 'parameter';
124
+ index?: number; // For positional parameters (?)
125
+ name?: string; // For named parameters (:name or $name)
126
+ }
127
+
128
+ // Subquery expression
129
+ export interface SubqueryExpr extends AstNode {
130
+ type: 'subquery';
131
+ query: SelectStmt;
132
+ }
133
+
134
+ // BETWEEN expression
135
+ export interface BetweenExpr extends AstNode {
136
+ type: 'between';
137
+ expr: Expression; // Left side of BETWEEN
138
+ lower: Expression; // Lower bound
139
+ upper: Expression; // Upper bound
140
+ not?: boolean; // For NOT BETWEEN
141
+ }
142
+
143
+ // IN expression
144
+ export interface InExpr extends AstNode {
145
+ type: 'in';
146
+ expr: Expression; // Left side of IN
147
+ values?: Expression[]; // For IN (value1, value2, ...)
148
+ subquery?: SelectStmt; // For IN (SELECT ...)
149
+ }
150
+
151
+ // EXISTS expression
152
+ export interface ExistsExpr extends AstNode {
153
+ type: 'exists';
154
+ subquery: SelectStmt; // EXISTS (SELECT ...)
155
+ }
156
+
157
+ // --- Statement Types ---
158
+
159
+ // --- Add FunctionSource type ---
160
+ export interface FunctionSource extends AstNode {
161
+ type: 'functionSource';
162
+ name: IdentifierExpr; // Function name (potentially schema.name)
163
+ args: Expression[]; // Arguments passed to the function
164
+ alias?: string; // Optional alias for the generated table
165
+ columns?: string[]; // Optional column list after alias: alias(col1, col2, ...)
166
+ }
167
+
168
+ // SELECT statement
169
+ export interface SelectStmt extends AstNode {
170
+ type: 'select';
171
+ withClause?: WithClause;
172
+ columns: ResultColumn[];
173
+ from?: FromClause[];
174
+ where?: Expression;
175
+ groupBy?: Expression[];
176
+ having?: Expression;
177
+ orderBy?: OrderByClause[];
178
+ limit?: Expression;
179
+ offset?: Expression;
180
+ distinct?: boolean;
181
+ all?: boolean;
182
+ union?: SelectStmt;
183
+ unionAll?: boolean;
184
+ compound?: { op: 'union' | 'unionAll' | 'intersect' | 'except' | 'diff'; select: SelectStmt };
185
+ }
186
+
187
+ // INSERT statement
188
+ export interface InsertStmt extends AstNode {
189
+ type: 'insert';
190
+ withClause?: WithClause;
191
+ table: IdentifierExpr;
192
+ columns?: string[];
193
+ values?: Expression[][]; // For VALUES (...), (...), ...
194
+ select?: SelectStmt; // For INSERT ... SELECT
195
+ onConflict?: ConflictResolution;
196
+ returning?: ResultColumn[];
197
+ contextValues?: ContextAssignment[]; // Optional mutation context assignments
198
+ }
199
+
200
+ // UPDATE statement
201
+ export interface UpdateStmt extends AstNode {
202
+ type: 'update';
203
+ withClause?: WithClause;
204
+ table: IdentifierExpr;
205
+ assignments: { column: string; value: Expression }[];
206
+ where?: Expression;
207
+ onConflict?: ConflictResolution;
208
+ returning?: ResultColumn[];
209
+ contextValues?: ContextAssignment[]; // Optional mutation context assignments
210
+ }
211
+
212
+ // DELETE statement
213
+ export interface DeleteStmt extends AstNode {
214
+ type: 'delete';
215
+ withClause?: WithClause;
216
+ table: IdentifierExpr;
217
+ where?: Expression;
218
+ returning?: ResultColumn[];
219
+ contextValues?: ContextAssignment[]; // Optional mutation context assignments
220
+ }
221
+
222
+ // VALUES statement
223
+ export interface ValuesStmt extends AstNode {
224
+ type: 'values';
225
+ values: Expression[][]; // Array of value lists: VALUES (1, 'a'), (2, 'b'), ...
226
+ }
227
+
228
+ // CREATE TABLE statement
229
+ export interface CreateTableStmt extends AstNode {
230
+ type: 'createTable';
231
+ table: IdentifierExpr;
232
+ ifNotExists: boolean;
233
+ columns: ColumnDef[];
234
+ constraints: TableConstraint[];
235
+ isTemporary?: boolean;
236
+ moduleName?: string; // Optional module name from USING clause
237
+ moduleArgs?: Record<string, SqlValue>; // Optional module arguments from USING clause
238
+ contextDefinitions?: MutationContextVar[]; // Optional mutation context variables
239
+ }
240
+
241
+ // CREATE INDEX statement
242
+ export interface CreateIndexStmt extends AstNode {
243
+ type: 'createIndex';
244
+ index: IdentifierExpr;
245
+ table: IdentifierExpr;
246
+ ifNotExists: boolean;
247
+ columns: IndexedColumn[];
248
+ where?: Expression;
249
+ isUnique?: boolean;
250
+ }
251
+
252
+ // CREATE ASSERTION statement
253
+ export interface CreateAssertionStmt extends AstNode {
254
+ type: 'createAssertion';
255
+ name: string;
256
+ check: Expression; // The CHECK (<violation-query>) expression
257
+ }
258
+
259
+ // CREATE VIEW statement
260
+ export interface CreateViewStmt extends AstNode {
261
+ type: 'createView';
262
+ view: IdentifierExpr;
263
+ ifNotExists: boolean;
264
+ columns?: string[];
265
+ select: SelectStmt;
266
+ isTemporary?: boolean;
267
+ }
268
+
269
+ // ALTER TABLE statement
270
+ export interface AlterTableStmt extends AstNode {
271
+ type: 'alterTable';
272
+ table: IdentifierExpr;
273
+ action: AlterTableAction;
274
+ }
275
+
276
+ // DROP statement
277
+ export interface DropStmt extends AstNode {
278
+ type: 'drop';
279
+ objectType: 'table' | 'view' | 'index' | 'trigger' | 'assertion';
280
+ name: IdentifierExpr;
281
+ ifExists: boolean;
282
+ }
283
+
284
+ // TRANSACTION statements
285
+ export interface BeginStmt extends AstNode {
286
+ type: 'begin';
287
+ mode?: 'deferred' | 'immediate' | 'exclusive';
288
+ }
289
+
290
+ export interface CommitStmt extends AstNode {
291
+ type: 'commit';
292
+ }
293
+
294
+ export interface RollbackStmt extends AstNode {
295
+ type: 'rollback';
296
+ savepoint?: string;
297
+ }
298
+
299
+ // --- Add Savepoint/Release ---
300
+ export interface SavepointStmt extends AstNode {
301
+ type: 'savepoint';
302
+ name: string;
303
+ }
304
+
305
+ export interface ReleaseStmt extends AstNode {
306
+ type: 'release';
307
+ savepoint?: string; // Optional savepoint name
308
+ }
309
+
310
+ // --- Supporting Types ---
311
+
312
+ export type ResultColumnExpr = {
313
+ type: 'column',
314
+ expr: Expression,
315
+ alias?: string
316
+ }
317
+
318
+ // Result column in SELECT
319
+ export type ResultColumn =
320
+ | { type: 'all', table?: string }
321
+ | ResultColumnExpr;
322
+
323
+ // FROM clause item (table, join, function call, or subquery)
324
+ export type FromClause = TableSource | JoinClause | FunctionSource | SubquerySource | MutatingSubquerySource;
325
+
326
+ // Table source in FROM clause
327
+ export interface TableSource extends AstNode {
328
+ type: 'table';
329
+ table: IdentifierExpr;
330
+ alias?: string;
331
+ }
332
+
333
+ // Subquery source in FROM clause: (SELECT ...) AS alias
334
+ export interface SubquerySource extends AstNode {
335
+ type: 'subquerySource';
336
+ subquery: SelectStmt | ValuesStmt;
337
+ alias: string;
338
+ columns?: string[]; // Optional column list: AS alias(col1, col2, ...)
339
+ }
340
+
341
+ // Mutating subquery source in FROM clause: (INSERT/UPDATE/DELETE ... RETURNING ...) AS alias
342
+ export interface MutatingSubquerySource extends AstNode {
343
+ type: 'mutatingSubquerySource';
344
+ stmt: InsertStmt | UpdateStmt | DeleteStmt; // Must have RETURNING clause
345
+ alias: string;
346
+ columns?: string[]; // Optional column list: AS alias(col1, col2, ...)
347
+ }
348
+
349
+ // JOIN clause in FROM
350
+ export interface JoinClause extends AstNode {
351
+ type: 'join';
352
+ joinType: 'inner' | 'left' | 'right' | 'full' | 'cross';
353
+ left: FromClause;
354
+ right: FromClause;
355
+ condition?: Expression; // For ON clause
356
+ columns?: string[]; // For USING clause
357
+ }
358
+
359
+ // ORDER BY clause
360
+ export interface OrderByClause {
361
+ expr: Expression;
362
+ direction: 'asc' | 'desc';
363
+ nulls?: 'first' | 'last';
364
+ }
365
+
366
+ // Column definition in CREATE TABLE
367
+ export interface ColumnDef {
368
+ name: string;
369
+ dataType?: string;
370
+ constraints: ColumnConstraint[];
371
+ }
372
+
373
+ // Mutation context variable definition
374
+ export interface MutationContextVar {
375
+ name: string;
376
+ dataType?: string;
377
+ notNull?: boolean;
378
+ }
379
+
380
+ // Mutation context assignment
381
+ export interface ContextAssignment {
382
+ name: string;
383
+ value: Expression;
384
+ }
385
+
386
+ // Column constraint (PRIMARY KEY, NOT NULL, etc.)
387
+ export interface ColumnConstraint extends AstNode {
388
+ type: 'primaryKey' | 'notNull' | 'null' | 'unique' | 'check' | 'default' | 'foreignKey' | 'collate' | 'generated';
389
+ name?: string;
390
+ expr?: Expression; // For CHECK or DEFAULT
391
+ operations?: RowOp[]; // ADDED: For CHECK ON (...)
392
+ collation?: string; // For COLLATE
393
+ autoincrement?: boolean; // For PRIMARY KEY AUTOINCREMENT
394
+ direction?: 'asc' | 'desc'; // ADDED: For PRIMARY KEY ASC/DESC
395
+ onConflict?: ConflictResolution;
396
+ foreignKey?: ForeignKeyClause;
397
+ generated?: {
398
+ expr: Expression;
399
+ stored: boolean; // STORED or VIRTUAL
400
+ };
401
+ deferrable?: boolean;
402
+ initiallyDeferred?: boolean;
403
+ }
404
+
405
+ // Table constraint (PRIMARY KEY, UNIQUE, etc.)
406
+ export interface TableConstraint extends AstNode {
407
+ type: 'primaryKey' | 'unique' | 'check' | 'foreignKey';
408
+ name?: string;
409
+ columns?: { name: string; direction?: 'asc' | 'desc' }[];
410
+ expr?: Expression; // For CHECK
411
+ operations?: RowOp[]; // ADDED: For CHECK ON (...)
412
+ onConflict?: ConflictResolution;
413
+ foreignKey?: ForeignKeyClause;
414
+ deferrable?: boolean;
415
+ initiallyDeferred?: boolean;
416
+ }
417
+
418
+ // Foreign key clause
419
+ export interface ForeignKeyClause {
420
+ table: string;
421
+ columns?: string[];
422
+ onDelete?: ForeignKeyAction;
423
+ onUpdate?: ForeignKeyAction;
424
+ deferrable?: boolean;
425
+ initiallyDeferred?: boolean;
426
+ }
427
+
428
+ // Foreign key action
429
+ export type ForeignKeyAction = 'setNull' | 'setDefault' | 'cascade' | 'restrict' | 'noAction';
430
+
431
+ // Column in index definition
432
+ export interface IndexedColumn {
433
+ name?: string; // Column name
434
+ expr?: Expression; // Or expression
435
+ collation?: string;
436
+ direction?: 'asc' | 'desc';
437
+ }
438
+
439
+ // Alter table action
440
+ export type AlterTableAction =
441
+ | { type: 'renameTable', newName: string }
442
+ | { type: 'renameColumn', oldName: string, newName: string }
443
+ | { type: 'addColumn', column: ColumnDef }
444
+ | { type: 'dropColumn', name: string }
445
+ | { type: 'addConstraint', constraint: TableConstraint };
446
+
447
+ // Add PragmaStmt interface
448
+ export interface PragmaStmt extends AstNode {
449
+ type: 'pragma';
450
+ name: string; // Name of the pragma
451
+ value?: LiteralExpr | IdentifierExpr; // Value being assigned (optional for some pragmas)
452
+ }
453
+
454
+ export interface WithClause extends AstNode {
455
+ type: 'with';
456
+ recursive: boolean;
457
+ ctes: CommonTableExpr[];
458
+ options?: WithClauseOptions;
459
+ }
460
+
461
+ export interface WithClauseOptions {
462
+ maxRecursion?: number;
463
+ }
464
+
465
+ export interface CommonTableExpr extends AstNode {
466
+ type: 'commonTableExpr';
467
+ name: string;
468
+ columns?: string[];
469
+ query: SelectStmt | InsertStmt | UpdateStmt | DeleteStmt; // CTE body
470
+ materializationHint?: 'materialized' | 'not_materialized';
471
+ }
472
+
473
+ /**
474
+ * Represents a COLLATE expression in SQL, which specifies the collation sequence
475
+ * to use for a string operation
476
+ */
477
+ export interface CollateExpr extends AstNode {
478
+ type: 'collate';
479
+ expr: Expression;
480
+ collation: string;
481
+ }
482
+
483
+ export interface CaseExprWhenThenClause {
484
+ when: Expression;
485
+ then: Expression;
486
+ }
487
+
488
+ export interface CaseExpr extends AstNode {
489
+ type: 'case'; // New type
490
+ baseExpr?: Expression; // Optional: for CASE expr WHEN ...
491
+ whenThenClauses: CaseExprWhenThenClause[];
492
+ elseExpr?: Expression; // Optional: for ELSE ...
493
+ }
494
+
495
+ // --- Utility Type for Top-Level Statements ---
496
+ export type Statement =
497
+ | SelectStmt
498
+ | InsertStmt
499
+ | UpdateStmt
500
+ | DeleteStmt
501
+ | ValuesStmt
502
+ | CreateTableStmt
503
+ | CreateIndexStmt
504
+ | CreateViewStmt
505
+ | CreateAssertionStmt
506
+ | DropStmt
507
+ | AlterTableStmt
508
+ | BeginStmt
509
+ | CommitStmt
510
+ | RollbackStmt
511
+ | SavepointStmt
512
+ | ReleaseStmt
513
+ | PragmaStmt
514
+ | DeclareSchemaStmt
515
+ | DiffSchemaStmt
516
+ | ApplySchemaStmt
517
+ | ExplainSchemaStmt;
518
+
519
+ // === Declarative Schema AST ===
520
+
521
+ export interface DeclareSchemaStmt extends AstNode {
522
+ type: 'declareSchema';
523
+ schemaName?: string;
524
+ version?: string;
525
+ using?: { defaultVtabModule?: string; defaultVtabArgs?: string };
526
+ items: readonly DeclareItem[];
527
+ }
528
+
529
+ export type DeclareItem = DeclaredTable | DeclaredIndex | DeclaredView | DeclaredSeed | DeclareIgnoredItem;
530
+
531
+ export interface DeclaredTable extends AstNode {
532
+ type: 'declaredTable';
533
+ tableStmt: CreateTableStmt;
534
+ }
535
+
536
+ export interface DeclaredIndex extends AstNode {
537
+ type: 'declaredIndex';
538
+ indexStmt: CreateIndexStmt;
539
+ }
540
+
541
+ export interface DeclaredView extends AstNode {
542
+ type: 'declaredView';
543
+ viewStmt: CreateViewStmt;
544
+ }
545
+
546
+ export interface DeclaredSeed extends AstNode {
547
+ type: 'declaredSeed';
548
+ tableName: string;
549
+ columns?: readonly string[];
550
+ seedData?: readonly SqlValue[][];
551
+ }
552
+
553
+ /** Placeholder for domain/collation/import items to keep parser forward-compatible */
554
+ export interface DeclareIgnoredItem extends AstNode {
555
+ type: 'declareIgnored';
556
+ kind: 'domain' | 'collation' | 'import';
557
+ text: string; // original text snippet for hashing/canonicalization if needed
558
+ }
559
+
560
+ export interface DiffSchemaStmt extends AstNode {
561
+ type: 'diffSchema';
562
+ schemaName?: string;
563
+ }
564
+
565
+ export interface ApplySchemaStmt extends AstNode {
566
+ type: 'applySchema';
567
+ schemaName?: string;
568
+ toVersion?: string;
569
+ withSeed?: boolean;
570
+ options?: {
571
+ dryRun?: boolean;
572
+ validateOnly?: boolean;
573
+ allowDestructive?: boolean;
574
+ renamePolicy?: 'require-hint' | 'infer-id';
575
+ };
576
+ }
577
+
578
+ export interface ExplainSchemaStmt extends AstNode {
579
+ type: 'explainSchema';
580
+ schemaName?: string;
581
+ version?: string;
582
+ }