@quereus/quereus 2.7.0 → 2.9.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 (358) hide show
  1. package/dist/src/common/errors.d.ts +21 -0
  2. package/dist/src/common/errors.d.ts.map +1 -1
  3. package/dist/src/common/errors.js +29 -0
  4. package/dist/src/common/errors.js.map +1 -1
  5. package/dist/src/core/database.d.ts.map +1 -1
  6. package/dist/src/core/database.js +20 -7
  7. package/dist/src/core/database.js.map +1 -1
  8. package/dist/src/core/statement.d.ts.map +1 -1
  9. package/dist/src/core/statement.js +15 -5
  10. package/dist/src/core/statement.js.map +1 -1
  11. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  12. package/dist/src/emit/ast-stringify.js +0 -4
  13. package/dist/src/emit/ast-stringify.js.map +1 -1
  14. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  15. package/dist/src/func/builtins/explain.js +39 -36
  16. package/dist/src/func/builtins/explain.js.map +1 -1
  17. package/dist/src/func/builtins/json-helpers.d.ts +1 -1
  18. package/dist/src/func/builtins/json-helpers.d.ts.map +1 -1
  19. package/dist/src/func/builtins/json-helpers.js.map +1 -1
  20. package/dist/src/func/builtins/json.d.ts.map +1 -1
  21. package/dist/src/func/builtins/json.js +5 -7
  22. package/dist/src/func/builtins/json.js.map +1 -1
  23. package/dist/src/func/builtins/scalar.d.ts.map +1 -1
  24. package/dist/src/func/builtins/scalar.js +17 -2
  25. package/dist/src/func/builtins/scalar.js.map +1 -1
  26. package/dist/src/func/builtins/string.d.ts.map +1 -1
  27. package/dist/src/func/builtins/string.js +4 -2
  28. package/dist/src/func/builtins/string.js.map +1 -1
  29. package/dist/src/parser/ast.d.ts +4 -3
  30. package/dist/src/parser/ast.d.ts.map +1 -1
  31. package/dist/src/parser/lexer.d.ts.map +1 -1
  32. package/dist/src/parser/lexer.js +8 -48
  33. package/dist/src/parser/lexer.js.map +1 -1
  34. package/dist/src/parser/parser.d.ts.map +1 -1
  35. package/dist/src/parser/parser.js +43 -11
  36. package/dist/src/parser/parser.js.map +1 -1
  37. package/dist/src/parser/utils.d.ts +10 -1
  38. package/dist/src/parser/utils.d.ts.map +1 -1
  39. package/dist/src/parser/utils.js +23 -0
  40. package/dist/src/parser/utils.js.map +1 -1
  41. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  42. package/dist/src/planner/analysis/constraint-extractor.js +0 -1
  43. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  44. package/dist/src/planner/building/constraint-builder.d.ts +12 -1
  45. package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
  46. package/dist/src/planner/building/constraint-builder.js +60 -1
  47. package/dist/src/planner/building/constraint-builder.js.map +1 -1
  48. package/dist/src/planner/building/create-view.d.ts.map +1 -1
  49. package/dist/src/planner/building/create-view.js +16 -0
  50. package/dist/src/planner/building/create-view.js.map +1 -1
  51. package/dist/src/planner/building/delete.d.ts.map +1 -1
  52. package/dist/src/planner/building/delete.js +13 -7
  53. package/dist/src/planner/building/delete.js.map +1 -1
  54. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  55. package/dist/src/planner/building/foreign-key-builder.js +27 -17
  56. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  57. package/dist/src/planner/building/insert.d.ts.map +1 -1
  58. package/dist/src/planner/building/insert.js +51 -43
  59. package/dist/src/planner/building/insert.js.map +1 -1
  60. package/dist/src/planner/building/select-aggregates.d.ts +4 -1
  61. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  62. package/dist/src/planner/building/select-aggregates.js +122 -21
  63. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  64. package/dist/src/planner/building/select-modifiers.d.ts +6 -2
  65. package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
  66. package/dist/src/planner/building/select-modifiers.js +20 -5
  67. package/dist/src/planner/building/select-modifiers.js.map +1 -1
  68. package/dist/src/planner/building/select-ordinal.d.ts +20 -0
  69. package/dist/src/planner/building/select-ordinal.d.ts.map +1 -0
  70. package/dist/src/planner/building/select-ordinal.js +62 -0
  71. package/dist/src/planner/building/select-ordinal.js.map +1 -0
  72. package/dist/src/planner/building/select.d.ts.map +1 -1
  73. package/dist/src/planner/building/select.js +78 -19
  74. package/dist/src/planner/building/select.js.map +1 -1
  75. package/dist/src/planner/building/update.d.ts.map +1 -1
  76. package/dist/src/planner/building/update.js +38 -27
  77. package/dist/src/planner/building/update.js.map +1 -1
  78. package/dist/src/planner/building/with.d.ts.map +1 -1
  79. package/dist/src/planner/building/with.js +25 -2
  80. package/dist/src/planner/building/with.js.map +1 -1
  81. package/dist/src/planner/framework/characteristics.d.ts +3 -1
  82. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  83. package/dist/src/planner/framework/characteristics.js +7 -0
  84. package/dist/src/planner/framework/characteristics.js.map +1 -1
  85. package/dist/src/planner/framework/physical-utils.d.ts +22 -1
  86. package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
  87. package/dist/src/planner/framework/physical-utils.js +47 -0
  88. package/dist/src/planner/framework/physical-utils.js.map +1 -1
  89. package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
  90. package/dist/src/planner/nodes/alias-node.js +2 -0
  91. package/dist/src/planner/nodes/alias-node.js.map +1 -1
  92. package/dist/src/planner/nodes/asof-scan-node.d.ts +137 -0
  93. package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -0
  94. package/dist/src/planner/nodes/asof-scan-node.js +223 -0
  95. package/dist/src/planner/nodes/asof-scan-node.js.map +1 -0
  96. package/dist/src/planner/nodes/constraint-check-node.d.ts +25 -1
  97. package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
  98. package/dist/src/planner/nodes/constraint-check-node.js +36 -6
  99. package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
  100. package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
  101. package/dist/src/planner/nodes/distinct-node.js +7 -0
  102. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  103. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  104. package/dist/src/planner/nodes/filter.js +8 -2
  105. package/dist/src/planner/nodes/filter.js.map +1 -1
  106. package/dist/src/planner/nodes/function.d.ts +11 -1
  107. package/dist/src/planner/nodes/function.d.ts.map +1 -1
  108. package/dist/src/planner/nodes/function.js +94 -1
  109. package/dist/src/planner/nodes/function.js.map +1 -1
  110. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  111. package/dist/src/planner/nodes/hash-aggregate.js +2 -0
  112. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  113. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  114. package/dist/src/planner/nodes/join-node.js +10 -2
  115. package/dist/src/planner/nodes/join-node.js.map +1 -1
  116. package/dist/src/planner/nodes/join-utils.d.ts +19 -1
  117. package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
  118. package/dist/src/planner/nodes/join-utils.js +46 -0
  119. package/dist/src/planner/nodes/join-utils.js.map +1 -1
  120. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  121. package/dist/src/planner/nodes/limit-offset.js +2 -0
  122. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  123. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  124. package/dist/src/planner/nodes/merge-join-node.js +4 -1
  125. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  126. package/dist/src/planner/nodes/ordinal-slice-node.d.ts +50 -0
  127. package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -0
  128. package/dist/src/planner/nodes/ordinal-slice-node.js +127 -0
  129. package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -0
  130. package/dist/src/planner/nodes/plan-node-type.d.ts +2 -0
  131. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  132. package/dist/src/planner/nodes/plan-node-type.js +2 -0
  133. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  134. package/dist/src/planner/nodes/plan-node.d.ts +130 -1
  135. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  136. package/dist/src/planner/nodes/plan-node.js +49 -0
  137. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  138. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  139. package/dist/src/planner/nodes/project-node.js +6 -1
  140. package/dist/src/planner/nodes/project-node.js.map +1 -1
  141. package/dist/src/planner/nodes/recursive-cte-node.d.ts +5 -3
  142. package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
  143. package/dist/src/planner/nodes/recursive-cte-node.js +24 -8
  144. package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
  145. package/dist/src/planner/nodes/reference.d.ts +4 -1
  146. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  147. package/dist/src/planner/nodes/reference.js +16 -0
  148. package/dist/src/planner/nodes/reference.js.map +1 -1
  149. package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
  150. package/dist/src/planner/nodes/returning-node.js +5 -12
  151. package/dist/src/planner/nodes/returning-node.js.map +1 -1
  152. package/dist/src/planner/nodes/scalar.d.ts +7 -1
  153. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  154. package/dist/src/planner/nodes/scalar.js +100 -1
  155. package/dist/src/planner/nodes/scalar.js.map +1 -1
  156. package/dist/src/planner/nodes/set-operation-node.d.ts +2 -1
  157. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  158. package/dist/src/planner/nodes/set-operation-node.js +9 -0
  159. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  160. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  161. package/dist/src/planner/nodes/sort.js +20 -0
  162. package/dist/src/planner/nodes/sort.js.map +1 -1
  163. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  164. package/dist/src/planner/nodes/stream-aggregate.js +2 -0
  165. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  166. package/dist/src/planner/nodes/table-access-nodes.d.ts +37 -2
  167. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  168. package/dist/src/planner/nodes/table-access-nodes.js +87 -10
  169. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  170. package/dist/src/planner/nodes/update-node.d.ts +1 -3
  171. package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
  172. package/dist/src/planner/nodes/update-node.js +3 -9
  173. package/dist/src/planner/nodes/update-node.js.map +1 -1
  174. package/dist/src/planner/nodes/window-node.d.ts +61 -2
  175. package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
  176. package/dist/src/planner/nodes/window-node.js +64 -3
  177. package/dist/src/planner/nodes/window-node.js.map +1 -1
  178. package/dist/src/planner/optimizer-tuning.d.ts +9 -0
  179. package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
  180. package/dist/src/planner/optimizer-tuning.js +3 -0
  181. package/dist/src/planner/optimizer-tuning.js.map +1 -1
  182. package/dist/src/planner/optimizer.d.ts.map +1 -1
  183. package/dist/src/planner/optimizer.js +91 -0
  184. package/dist/src/planner/optimizer.js.map +1 -1
  185. package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts +30 -0
  186. package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts.map +1 -0
  187. package/dist/src/planner/rules/access/rule-asof-strategy-select.js +112 -0
  188. package/dist/src/planner/rules/access/rule-asof-strategy-select.js.map +1 -0
  189. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts +33 -0
  190. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts.map +1 -0
  191. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js +162 -0
  192. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js.map +1 -0
  193. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts +29 -0
  194. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -0
  195. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +175 -0
  196. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -0
  197. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  198. package/dist/src/planner/rules/access/rule-select-access-path.js +53 -36
  199. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  200. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +61 -0
  201. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -0
  202. package/dist/src/planner/rules/join/equi-pair-extractor.js +155 -0
  203. package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -0
  204. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  205. package/dist/src/planner/rules/join/rule-join-physical-selection.js +3 -123
  206. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  207. package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts +21 -0
  208. package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -0
  209. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +405 -0
  210. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -0
  211. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +31 -0
  212. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -0
  213. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +113 -0
  214. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -0
  215. package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
  216. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +7 -3
  217. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
  218. package/dist/src/planner/rules/predicate/rule-filter-merge.js.map +1 -1
  219. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
  220. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
  221. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +161 -9
  222. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
  223. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  224. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +2 -2
  225. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  226. package/dist/src/planner/rules/window/rule-monotonic-window.d.ts +47 -0
  227. package/dist/src/planner/rules/window/rule-monotonic-window.d.ts.map +1 -0
  228. package/dist/src/planner/rules/window/rule-monotonic-window.js +341 -0
  229. package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -0
  230. package/dist/src/runtime/context-helpers.d.ts +9 -0
  231. package/dist/src/runtime/context-helpers.d.ts.map +1 -1
  232. package/dist/src/runtime/context-helpers.js +5 -0
  233. package/dist/src/runtime/context-helpers.js.map +1 -1
  234. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  235. package/dist/src/runtime/emit/alter-table.js +286 -7
  236. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  237. package/dist/src/runtime/emit/asof-scan.d.ts +10 -0
  238. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -0
  239. package/dist/src/runtime/emit/asof-scan.js +467 -0
  240. package/dist/src/runtime/emit/asof-scan.js.map +1 -0
  241. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  242. package/dist/src/runtime/emit/binary.js +12 -7
  243. package/dist/src/runtime/emit/binary.js.map +1 -1
  244. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  245. package/dist/src/runtime/emit/constraint-check.js +145 -62
  246. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  247. package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
  248. package/dist/src/runtime/emit/create-assertion.js +6 -6
  249. package/dist/src/runtime/emit/create-assertion.js.map +1 -1
  250. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  251. package/dist/src/runtime/emit/dml-executor.js +133 -76
  252. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  253. package/dist/src/runtime/emit/ordinal-slice.d.ts +13 -0
  254. package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -0
  255. package/dist/src/runtime/emit/ordinal-slice.js +89 -0
  256. package/dist/src/runtime/emit/ordinal-slice.js.map +1 -0
  257. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  258. package/dist/src/runtime/emit/recursive-cte.js +61 -10
  259. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  260. package/dist/src/runtime/emit/returning.d.ts.map +1 -1
  261. package/dist/src/runtime/emit/returning.js +9 -4
  262. package/dist/src/runtime/emit/returning.js.map +1 -1
  263. package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
  264. package/dist/src/runtime/emit/scalar-function.js +2 -1
  265. package/dist/src/runtime/emit/scalar-function.js.map +1 -1
  266. package/dist/src/runtime/emit/scan.d.ts +19 -3
  267. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  268. package/dist/src/runtime/emit/scan.js +12 -8
  269. package/dist/src/runtime/emit/scan.js.map +1 -1
  270. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  271. package/dist/src/runtime/emit/schema-declarative.js +91 -14
  272. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  273. package/dist/src/runtime/emit/table-valued-function.d.ts.map +1 -1
  274. package/dist/src/runtime/emit/table-valued-function.js +4 -2
  275. package/dist/src/runtime/emit/table-valued-function.js.map +1 -1
  276. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  277. package/dist/src/runtime/emit/update.js +8 -5
  278. package/dist/src/runtime/emit/update.js.map +1 -1
  279. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  280. package/dist/src/runtime/emit/window.js +732 -37
  281. package/dist/src/runtime/emit/window.js.map +1 -1
  282. package/dist/src/runtime/foreign-key-actions.js +7 -6
  283. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  284. package/dist/src/runtime/register.d.ts.map +1 -1
  285. package/dist/src/runtime/register.js +4 -0
  286. package/dist/src/runtime/register.js.map +1 -1
  287. package/dist/src/schema/catalog.d.ts +12 -0
  288. package/dist/src/schema/catalog.d.ts.map +1 -1
  289. package/dist/src/schema/catalog.js +47 -6
  290. package/dist/src/schema/catalog.js.map +1 -1
  291. package/dist/src/schema/column.d.ts +7 -0
  292. package/dist/src/schema/column.d.ts.map +1 -1
  293. package/dist/src/schema/column.js.map +1 -1
  294. package/dist/src/schema/function.d.ts +28 -3
  295. package/dist/src/schema/function.d.ts.map +1 -1
  296. package/dist/src/schema/function.js.map +1 -1
  297. package/dist/src/schema/manager.d.ts +42 -6
  298. package/dist/src/schema/manager.d.ts.map +1 -1
  299. package/dist/src/schema/manager.js +175 -23
  300. package/dist/src/schema/manager.js.map +1 -1
  301. package/dist/src/schema/rename-rewriter.d.ts +4 -0
  302. package/dist/src/schema/rename-rewriter.d.ts.map +1 -0
  303. package/dist/src/schema/rename-rewriter.js +506 -0
  304. package/dist/src/schema/rename-rewriter.js.map +1 -0
  305. package/dist/src/schema/schema-differ.d.ts +18 -1
  306. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  307. package/dist/src/schema/schema-differ.js +344 -42
  308. package/dist/src/schema/schema-differ.js.map +1 -1
  309. package/dist/src/schema/table.d.ts +65 -2
  310. package/dist/src/schema/table.d.ts.map +1 -1
  311. package/dist/src/schema/table.js +144 -0
  312. package/dist/src/schema/table.js.map +1 -1
  313. package/dist/src/types/logical-type.d.ts +11 -0
  314. package/dist/src/types/logical-type.d.ts.map +1 -1
  315. package/dist/src/types/logical-type.js.map +1 -1
  316. package/dist/src/util/ast-literal.d.ts +11 -0
  317. package/dist/src/util/ast-literal.d.ts.map +1 -0
  318. package/dist/src/util/ast-literal.js +26 -0
  319. package/dist/src/util/ast-literal.js.map +1 -0
  320. package/dist/src/util/async-iterator.d.ts +2 -1
  321. package/dist/src/util/async-iterator.d.ts.map +1 -1
  322. package/dist/src/util/async-iterator.js +4 -4
  323. package/dist/src/util/async-iterator.js.map +1 -1
  324. package/dist/src/util/patterns.d.ts.map +1 -1
  325. package/dist/src/util/patterns.js +58 -10
  326. package/dist/src/util/patterns.js.map +1 -1
  327. package/dist/src/vtab/best-access-plan.d.ts +48 -0
  328. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  329. package/dist/src/vtab/best-access-plan.js +29 -0
  330. package/dist/src/vtab/best-access-plan.js.map +1 -1
  331. package/dist/src/vtab/filter-info.d.ts +14 -0
  332. package/dist/src/vtab/filter-info.d.ts.map +1 -1
  333. package/dist/src/vtab/memory/index.d.ts +8 -0
  334. package/dist/src/vtab/memory/index.d.ts.map +1 -1
  335. package/dist/src/vtab/memory/index.js +11 -0
  336. package/dist/src/vtab/memory/index.js.map +1 -1
  337. package/dist/src/vtab/memory/layer/base.d.ts +8 -1
  338. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  339. package/dist/src/vtab/memory/layer/base.js +36 -2
  340. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  341. package/dist/src/vtab/memory/layer/manager.d.ts +5 -1
  342. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  343. package/dist/src/vtab/memory/layer/manager.js +63 -13
  344. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  345. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  346. package/dist/src/vtab/memory/layer/transaction.js +21 -2
  347. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  348. package/dist/src/vtab/memory/module.d.ts +45 -2
  349. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  350. package/dist/src/vtab/memory/module.js +268 -27
  351. package/dist/src/vtab/memory/module.js.map +1 -1
  352. package/dist/src/vtab/memory/utils/predicate.d.ts +27 -0
  353. package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -0
  354. package/dist/src/vtab/memory/utils/predicate.js +182 -0
  355. package/dist/src/vtab/memory/utils/predicate.js.map +1 -0
  356. package/dist/src/vtab/module.d.ts +24 -0
  357. package/dist/src/vtab/module.d.ts.map +1 -1
  358. package/package.json +3 -3
