@quereus/quereus 0.7.3 → 0.7.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 (568) hide show
  1. package/dist/src/schema/manager.d.ts.map +1 -1
  2. package/dist/src/schema/manager.js +19 -18
  3. package/package.json +3 -3
  4. package/dist/src/common/constants.js.map +0 -1
  5. package/dist/src/common/datatype.js.map +0 -1
  6. package/dist/src/common/errors.js.map +0 -1
  7. package/dist/src/common/json-types.js.map +0 -1
  8. package/dist/src/common/logger.js.map +0 -1
  9. package/dist/src/common/type-inference.js.map +0 -1
  10. package/dist/src/common/types.js.map +0 -1
  11. package/dist/src/core/database-options.js.map +0 -1
  12. package/dist/src/core/database.js.map +0 -1
  13. package/dist/src/core/param.js.map +0 -1
  14. package/dist/src/core/statement.js.map +0 -1
  15. package/dist/src/func/builtins/aggregate.js.map +0 -1
  16. package/dist/src/func/builtins/builtin-window-functions.js.map +0 -1
  17. package/dist/src/func/builtins/conversion.js.map +0 -1
  18. package/dist/src/func/builtins/datetime.js.map +0 -1
  19. package/dist/src/func/builtins/explain.js.map +0 -1
  20. package/dist/src/func/builtins/generation.js.map +0 -1
  21. package/dist/src/func/builtins/index.js.map +0 -1
  22. package/dist/src/func/builtins/json-helpers.js.map +0 -1
  23. package/dist/src/func/builtins/json-tvf.js.map +0 -1
  24. package/dist/src/func/builtins/json.js.map +0 -1
  25. package/dist/src/func/builtins/scalar.js.map +0 -1
  26. package/dist/src/func/builtins/schema.js.map +0 -1
  27. package/dist/src/func/builtins/string.js.map +0 -1
  28. package/dist/src/func/builtins/timespan.js.map +0 -1
  29. package/dist/src/func/context.js.map +0 -1
  30. package/dist/src/func/registration.js.map +0 -1
  31. package/dist/src/index.js.map +0 -1
  32. package/dist/src/parser/ast.js.map +0 -1
  33. package/dist/src/parser/index.js.map +0 -1
  34. package/dist/src/parser/lexer.js.map +0 -1
  35. package/dist/src/parser/parser.js.map +0 -1
  36. package/dist/src/parser/utils.js.map +0 -1
  37. package/dist/src/parser/visitor.js.map +0 -1
  38. package/dist/src/planner/analysis/binding-collector.js.map +0 -1
  39. package/dist/src/planner/analysis/const-evaluator.js.map +0 -1
  40. package/dist/src/planner/analysis/const-pass.js.map +0 -1
  41. package/dist/src/planner/analysis/constraint-extractor.js.map +0 -1
  42. package/dist/src/planner/analysis/predicate-normalizer.js.map +0 -1
  43. package/dist/src/planner/building/alter-table.js.map +0 -1
  44. package/dist/src/planner/building/block.js.map +0 -1
  45. package/dist/src/planner/building/constraint-builder.js.map +0 -1
  46. package/dist/src/planner/building/create-assertion.js.map +0 -1
  47. package/dist/src/planner/building/create-view.js.map +0 -1
  48. package/dist/src/planner/building/ddl.js.map +0 -1
  49. package/dist/src/planner/building/declare-schema.js.map +0 -1
  50. package/dist/src/planner/building/delete.js.map +0 -1
  51. package/dist/src/planner/building/drop-assertion.js.map +0 -1
  52. package/dist/src/planner/building/drop-table.js.map +0 -1
  53. package/dist/src/planner/building/drop-view.js.map +0 -1
  54. package/dist/src/planner/building/expression.js.map +0 -1
  55. package/dist/src/planner/building/function-call.js.map +0 -1
  56. package/dist/src/planner/building/insert.js.map +0 -1
  57. package/dist/src/planner/building/pragma.js.map +0 -1
  58. package/dist/src/planner/building/schema-resolution.js.map +0 -1
  59. package/dist/src/planner/building/select-aggregates.js.map +0 -1
  60. package/dist/src/planner/building/select-compound.js.map +0 -1
  61. package/dist/src/planner/building/select-context.js.map +0 -1
  62. package/dist/src/planner/building/select-modifiers.js.map +0 -1
  63. package/dist/src/planner/building/select-projections.js.map +0 -1
  64. package/dist/src/planner/building/select-window.js.map +0 -1
  65. package/dist/src/planner/building/select.js.map +0 -1
  66. package/dist/src/planner/building/table-function.js.map +0 -1
  67. package/dist/src/planner/building/table.js.map +0 -1
  68. package/dist/src/planner/building/transaction.js.map +0 -1
  69. package/dist/src/planner/building/update.js.map +0 -1
  70. package/dist/src/planner/building/with.js.map +0 -1
  71. package/dist/src/planner/cache/correlation-detector.js.map +0 -1
  72. package/dist/src/planner/cache/materialization-advisory.js.map +0 -1
  73. package/dist/src/planner/cache/reference-graph.js.map +0 -1
  74. package/dist/src/planner/cost/index.js.map +0 -1
  75. package/dist/src/planner/debug/logger-utils.js.map +0 -1
  76. package/dist/src/planner/debug.js.map +0 -1
  77. package/dist/src/planner/framework/characteristics.js.map +0 -1
  78. package/dist/src/planner/framework/context.js.map +0 -1
  79. package/dist/src/planner/framework/pass.js.map +0 -1
  80. package/dist/src/planner/framework/physical-utils.js.map +0 -1
  81. package/dist/src/planner/framework/registry.js.map +0 -1
  82. package/dist/src/planner/framework/trace.js.map +0 -1
  83. package/dist/src/planner/nodes/add-constraint-node.js.map +0 -1
  84. package/dist/src/planner/nodes/aggregate-function.js.map +0 -1
  85. package/dist/src/planner/nodes/aggregate-node.js.map +0 -1
  86. package/dist/src/planner/nodes/array-index-node.js.map +0 -1
  87. package/dist/src/planner/nodes/block.js.map +0 -1
  88. package/dist/src/planner/nodes/cache-node.js.map +0 -1
  89. package/dist/src/planner/nodes/constraint-check-node.js.map +0 -1
  90. package/dist/src/planner/nodes/create-assertion-node.js.map +0 -1
  91. package/dist/src/planner/nodes/create-index-node.js.map +0 -1
  92. package/dist/src/planner/nodes/create-table-node.js.map +0 -1
  93. package/dist/src/planner/nodes/create-view-node.js.map +0 -1
  94. package/dist/src/planner/nodes/cte-node.js.map +0 -1
  95. package/dist/src/planner/nodes/cte-reference-node.js.map +0 -1
  96. package/dist/src/planner/nodes/declarative-schema.js.map +0 -1
  97. package/dist/src/planner/nodes/delete-node.js.map +0 -1
  98. package/dist/src/planner/nodes/distinct-node.js.map +0 -1
  99. package/dist/src/planner/nodes/dml-executor-node.js.map +0 -1
  100. package/dist/src/planner/nodes/drop-assertion-node.js.map +0 -1
  101. package/dist/src/planner/nodes/drop-table-node.js.map +0 -1
  102. package/dist/src/planner/nodes/drop-view-node.js.map +0 -1
  103. package/dist/src/planner/nodes/filter.js.map +0 -1
  104. package/dist/src/planner/nodes/function.js.map +0 -1
  105. package/dist/src/planner/nodes/insert-node.js.map +0 -1
  106. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +0 -1
  107. package/dist/src/planner/nodes/join-node.js.map +0 -1
  108. package/dist/src/planner/nodes/limit-offset.js.map +0 -1
  109. package/dist/src/planner/nodes/plan-node-type.js.map +0 -1
  110. package/dist/src/planner/nodes/plan-node.js.map +0 -1
  111. package/dist/src/planner/nodes/pragma.js.map +0 -1
  112. package/dist/src/planner/nodes/project-node.js.map +0 -1
  113. package/dist/src/planner/nodes/recursive-cte-node.js.map +0 -1
  114. package/dist/src/planner/nodes/reference.js.map +0 -1
  115. package/dist/src/planner/nodes/remote-query-node.js.map +0 -1
  116. package/dist/src/planner/nodes/retrieve-node.js.map +0 -1
  117. package/dist/src/planner/nodes/returning-node.js.map +0 -1
  118. package/dist/src/planner/nodes/scalar.js.map +0 -1
  119. package/dist/src/planner/nodes/sequencing-node.js.map +0 -1
  120. package/dist/src/planner/nodes/set-operation-node.js.map +0 -1
  121. package/dist/src/planner/nodes/single-row.js.map +0 -1
  122. package/dist/src/planner/nodes/sink-node.js.map +0 -1
  123. package/dist/src/planner/nodes/sort.js.map +0 -1
  124. package/dist/src/planner/nodes/stream-aggregate.js.map +0 -1
  125. package/dist/src/planner/nodes/subquery.js.map +0 -1
  126. package/dist/src/planner/nodes/table-access-nodes.js.map +0 -1
  127. package/dist/src/planner/nodes/table-function-call.js.map +0 -1
  128. package/dist/src/planner/nodes/transaction-node.js.map +0 -1
  129. package/dist/src/planner/nodes/update-node.js.map +0 -1
  130. package/dist/src/planner/nodes/values-node.js.map +0 -1
  131. package/dist/src/planner/nodes/view-reference-node.js.map +0 -1
  132. package/dist/src/planner/nodes/window-function.js.map +0 -1
  133. package/dist/src/planner/nodes/window-node.js.map +0 -1
  134. package/dist/src/planner/optimizer-tuning.js.map +0 -1
  135. package/dist/src/planner/optimizer.js.map +0 -1
  136. package/dist/src/planner/planning-context.js.map +0 -1
  137. package/dist/src/planner/resolve.js.map +0 -1
  138. package/dist/src/planner/rules/access/rule-select-access-path.js.map +0 -1
  139. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +0 -1
  140. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +0 -1
  141. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
  142. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +0 -1
  143. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +0 -1
  144. package/dist/src/planner/rules/join/rule-join-key-inference.js.map +0 -1
  145. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +0 -1
  146. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +0 -1
  147. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +0 -1
  148. package/dist/src/planner/scopes/aliased.js.map +0 -1
  149. package/dist/src/planner/scopes/base.js.map +0 -1
  150. package/dist/src/planner/scopes/empty.js.map +0 -1
  151. package/dist/src/planner/scopes/global.js.map +0 -1
  152. package/dist/src/planner/scopes/multi.js.map +0 -1
  153. package/dist/src/planner/scopes/param.js.map +0 -1
  154. package/dist/src/planner/scopes/registered.js.map +0 -1
  155. package/dist/src/planner/scopes/scope.js.map +0 -1
  156. package/dist/src/planner/stats/basic-estimates.js.map +0 -1
  157. package/dist/src/planner/stats/index.js.map +0 -1
  158. package/dist/src/planner/type-utils.js.map +0 -1
  159. package/dist/src/planner/util/key-utils.js.map +0 -1
  160. package/dist/src/planner/validation/determinism-validator.js.map +0 -1
  161. package/dist/src/planner/validation/plan-validator.js.map +0 -1
  162. package/dist/src/runtime/async-util.js.map +0 -1
  163. package/dist/src/runtime/cache/shared-cache.js.map +0 -1
  164. package/dist/src/runtime/context-helpers.js.map +0 -1
  165. package/dist/src/runtime/deferred-constraint-queue.js.map +0 -1
  166. package/dist/src/runtime/emission-context.js.map +0 -1
  167. package/dist/src/runtime/emit/add-constraint.js.map +0 -1
  168. package/dist/src/runtime/emit/aggregate.js.map +0 -1
  169. package/dist/src/runtime/emit/array-index.js.map +0 -1
  170. package/dist/src/runtime/emit/between.js.map +0 -1
  171. package/dist/src/runtime/emit/binary.js.map +0 -1
  172. package/dist/src/runtime/emit/block.js.map +0 -1
  173. package/dist/src/runtime/emit/cache.js.map +0 -1
  174. package/dist/src/runtime/emit/case.js.map +0 -1
  175. package/dist/src/runtime/emit/cast.js.map +0 -1
  176. package/dist/src/runtime/emit/collate.js.map +0 -1
  177. package/dist/src/runtime/emit/column-reference.js.map +0 -1
  178. package/dist/src/runtime/emit/constraint-check.js.map +0 -1
  179. package/dist/src/runtime/emit/create-assertion.js.map +0 -1
  180. package/dist/src/runtime/emit/create-index.js.map +0 -1
  181. package/dist/src/runtime/emit/create-table.js.map +0 -1
  182. package/dist/src/runtime/emit/create-view.js.map +0 -1
  183. package/dist/src/runtime/emit/cte-reference.js.map +0 -1
  184. package/dist/src/runtime/emit/cte.js.map +0 -1
  185. package/dist/src/runtime/emit/delete.js.map +0 -1
  186. package/dist/src/runtime/emit/distinct.js.map +0 -1
  187. package/dist/src/runtime/emit/dml-executor.js.map +0 -1
  188. package/dist/src/runtime/emit/drop-assertion.js.map +0 -1
  189. package/dist/src/runtime/emit/drop-table.js.map +0 -1
  190. package/dist/src/runtime/emit/drop-view.js.map +0 -1
  191. package/dist/src/runtime/emit/filter.js.map +0 -1
  192. package/dist/src/runtime/emit/insert.js.map +0 -1
  193. package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +0 -1
  194. package/dist/src/runtime/emit/join.js.map +0 -1
  195. package/dist/src/runtime/emit/limit-offset.js.map +0 -1
  196. package/dist/src/runtime/emit/literal.js.map +0 -1
  197. package/dist/src/runtime/emit/parameter.js.map +0 -1
  198. package/dist/src/runtime/emit/pragma.js.map +0 -1
  199. package/dist/src/runtime/emit/project.js.map +0 -1
  200. package/dist/src/runtime/emit/recursive-cte.js.map +0 -1
  201. package/dist/src/runtime/emit/remote-query.js.map +0 -1
  202. package/dist/src/runtime/emit/retrieve.js.map +0 -1
  203. package/dist/src/runtime/emit/returning.js.map +0 -1
  204. package/dist/src/runtime/emit/scalar-function.js.map +0 -1
  205. package/dist/src/runtime/emit/scan.js.map +0 -1
  206. package/dist/src/runtime/emit/schema-declarative.js.map +0 -1
  207. package/dist/src/runtime/emit/sequencing.js.map +0 -1
  208. package/dist/src/runtime/emit/set-operation.js.map +0 -1
  209. package/dist/src/runtime/emit/sink.js.map +0 -1
  210. package/dist/src/runtime/emit/sort.js.map +0 -1
  211. package/dist/src/runtime/emit/subquery.js.map +0 -1
  212. package/dist/src/runtime/emit/table-valued-function.js.map +0 -1
  213. package/dist/src/runtime/emit/temporal-arithmetic.js.map +0 -1
  214. package/dist/src/runtime/emit/transaction.js.map +0 -1
  215. package/dist/src/runtime/emit/unary.js.map +0 -1
  216. package/dist/src/runtime/emit/update.js.map +0 -1
  217. package/dist/src/runtime/emit/values.js.map +0 -1
  218. package/dist/src/runtime/emit/window-function.js.map +0 -1
  219. package/dist/src/runtime/emit/window.js.map +0 -1
  220. package/dist/src/runtime/emitters.js.map +0 -1
  221. package/dist/src/runtime/register.js.map +0 -1
  222. package/dist/src/runtime/scheduler.js.map +0 -1
  223. package/dist/src/runtime/types.js.map +0 -1
  224. package/dist/src/runtime/utils.js.map +0 -1
  225. package/dist/src/schema/assertion.js.map +0 -1
  226. package/dist/src/schema/catalog.js.map +0 -1
  227. package/dist/src/schema/change-events.js.map +0 -1
  228. package/dist/src/schema/column.js.map +0 -1
  229. package/dist/src/schema/declared-schema-manager.js.map +0 -1
  230. package/dist/src/schema/function.js.map +0 -1
  231. package/dist/src/schema/manager.js.map +0 -1
  232. package/dist/src/schema/schema-differ.js.map +0 -1
  233. package/dist/src/schema/schema-hasher.js.map +0 -1
  234. package/dist/src/schema/schema.js.map +0 -1
  235. package/dist/src/schema/table.js.map +0 -1
  236. package/dist/src/schema/view.js.map +0 -1
  237. package/dist/src/schema/window-function.js.map +0 -1
  238. package/dist/src/types/builtin-types.js.map +0 -1
  239. package/dist/src/types/index.js.map +0 -1
  240. package/dist/src/types/json-type.js.map +0 -1
  241. package/dist/src/types/logical-type.js.map +0 -1
  242. package/dist/src/types/plugin-interface.js.map +0 -1
  243. package/dist/src/types/registry.js.map +0 -1
  244. package/dist/src/types/temporal-types.js.map +0 -1
  245. package/dist/src/types/validation.js.map +0 -1
  246. package/dist/src/util/affinity.js.map +0 -1
  247. package/dist/src/util/ast-stringify.js.map +0 -1
  248. package/dist/src/util/cached.js.map +0 -1
  249. package/dist/src/util/coercion.js.map +0 -1
  250. package/dist/src/util/comparison.js.map +0 -1
  251. package/dist/src/util/environment.js.map +0 -1
  252. package/dist/src/util/hash.js.map +0 -1
  253. package/dist/src/util/latches.js.map +0 -1
  254. package/dist/src/util/mutation-statement.js.map +0 -1
  255. package/dist/src/util/patterns.js.map +0 -1
  256. package/dist/src/util/plan-formatter.js.map +0 -1
  257. package/dist/src/util/plugin-helper.js.map +0 -1
  258. package/dist/src/util/row-descriptor.js.map +0 -1
  259. package/dist/src/util/serialization.js.map +0 -1
  260. package/dist/src/util/sql-literal.js.map +0 -1
  261. package/dist/src/util/working-table-iterable.js.map +0 -1
  262. package/dist/src/vtab/best-access-plan.js.map +0 -1
  263. package/dist/src/vtab/connection.js.map +0 -1
  264. package/dist/src/vtab/filter-info.js.map +0 -1
  265. package/dist/src/vtab/index-info.js.map +0 -1
  266. package/dist/src/vtab/manifest.js.map +0 -1
  267. package/dist/src/vtab/memory/connection.js.map +0 -1
  268. package/dist/src/vtab/memory/index.js.map +0 -1
  269. package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
  270. package/dist/src/vtab/memory/layer/base.js.map +0 -1
  271. package/dist/src/vtab/memory/layer/connection.js.map +0 -1
  272. package/dist/src/vtab/memory/layer/interface.js.map +0 -1
  273. package/dist/src/vtab/memory/layer/manager.js.map +0 -1
  274. package/dist/src/vtab/memory/layer/safe-iterate.js.map +0 -1
  275. package/dist/src/vtab/memory/layer/scan-plan.js.map +0 -1
  276. package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
  277. package/dist/src/vtab/memory/layer/transaction.js.map +0 -1
  278. package/dist/src/vtab/memory/module.js.map +0 -1
  279. package/dist/src/vtab/memory/table.js.map +0 -1
  280. package/dist/src/vtab/memory/types.js.map +0 -1
  281. package/dist/src/vtab/memory/utils/logging.js.map +0 -1
  282. package/dist/src/vtab/memory/utils/primary-key.js.map +0 -1
  283. package/dist/src/vtab/module.js.map +0 -1
  284. package/dist/src/vtab/table.js.map +0 -1
  285. package/src/common/constants.ts +0 -60
  286. package/src/common/datatype.ts +0 -85
  287. package/src/common/errors.ts +0 -189
  288. package/src/common/json-types.ts +0 -16
  289. package/src/common/logger.ts +0 -97
  290. package/src/common/type-inference.ts +0 -39
  291. package/src/common/types.ts +0 -151
  292. package/src/core/database-options.ts +0 -258
  293. package/src/core/database.ts +0 -1461
  294. package/src/core/param.ts +0 -56
  295. package/src/core/statement.ts +0 -528
  296. package/src/func/builtins/aggregate.ts +0 -269
  297. package/src/func/builtins/builtin-window-functions.ts +0 -166
  298. package/src/func/builtins/conversion.ts +0 -226
  299. package/src/func/builtins/datetime.ts +0 -500
  300. package/src/func/builtins/explain.ts +0 -779
  301. package/src/func/builtins/generation.ts +0 -43
  302. package/src/func/builtins/index.ts +0 -167
  303. package/src/func/builtins/json-helpers.ts +0 -237
  304. package/src/func/builtins/json-tvf.ts +0 -224
  305. package/src/func/builtins/json.ts +0 -588
  306. package/src/func/builtins/scalar.ts +0 -423
  307. package/src/func/builtins/schema.ts +0 -213
  308. package/src/func/builtins/string.ts +0 -306
  309. package/src/func/builtins/timespan.ts +0 -179
  310. package/src/func/context.ts +0 -258
  311. package/src/func/registration.ts +0 -201
  312. package/src/index.ts +0 -172
  313. package/src/parser/ast.ts +0 -581
  314. package/src/parser/index.ts +0 -65
  315. package/src/parser/lexer.ts +0 -806
  316. package/src/parser/parser.ts +0 -3352
  317. package/src/parser/utils.ts +0 -10
  318. package/src/parser/visitor.ts +0 -188
  319. package/src/planner/analysis/README.md +0 -93
  320. package/src/planner/analysis/binding-collector.ts +0 -83
  321. package/src/planner/analysis/const-evaluator.ts +0 -63
  322. package/src/planner/analysis/const-pass.ts +0 -282
  323. package/src/planner/analysis/constraint-extractor.ts +0 -764
  324. package/src/planner/analysis/predicate-normalizer.ts +0 -237
  325. package/src/planner/building/alter-table.ts +0 -49
  326. package/src/planner/building/block.ts +0 -93
  327. package/src/planner/building/constraint-builder.ts +0 -178
  328. package/src/planner/building/create-assertion.ts +0 -7
  329. package/src/planner/building/create-view.ts +0 -29
  330. package/src/planner/building/ddl.ts +0 -24
  331. package/src/planner/building/declare-schema.ts +0 -22
  332. package/src/planner/building/delete.ts +0 -218
  333. package/src/planner/building/drop-assertion.ts +0 -11
  334. package/src/planner/building/drop-table.ts +0 -13
  335. package/src/planner/building/drop-view.ts +0 -19
  336. package/src/planner/building/expression.ts +0 -205
  337. package/src/planner/building/function-call.ts +0 -129
  338. package/src/planner/building/insert.ts +0 -435
  339. package/src/planner/building/pragma.ts +0 -34
  340. package/src/planner/building/schema-resolution.ts +0 -176
  341. package/src/planner/building/select-aggregates.ts +0 -318
  342. package/src/planner/building/select-compound.ts +0 -119
  343. package/src/planner/building/select-context.ts +0 -85
  344. package/src/planner/building/select-modifiers.ts +0 -236
  345. package/src/planner/building/select-projections.ts +0 -177
  346. package/src/planner/building/select-window.ts +0 -259
  347. package/src/planner/building/select.ts +0 -567
  348. package/src/planner/building/table-function.ts +0 -49
  349. package/src/planner/building/table.ts +0 -40
  350. package/src/planner/building/transaction.ts +0 -23
  351. package/src/planner/building/update.ts +0 -331
  352. package/src/planner/building/with.ts +0 -180
  353. package/src/planner/cache/correlation-detector.ts +0 -83
  354. package/src/planner/cache/materialization-advisory.ts +0 -265
  355. package/src/planner/cache/reference-graph.ts +0 -196
  356. package/src/planner/cost/index.ts +0 -169
  357. package/src/planner/debug/logger-utils.ts +0 -68
  358. package/src/planner/debug.ts +0 -480
  359. package/src/planner/framework/README.md +0 -132
  360. package/src/planner/framework/characteristics.ts +0 -503
  361. package/src/planner/framework/context.ts +0 -239
  362. package/src/planner/framework/pass.ts +0 -354
  363. package/src/planner/framework/physical-utils.ts +0 -210
  364. package/src/planner/framework/registry.ts +0 -261
  365. package/src/planner/framework/trace.ts +0 -259
  366. package/src/planner/nodes/add-constraint-node.ts +0 -62
  367. package/src/planner/nodes/aggregate-function.ts +0 -155
  368. package/src/planner/nodes/aggregate-node.ts +0 -267
  369. package/src/planner/nodes/array-index-node.ts +0 -50
  370. package/src/planner/nodes/block.ts +0 -80
  371. package/src/planner/nodes/cache-node.ts +0 -103
  372. package/src/planner/nodes/constraint-check-node.ts +0 -138
  373. package/src/planner/nodes/create-assertion-node.ts +0 -51
  374. package/src/planner/nodes/create-index-node.ts +0 -41
  375. package/src/planner/nodes/create-table-node.ts +0 -35
  376. package/src/planner/nodes/create-view-node.ts +0 -44
  377. package/src/planner/nodes/cte-node.ts +0 -168
  378. package/src/planner/nodes/cte-reference-node.ts +0 -125
  379. package/src/planner/nodes/declarative-schema.ts +0 -221
  380. package/src/planner/nodes/delete-node.ts +0 -102
  381. package/src/planner/nodes/distinct-node.ts +0 -107
  382. package/src/planner/nodes/dml-executor-node.ts +0 -104
  383. package/src/planner/nodes/drop-assertion-node.ts +0 -50
  384. package/src/planner/nodes/drop-table-node.ts +0 -36
  385. package/src/planner/nodes/drop-view-node.ts +0 -37
  386. package/src/planner/nodes/filter.ts +0 -144
  387. package/src/planner/nodes/function.ts +0 -98
  388. package/src/planner/nodes/insert-node.ts +0 -126
  389. package/src/planner/nodes/internal-recursive-cte-ref-node.ts +0 -61
  390. package/src/planner/nodes/join-node.ts +0 -336
  391. package/src/planner/nodes/limit-offset.ts +0 -144
  392. package/src/planner/nodes/plan-node-type.ts +0 -95
  393. package/src/planner/nodes/plan-node.ts +0 -503
  394. package/src/planner/nodes/pragma.ts +0 -98
  395. package/src/planner/nodes/project-node.ts +0 -337
  396. package/src/planner/nodes/recursive-cte-node.ts +0 -158
  397. package/src/planner/nodes/reference.ts +0 -334
  398. package/src/planner/nodes/remote-query-node.ts +0 -73
  399. package/src/planner/nodes/retrieve-node.ts +0 -86
  400. package/src/planner/nodes/returning-node.ts +0 -269
  401. package/src/planner/nodes/scalar.ts +0 -772
  402. package/src/planner/nodes/sequencing-node.ts +0 -113
  403. package/src/planner/nodes/set-operation-node.ts +0 -87
  404. package/src/planner/nodes/single-row.ts +0 -85
  405. package/src/planner/nodes/sink-node.ts +0 -61
  406. package/src/planner/nodes/sort.ts +0 -166
  407. package/src/planner/nodes/stream-aggregate.ts +0 -293
  408. package/src/planner/nodes/subquery.ts +0 -268
  409. package/src/planner/nodes/table-access-nodes.ts +0 -323
  410. package/src/planner/nodes/table-function-call.ts +0 -134
  411. package/src/planner/nodes/transaction-node.ts +0 -55
  412. package/src/planner/nodes/update-node.ts +0 -138
  413. package/src/planner/nodes/values-node.ts +0 -244
  414. package/src/planner/nodes/view-reference-node.ts +0 -97
  415. package/src/planner/nodes/window-function.ts +0 -73
  416. package/src/planner/nodes/window-node.ts +0 -199
  417. package/src/planner/optimizer-tuning.ts +0 -105
  418. package/src/planner/optimizer.ts +0 -332
  419. package/src/planner/planning-context.ts +0 -190
  420. package/src/planner/resolve.ts +0 -101
  421. package/src/planner/rules/README.md +0 -96
  422. package/src/planner/rules/access/rule-select-access-path.ts +0 -399
  423. package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +0 -162
  424. package/src/planner/rules/cache/rule-cte-optimization.ts +0 -79
  425. package/src/planner/rules/cache/rule-materialization-advisory.ts +0 -77
  426. package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +0 -104
  427. package/src/planner/rules/join/rule-join-greedy-commute.ts +0 -48
  428. package/src/planner/rules/join/rule-join-key-inference.ts +0 -35
  429. package/src/planner/rules/join/rule-quickpick-enumeration.ts +0 -267
  430. package/src/planner/rules/predicate/rule-predicate-pushdown.ts +0 -144
  431. package/src/planner/rules/retrieve/rule-grow-retrieve.ts +0 -337
  432. package/src/planner/scopes/aliased.ts +0 -50
  433. package/src/planner/scopes/base.ts +0 -10
  434. package/src/planner/scopes/empty.ts +0 -12
  435. package/src/planner/scopes/global.ts +0 -73
  436. package/src/planner/scopes/multi.ts +0 -40
  437. package/src/planner/scopes/param.ts +0 -95
  438. package/src/planner/scopes/registered.ts +0 -67
  439. package/src/planner/scopes/scope.ts +0 -16
  440. package/src/planner/stats/basic-estimates.ts +0 -107
  441. package/src/planner/stats/index.ts +0 -158
  442. package/src/planner/type-utils.ts +0 -87
  443. package/src/planner/util/key-utils.ts +0 -46
  444. package/src/planner/validation/determinism-validator.ts +0 -104
  445. package/src/planner/validation/plan-validator.ts +0 -335
  446. package/src/runtime/async-util.ts +0 -283
  447. package/src/runtime/cache/shared-cache.ts +0 -169
  448. package/src/runtime/context-helpers.ts +0 -191
  449. package/src/runtime/deferred-constraint-queue.ts +0 -196
  450. package/src/runtime/emission-context.ts +0 -319
  451. package/src/runtime/emit/add-constraint.ts +0 -78
  452. package/src/runtime/emit/aggregate.ts +0 -581
  453. package/src/runtime/emit/array-index.ts +0 -25
  454. package/src/runtime/emit/between.ts +0 -51
  455. package/src/runtime/emit/binary.ts +0 -357
  456. package/src/runtime/emit/block.ts +0 -23
  457. package/src/runtime/emit/cache.ts +0 -64
  458. package/src/runtime/emit/case.ts +0 -87
  459. package/src/runtime/emit/cast.ts +0 -151
  460. package/src/runtime/emit/collate.ts +0 -9
  461. package/src/runtime/emit/column-reference.ts +0 -17
  462. package/src/runtime/emit/constraint-check.ts +0 -290
  463. package/src/runtime/emit/create-assertion.ts +0 -82
  464. package/src/runtime/emit/create-index.ts +0 -15
  465. package/src/runtime/emit/create-table.ts +0 -15
  466. package/src/runtime/emit/create-view.ts +0 -52
  467. package/src/runtime/emit/cte-reference.ts +0 -38
  468. package/src/runtime/emit/cte.ts +0 -39
  469. package/src/runtime/emit/delete.ts +0 -24
  470. package/src/runtime/emit/distinct.ts +0 -40
  471. package/src/runtime/emit/dml-executor.ts +0 -198
  472. package/src/runtime/emit/drop-assertion.ts +0 -45
  473. package/src/runtime/emit/drop-table.ts +0 -27
  474. package/src/runtime/emit/drop-view.ts +0 -49
  475. package/src/runtime/emit/filter.ts +0 -30
  476. package/src/runtime/emit/insert.ts +0 -42
  477. package/src/runtime/emit/internal-recursive-cte-ref.ts +0 -37
  478. package/src/runtime/emit/join.ts +0 -148
  479. package/src/runtime/emit/limit-offset.ts +0 -73
  480. package/src/runtime/emit/literal.ts +0 -17
  481. package/src/runtime/emit/parameter.ts +0 -59
  482. package/src/runtime/emit/pragma.ts +0 -56
  483. package/src/runtime/emit/project.ts +0 -46
  484. package/src/runtime/emit/recursive-cte.ts +0 -111
  485. package/src/runtime/emit/remote-query.ts +0 -47
  486. package/src/runtime/emit/retrieve.ts +0 -15
  487. package/src/runtime/emit/returning.ts +0 -41
  488. package/src/runtime/emit/scalar-function.ts +0 -69
  489. package/src/runtime/emit/scan.ts +0 -106
  490. package/src/runtime/emit/schema-declarative.ts +0 -215
  491. package/src/runtime/emit/sequencing.ts +0 -24
  492. package/src/runtime/emit/set-operation.ts +0 -141
  493. package/src/runtime/emit/sink.ts +0 -27
  494. package/src/runtime/emit/sort.ts +0 -75
  495. package/src/runtime/emit/subquery.ts +0 -203
  496. package/src/runtime/emit/table-valued-function.ts +0 -106
  497. package/src/runtime/emit/temporal-arithmetic.ts +0 -302
  498. package/src/runtime/emit/transaction.ts +0 -205
  499. package/src/runtime/emit/unary.ts +0 -101
  500. package/src/runtime/emit/update.ts +0 -66
  501. package/src/runtime/emit/values.ts +0 -66
  502. package/src/runtime/emit/window-function.ts +0 -42
  503. package/src/runtime/emit/window.ts +0 -458
  504. package/src/runtime/emitters.ts +0 -183
  505. package/src/runtime/register.ts +0 -150
  506. package/src/runtime/scheduler.ts +0 -488
  507. package/src/runtime/types.ts +0 -242
  508. package/src/runtime/utils.ts +0 -177
  509. package/src/schema/assertion.ts +0 -21
  510. package/src/schema/catalog.ts +0 -269
  511. package/src/schema/change-events.ts +0 -80
  512. package/src/schema/column.ts +0 -51
  513. package/src/schema/declared-schema-manager.ts +0 -82
  514. package/src/schema/function.ts +0 -188
  515. package/src/schema/manager.ts +0 -1034
  516. package/src/schema/schema-differ.ts +0 -214
  517. package/src/schema/schema-hasher.ts +0 -26
  518. package/src/schema/schema.ts +0 -222
  519. package/src/schema/table.ts +0 -409
  520. package/src/schema/view.ts +0 -19
  521. package/src/schema/window-function.ts +0 -56
  522. package/src/types/builtin-types.ts +0 -350
  523. package/src/types/index.ts +0 -17
  524. package/src/types/json-type.ts +0 -152
  525. package/src/types/logical-type.ts +0 -91
  526. package/src/types/plugin-interface.ts +0 -10
  527. package/src/types/registry.ts +0 -204
  528. package/src/types/temporal-types.ts +0 -290
  529. package/src/types/validation.ts +0 -120
  530. package/src/util/affinity.ts +0 -151
  531. package/src/util/ast-stringify.ts +0 -887
  532. package/src/util/cached.ts +0 -25
  533. package/src/util/coercion.ts +0 -113
  534. package/src/util/comparison.ts +0 -510
  535. package/src/util/environment.ts +0 -52
  536. package/src/util/hash.ts +0 -90
  537. package/src/util/latches.ts +0 -47
  538. package/src/util/mutation-statement.ts +0 -135
  539. package/src/util/patterns.ts +0 -56
  540. package/src/util/plan-formatter.ts +0 -48
  541. package/src/util/plugin-helper.ts +0 -110
  542. package/src/util/row-descriptor.ts +0 -105
  543. package/src/util/serialization.ts +0 -47
  544. package/src/util/sql-literal.ts +0 -22
  545. package/src/util/working-table-iterable.ts +0 -38
  546. package/src/vtab/best-access-plan.ts +0 -244
  547. package/src/vtab/connection.ts +0 -36
  548. package/src/vtab/filter-info.ts +0 -23
  549. package/src/vtab/index-info.ts +0 -84
  550. package/src/vtab/manifest.ts +0 -86
  551. package/src/vtab/memory/connection.ts +0 -73
  552. package/src/vtab/memory/index.ts +0 -191
  553. package/src/vtab/memory/layer/base-cursor.ts +0 -124
  554. package/src/vtab/memory/layer/base.ts +0 -275
  555. package/src/vtab/memory/layer/connection.ts +0 -203
  556. package/src/vtab/memory/layer/interface.ts +0 -47
  557. package/src/vtab/memory/layer/manager.ts +0 -909
  558. package/src/vtab/memory/layer/safe-iterate.ts +0 -49
  559. package/src/vtab/memory/layer/scan-plan.ts +0 -84
  560. package/src/vtab/memory/layer/transaction-cursor.ts +0 -162
  561. package/src/vtab/memory/layer/transaction.ts +0 -229
  562. package/src/vtab/memory/module.ts +0 -667
  563. package/src/vtab/memory/table.ts +0 -251
  564. package/src/vtab/memory/types.ts +0 -23
  565. package/src/vtab/memory/utils/logging.ts +0 -36
  566. package/src/vtab/memory/utils/primary-key.ts +0 -163
  567. package/src/vtab/module.ts +0 -162
  568. package/src/vtab/table.ts +0 -177
