@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
@@ -106,6 +106,7 @@ export class Statement {
106
106
  try {
107
107
  const currentAst = this.getAstStatement();
108
108
  const planResult = this.db._buildPlan([currentAst], this.boundArgs);
109
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
109
110
  const dependencies = (planResult as any).schemaDependencies; // Extract dependencies from planning context
110
111
  plan = this.db.optimizer.optimize(planResult, this.db) as BlockNode;
111
112
 
@@ -241,7 +242,7 @@ export class Statement {
241
242
  context: new Map(),
242
243
  tableContexts: new Map(),
243
244
  tracer: this.db.getInstructionTracer(),
244
- enableMetrics: this.db.getOption('runtime_metrics'),
245
+ enableMetrics: Boolean(this.db.getOption('runtime_metrics')),
245
246
  };
246
247
 
247
248
  const results = await scheduler.run(runtimeCtx);
@@ -255,6 +256,7 @@ export class Statement {
255
256
  yield* results as AsyncIterable<Row>;
256
257
  }
257
258
  }
259
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
258
260
  } catch (e: any) {
259
261
  errorLog('Runtime execution failed in iterateRows for current statement: %O', e);
260
262
  if (e instanceof QuereusError) throw e;
@@ -1,5 +1,6 @@
1
1
  import { registerWindowFunction } from '../../schema/window-function.js';
2
2
  import { SqlDataType } from '../../common/types.js';
3
+ import { AggValue } from '../registration.js';
3
4
 
4
5
  // Built-in window function schemas
5
6
  export function registerBuiltinWindowFunctions(): void {
@@ -68,13 +69,13 @@ export function registerBuiltinWindowFunctions(): void {
68
69
  },
69
70
  requiresOrderBy: false,
70
71
  kind: 'aggregate',
71
- step: (state: any, value: any) => {
72
+ step: (state: AggValue, value: AggValue) => {
72
73
  if (state === null || state === undefined) {
73
74
  state = 0;
74
75
  }
75
76
  return value !== null ? state + 1 : state;
76
77
  },
77
- final: (state: any) => state || 0
78
+ final: (state: AggValue) => state || 0
78
79
  });
79
80
 
80
81
  registerWindowFunction({
@@ -88,14 +89,14 @@ export function registerBuiltinWindowFunctions(): void {
88
89
  },
89
90
  requiresOrderBy: false,
90
91
  kind: 'aggregate',
91
- step: (state: any, value: any) => {
92
+ step: (state: AggValue, value: AggValue) => {
92
93
  if (value === null) return state;
93
94
  if (state === null || state === undefined) {
94
95
  return Number(value);
95
96
  }
96
97
  return state + Number(value);
97
98
  },
98
- final: (state: any) => state
99
+ final: (state: AggValue) => state
99
100
  });
100
101
 
101
102
  registerWindowFunction({
@@ -109,7 +110,7 @@ export function registerBuiltinWindowFunctions(): void {
109
110
  },
110
111
  requiresOrderBy: false,
111
112
  kind: 'aggregate',
112
- step: (state: any, value: any) => {
113
+ step: (state: AggValue, value: AggValue) => {
113
114
  if (value === null) return state;
114
115
  if (!state) {
115
116
  state = { sum: 0, count: 0 };
@@ -118,7 +119,7 @@ export function registerBuiltinWindowFunctions(): void {
118
119
  state.count += 1;
119
120
  return state;
120
121
  },
121
- final: (state: any) => state ? state.sum / state.count : null
122
+ final: (state: AggValue) => state ? state.sum / state.count : null
122
123
  });
123
124
 
124
125
  registerWindowFunction({
@@ -132,14 +133,14 @@ export function registerBuiltinWindowFunctions(): void {
132
133
  },
133
134
  requiresOrderBy: false,
134
135
  kind: 'aggregate',
135
- step: (state: any, value: any) => {
136
+ step: (state: AggValue, value: AggValue) => {
136
137
  if (value === null) return state;
137
138
  if (state === null || state === undefined) {
138
139
  return value;
139
140
  }
140
141
  return value < state ? value : state;
141
142
  },
142
- final: (state: any) => state
143
+ final: (state: AggValue) => state
143
144
  });
144
145
 
145
146
  registerWindowFunction({
@@ -153,13 +154,13 @@ export function registerBuiltinWindowFunctions(): void {
153
154
  },
154
155
  requiresOrderBy: false,
155
156
  kind: 'aggregate',
156
- step: (state: any, value: any) => {
157
+ step: (state: AggValue, value: AggValue) => {
157
158
  if (value === null) return state;
158
159
  if (state === null || state === undefined) {
159
160
  return value;
160
161
  }
161
162
  return value > state ? value : state;
162
163
  },
163
- final: (state: any) => state
164
+ final: (state: AggValue) => state
164
165
  });
165
166
  }
@@ -451,3 +451,45 @@ export const strftimeFunc = createScalarFunction(
451
451
  }
452
452
  }
453
453
  );
454
+
455
+ // IsISODate(text)
456
+ export const isISODateFunc = createScalarFunction(
457
+ { name: 'IsISODate', numArgs: 1, deterministic: true },
458
+ (value: SqlValue): SqlValue => {
459
+ if (typeof value !== 'string') return 0;
460
+ const s = value.trim();
461
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(s)) return 0;
462
+ try {
463
+ const d = Temporal.PlainDate.from(s);
464
+ return d.toString() === s ? 1 : 0;
465
+ } catch {
466
+ return 0;
467
+ }
468
+ }
469
+ );
470
+
471
+ // IsISODateTime(text)
472
+ export const isISODateTimeFunc = createScalarFunction(
473
+ { name: 'IsISODateTime', numArgs: 1, deterministic: true },
474
+ (value: SqlValue): SqlValue => {
475
+ if (typeof value !== 'string') return 0;
476
+ const s = value.trim();
477
+ // YYYY-MM-DDTHH:MM[:SS[.fraction]] [timezone]
478
+ const re =
479
+ /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?(?:Z|[+-]\d{2}:\d{2})?$/;
480
+ if (!re.test(s)) return 0;
481
+ const hasZone = /(?:Z|[+-]\d{2}:\d{2})$/.test(s);
482
+ try {
483
+ if (hasZone) {
484
+ // Zoned ISO string
485
+ void Temporal.Instant.from(s);
486
+ return 1;
487
+ }
488
+ // Plain ISO local date-time
489
+ void Temporal.PlainDateTime.from(s);
490
+ return 1;
491
+ } catch {
492
+ return 0;
493
+ }
494
+ }
495
+ );
@@ -6,7 +6,69 @@ import { QuereusError } from "../../common/errors.js";
6
6
  import { StatusCode } from "../../common/types.js";
7
7
  import type { Database } from "../../core/database.js";
8
8
  import { safeJsonStringify } from "../../util/serialization.js";
9
- import { InstructionTraceEvent } from "../../runtime/types.js";
9
+ import { CollectingInstructionTracer, InstructionTraceEvent } from "../../runtime/types.js";
10
+ import { PlanNode, RelationalPlanNode } from "../../planner/nodes/plan-node.js";
11
+ import { EmissionContext } from "../../runtime/emission-context.js";
12
+ import { emitPlanNode } from "../../runtime/emitters.js";
13
+ import { Scheduler } from "../../runtime/scheduler.js";
14
+ import { analyzeRowSpecific } from "../../planner/analysis/constraint-extractor.js";
15
+ import { Parser } from "../../parser/parser.js";
16
+ import * as AST from "../../parser/ast.js";
17
+ import { GlobalScope } from "../../planner/scopes/global.js";
18
+ import { ParameterScope } from "../../planner/scopes/param.js";
19
+ import type { PlanningContext } from "../../planner/planning-context.js";
20
+ import { BuildTimeDependencyTracker } from "../../planner/planning-context.js";
21
+ import { buildBlock } from "../../planner/building/block.js";
22
+
23
+ // Helper function to safely get function name from nodes that have it
24
+ function getFunctionName(node: PlanNode): string | null {
25
+ // Check for nodes that have functionName property
26
+ if ('functionName' in node && typeof (node as any).functionName === 'string') {
27
+ return (node as any).functionName;
28
+ }
29
+ return null;
30
+ }
31
+
32
+ // Helper function to safely get alias from nodes that have it
33
+ function getAlias(node: PlanNode): string | null {
34
+ // Check for nodes that have alias property
35
+ if ('alias' in node && typeof (node as any).alias === 'string') {
36
+ return (node as any).alias;
37
+ }
38
+ return null;
39
+ }
40
+
41
+ // Helper function to safely get table name or related identifier
42
+ function getObjectName(node: PlanNode): string | null {
43
+ // Check for function name first (table functions, scalar functions, etc.)
44
+ const functionName = getFunctionName(node);
45
+ if (functionName) {
46
+ return functionName;
47
+ }
48
+
49
+ // Check for table schema in table reference nodes
50
+ if ('tableSchema' in node) {
51
+ const tableSchema = (node as any).tableSchema;
52
+ if (tableSchema && typeof tableSchema.name === 'string') {
53
+ return tableSchema.schemaName ? `${tableSchema.schemaName}.${tableSchema.name}` : tableSchema.name;
54
+ }
55
+ }
56
+
57
+ // Check for CTE name
58
+ if ('cteName' in node && typeof (node as any).cteName === 'string') {
59
+ return (node as any).cteName;
60
+ }
61
+
62
+ // Check for view schema in view reference nodes
63
+ if ('viewSchema' in node) {
64
+ const viewSchema = (node as any).viewSchema;
65
+ if (viewSchema && typeof viewSchema.name === 'string') {
66
+ return viewSchema.schemaName ? `${viewSchema.schemaName}.${viewSchema.name}` : viewSchema.name;
67
+ }
68
+ }
69
+
70
+ return null;
71
+ }
10
72
 
11
73
  // Query plan explanation function (table-valued function)
12
74
  export const queryPlanFunc = createIntegratedTableValuedFunction(
@@ -47,7 +109,7 @@ export const queryPlanFunc = createIntegratedTableValuedFunction(
47
109
 
48
110
  // Traverse the plan tree and yield information about each node
49
111
  let nodeId = 1;
50
- const nodeStack: Array<{ node: any; parentId: number | null; level: number }> = [
112
+ const nodeStack: Array<{ node: PlanNode; parentId: number | null; level: number }> = [
51
113
  { node: plan, parentId: null, level: 0 }
52
114
  ];
53
115
 
@@ -64,7 +126,7 @@ export const queryPlanFunc = createIntegratedTableValuedFunction(
64
126
  let objectName: string | null = null;
65
127
  let alias: string | null = null;
66
128
  const estCost = node.estimatedCost || 1.0;
67
- const estRows = (node as any).estimatedRows || 10;
129
+ const estRows = (node as RelationalPlanNode).estimatedRows || 10;
68
130
 
69
131
  // Use node's toString() method for detail if available
70
132
  if (typeof node.toString === 'function') {
@@ -74,32 +136,21 @@ export const queryPlanFunc = createIntegratedTableValuedFunction(
74
136
  if (node.nodeType) {
75
137
  op = node.nodeType.replace(/Node$/, '').toUpperCase();
76
138
 
77
- switch (node.nodeType) {
78
- case 'TableFunctionCall':
79
- objectName = node.functionName;
80
- alias = node.alias || null;
81
- break;
82
- default:
83
- // For other node types, try to extract common properties
84
- if (node.alias) {
85
- alias = node.alias;
86
- }
87
- if (node.tableName) {
88
- objectName = node.tableName;
89
- }
90
- if (node.functionName) {
91
- objectName = node.functionName;
92
- }
93
- }
139
+ // Extract object name and alias using helper functions
140
+ objectName = getObjectName(node);
141
+ alias = getAlias(node);
94
142
  }
95
143
 
96
- // Get logical properties (if available)
144
+ // Get logical properties using the correct method name
97
145
  let properties: string | null = null;
98
- if (node.getLogicalProperties) {
99
- const logicalProps = node.getLogicalProperties();
100
- if (logicalProps) {
101
- properties = safeJsonStringify(logicalProps);
146
+ const logicalAttributes = node.getLogicalAttributes();
147
+ if (logicalAttributes && Object.keys(logicalAttributes).length > 0) {
148
+ // Attach minimal QuickPick diagnostics from optimizer if available
149
+ const diag = db.optimizer.getLastDiagnostics?.();
150
+ if (diag?.quickpick) {
151
+ (logicalAttributes as any).quickpick = diag.quickpick;
102
152
  }
153
+ properties = safeJsonStringify(logicalAttributes);
103
154
  }
104
155
 
105
156
  // Get physical properties (if available)
@@ -124,13 +175,13 @@ export const queryPlanFunc = createIntegratedTableValuedFunction(
124
175
  ];
125
176
 
126
177
  // Add children to stack (in reverse order so they're processed in correct order)
127
- // Note: getChildren() should include all children (both relational and scalar)
128
- // Don't add getRelations() separately as it would cause duplication
129
- const children = node.getChildren ? node.getChildren() : [];
178
+ // getChildren() is guaranteed to exist on all PlanNode instances
179
+ const children = node.getChildren();
130
180
  for (let i = children.length - 1; i >= 0; i--) {
131
181
  nodeStack.push({ node: children[i], parentId: currentId, level });
132
182
  }
133
183
  }
184
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
134
185
  } catch (error: any) {
135
186
  // If planning fails, yield an error row
136
187
  yield [1, null, 0, 'ERROR', 'ERROR', `Failed to plan SQL: ${error.message}`, null, null, null, null, null, null];
@@ -170,10 +221,6 @@ export const schedulerProgramFunc = createIntegratedTableValuedFunction(
170
221
  const plan = db.getPlan(sql);
171
222
 
172
223
  // Emit the plan to get the instruction tree
173
- const { EmissionContext } = await import('../../runtime/emission-context.js');
174
- const { emitPlanNode } = await import('../../runtime/emitters.js');
175
- const { Scheduler } = await import('../../runtime/scheduler.js');
176
-
177
224
  const emissionContext = new EmissionContext(db);
178
225
  const rootInstruction = emitPlanNode(plan, emissionContext);
179
226
 
@@ -214,6 +261,7 @@ export const schedulerProgramFunc = createIntegratedTableValuedFunction(
214
261
  }
215
262
  }
216
263
  }
264
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
217
265
  } catch (error: any) {
218
266
  // If compilation fails, yield an error instruction
219
267
  yield [0, 'ERROR', '[]', `Failed to compile SQL: ${error.message}`, null, 0, null];
@@ -272,7 +320,7 @@ export const stackTraceFunc = createIntegratedTableValuedFunction(
272
320
  });
273
321
 
274
322
  // Add frames based on plan node types
275
- const addPlanFrames = (node: any, depth: number = 0) => {
323
+ const addPlanFrames = (node: PlanNode, depth: number = 0) => {
276
324
  if (!node || depth > 10) return; // Prevent infinite recursion
277
325
 
278
326
  switch (node.nodeType) {
@@ -280,28 +328,29 @@ export const stackTraceFunc = createIntegratedTableValuedFunction(
280
328
  stack.push({
281
329
  name: 'buildBlock',
282
330
  location: 'building/block.ts:buildBlock',
283
- vars: { statementCount: node.statements?.length || 0 }
331
+ vars: { statementCount: ('statements' in node) ? (node as any).statements?.length || 0 : 0 }
284
332
  });
285
333
  break;
286
334
  case 'Filter':
287
335
  stack.push({
288
336
  name: 'buildFilter',
289
337
  location: 'building/select.ts:buildSelectStmt',
290
- vars: { condition: node.condition?.toString() || 'unknown' }
338
+ vars: { condition: ('condition' in node) ? (node as any).condition?.toString() || 'unknown' : 'unknown' }
291
339
  });
292
340
  break;
293
341
  case 'Project':
294
342
  stack.push({
295
343
  name: 'buildProject',
296
344
  location: 'building/select.ts:buildSelectStmt',
297
- vars: { projectionCount: node.projections?.length || 0 }
345
+ vars: { projectionCount: ('projections' in node) ? (node as any).projections?.length || 0 : 0 }
298
346
  });
299
347
  break;
300
348
  }
301
349
 
302
350
  // Recursively add frames for children
303
- const children = node.getChildren ? node.getChildren() : [];
304
- children.forEach((child: any) => addPlanFrames(child, depth + 1));
351
+ // getChildren() is guaranteed to exist on all PlanNode instances
352
+ const children = node.getChildren();
353
+ children.forEach((child: PlanNode) => addPlanFrames(child, depth + 1));
305
354
  };
306
355
 
307
356
  addPlanFrames(plan);
@@ -319,6 +368,7 @@ export const stackTraceFunc = createIntegratedTableValuedFunction(
319
368
  0 // is_virtual
320
369
  ];
321
370
  }
371
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
322
372
  } catch (error: any) {
323
373
  // If analysis fails, yield an error frame
324
374
  yield [0, 0, 'error', 'stack_trace', JSON.stringify({ error: error.message })];
@@ -371,12 +421,12 @@ export const executionTraceFunc = createIntegratedTableValuedFunction(
371
421
  instructionDependencies.set(addr, dependencies);
372
422
  instructionOperations.set(addr, description);
373
423
  }
424
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
374
425
  } catch (schedulerError: any) {
375
426
  console.warn('Could not get scheduler program info:', schedulerError.message);
376
427
  }
377
428
 
378
429
  // Import the CollectingInstructionTracer
379
- const { CollectingInstructionTracer } = await import('../../runtime/types.js');
380
430
  const tracer = new CollectingInstructionTracer();
381
431
 
382
432
  // Parse the query and execute with tracing
@@ -391,9 +441,9 @@ export const executionTraceFunc = createIntegratedTableValuedFunction(
391
441
  }
392
442
 
393
443
  await stmt.finalize();
394
- } catch (executionError: any) {
444
+ } catch (executionError: unknown) {
395
445
  // If execution fails, we might still have some trace events
396
- console.warn('Query execution failed during tracing:', executionError.message);
446
+ console.warn('Query execution failed during tracing:', executionError instanceof Error ? executionError.message : String(executionError));
397
447
  }
398
448
 
399
449
  // Get the collected trace events
@@ -484,6 +534,7 @@ export const executionTraceFunc = createIntegratedTableValuedFunction(
484
534
  ];
485
535
  }
486
536
 
537
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
487
538
  } catch (error: any) {
488
539
  // If tracing setup fails, yield an error event
489
540
  yield [
@@ -530,7 +581,6 @@ export const rowTraceFunc = createIntegratedTableValuedFunction(
530
581
 
531
582
  try {
532
583
  // Import the CollectingInstructionTracer
533
- const { CollectingInstructionTracer } = await import('../../runtime/types.js');
534
584
  const tracer = new CollectingInstructionTracer();
535
585
 
536
586
  // Parse the query and execute with tracing
@@ -545,6 +595,7 @@ export const rowTraceFunc = createIntegratedTableValuedFunction(
545
595
  }
546
596
 
547
597
  await stmt.finalize();
598
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
548
599
  } catch (executionError: any) {
549
600
  // If execution fails, we might still have some trace events
550
601
  console.warn('Query execution failed during row tracing:', executionError.message);
@@ -595,13 +646,13 @@ export const rowTraceFunc = createIntegratedTableValuedFunction(
595
646
  ];
596
647
  }
597
648
 
598
- } catch (error: any) {
649
+ } catch (error: unknown) {
599
650
  // If tracing setup fails, yield an error event
600
651
  yield [
601
652
  0, // instruction_index
602
653
  'ROW_TRACE_SETUP', // operation
603
654
  0, // row_index
604
- safeJsonStringify(`Failed to setup row trace: ${error.message}`), // row_data
655
+ safeJsonStringify(`Failed to setup row trace: ${error instanceof Error ? error.message : String(error)}`), // row_data
605
656
  Date.now(), // timestamp_ms
606
657
  null // row_count
607
658
  ];
@@ -635,3 +686,94 @@ export const schemaSizeFunc = createIntegratedTableValuedFunction(
635
686
  // TODO: Implementation of schemaSizeFunc
636
687
  }
637
688
  );
689
+
690
+ // Explain assertion analysis and prepared parameterization (pre-physical)
691
+ export const explainAssertionFunc = createIntegratedTableValuedFunction(
692
+ {
693
+ name: 'explain_assertion',
694
+ numArgs: 1,
695
+ deterministic: true,
696
+ returnType: {
697
+ typeClass: 'relation',
698
+ isReadOnly: true,
699
+ isSet: false,
700
+ columns: [
701
+ { name: 'assertion', type: { typeClass: 'scalar', affinity: SqlDataType.TEXT, nullable: false, isReadOnly: true }, generated: true },
702
+ { name: 'relation_key', type: { typeClass: 'scalar', affinity: SqlDataType.TEXT, nullable: false, isReadOnly: true }, generated: true },
703
+ { name: 'base', type: { typeClass: 'scalar', affinity: SqlDataType.TEXT, nullable: false, isReadOnly: true }, generated: true },
704
+ { name: 'classification', type: { typeClass: 'scalar', affinity: SqlDataType.TEXT, nullable: false, isReadOnly: true }, generated: true },
705
+ { name: 'prepared_pk_params', type: { typeClass: 'scalar', affinity: SqlDataType.TEXT, nullable: true, isReadOnly: true }, generated: true }, // JSON array of param names or NULL
706
+ { name: 'violation_sql', type: { typeClass: 'scalar', affinity: SqlDataType.TEXT, nullable: false, isReadOnly: true }, generated: true }
707
+ ],
708
+ keys: [],
709
+ rowConstraints: []
710
+ }
711
+ },
712
+ async function* (db: Database, assertionName: SqlValue): AsyncIterable<Row> {
713
+ if (typeof assertionName !== 'string') {
714
+ throw new QuereusError('explain_assertion(name) requires an assertion name', StatusCode.ERROR);
715
+ }
716
+
717
+ // Find assertion across all schemas
718
+ const all = db.schemaManager.getAllAssertions();
719
+ const assertion = all.find(a => a.name.toLowerCase() === assertionName.toLowerCase());
720
+ if (!assertion) {
721
+ throw new QuereusError(`Assertion not found: ${assertionName}`, StatusCode.NOTFOUND);
722
+ }
723
+
724
+ const sql = assertion.violationSql;
725
+
726
+ // Build pre-physical plan for analysis
727
+ let ast: AST.Statement;
728
+ try {
729
+ const parser = new Parser();
730
+ ast = parser.parse(sql) as AST.Statement;
731
+ } catch (e) {
732
+ throw new QuereusError(`Failed to parse assertion SQL: ${(e as Error).message}`, StatusCode.ERROR, e as Error);
733
+ }
734
+
735
+ const globalScope = new GlobalScope(db.schemaManager);
736
+ const parameterScope = new ParameterScope(globalScope);
737
+ const ctx: PlanningContext = {
738
+ db,
739
+ schemaManager: db.schemaManager,
740
+ parameters: {},
741
+ scope: parameterScope,
742
+ cteNodes: new Map(),
743
+ schemaDependencies: new BuildTimeDependencyTracker(),
744
+ schemaCache: new Map(),
745
+ cteReferenceCache: new Map(),
746
+ outputScopes: new Map()
747
+ };
748
+
749
+ const plan = buildBlock(ctx, [ast]);
750
+ const analyzed = db.optimizer.optimizeForAnalysis(plan, db) as unknown as RelationalPlanNode;
751
+
752
+ // Classify row/global per relationKey
753
+ const classifications = analyzeRowSpecific(analyzed);
754
+
755
+ for (const [relationKey, cls] of classifications) {
756
+ const base = `${relationKey.split('#')[0]}`;
757
+ let prepared: string | null = null;
758
+ if (cls === 'row' && base) {
759
+ // Prepared parameters are PK-based: ["pk0", "pk1", ...]
760
+ const [schemaName, tableName] = base.split('.');
761
+ const table = db._findTable(tableName, schemaName);
762
+ if (table) {
763
+ const pkCount = table.primaryKeyDefinition.length;
764
+ const names = Array.from({ length: pkCount }, (_, i) => `pk${i}`);
765
+ prepared = JSON.stringify(names);
766
+ }
767
+ }
768
+
769
+ yield [
770
+ assertion.name,
771
+ relationKey,
772
+ base,
773
+ cls,
774
+ prepared,
775
+ sql
776
+ ];
777
+ }
778
+ }
779
+ );
@@ -13,12 +13,12 @@ import { lengthFunc, substrFunc, substringFunc, likeFunc, globFunc, trimFunc, lt
13
13
  import { countStarFunc, sumFunc, avgFunc, minFunc, maxFunc, countXFunc, groupConcatFuncRev, totalFunc,
14
14
  varPopFunc, varSampFunc, stdDevPopFunc, stdDevSampFunc } from './aggregate.js';
15
15
  import type { FunctionSchema } from '../../schema/function.js';
16
- import { dateFunc, timeFunc, datetimeFunc, juliandayFunc, strftimeFunc } from './datetime.js';
16
+ import { dateFunc, timeFunc, datetimeFunc, juliandayFunc, strftimeFunc, isISODateFunc, isISODateTimeFunc } from './datetime.js';
17
17
  import { jsonValidFunc, jsonTypeFunc, jsonExtractFunc, jsonQuoteFunc, jsonArrayFunc, jsonObjectFunc, jsonInsertFunc, jsonReplaceFunc, jsonSetFunc, jsonRemoveFunc,
18
18
  jsonArrayLengthFunc, jsonPatchFunc,
19
19
  jsonGroupArrayFunc, jsonGroupObjectFunc } from './json.js';
20
20
  import { generateSeriesFunc } from './generation.js';
21
- import { queryPlanFunc, schedulerProgramFunc, stackTraceFunc, executionTraceFunc, rowTraceFunc } from './explain.js';
21
+ import { queryPlanFunc, schedulerProgramFunc, stackTraceFunc, executionTraceFunc, rowTraceFunc, explainAssertionFunc } from './explain.js';
22
22
  import { schemaFunc, tableInfoFunc, functionInfoFunc } from './schema.js';
23
23
  import { jsonEachFunc, jsonTreeFunc } from './json-tvf.js';
24
24
 
@@ -82,6 +82,8 @@ export const BUILTIN_FUNCTIONS: FunctionSchema[] = [
82
82
  datetimeFunc,
83
83
  juliandayFunc,
84
84
  strftimeFunc,
85
+ isISODateFunc,
86
+ isISODateTimeFunc,
85
87
  // JSON Functions
86
88
  jsonValidFunc,
87
89
  jsonTypeFunc,
@@ -108,6 +110,7 @@ export const BUILTIN_FUNCTIONS: FunctionSchema[] = [
108
110
  stackTraceFunc,
109
111
  executionTraceFunc,
110
112
  rowTraceFunc,
113
+ explainAssertionFunc,
111
114
  // Schema introspection functions
112
115
  schemaFunc,
113
116
  tableInfoFunc,