@@ -66,6 +66,16 @@ export declare class SchemaManager {
66
66
  module: AnyVirtualTableModule;
67
67
  auxData?: unknown;
68
68
  } | undefined;
69
+ /**
70
+ * Iterates registered virtual table modules in registration order.
71
+ * Each entry yields the registered (lowercased) name, the module, and
72
+ * any auxData supplied at registration time.
73
+ */
74
+ allModules(): IterableIterator<{
75
+ name: string;
76
+ module: AnyVirtualTableModule;
77
+ auxData?: unknown;
78
+ }>;
69
79
  /**
70
80
  * Sets the default virtual table module to use when USING is omitted
71
81
  *
@@ -192,6 +202,12 @@ export declare class SchemaManager {
192
202
  * @param schemaName Optional schema name (defaults to current schema)
193
203
  */
194
204
  setTableTags(tableName: string, tags: Record<string, SqlValue>, schemaName?: string): void;
205
+ /**
206
+ * Asserts that no other table has FK rows referencing the table being dropped.
207
+ * Self-referential FKs are skipped — those rows go away with the table.
208
+ * No-op when foreign_keys is off.
209
+ */
210
+ private assertNoReferencingChildrenForDrop;
195
211
  /**
196
212
  * Drops a table from the specified schema
197
213
  *
@@ -260,16 +276,36 @@ export declare class SchemaManager {
260
276
  */