@@ -1,16 +0,0 @@
1
- import type { PlanNode } from '../nodes/plan-node.js';
2
- import * as AST from '../../parser/ast.js';
3
-
4
- // Create a javascript symbol that represents an ambiguous symbol.
5
- export const Ambiguous = Symbol();
6
-
7
- export type ReferenceCallback = (expression: AST.Expression, currentScope: Scope) => PlanNode;
8
-
9
- /**
10
- * The Scope object provides context for symbol resolution during query planning.
11
- * It encapsulates the logic for looking up columns, parameters, functions, and CTEs
12
- * based on the current position in the PlanNode tree.
13
- */
14
- export interface Scope {
15
- resolveSymbol(symbolKey: string, expression: AST.Expression): PlanNode | typeof Ambiguous | undefined;
16
- }
@@ -1,107 +0,0 @@
1
- /**
2
- * Basic row and cost estimation utilities for plan nodes
3
- * Used when more sophisticated statistics are not available
4
- */
5
-
6
- import type { RelationalPlanNode } from '../nodes/plan-node.js';
7
- import type { OptimizerTuning } from '../optimizer-tuning.js';
8
-
9
- /**
10
- * Basic row estimation heuristics
11
- */
12
- export class BasicRowEstimator {
13
- constructor(private readonly tuning: OptimizerTuning) {}
14
-
15
- /**
16
- * Estimate rows for a filter operation
17
- * Default assumes 30% selectivity for most predicates
18
- */
19
- estimateFilter(sourceRows: number): number {
20
- return Math.max(1, Math.floor(sourceRows * 0.3));
21
- }
22
-
23
- /**
24
- * Estimate rows for a join operation
25
- */
26
- estimateJoin(leftRows: number, rightRows: number, joinType: string): number {
27
- switch (joinType.toLowerCase()) {
28
- case 'inner':
29
- // Inner join: assume moderate correlation
30
- return Math.max(1, Math.floor(leftRows * rightRows * 0.1));
31
- case 'left':
32
- case 'left outer':
33
- // Left join: at least as many as left side
34
- return Math.max(leftRows, Math.floor(leftRows * rightRows * 0.1));
35
- case 'right':
36
- case 'right outer':
37
- // Right join: at least as many as right side
38
- return Math.max(rightRows, Math.floor(leftRows * rightRows * 0.1));
39
- case 'full':
40
- case 'full outer':
41
- // Full outer join: sum minus overlap
42
- return leftRows + rightRows - Math.floor(leftRows * rightRows * 0.1);
43
- case 'cross':
44
- // Cross join: cartesian product
45
- return leftRows * rightRows;
46
- default:
47
- return Math.max(leftRows, rightRows);
48
- }
49
- }
50
-
51
- /**
52
- * Estimate rows for aggregation
53
- */
54
- estimateAggregate(sourceRows: number, groupByCount: number): number {
55
- if (groupByCount === 0) {
56
- return 1; // Single aggregate row
57
- }
58
- // Assume reasonable grouping factor
59
- const groupingFactor = Math.min(0.8, Math.max(0.1, groupByCount * 0.2));
60
- return Math.max(1, Math.floor(sourceRows * groupingFactor));
61
- }
62
-
63
- /**
64
- * Estimate rows for distinct operation
65
- */
66
- estimateDistinct(sourceRows: number): number {
67
- // Assume moderate duplication - 70% unique rows
68
- return Math.max(1, Math.floor(sourceRows * 0.7));
69
- }
70
-
71
- /**
72
- * Estimate rows for limit operation
73
- */
74
- estimateLimit(sourceRows: number, limit: number, offset: number = 0): number {
75
- return Math.min(sourceRows, Math.max(0, limit - offset));
76
- }
77
-
78
- /**
79
- * Get default row estimate when no information is available
80
- */
81
- getDefaultEstimate(): number {
82
- return this.tuning.defaultRowEstimate;
83
- }
84
- }
85
-
86
- /**
87
- * Helper to safely get row estimate from a relational node
88
- */
89
- export function getRowEstimate(node: RelationalPlanNode, tuning: OptimizerTuning): number {
90
- return node.estimatedRows ?? tuning.defaultRowEstimate;
91
- }
92
-
93
- /**
94
- * Helper to set row estimate on a node if not already set
95
- */
96
- export function ensureRowEstimate(node: RelationalPlanNode, estimate: number): void {
97
- if (node.estimatedRows === undefined) {
98
- // Use Object.defineProperty to set a non-enumerable property
99
- // This maintains the immutability principle while adding metadata
100
- Object.defineProperty(node, 'estimatedRows', {
101
- value: estimate,
102
- writable: false,
103
- enumerable: true,
104
- configurable: false
105
- });
106
- }
107
- }
@@ -1,158 +0,0 @@
1
- /**
2
- * Statistics provider abstraction for the Quereus optimizer
3
- * Provides cardinality estimates and selectivity information for cost-based optimization
4
- */
5
-
6
- import type { ScalarPlanNode } from '../nodes/plan-node.js';
7
- import type { TableSchema } from '../../schema/table.js';
8
- import { createLogger } from '../../common/logger.js';
9
-
10
- const log = createLogger('optimizer:stats');
11
-
12
- /**
13
- * Statistics provider interface for optimizer
14
- */
15
- export interface StatsProvider {
16
- /**
17
- * Get estimated row count for a base table
18
- * @param table Table schema
19
- * @returns Estimated row count, or undefined if unknown
20
- */
21
- tableRows(table: TableSchema): number | undefined;
22
-
23
- /**
24
- * Get selectivity estimate for a predicate on a table
25
- * @param table Table schema
26
- * @param predicate Predicate expression
27
- * @returns Selectivity factor (0.0 to 1.0), or undefined if unknown
28
- */
29
- selectivity(table: TableSchema, predicate: ScalarPlanNode): number | undefined;
30
-
31
- /**
32
- * Get join selectivity estimate
33
- * @param leftTable Left table schema
34
- * @param rightTable Right table schema
35
- * @param joinCondition Join condition
36
- * @returns Join selectivity factor, or undefined if unknown
37
- */
38
- joinSelectivity?(leftTable: TableSchema, rightTable: TableSchema, joinCondition: ScalarPlanNode): number | undefined;
39
-
40
- /**
41
- * Get number of distinct values for a column
42
- * @param table Table schema
43
- * @param columnName Column name
44
- * @returns Estimated distinct values, or undefined if unknown
45
- */
46
- distinctValues?(table: TableSchema, columnName: string): number | undefined;
47
-
48
- /**
49
- * Get index selectivity information
50
- * @param table Table schema
51
- * @param indexName Index name (if applicable)
52
- * @param predicate Predicate expression
53
- * @returns Index selectivity factor, or undefined if unknown
54
- */
55
- indexSelectivity?(table: TableSchema, indexName: string, predicate: ScalarPlanNode): number | undefined;
56
- }
57
-
58
- /**
59
- * Naive statistics provider using simple heuristics
60
- * Used as fallback when no better statistics are available
61
- */
62
- export class NaiveStatsProvider implements StatsProvider {
63
- constructor(
64
- private readonly defaultTableRows: number = 1000,
65
- private readonly defaultSelectivity: number = 0.3
66
- ) {
67
- log('Created naive stats provider (defaultRows: %d, defaultSelectivity: %f)',
68
- defaultTableRows, defaultSelectivity);
69
- }
70
-
71
- tableRows(table: TableSchema): number | undefined {
72
- // Use table's estimated rows if available, otherwise use default
73
- const estimate = table.estimatedRows ?? this.defaultTableRows;
74
- log('Table %s estimated rows: %d (source: %s)',
75
- table.name, estimate, table.estimatedRows ? 'schema' : 'default');
76
- return estimate;
77
- }
78
-
79
- selectivity(table: TableSchema, predicate: ScalarPlanNode): number | undefined {
80
- // Simple heuristics based on predicate type
81
- const selectivity = this.estimatePredicateSelectivity(predicate);
82
- log('Predicate selectivity for %s: %f', predicate.nodeType, selectivity);
83
- return selectivity;
84
- }
85
-
86
- joinSelectivity(leftTable: TableSchema, rightTable: TableSchema, _joinCondition: ScalarPlanNode): number | undefined {
87
- // Default join selectivity based on table sizes
88
- const leftRows = this.tableRows(leftTable) ?? this.defaultTableRows;
89
- const rightRows = this.tableRows(rightTable) ?? this.defaultTableRows;
90
-
91
- // Simple heuristic: smaller table determines selectivity
92
- const selectivity = 1.0 / Math.max(leftRows, rightRows, 10);
93
- log('Join selectivity between %s and %s: %f', leftTable.name, rightTable.name, selectivity);
94
- return Math.min(0.5, selectivity);
95
- }
96
-
97
- distinctValues(table: TableSchema, columnName: string): number | undefined {
98
- const totalRows = this.tableRows(table);
99
- if (!totalRows) return undefined;
100
-
101
- // Heuristic: assume moderate cardinality (50% distinct values)
102
- const distinct = Math.max(1, Math.floor(totalRows * 0.5));
103
- log('Distinct values for %s.%s: %d', table.name, columnName, distinct);
104
- return distinct;
105
- }
106
-
107
- indexSelectivity(table: TableSchema, indexName: string, predicate: ScalarPlanNode): number | undefined {
108
- // Index selectivity is generally better than table scan
109
- const baseSelecivity = this.selectivity(table, predicate) ?? this.defaultSelectivity;
110
- const indexSelectivity = baseSelecivity * 0.8; // 20% improvement with index
111
- log('Index %s selectivity: %f (base: %f)', indexName, indexSelectivity, baseSelecivity);
112
- return indexSelectivity;
113
- }
114
-
115
- private estimatePredicateSelectivity(predicate: ScalarPlanNode): number {
116
- // Simple heuristics based on node type
117
- switch (predicate.nodeType) {
118
- case 'BinaryOp':
119
- // More selective for equality, less for ranges
120
- return 0.1; // Equality-like operations
121
- case 'In':
122
- return 0.2; // IN clauses
123
- case 'Between':
124
- return 0.25; // Range queries
125
- case 'Like':
126
- return 0.3; // Pattern matching
127
- case 'IsNull':
128
- case 'IsNotNull':
129
- return 0.1; // NULL checks are usually selective
130
- default:
131
- return this.defaultSelectivity;
132
- }
133
- }
134
- }
135
-
136
- /**
137
- * Default statistics provider instance
138
- */
139
- export const defaultStatsProvider = new NaiveStatsProvider();
140
-
141
- /**
142
- * Create a custom statistics provider
143
- */
144
- export function createStatsProvider(
145
- tableRowsMap?: Map<string, number>,
146
- selectivityMap?: Map<string, number>
147
- ): StatsProvider {
148
- return new class implements StatsProvider {
149
- tableRows(table: TableSchema): number | undefined {
150
- return tableRowsMap?.get(table.name) ?? defaultStatsProvider.tableRows(table);
151
- }
152
-
153
- selectivity(table: TableSchema, predicate: ScalarPlanNode): number | undefined {
154
- const key = `${table.name}:${predicate.nodeType}`;
155
- return selectivityMap?.get(key) ?? defaultStatsProvider.selectivity(table, predicate);
156
- }
157
- };
158
- }
@@ -1,87 +0,0 @@
1
- import type { TableSchema } from '../schema/table.js';
2
- import type { ColumnSchema } from '../schema/column.js';
3
- import type { RelationType, ColumnDef, ScalarType, ColRef } from '../common/datatype.js';
4
- import { SqlDataType, StatusCode, type DeepReadonly, type SqlValue } from '../common/types.js'; // Import SqlValue and ensure SqlDataType is not type-only
5
- import type { AstNode } from '../parser/ast.js';
6
- import { QuereusError } from '../common/errors.js';
7
- import { inferLogicalTypeFromValue } from '../common/type-inference.js';
8
-
9
- /**
10
- * Converts a TableSchema (from src/schema/table.ts) to a RelationType (from src/common/datatype.ts).
11
- * This is used by PlanNodes that source data directly from a base table.
12
- */
13
- export function relationTypeFromTableSchema(tableSchema: TableSchema): RelationType {
14
- const columnDefs: ColumnDef[] = tableSchema.columns.map((col: ColumnSchema) => {
15
- return {
16
- name: col.name,
17
- type: {
18
- typeClass: 'scalar',
19
- logicalType: col.logicalType,
20
- collationName: col.collation,
21
- nullable: !col.notNull,
22
- isReadOnly: false,
23
- },
24
- generated: col.generated,
25
- };
26
- });
27
-
28
- // Populate keys from primaryKeyDefinition
29
- const keys: ColRef[][] = [];
30
- if (tableSchema.primaryKeyDefinition && tableSchema.primaryKeyDefinition.length > 0) {
31
- const primaryKey: ColRef[] = tableSchema.primaryKeyDefinition.map(pkCol => ({
32
- index: pkCol.index,
33
- desc: pkCol.desc,
34
- }));
35
- keys.push(primaryKey);
36
- }
37
-
38
- return {
39
- typeClass: 'relation',
40
- isReadOnly: !!(tableSchema.isView || tableSchema.isTemporary),
41
- isSet: true, // Base tables are sets by definition (enforced by primary keys)
42
- columns: columnDefs,
43
- keys: keys,
44
- // TODO: Populate rowConstraints from tableSchema if/when RelationType supports them
45
- rowConstraints: [], // Placeholder
46
- };
47
- }
48
-
49
- /**
50
- * Creates a ScalarType for a given SqlValue, typically for parameters.
51
- * @param value The SqlValue to determine the type for.
52
- * @returns A ScalarType representing the inferred type of the value.
53
- */
54
- export function getParameterScalarType(value: SqlValue): ScalarType {
55
- const logicalType = inferLogicalTypeFromValue(value);
56
-
57
- return {
58
- typeClass: 'scalar',
59
- logicalType,
60
- nullable: true, // No guarantees about the value, so it's nullable
61
- isReadOnly: true, // Parameters are read-only within the query execution context
62
- };
63
- }
64
-
65
- export function checkColumnsAssignable(source: DeepReadonly<ColumnDef[]>, target: DeepReadonly<ColumnDef[]>, astNode?: AstNode): void {
66
- if (source.length !== target.length) {
67
- throw new QuereusError(`Column count mismatch ${(astNode ? astNode.type + ' clause' : '')}.`, StatusCode.ERROR, undefined, astNode?.loc?.start.line, astNode?.loc?.start.column);
68
- }
69
- }
70
-
71
- export function checkRelationsAssignable(source: RelationType, target: RelationType, astNode?: AstNode): void {
72
- return checkColumnsAssignable(source.columns, target.columns, astNode);
73
- }
74
-
75
- export function columnSchemaToDef(colName: string, colDef: ColumnSchema): ColumnDef {
76
- return {
77
- name: colName,
78
- type: {
79
- typeClass: 'scalar',
80
- logicalType: colDef.logicalType,
81
- collationName: colDef.collation,
82
- nullable: !colDef.notNull,
83
- isReadOnly: false,
84
- },
85
- generated: colDef.generated,
86
- };
87
- }
@@ -1,46 +0,0 @@
1
- import type { ColRef } from '../../common/datatype.js';
2
-
3
- /**
4
- * Project unique keys through a projection mapping.
5
- * - sourceKeys: keys defined on the source relation (arrays of column refs by source column index)
6
- * - projectionMap: mapping from source column index -> projected column index
7
- * Returns keys that survive projection (all columns present), with indices remapped to output.
8
- */
9
- export function projectKeys(sourceKeys: ReadonlyArray<ReadonlyArray<ColRef>>, projectionMap: ReadonlyMap<number, number>): ColRef[][] {
10
- const result: ColRef[][] = [];
11
- for (const key of sourceKeys) {
12
- const projected: ColRef[] = [];
13
- let missing = false;
14
- for (const col of key) {
15
- const projectedIndex = projectionMap.get(col.index);
16
- if (projectedIndex === undefined) {
17
- missing = true;
18
- break;
19
- }
20
- projected.push({ index: projectedIndex, desc: col.desc });
21
- }
22
- if (!missing) {
23
- result.push(projected);
24
- }
25
- }
26
- return result;
27
- }
28
-
29
- /**
30
- * Combine unique keys across a join.
31
- * - For inner/cross joins: keys from left and right are preserved; right indices are shifted by left column count.
32
- * - For outer joins: return [] conservatively (null padding may break uniqueness).
33
- */
34
- export function combineJoinKeys(leftKeys: ReadonlyArray<ReadonlyArray<ColRef>>, rightKeys: ReadonlyArray<ReadonlyArray<ColRef>>, joinType: 'inner' | 'left' | 'right' | 'full' | 'cross', leftColumnCount: number): ColRef[][] {
35
- if (joinType !== 'inner' && joinType !== 'cross') return [];
36
- const result: ColRef[][] = [];
37
- for (const key of leftKeys) {
38
- result.push(key.map(c => ({ index: c.index, desc: c.desc })));
39
- }
40
- for (const key of rightKeys) {
41
- result.push(key.map(c => ({ index: c.index + leftColumnCount, desc: c.desc })));
42
- }
43
- return result;
44
- }
45
-
46
-
@@ -1,104 +0,0 @@
1
- import { QuereusError } from '../../common/errors.js';
2
- import { StatusCode } from '../../common/types.js';
3
- import type { ScalarPlanNode } from '../nodes/plan-node.js';
4
- import { createLogger } from '../../common/logger.js';
5
-
6
- const log = createLogger('planner:validation:determinism');
7
-
8
- /**
9
- * Result of determinism validation. If valid, `error` is undefined.
10
- * If invalid, contains the information needed to construct an error message.
11
- */
12
- export interface DeterminismValidationResult {
13
- /** True if the expression is deterministic */
14
- valid: boolean;
15
- /** String representation of the offending expression (if invalid) */
16
- expression?: string;
17
- }
18
-
19
- /**
20
- * Checks if an expression is deterministic (suitable for constraints and defaults).
21
- * Returns a result object instead of throwing, allowing the caller to decide how to handle.
22
- *
23
- * @param expr The expression plan node to check
24
- * @returns Validation result indicating if deterministic
25
- */
26
- export function checkDeterministic(expr: ScalarPlanNode): DeterminismValidationResult {
27
- const physical = expr.physical;
28
-
29
- if (physical.deterministic === false) {
30
- log('Non-deterministic expression detected: %s', expr.toString());
31
- return {
32
- valid: false,
33
- expression: expr.toString()
34
- };
35
- }
36
-
37
- return { valid: true };
38
- }
39
-
40
- /**
41
- * Validates that an expression is deterministic (suitable for constraints and defaults).
42
- * Non-deterministic expressions must be passed via mutation context instead.
43
- *
44
- * @param expr The expression plan node to validate
45
- * @param context Description of where the expression is used (e.g., "DEFAULT for column 'created_at'")
46
- * @throws QuereusError if the expression is non-deterministic
47
- */
48
- export function validateDeterministicExpression(
49
- expr: ScalarPlanNode,
50
- context: string
51
- ): void {
52
- log('Validating determinism for: %s', context);
53
-
54
- const result = checkDeterministic(expr);
55
-
56
- if (!result.valid) {
57
- throw new QuereusError(
58
- `Non-deterministic expression not allowed in ${context}. ` +
59
- `Expression: ${result.expression}. ` +
60
- `Use mutation context to pass non-deterministic values (e.g., WITH CONTEXT (timestamp = datetime('now'))).`,
61
- StatusCode.ERROR
62
- );
63
- }
64
-
65
- log('Expression is deterministic: %s', expr.toString());
66
- }
67
-
68
- /**
69
- * Validates that a CHECK constraint expression is deterministic.
70
- *
71
- * @param expr The constraint expression plan node
72
- * @param constraintName The name of the constraint (for error messages)
73
- * @param tableName The name of the table (for error messages)
74
- * @throws QuereusError if the expression is non-deterministic
75
- */
76
- export function validateDeterministicConstraint(
77
- expr: ScalarPlanNode,
78
- constraintName: string,
79
- tableName: string
80
- ): void {
81
- validateDeterministicExpression(
82
- expr,
83
- `CHECK constraint '${constraintName}' on table '${tableName}'`
84
- );
85
- }
86
-
87
- /**
88
- * Validates that a DEFAULT expression is deterministic.
89
- *
90
- * @param expr The default value expression plan node
91
- * @param columnName The name of the column (for error messages)
92
- * @param tableName The name of the table (for error messages)
93
- * @throws QuereusError if the expression is non-deterministic
94
- */
95
- export function validateDeterministicDefault(
96
- expr: ScalarPlanNode,
97
- columnName: string,
98
- tableName: string
99
- ): void {
100
- validateDeterministicExpression(
101
- expr,
102
- `DEFAULT for column '${columnName}' in table '${tableName}'`
103
- );
104
- }