261
277
  private buildTableSchemaFromAST;
262
278
  /**
263
- * Validates that all DEFAULT expressions in the column schemas are deterministic.
264
- * Skips expressions that reference columns (validated at INSERT time instead).
279
+ * Walks an expression AST and rejects bind-parameter and (optionally)
280
+ * column-reference nodes. Used by DDL-time DEFAULT/CHECK validators where
281
+ * such references are illegal even though they may otherwise build cleanly.
282
+ *
283
+ * Throws a QuereusError on the first offending node, with a message
284
+ * produced by the supplied formatters.
285
+ */
286
+ private rejectIllegalReferences;
287
+ /**
288
+ * Validates that all DEFAULT expressions in the column schemas are
289
+ * deterministic and free of bind parameters or (when no mutation
290
+ * context is defined) column references. Bind parameters and column
291
+ * references are rejected up-front via an AST pre-walk so the error
292
+ * messages stay specific (rather than degrading into "column not
293
+ * found" during expression building).
294
+ *
295
+ * When `hasMutationContext` is true, column-style identifiers are
296
+ * preserved because they may resolve to mutation-context variables at
297
+ * INSERT time (the AST cannot distinguish a real column from a
298
+ * context variable, and the build attempt is permitted to fail —
299
+ * scope resolution is deferred to row-time).
265
300
  */
266
301
  private validateDefaultDeterminism;
267
302
  /**
268
303
  * Validates that CHECK constraint expressions don't call non-deterministic
269
- * functions. Walks the AST and looks up each function call against the
270
- * registry; raises if any function lacks the DETERMINISTIC flag. Avoids the
271
- * full planning pipeline because CHECK expressions reference table columns
272
- * whose scope is not yet established at CREATE TABLE time.
304
+ * functions and don't reference bind parameters. Walks the AST and looks
305
+ * up each function call against the registry; raises if any function
306
+ * lacks the DETERMINISTIC flag. Avoids the full planning pipeline because
307
+ * CHECK expressions reference table columns whose scope is not yet
308
+ * established at CREATE TABLE time.
273
309
  */
274
310
  private validateCheckConstraintDeterminism;
275
311
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/schema/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/schema/manager.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Schema } from './schema.js';
2
2
  import { quereusError, QuereusError } from '../common/errors.js';
3
3
  import { StatusCode } from '../common/types.js';
4
- import { buildColumnIndexMap, columnDefToSchema, findPKDefinition, opsToMask, mutationContextVarToSchema } from './table.js';
4
+ import { buildColumnIndexMap, columnDefToSchema, findPKDefinition, opsToMask, mutationContextVarToSchema, extractGeneratedColumnDependencies, topoSortGeneratedColumns } from './table.js';
5
5
  import { createLogger } from '../common/logger.js';
6
6
  import { Parser } from '../parser/parser.js';
7
7
  import { traverseAst } from '../parser/visitor.js';
@@ -13,6 +13,7 @@ import { BuildTimeDependencyTracker } from '../planner/planning-context.js';
13
13
  import { GlobalScope } from '../planner/scopes/global.js';
14
14
  import { ParameterScope } from '../planner/scopes/param.js';
15
15
  import { hasNativeEventSupport } from '../util/event-support.js';
16
+ import { quoteIdentifier } from '../emit/ast-stringify.js';
16
17
  const log = createLogger('schema:manager');
17
18
  const warnLog = log.extend('warn');
18
19
  const errorLog = log.extend('error');
@@ -84,6 +85,16 @@ export class SchemaManager {
84
85
  getModule(name) {
85
86
  return this.modules.get(name.toLowerCase());
86
87
  }
88
+ /**
89
+ * Iterates registered virtual table modules in registration order.
90
+ * Each entry yields the registered (lowercased) name, the module, and
91
+ * any auxData supplied at registration time.
92
+ */
93
+ *allModules() {
94
+ for (const [name, reg] of this.modules) {
95
+ yield { name, module: reg.module, auxData: reg.auxData };
96
+ }
97
+ }
87
98
  /**
88
99
  * Sets the default virtual table module to use when USING is omitted
89
100
  *
@@ -372,6 +383,55 @@ export class SchemaManager {
372
383
  const schema = this.getSchemaOrFail(targetSchemaName);
373
384
  schema.addTable(updatedSchema);
374
385
  }
386
+ /**
387
+ * Asserts that no other table has FK rows referencing the table being dropped.
388
+ * Self-referential FKs are skipped — those rows go away with the table.
389
+ * No-op when foreign_keys is off.
390
+ */
391
+ async assertNoReferencingChildrenForDrop(parentSchemaName, parentTableName) {
392
+ if (!this.db.options.getBooleanOption('foreign_keys'))
393
+ return;
394
+ const parentSchemaLower = parentSchemaName.toLowerCase();
395
+ const parentTableLower = parentTableName.toLowerCase();
396
+ for (const schema of this._getAllSchemas()) {
397
+ for (const childTable of schema.getAllTables()) {
398
+ if (!childTable.foreignKeys)
399
+ continue;
400
+ // Skip the table being dropped itself — self-FK rows are going away with it.
401
+ if (childTable.schemaName.toLowerCase() === parentSchemaLower &&
402
+ childTable.name.toLowerCase() === parentTableLower)
403
+ continue;
404
+ for (const fk of childTable.foreignKeys) {
405
+ if (fk.referencedTable.toLowerCase() !== parentTableLower)
406
+ continue;
407
+ const targetSchema = fk.referencedSchema ?? childTable.schemaName;
408
+ if (targetSchema.toLowerCase() !== parentSchemaLower)
409
+ continue;
410
+ // MATCH SIMPLE: row is referencing iff every FK column is non-NULL.
411
+ const childColNames = fk.columns.map(idx => quoteIdentifier(childTable.columns[idx].name));
412
+ const whereClause = childColNames.map(c => `${c} IS NOT NULL`).join(' AND ');
413
+ const schemaPrefix = childTable.schemaName.toLowerCase() !== 'main'
414
+ ? `${quoteIdentifier(childTable.schemaName)}.`
415
+ : '';
416
+ const sql = `select 1 from ${schemaPrefix}${quoteIdentifier(childTable.name)} where ${whereClause} limit 1`;
417
+ const stmt = this.db.prepare(sql);
418
+ try {
419
+ let referenced = false;
420
+ for await (const _row of stmt._iterateRowsRaw()) {
421
+ referenced = true;
422
+ break;
423
+ }
424
+ if (referenced) {
425
+ throw new QuereusError(`FOREIGN KEY constraint failed: cannot drop table '${parentTableName}' because table '${childTable.name}' still has rows referencing it`, StatusCode.CONSTRAINT);
426
+ }
427
+ }
428
+ finally {
429
+ await stmt.finalize();
430
+ }
431
+ }
432
+ }
433
+ }
434
+ }
375
435
  /**
376
436
  * Drops a table from the specified schema
377
437
  *
@@ -395,6 +455,11 @@ export class SchemaManager {
395
455
  }
396
456
  throw new QuereusError(`Table ${tableName} not found in schema ${schemaName}`, StatusCode.NOTFOUND);
397
457
  }
458
+ // FK guard: when foreign_keys is on, refuse to drop a parent that still has
459
+ // non-NULL FK rows in any child table (excluding self-FK; those rows go away
460
+ // with the table). MATCH SIMPLE: a row is "referencing" iff every FK column
461
+ // is non-NULL.
462
+ await this.assertNoReferencingChildrenForDrop(schemaName, tableName);
398
463
  // Remove any active connections for this table before destroying the module.
399
464
  // Connections become stale once the table is dropped and must not be reused
400
465
  // if the table is later recreated with the same name.
@@ -555,6 +620,7 @@ export class SchemaManager {
555
620
  operations: opsToMask(con.operations),
556
621
  deferrable: con.deferrable,
557
622
  initiallyDeferred: con.initiallyDeferred,
623
+ defaultConflict: con.onConflict,
558
624
  tags: con.tags && Object.keys(con.tags).length > 0 ? Object.freeze({ ...con.tags }) : undefined,
559
625
  });
560
626
  }
@@ -568,6 +634,7 @@ export class SchemaManager {
568
634
  operations: opsToMask(con.operations),
569
635
  deferrable: con.deferrable,
570
636
  initiallyDeferred: con.initiallyDeferred,
637
+ defaultConflict: con.onConflict,
571
638
  tags: con.tags && Object.keys(con.tags).length > 0 ? Object.freeze({ ...con.tags }) : undefined,
572
639
  });
573
640
  }
@@ -592,6 +659,9 @@ export class SchemaManager {
592
659
  }
593
660
  // Parent column resolution is deferred — store names for now
594
661
  // We need the parent table schema to resolve indices, but it may not exist yet
662
+ if (fk.columns && fk.columns.length !== 1) {
663
+ throw new QuereusError(`FK constraint '${con.name ?? `_fk_${tableName}_${colDef.name}`}' on table '${tableName}': child column count (1) does not match parent column count (${fk.columns.length})`, StatusCode.ERROR);
664
+ }
595
665
  result.push({
596
666
  name: con.name ?? `_fk_${tableName}_${colDef.name}`,
597
667
  columns: Object.freeze([childColIndex]),
@@ -599,8 +669,8 @@ export class SchemaManager {
599
669
  referencedSchema: schemaName,
600
670
  referencedColumns: Object.freeze([]), // resolved at enforcement time
601
671
  referencedColumnNames: fk.columns, // deferred resolution via resolveReferencedColumns
602
- onDelete: fk.onDelete ?? 'ignore',
603
- onUpdate: fk.onUpdate ?? 'ignore',
672
+ onDelete: fk.onDelete ?? 'restrict',
673
+ onUpdate: fk.onUpdate ?? 'restrict',
604
674
  deferred: fk.initiallyDeferred ?? false,
605
675
  tags: con.tags && Object.keys(con.tags).length > 0 ? Object.freeze({ ...con.tags }) : undefined,
606
676
  });
@@ -618,6 +688,9 @@ export class SchemaManager {
618
688
  }
619
689
  return idx;
620
690
  });
691
+ if (fk.columns && fk.columns.length !== childColIndices.length) {
692
+ throw new QuereusError(`FK constraint '${con.name ?? `_fk_${tableName}_${con.columns.map(c => c.name).join('_')}`}' on table '${tableName}': child column count (${childColIndices.length}) does not match parent column count (${fk.columns.length})`, StatusCode.ERROR);
693
+ }
621
694
  result.push({
622
695
  name: con.name ?? `_fk_${tableName}_${con.columns.map(c => c.name).join('_')}`,
623
696
  columns: Object.freeze(childColIndices),
@@ -625,8 +698,8 @@ export class SchemaManager {
625
698
  referencedSchema: schemaName,
626
699
  referencedColumns: Object.freeze([]), // resolved at enforcement time
627
700
  referencedColumnNames: fk.columns, // deferred resolution via resolveReferencedColumns
628
- onDelete: fk.onDelete ?? 'ignore',
629
- onUpdate: fk.onUpdate ?? 'ignore',
701
+ onDelete: fk.onDelete ?? 'restrict',
702
+ onUpdate: fk.onUpdate ?? 'restrict',
630
703
  deferred: fk.initiallyDeferred ?? false,
631
704
  tags: con.tags && Object.keys(con.tags).length > 0 ? Object.freeze({ ...con.tags }) : undefined,
632
705
  });
@@ -649,6 +722,7 @@ export class SchemaManager {
649
722
  result.push({
650
723
  name: con.name,
651
724
  columns: Object.freeze([colIndex]),
725
+ defaultConflict: con.onConflict,
652
726
  tags: con.tags && Object.keys(con.tags).length > 0 ? Object.freeze({ ...con.tags }) : undefined,
653
727
  });
654
728
  }
@@ -668,6 +742,7 @@ export class SchemaManager {
668
742
  result.push({
669
743
  name: con.name,
670
744
  columns: Object.freeze(colIndices),
745
+ defaultConflict: con.onConflict,
671
746
  tags: con.tags && Object.keys(con.tags).length > 0 ? Object.freeze({ ...con.tags }) : undefined,
672
747
  });
673
748
  }
@@ -692,6 +767,16 @@ export class SchemaManager {
692
767
  const mutationContextSchemas = stmt.contextDefinitions
693
768
  ? stmt.contextDefinitions.map(varDef => mutationContextVarToSchema(varDef, defaultNotNull))
694
769
  : undefined;
770
+ // Extract generated-column dependencies and validate that they form a DAG.
771
+ // Cycle detection runs before module.create so an invalid schema never
772
+ // reaches storage.
773
+ const rawGenDeps = extractGeneratedColumnDependencies(columns, tableName);
774
+ const genTopoOrder = rawGenDeps.size > 0
775
+ ? topoSortGeneratedColumns(columns, rawGenDeps)
776
+ : undefined;
777
+ const generatedColumnDependencies = rawGenDeps.size > 0
778
+ ? Object.freeze(new Map(Array.from(rawGenDeps.entries()).map(([k, v]) => [k, Object.freeze(v)])))
779
+ : undefined;
695
780
  return {
696
781
  name: tableName,
697
782
  schemaName: targetSchemaName,
@@ -709,14 +794,57 @@ export class SchemaManager {
709
794
  vtabAuxData: moduleInfo.auxData,
710
795
  estimatedRows: 0,
711
796
  mutationContext: mutationContextSchemas ? Object.freeze(mutationContextSchemas) : undefined,
797
+ generatedColumnDependencies,
798
+ generatedColumnTopoOrder: genTopoOrder ? Object.freeze(genTopoOrder) : undefined,
712
799
  tags: stmt.tags && Object.keys(stmt.tags).length > 0 ? Object.freeze({ ...stmt.tags }) : undefined,
713
800
  };
714
801
  }
715
802
  /**
716
- * Validates that all DEFAULT expressions in the column schemas are deterministic.
717
- * Skips expressions that reference columns (validated at INSERT time instead).
803
+ * Walks an expression AST and rejects bind-parameter and (optionally)
804
+ * column-reference nodes. Used by DDL-time DEFAULT/CHECK validators where
805
+ * such references are illegal even though they may otherwise build cleanly.
806
+ *
807
+ * Throws a QuereusError on the first offending node, with a message
808
+ * produced by the supplied formatters.
718
809
  */
719
- validateDefaultDeterminism(columns, tableName) {
810
+ rejectIllegalReferences(expr, options) {
811
+ let offendingType;
812
+ traverseAst(expr, {
813
+ enterNode: (node) => {
814
+ if (offendingType)
815
+ return false;
816
+ if (node.type === 'parameter') {
817
+ offendingType = 'parameter';
818
+ return false;
819
+ }
820
+ if (options.rejectColumns && node.type === 'column') {
821
+ offendingType = 'column';
822
+ return false;
823
+ }
824
+ },
825
+ });
826
+ if (offendingType === 'parameter') {
827
+ throw new QuereusError(options.formatParamError(), StatusCode.ERROR);
828
+ }
829
+ if (offendingType === 'column') {
830
+ throw new QuereusError(options.formatColumnError(), StatusCode.ERROR);
831
+ }
832
+ }
833
+ /**
834
+ * Validates that all DEFAULT expressions in the column schemas are
835
+ * deterministic and free of bind parameters or (when no mutation
836
+ * context is defined) column references. Bind parameters and column
837
+ * references are rejected up-front via an AST pre-walk so the error
838
+ * messages stay specific (rather than degrading into "column not
839
+ * found" during expression building).
840
+ *
841
+ * When `hasMutationContext` is true, column-style identifiers are
842
+ * preserved because they may resolve to mutation-context variables at
843
+ * INSERT time (the AST cannot distinguish a real column from a
844
+ * context variable, and the build attempt is permitted to fail —
845
+ * scope resolution is deferred to row-time).
846
+ */
847
+ validateDefaultDeterminism(columns, tableName, hasMutationContext) {
720
848
  const globalScope = new GlobalScope(this.db.schemaManager);
721
849
  const parameterScope = new ParameterScope(globalScope);
722
850
  const planningCtx = {
@@ -734,32 +862,54 @@ export class SchemaManager {
734
862
  if (!col.defaultValue || typeof col.defaultValue !== 'object' || col.defaultValue === null || !('type' in col.defaultValue)) {
735
863
  continue;
736
864
  }
865
+ this.rejectIllegalReferences(col.defaultValue, {
866
+ rejectColumns: !hasMutationContext,
867
+ formatParamError: () => `DEFAULT for column '${col.name}' in table '${tableName}' may not reference bind parameters.`,
868
+ formatColumnError: () => `DEFAULT for column '${col.name}' in table '${tableName}' may not reference columns; use a generated column instead.`,
869
+ });
737
870
  let defaultExpr;
738
871
  try {
739
872
  defaultExpr = buildExpression(planningCtx, col.defaultValue);
740
873
  }
741
- catch (_e) {
742
- log('Skipping determinism validation for default on column %s.%s at CREATE TABLE time (will validate at INSERT time): %s', tableName, col.name, _e.message);
743
- }
744
- if (defaultExpr) {
745
- const result = checkDeterministic(defaultExpr);
746
- if (!result.valid) {
747
- throw new QuereusError(`Non-deterministic expression not allowed in DEFAULT for column '${col.name}' in table '${tableName}'. ` +
748
- `Expression: ${result.expression}. ` +
749
- `Use mutation context to pass non-deterministic values (e.g., WITH CONTEXT (timestamp = datetime('now'))).`, StatusCode.ERROR);
874
+ catch (e) {
875
+ if (hasMutationContext) {
876
+ // Column-style identifiers in DEFAULT may resolve to mutation
877
+ // context variables at INSERT time; the row scope isn't
878
+ // available here, so a build failure isn't necessarily a bug.
879
+ // Determinism is re-checked at INSERT time.
880
+ log('Skipping determinism validation for default on column %s.%s at CREATE TABLE time (deferred to INSERT, mutation context present): %s', tableName, col.name, e.message);
881
+ }
882
+ else {
883
+ const message = e instanceof Error ? e.message : String(e);
884
+ const code = e instanceof QuereusError ? e.code : StatusCode.ERROR;
885
+ throw new QuereusError(`DEFAULT for column '${col.name}' in table '${tableName}' is invalid: ${message}`, code, e instanceof Error ? e : undefined);
750
886
  }
751
887
  }
888
+ if (!defaultExpr)
889
+ continue;
890
+ const result = checkDeterministic(defaultExpr);
891
+ if (!result.valid) {
892
+ throw new QuereusError(`Non-deterministic expression not allowed in DEFAULT for column '${col.name}' in table '${tableName}'. ` +
893
+ `Expression: ${result.expression}. ` +
894
+ `Use mutation context to pass non-deterministic values (e.g., WITH CONTEXT (timestamp = datetime('now'))).`, StatusCode.ERROR);
895
+ }
752
896
  }
753
897
  }
754
898
  /**
755
899
  * Validates that CHECK constraint expressions don't call non-deterministic
756
- * functions. Walks the AST and looks up each function call against the
757
- * registry; raises if any function lacks the DETERMINISTIC flag. Avoids the
758
- * full planning pipeline because CHECK expressions reference table columns
759
- * whose scope is not yet established at CREATE TABLE time.
900
+ * functions and don't reference bind parameters. Walks the AST and looks
901
+ * up each function call against the registry; raises if any function
902
+ * lacks the DETERMINISTIC flag. Avoids the full planning pipeline because
903
+ * CHECK expressions reference table columns whose scope is not yet
904
+ * established at CREATE TABLE time.
760
905
  */
761
906
  validateCheckConstraintDeterminism(checkConstraints, tableName) {
762
907
  for (const cc of checkConstraints) {
908
+ const constraintName = cc.name ?? `_check_${tableName}`;
909
+ this.rejectIllegalReferences(cc.expr, {
910
+ rejectColumns: false,
911
+ formatParamError: () => `CHECK constraint '${constraintName}' on table '${tableName}' may not reference bind parameters.`,
912
+ });
763
913
  let offendingExpr;
764
914
  traverseAst(cc.expr, {
765
915
  enterNode: (node) => {
@@ -778,7 +928,6 @@ export class SchemaManager {
778
928
  },
779
929
  });
780
930
  if (offendingExpr) {
781
- const constraintName = cc.name ?? `_check_${tableName}`;
782
931
  throw new QuereusError(`Non-deterministic expression not allowed in CHECK constraint '${constraintName}' on table '${tableName}'. ` +
783
932
  `Function '${offendingExpr.name}' is not deterministic. ` +
784
933
  `Use mutation context to pass non-deterministic values (e.g., WITH CONTEXT (timestamp = datetime('now'))).`, StatusCode.ERROR);
@@ -892,6 +1041,7 @@ export class SchemaManager {
892
1041
  name: indexName,
893
1042
  columns: Object.freeze(indexColumns),
894
1043
  unique: stmt.isUnique || undefined,
1044
+ predicate: stmt.where,
895
1045
  tags: stmt.tags && Object.keys(stmt.tags).length > 0 ? Object.freeze({ ...stmt.tags }) : undefined,
896
1046
  };
897
1047
  }
@@ -910,6 +1060,7 @@ export class SchemaManager {
910
1060
  const newConstraint = {
911
1061
  name: indexSchema.name,
912
1062
  columns: Object.freeze(indexSchema.columns.map(c => c.index)),
1063
+ predicate: indexSchema.predicate,
913
1064
  };
914
1065
  const updatedConstraints = [...(tableSchema.uniqueConstraints ?? []), newConstraint];
915
1066
  result.uniqueConstraints = Object.freeze(updatedConstraints);
@@ -1028,7 +1179,8 @@ export class SchemaManager {
1028
1179
  }
1029
1180
  const { moduleName, effectiveModuleArgs, moduleInfo } = this.resolveModuleInfo(stmt);
1030
1181
  const baseTableSchema = this.buildTableSchemaFromAST(stmt, moduleName, effectiveModuleArgs, moduleInfo);
1031
- this.validateDefaultDeterminism(baseTableSchema.columns, tableName);
1182
+ const hasMutationContext = !!baseTableSchema.mutationContext && baseTableSchema.mutationContext.length > 0;
1183
+ this.validateDefaultDeterminism(baseTableSchema.columns, tableName, hasMutationContext);
1032
1184
  this.validateCheckConstraintDeterminism(baseTableSchema.checkConstraints, tableName);
1033
1185
  let tableInstance;
1034
1186
  try {