@quereus/quereus 4.3.1 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (788) hide show
  1. package/README.md +25 -7
  2. package/dist/src/common/types.d.ts +9 -59
  3. package/dist/src/common/types.d.ts.map +1 -1
  4. package/dist/src/common/types.js.map +1 -1
  5. package/dist/src/core/database-assertions.d.ts +2 -2
  6. package/dist/src/core/database-assertions.d.ts.map +1 -1
  7. package/dist/src/core/database-assertions.js +4 -3
  8. package/dist/src/core/database-assertions.js.map +1 -1
  9. package/dist/src/core/database-external-changes.d.ts +3 -3
  10. package/dist/src/core/database-external-changes.d.ts.map +1 -1
  11. package/dist/src/core/database-external-changes.js +13 -10
  12. package/dist/src/core/database-external-changes.js.map +1 -1
  13. package/dist/src/core/database-internal.d.ts.map +1 -1
  14. package/dist/src/core/database-materialized-views-analysis.d.ts +199 -0
  15. package/dist/src/core/database-materialized-views-analysis.d.ts.map +1 -0
  16. package/dist/src/core/database-materialized-views-analysis.js +502 -0
  17. package/dist/src/core/database-materialized-views-analysis.js.map +1 -0
  18. package/dist/src/core/database-materialized-views-apply.d.ts +422 -0
  19. package/dist/src/core/database-materialized-views-apply.d.ts.map +1 -0
  20. package/dist/src/core/database-materialized-views-apply.js +929 -0
  21. package/dist/src/core/database-materialized-views-apply.js.map +1 -0
  22. package/dist/src/core/database-materialized-views-plan-builders.d.ts +267 -0
  23. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -0
  24. package/dist/src/core/database-materialized-views-plan-builders.js +1423 -0
  25. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -0
  26. package/dist/src/core/database-materialized-views-plans.d.ts +641 -0
  27. package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -0
  28. package/dist/src/core/database-materialized-views-plans.js +13 -0
  29. package/dist/src/core/database-materialized-views-plans.js.map +1 -0
  30. package/dist/src/core/database-materialized-views.d.ts +108 -860
  31. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  32. package/dist/src/core/database-materialized-views.js +212 -2165
  33. package/dist/src/core/database-materialized-views.js.map +1 -1
  34. package/dist/src/core/database-transaction.d.ts +10 -1
  35. package/dist/src/core/database-transaction.d.ts.map +1 -1
  36. package/dist/src/core/database-transaction.js +16 -4
  37. package/dist/src/core/database-transaction.js.map +1 -1
  38. package/dist/src/core/database-watchers.d.ts.map +1 -1
  39. package/dist/src/core/database-watchers.js +2 -1
  40. package/dist/src/core/database-watchers.js.map +1 -1
  41. package/dist/src/core/database.d.ts +99 -13
  42. package/dist/src/core/database.d.ts.map +1 -1
  43. package/dist/src/core/database.js +270 -50
  44. package/dist/src/core/database.js.map +1 -1
  45. package/dist/src/core/derived-row-validator.d.ts +1 -1
  46. package/dist/src/core/derived-row-validator.d.ts.map +1 -1
  47. package/dist/src/core/derived-row-validator.js +5 -3
  48. package/dist/src/core/derived-row-validator.js.map +1 -1
  49. package/dist/src/core/statement.d.ts +8 -0
  50. package/dist/src/core/statement.d.ts.map +1 -1
  51. package/dist/src/core/statement.js +98 -18
  52. package/dist/src/core/statement.js.map +1 -1
  53. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  54. package/dist/src/emit/ast-stringify.js +24 -13
  55. package/dist/src/emit/ast-stringify.js.map +1 -1
  56. package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
  57. package/dist/src/func/builtins/aggregate.js +127 -21
  58. package/dist/src/func/builtins/aggregate.js.map +1 -1
  59. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  60. package/dist/src/func/builtins/explain.js +2 -1
  61. package/dist/src/func/builtins/explain.js.map +1 -1
  62. package/dist/src/func/builtins/json.d.ts.map +1 -1
  63. package/dist/src/func/builtins/json.js +2 -1
  64. package/dist/src/func/builtins/json.js.map +1 -1
  65. package/dist/src/func/builtins/mutation.d.ts.map +1 -1
  66. package/dist/src/func/builtins/mutation.js +3 -2
  67. package/dist/src/func/builtins/mutation.js.map +1 -1
  68. package/dist/src/func/registration.d.ts +6 -1
  69. package/dist/src/func/registration.d.ts.map +1 -1
  70. package/dist/src/func/registration.js +16 -0
  71. package/dist/src/func/registration.js.map +1 -1
  72. package/dist/src/index.d.ts +16 -6
  73. package/dist/src/index.d.ts.map +1 -1
  74. package/dist/src/index.js +33 -7
  75. package/dist/src/index.js.map +1 -1
  76. package/dist/src/parser/ast.d.ts +2 -2
  77. package/dist/src/parser/lexer.d.ts +11 -1
  78. package/dist/src/parser/lexer.d.ts.map +1 -1
  79. package/dist/src/parser/lexer.js +40 -34
  80. package/dist/src/parser/lexer.js.map +1 -1
  81. package/dist/src/parser/parser.d.ts.map +1 -1
  82. package/dist/src/parser/parser.js +16 -9
  83. package/dist/src/parser/parser.js.map +1 -1
  84. package/dist/src/planner/analysis/authored-inverse.js +1 -1
  85. package/dist/src/planner/analysis/comparison-collation.d.ts +52 -0
  86. package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
  87. package/dist/src/planner/analysis/comparison-collation.js +84 -7
  88. package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
  89. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  90. package/dist/src/planner/analysis/constraint-extractor.js +64 -17
  91. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  92. package/dist/src/planner/analysis/coverage-prover.d.ts +1 -1
  93. package/dist/src/planner/analysis/coverage-prover.js +1 -1
  94. package/dist/src/planner/analysis/equi-correlation.d.ts +26 -0
  95. package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -0
  96. package/dist/src/planner/analysis/equi-correlation.js +62 -0
  97. package/dist/src/planner/analysis/equi-correlation.js.map +1 -0
  98. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +54 -18
  99. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  100. package/dist/src/planner/analysis/query-rewrite-matcher.js +86 -42
  101. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  102. package/dist/src/planner/analysis/sat-checker.d.ts +8 -1
  103. package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -1
  104. package/dist/src/planner/analysis/sat-checker.js +117 -22
  105. package/dist/src/planner/analysis/sat-checker.js.map +1 -1
  106. package/dist/src/planner/analysis/scalar-invertibility.d.ts +13 -4
  107. package/dist/src/planner/analysis/scalar-invertibility.d.ts.map +1 -1
  108. package/dist/src/planner/analysis/scalar-invertibility.js +12 -3
  109. package/dist/src/planner/analysis/scalar-invertibility.js.map +1 -1
  110. package/dist/src/planner/analysis/scalar-subqueries.d.ts +28 -0
  111. package/dist/src/planner/analysis/scalar-subqueries.d.ts.map +1 -0
  112. package/dist/src/planner/analysis/scalar-subqueries.js +60 -0
  113. package/dist/src/planner/analysis/scalar-subqueries.js.map +1 -0
  114. package/dist/src/planner/analysis/update-lineage.d.ts +1 -1
  115. package/dist/src/planner/analysis/update-lineage.js +1 -1
  116. package/dist/src/planner/analysis/update-lineage.js.map +1 -1
  117. package/dist/src/planner/analysis/view-complement.d.ts +2 -2
  118. package/dist/src/planner/building/delete.js +2 -2
  119. package/dist/src/planner/building/delete.js.map +1 -1
  120. package/dist/src/planner/building/dml-target.d.ts +2 -2
  121. package/dist/src/planner/building/dml-target.js +2 -2
  122. package/dist/src/planner/building/insert.d.ts.map +1 -1
  123. package/dist/src/planner/building/insert.js +53 -2
  124. package/dist/src/planner/building/insert.js.map +1 -1
  125. package/dist/src/planner/building/schema-resolution.d.ts +3 -0
  126. package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
  127. package/dist/src/planner/building/schema-resolution.js +4 -5
  128. package/dist/src/planner/building/schema-resolution.js.map +1 -1
  129. package/dist/src/planner/building/select.d.ts.map +1 -1
  130. package/dist/src/planner/building/select.js +18 -4
  131. package/dist/src/planner/building/select.js.map +1 -1
  132. package/dist/src/planner/building/update.js +2 -2
  133. package/dist/src/planner/building/update.js.map +1 -1
  134. package/dist/src/planner/building/view-mutation-builder.js +7 -7
  135. package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
  136. package/dist/src/planner/building/with.d.ts.map +1 -1
  137. package/dist/src/planner/building/with.js +5 -8
  138. package/dist/src/planner/building/with.js.map +1 -1
  139. package/dist/src/planner/cache/materialization-advisory.d.ts +34 -2
  140. package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
  141. package/dist/src/planner/cache/materialization-advisory.js +185 -42
  142. package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
  143. package/dist/src/planner/cache/reference-graph.d.ts +14 -5
  144. package/dist/src/planner/cache/reference-graph.d.ts.map +1 -1
  145. package/dist/src/planner/cache/reference-graph.js +31 -39
  146. package/dist/src/planner/cache/reference-graph.js.map +1 -1
  147. package/dist/src/planner/cost/index.d.ts +30 -5
  148. package/dist/src/planner/cost/index.d.ts.map +1 -1
  149. package/dist/src/planner/cost/index.js +26 -0
  150. package/dist/src/planner/cost/index.js.map +1 -1
  151. package/dist/src/planner/debug.d.ts +3 -2
  152. package/dist/src/planner/debug.d.ts.map +1 -1
  153. package/dist/src/planner/debug.js +9 -3
  154. package/dist/src/planner/debug.js.map +1 -1
  155. package/dist/src/planner/framework/characteristics.d.ts +46 -19
  156. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  157. package/dist/src/planner/framework/characteristics.js +50 -134
  158. package/dist/src/planner/framework/characteristics.js.map +1 -1
  159. package/dist/src/planner/framework/context.d.ts +8 -44
  160. package/dist/src/planner/framework/context.d.ts.map +1 -1
  161. package/dist/src/planner/framework/context.js +0 -91
  162. package/dist/src/planner/framework/context.js.map +1 -1
  163. package/dist/src/planner/framework/pass.d.ts +7 -0
  164. package/dist/src/planner/framework/pass.d.ts.map +1 -1
  165. package/dist/src/planner/framework/pass.js +84 -0
  166. package/dist/src/planner/framework/pass.js.map +1 -1
  167. package/dist/src/planner/framework/registry.d.ts +13 -42
  168. package/dist/src/planner/framework/registry.d.ts.map +1 -1
  169. package/dist/src/planner/framework/registry.js +14 -182
  170. package/dist/src/planner/framework/registry.js.map +1 -1
  171. package/dist/src/planner/mutation/backward-body.d.ts +2 -2
  172. package/dist/src/planner/mutation/cte-flatten.js +1 -1
  173. package/dist/src/planner/mutation/decomposition.d.ts +2 -2
  174. package/dist/src/planner/mutation/decomposition.js +1 -1
  175. package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -1
  176. package/dist/src/planner/mutation/lens-enforcement.js +2 -1
  177. package/dist/src/planner/mutation/lens-enforcement.js.map +1 -1
  178. package/dist/src/planner/mutation/multi-source.d.ts +8 -8
  179. package/dist/src/planner/mutation/multi-source.js +11 -11
  180. package/dist/src/planner/mutation/multi-source.js.map +1 -1
  181. package/dist/src/planner/mutation/propagate.d.ts +1 -1
  182. package/dist/src/planner/mutation/propagate.js +1 -1
  183. package/dist/src/planner/mutation/scope-transform.d.ts +2 -2
  184. package/dist/src/planner/mutation/scope-transform.js +3 -3
  185. package/dist/src/planner/mutation/scope-transform.js.map +1 -1
  186. package/dist/src/planner/mutation/set-op.d.ts +1 -1
  187. package/dist/src/planner/mutation/set-op.d.ts.map +1 -1
  188. package/dist/src/planner/mutation/set-op.js +3 -2
  189. package/dist/src/planner/mutation/set-op.js.map +1 -1
  190. package/dist/src/planner/mutation/single-source.d.ts +3 -3
  191. package/dist/src/planner/mutation/single-source.js +9 -9
  192. package/dist/src/planner/mutation/single-source.js.map +1 -1
  193. package/dist/src/planner/nodes/aggregate-function.d.ts +3 -1
  194. package/dist/src/planner/nodes/aggregate-function.d.ts.map +1 -1
  195. package/dist/src/planner/nodes/aggregate-function.js +1 -0
  196. package/dist/src/planner/nodes/aggregate-function.js.map +1 -1
  197. package/dist/src/planner/nodes/aggregate-node.d.ts +1 -0
  198. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  199. package/dist/src/planner/nodes/aggregate-node.js +8 -1
  200. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  201. package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
  202. package/dist/src/planner/nodes/alias-node.js +3 -1
  203. package/dist/src/planner/nodes/alias-node.js.map +1 -1
  204. package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -1
  205. package/dist/src/planner/nodes/asof-scan-node.js +3 -2
  206. package/dist/src/planner/nodes/asof-scan-node.js.map +1 -1
  207. package/dist/src/planner/nodes/asserted-keys-node.d.ts +1 -1
  208. package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -1
  209. package/dist/src/planner/nodes/asserted-keys-node.js +5 -2
  210. package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -1
  211. package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
  212. package/dist/src/planner/nodes/async-gather-node.js +3 -1
  213. package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
  214. package/dist/src/planner/nodes/block.js +3 -3
  215. package/dist/src/planner/nodes/block.js.map +1 -1
  216. package/dist/src/planner/nodes/bloom-join-node.d.ts +2 -0
  217. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  218. package/dist/src/planner/nodes/bloom-join-node.js +5 -1
  219. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  220. package/dist/src/planner/nodes/cache-node.d.ts +19 -2
  221. package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
  222. package/dist/src/planner/nodes/cache-node.js +43 -3
  223. package/dist/src/planner/nodes/cache-node.js.map +1 -1
  224. package/dist/src/planner/nodes/cte-node.d.ts +16 -1
  225. package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
  226. package/dist/src/planner/nodes/cte-node.js +16 -3
  227. package/dist/src/planner/nodes/cte-node.js.map +1 -1
  228. package/dist/src/planner/nodes/distinct-node.js +3 -3
  229. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  230. package/dist/src/planner/nodes/dml-executor-node.d.ts +21 -0
  231. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  232. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  233. package/dist/src/planner/nodes/envelope-scan-node.d.ts +1 -1
  234. package/dist/src/planner/nodes/envelope-scan-node.js +1 -1
  235. package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
  236. package/dist/src/planner/nodes/fanout-lookup-join-node.js +4 -2
  237. package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
  238. package/dist/src/planner/nodes/filter.d.ts +10 -2
  239. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  240. package/dist/src/planner/nodes/filter.js +81 -14
  241. package/dist/src/planner/nodes/filter.js.map +1 -1
  242. package/dist/src/planner/nodes/hash-aggregate.d.ts +12 -1
  243. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  244. package/dist/src/planner/nodes/hash-aggregate.js +28 -1
  245. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  246. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts +3 -1
  247. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts.map +1 -1
  248. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js +1 -0
  249. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +1 -1
  250. package/dist/src/planner/nodes/join-node.d.ts +3 -1
  251. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  252. package/dist/src/planner/nodes/join-node.js +5 -5
  253. package/dist/src/planner/nodes/join-node.js.map +1 -1
  254. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -1
  255. package/dist/src/planner/nodes/lens-auxiliary-access-node.js +4 -1
  256. package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -1
  257. package/dist/src/planner/nodes/limit-offset.d.ts +1 -0
  258. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  259. package/dist/src/planner/nodes/limit-offset.js +4 -3
  260. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  261. package/dist/src/planner/nodes/merge-join-node.d.ts +2 -0
  262. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  263. package/dist/src/planner/nodes/merge-join-node.js +6 -1
  264. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  265. package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
  266. package/dist/src/planner/nodes/ordinal-slice-node.js +3 -1
  267. package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
  268. package/dist/src/planner/nodes/plan-node.d.ts +68 -5
  269. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  270. package/dist/src/planner/nodes/plan-node.js +137 -24
  271. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  272. package/dist/src/planner/nodes/project-node.d.ts +3 -2
  273. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  274. package/dist/src/planner/nodes/project-node.js +1 -0
  275. package/dist/src/planner/nodes/project-node.js.map +1 -1
  276. package/dist/src/planner/nodes/recursive-cte-node.d.ts +30 -1
  277. package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
  278. package/dist/src/planner/nodes/recursive-cte-node.js +38 -5
  279. package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
  280. package/dist/src/planner/nodes/reference.d.ts +5 -1
  281. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  282. package/dist/src/planner/nodes/reference.js +3 -0
  283. package/dist/src/planner/nodes/reference.js.map +1 -1
  284. package/dist/src/planner/nodes/remote-query-node.d.ts.map +1 -1
  285. package/dist/src/planner/nodes/remote-query-node.js +3 -1
  286. package/dist/src/planner/nodes/remote-query-node.js.map +1 -1
  287. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
  288. package/dist/src/planner/nodes/retrieve-node.js +3 -1
  289. package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
  290. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  291. package/dist/src/planner/nodes/set-operation-node.js +3 -1
  292. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  293. package/dist/src/planner/nodes/sink-node.d.ts.map +1 -1
  294. package/dist/src/planner/nodes/sink-node.js +3 -1
  295. package/dist/src/planner/nodes/sink-node.js.map +1 -1
  296. package/dist/src/planner/nodes/sort.d.ts +2 -1
  297. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  298. package/dist/src/planner/nodes/sort.js +9 -5
  299. package/dist/src/planner/nodes/sort.js.map +1 -1
  300. package/dist/src/planner/nodes/stream-aggregate.d.ts +12 -1
  301. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  302. package/dist/src/planner/nodes/stream-aggregate.js +32 -3
  303. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  304. package/dist/src/planner/nodes/table-access-nodes.d.ts +2 -1
  305. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  306. package/dist/src/planner/nodes/table-access-nodes.js +2 -0
  307. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  308. package/dist/src/planner/nodes/view-mutation-node.d.ts +2 -2
  309. package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -1
  310. package/dist/src/planner/nodes/view-mutation-node.js +5 -1
  311. package/dist/src/planner/nodes/view-mutation-node.js.map +1 -1
  312. package/dist/src/planner/nodes/window-function.d.ts +3 -1
  313. package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
  314. package/dist/src/planner/nodes/window-function.js +1 -0
  315. package/dist/src/planner/nodes/window-function.js.map +1 -1
  316. package/dist/src/planner/optimizer.d.ts +52 -8
  317. package/dist/src/planner/optimizer.d.ts.map +1 -1
  318. package/dist/src/planner/optimizer.js +1014 -895
  319. package/dist/src/planner/optimizer.js.map +1 -1
  320. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  321. package/dist/src/planner/rules/access/rule-select-access-path.js +235 -202
  322. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  323. package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
  324. package/dist/src/planner/rules/cache/rule-cte-optimization.js +8 -1
  325. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
  326. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts +7 -0
  327. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts.map +1 -1
  328. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js +14 -1
  329. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js.map +1 -1
  330. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts +2 -2
  331. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -1
  332. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +55 -56
  333. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
  334. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.d.ts.map +1 -1
  335. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js +6 -0
  336. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +1 -1
  337. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts +25 -0
  338. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -0
  339. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +176 -0
  340. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -0
  341. package/dist/src/planner/rules/cache/rule-scalar-cse.d.ts +1 -1
  342. package/dist/src/planner/rules/cache/rule-scalar-cse.js +1 -1
  343. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts +29 -0
  344. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts.map +1 -0
  345. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js +66 -0
  346. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js.map +1 -0
  347. package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts +1 -1
  348. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +1 -1
  349. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
  350. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +1 -54
  351. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
  352. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +1 -1
  353. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +1 -1
  354. package/dist/src/planner/rules/join/rule-join-elimination.d.ts +1 -1
  355. package/dist/src/planner/rules/join/rule-join-elimination.js +1 -1
  356. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +5 -6
  357. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
  358. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +1 -1
  359. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +1 -1
  360. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts +2 -2
  361. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
  362. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +4 -3
  363. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
  364. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +19 -0
  365. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -0
  366. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +48 -0
  367. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -0
  368. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +12 -1
  369. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -1
  370. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
  371. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +22 -20
  372. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
  373. package/dist/src/planner/rules/shared/index-style-context.d.ts +39 -0
  374. package/dist/src/planner/rules/shared/index-style-context.d.ts.map +1 -0
  375. package/dist/src/planner/rules/shared/index-style-context.js +26 -0
  376. package/dist/src/planner/rules/shared/index-style-context.js.map +1 -0
  377. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +1 -1
  378. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +1 -1
  379. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts +1 -1
  380. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +1 -1
  381. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts +191 -0
  382. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts.map +1 -0
  383. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js +623 -0
  384. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js.map +1 -0
  385. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts +10 -1
  386. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  387. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +242 -51
  388. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  389. package/dist/src/planner/stats/analyze.d.ts.map +1 -1
  390. package/dist/src/planner/stats/analyze.js +2 -20
  391. package/dist/src/planner/stats/analyze.js.map +1 -1
  392. package/dist/src/planner/stats/histogram.d.ts.map +1 -1
  393. package/dist/src/planner/stats/histogram.js +4 -0
  394. package/dist/src/planner/stats/histogram.js.map +1 -1
  395. package/dist/src/planner/util/fd-utils.d.ts +2 -3
  396. package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
  397. package/dist/src/planner/util/fd-utils.js +2 -3
  398. package/dist/src/planner/util/fd-utils.js.map +1 -1
  399. package/dist/src/planner/validation/plan-validator.d.ts +16 -0
  400. package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
  401. package/dist/src/planner/validation/plan-validator.js +36 -0
  402. package/dist/src/planner/validation/plan-validator.js.map +1 -1
  403. package/dist/src/runtime/async-util.d.ts +26 -0
  404. package/dist/src/runtime/async-util.d.ts.map +1 -1
  405. package/dist/src/runtime/async-util.js +139 -55
  406. package/dist/src/runtime/async-util.js.map +1 -1
  407. package/dist/src/runtime/cache/shared-cache.d.ts +7 -0
  408. package/dist/src/runtime/cache/shared-cache.d.ts.map +1 -1
  409. package/dist/src/runtime/cache/shared-cache.js +34 -1
  410. package/dist/src/runtime/cache/shared-cache.js.map +1 -1
  411. package/dist/src/runtime/context-helpers.d.ts +32 -4
  412. package/dist/src/runtime/context-helpers.d.ts.map +1 -1
  413. package/dist/src/runtime/context-helpers.js +26 -9
  414. package/dist/src/runtime/context-helpers.js.map +1 -1
  415. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  416. package/dist/src/runtime/deferred-constraint-queue.js +2 -1
  417. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  418. package/dist/src/runtime/emission-context.d.ts +27 -3
  419. package/dist/src/runtime/emission-context.d.ts.map +1 -1
  420. package/dist/src/runtime/emission-context.js +38 -7
  421. package/dist/src/runtime/emission-context.js.map +1 -1
  422. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  423. package/dist/src/runtime/emit/add-constraint.js +7 -1
  424. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  425. package/dist/src/runtime/emit/aggregate.d.ts +2 -3
  426. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  427. package/dist/src/runtime/emit/aggregate.js +23 -28
  428. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  429. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  430. package/dist/src/runtime/emit/alter-table.js +98 -9
  431. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  432. package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
  433. package/dist/src/runtime/emit/analyze.js +2 -1
  434. package/dist/src/runtime/emit/analyze.js.map +1 -1
  435. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
  436. package/dist/src/runtime/emit/asof-scan.js +13 -10
  437. package/dist/src/runtime/emit/asof-scan.js.map +1 -1
  438. package/dist/src/runtime/emit/async-gather.d.ts.map +1 -1
  439. package/dist/src/runtime/emit/async-gather.js +4 -3
  440. package/dist/src/runtime/emit/async-gather.js.map +1 -1
  441. package/dist/src/runtime/emit/between.d.ts.map +1 -1
  442. package/dist/src/runtime/emit/between.js +2 -1
  443. package/dist/src/runtime/emit/between.js.map +1 -1
  444. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  445. package/dist/src/runtime/emit/binary.js +122 -14
  446. package/dist/src/runtime/emit/binary.js.map +1 -1
  447. package/dist/src/runtime/emit/block.d.ts.map +1 -1
  448. package/dist/src/runtime/emit/block.js +2 -1
  449. package/dist/src/runtime/emit/block.js.map +1 -1
  450. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  451. package/dist/src/runtime/emit/bloom-join.js +20 -8
  452. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  453. package/dist/src/runtime/emit/cache.d.ts +7 -3
  454. package/dist/src/runtime/emit/cache.d.ts.map +1 -1
  455. package/dist/src/runtime/emit/cache.js +25 -7
  456. package/dist/src/runtime/emit/cache.js.map +1 -1
  457. package/dist/src/runtime/emit/case.d.ts.map +1 -1
  458. package/dist/src/runtime/emit/case.js +66 -45
  459. package/dist/src/runtime/emit/case.js.map +1 -1
  460. package/dist/src/runtime/emit/cast.d.ts.map +1 -1
  461. package/dist/src/runtime/emit/cast.js +2 -1
  462. package/dist/src/runtime/emit/cast.js.map +1 -1
  463. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  464. package/dist/src/runtime/emit/constraint-check.js +13 -7
  465. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  466. package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
  467. package/dist/src/runtime/emit/create-assertion.js +2 -1
  468. package/dist/src/runtime/emit/create-assertion.js.map +1 -1
  469. package/dist/src/runtime/emit/create-index.d.ts.map +1 -1
  470. package/dist/src/runtime/emit/create-index.js +12 -1
  471. package/dist/src/runtime/emit/create-index.js.map +1 -1
  472. package/dist/src/runtime/emit/create-table.d.ts.map +1 -1
  473. package/dist/src/runtime/emit/create-table.js +12 -1
  474. package/dist/src/runtime/emit/create-table.js.map +1 -1
  475. package/dist/src/runtime/emit/cte-reference.d.ts.map +1 -1
  476. package/dist/src/runtime/emit/cte-reference.js +2 -1
  477. package/dist/src/runtime/emit/cte-reference.js.map +1 -1
  478. package/dist/src/runtime/emit/cte.d.ts.map +1 -1
  479. package/dist/src/runtime/emit/cte.js +45 -21
  480. package/dist/src/runtime/emit/cte.js.map +1 -1
  481. package/dist/src/runtime/emit/ddl-transaction-policy.d.ts +50 -0
  482. package/dist/src/runtime/emit/ddl-transaction-policy.d.ts.map +1 -0
  483. package/dist/src/runtime/emit/ddl-transaction-policy.js +69 -0
  484. package/dist/src/runtime/emit/ddl-transaction-policy.js.map +1 -0
  485. package/dist/src/runtime/emit/delete.d.ts.map +1 -1
  486. package/dist/src/runtime/emit/delete.js +2 -1
  487. package/dist/src/runtime/emit/delete.js.map +1 -1
  488. package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
  489. package/dist/src/runtime/emit/distinct.js +2 -1
  490. package/dist/src/runtime/emit/distinct.js.map +1 -1
  491. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  492. package/dist/src/runtime/emit/dml-executor.js +138 -74
  493. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  494. package/dist/src/runtime/emit/drop-assertion.d.ts.map +1 -1
  495. package/dist/src/runtime/emit/drop-assertion.js +2 -1
  496. package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
  497. package/dist/src/runtime/emit/drop-index.d.ts.map +1 -1
  498. package/dist/src/runtime/emit/drop-index.js +17 -1
  499. package/dist/src/runtime/emit/drop-index.js.map +1 -1
  500. package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
  501. package/dist/src/runtime/emit/drop-table.js +11 -1
  502. package/dist/src/runtime/emit/drop-table.js.map +1 -1
  503. package/dist/src/runtime/emit/eager-prefetch.d.ts.map +1 -1
  504. package/dist/src/runtime/emit/eager-prefetch.js +2 -1
  505. package/dist/src/runtime/emit/eager-prefetch.js.map +1 -1
  506. package/dist/src/runtime/emit/envelope-scan.d.ts.map +1 -1
  507. package/dist/src/runtime/emit/envelope-scan.js +2 -1
  508. package/dist/src/runtime/emit/envelope-scan.js.map +1 -1
  509. package/dist/src/runtime/emit/fanout-lookup-join.d.ts.map +1 -1
  510. package/dist/src/runtime/emit/fanout-lookup-join.js +3 -2
  511. package/dist/src/runtime/emit/fanout-lookup-join.js.map +1 -1
  512. package/dist/src/runtime/emit/filter.d.ts.map +1 -1
  513. package/dist/src/runtime/emit/filter.js +8 -3
  514. package/dist/src/runtime/emit/filter.js.map +1 -1
  515. package/dist/src/runtime/emit/hash-aggregate.d.ts.map +1 -1
  516. package/dist/src/runtime/emit/hash-aggregate.js +16 -11
  517. package/dist/src/runtime/emit/hash-aggregate.js.map +1 -1
  518. package/dist/src/runtime/emit/insert.d.ts.map +1 -1
  519. package/dist/src/runtime/emit/insert.js +2 -1
  520. package/dist/src/runtime/emit/insert.js.map +1 -1
  521. package/dist/src/runtime/emit/join.d.ts.map +1 -1
  522. package/dist/src/runtime/emit/join.js +20 -6
  523. package/dist/src/runtime/emit/join.js.map +1 -1
  524. package/dist/src/runtime/emit/limit-offset.d.ts.map +1 -1
  525. package/dist/src/runtime/emit/limit-offset.js +2 -1
  526. package/dist/src/runtime/emit/limit-offset.js.map +1 -1
  527. package/dist/src/runtime/emit/literal.d.ts.map +1 -1
  528. package/dist/src/runtime/emit/literal.js +2 -1
  529. package/dist/src/runtime/emit/literal.js.map +1 -1
  530. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +22 -0
  531. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  532. package/dist/src/runtime/emit/materialized-view-helpers.js +128 -16
  533. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  534. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  535. package/dist/src/runtime/emit/materialized-view.js +6 -0
  536. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  537. package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
  538. package/dist/src/runtime/emit/merge-join.js +14 -4
  539. package/dist/src/runtime/emit/merge-join.js.map +1 -1
  540. package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -1
  541. package/dist/src/runtime/emit/ordinal-slice.js +2 -1
  542. package/dist/src/runtime/emit/ordinal-slice.js.map +1 -1
  543. package/dist/src/runtime/emit/pragma.d.ts.map +1 -1
  544. package/dist/src/runtime/emit/pragma.js +2 -1
  545. package/dist/src/runtime/emit/pragma.js.map +1 -1
  546. package/dist/src/runtime/emit/project.d.ts.map +1 -1
  547. package/dist/src/runtime/emit/project.js +7 -2
  548. package/dist/src/runtime/emit/project.js.map +1 -1
  549. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  550. package/dist/src/runtime/emit/recursive-cte.js +61 -2
  551. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  552. package/dist/src/runtime/emit/returning.d.ts.map +1 -1
  553. package/dist/src/runtime/emit/returning.js +7 -2
  554. package/dist/src/runtime/emit/returning.js.map +1 -1
  555. package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
  556. package/dist/src/runtime/emit/scalar-function.js +2 -1
  557. package/dist/src/runtime/emit/scalar-function.js.map +1 -1
  558. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  559. package/dist/src/runtime/emit/scan.js +55 -17
  560. package/dist/src/runtime/emit/scan.js.map +1 -1
  561. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  562. package/dist/src/runtime/emit/schema-declarative.js +6 -5
  563. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  564. package/dist/src/runtime/emit/sequencing.d.ts.map +1 -1
  565. package/dist/src/runtime/emit/sequencing.js +2 -1
  566. package/dist/src/runtime/emit/sequencing.js.map +1 -1
  567. package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
  568. package/dist/src/runtime/emit/set-operation.js +6 -5
  569. package/dist/src/runtime/emit/set-operation.js.map +1 -1
  570. package/dist/src/runtime/emit/sink.d.ts.map +1 -1
  571. package/dist/src/runtime/emit/sink.js +2 -1
  572. package/dist/src/runtime/emit/sink.js.map +1 -1
  573. package/dist/src/runtime/emit/sort.d.ts.map +1 -1
  574. package/dist/src/runtime/emit/sort.js +2 -1
  575. package/dist/src/runtime/emit/sort.js.map +1 -1
  576. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  577. package/dist/src/runtime/emit/subquery.js +42 -23
  578. package/dist/src/runtime/emit/subquery.js.map +1 -1
  579. package/dist/src/runtime/emit/table-valued-function.d.ts.map +1 -1
  580. package/dist/src/runtime/emit/table-valued-function.js +2 -1
  581. package/dist/src/runtime/emit/table-valued-function.js.map +1 -1
  582. package/dist/src/runtime/emit/temporal-arithmetic.d.ts.map +1 -1
  583. package/dist/src/runtime/emit/temporal-arithmetic.js +2 -1
  584. package/dist/src/runtime/emit/temporal-arithmetic.js.map +1 -1
  585. package/dist/src/runtime/emit/transaction.d.ts.map +1 -1
  586. package/dist/src/runtime/emit/transaction.js +2 -1
  587. package/dist/src/runtime/emit/transaction.js.map +1 -1
  588. package/dist/src/runtime/emit/unary.d.ts.map +1 -1
  589. package/dist/src/runtime/emit/unary.js +2 -1
  590. package/dist/src/runtime/emit/unary.js.map +1 -1
  591. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  592. package/dist/src/runtime/emit/update.js +2 -1
  593. package/dist/src/runtime/emit/update.js.map +1 -1
  594. package/dist/src/runtime/emit/values.d.ts.map +1 -1
  595. package/dist/src/runtime/emit/values.js +2 -1
  596. package/dist/src/runtime/emit/values.js.map +1 -1
  597. package/dist/src/runtime/emit/view-mutation.d.ts +1 -1
  598. package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -1
  599. package/dist/src/runtime/emit/view-mutation.js +6 -3
  600. package/dist/src/runtime/emit/view-mutation.js.map +1 -1
  601. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  602. package/dist/src/runtime/emit/window.js +26 -9
  603. package/dist/src/runtime/emit/window.js.map +1 -1
  604. package/dist/src/runtime/emitters.d.ts +11 -3
  605. package/dist/src/runtime/emitters.d.ts.map +1 -1
  606. package/dist/src/runtime/emitters.js +13 -22
  607. package/dist/src/runtime/emitters.js.map +1 -1
  608. package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
  609. package/dist/src/runtime/foreign-key-actions.js +39 -13
  610. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  611. package/dist/src/runtime/parallel-driver.d.ts +32 -4
  612. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  613. package/dist/src/runtime/parallel-driver.js +88 -18
  614. package/dist/src/runtime/parallel-driver.js.map +1 -1
  615. package/dist/src/runtime/scheduler.d.ts +56 -7
  616. package/dist/src/runtime/scheduler.d.ts.map +1 -1
  617. package/dist/src/runtime/scheduler.js +223 -200
  618. package/dist/src/runtime/scheduler.js.map +1 -1
  619. package/dist/src/runtime/strict-flags.d.ts +22 -0
  620. package/dist/src/runtime/strict-flags.d.ts.map +1 -0
  621. package/dist/src/runtime/strict-flags.js +26 -0
  622. package/dist/src/runtime/strict-flags.js.map +1 -0
  623. package/dist/src/runtime/strict-fork.d.ts +4 -4
  624. package/dist/src/runtime/strict-fork.d.ts.map +1 -1
  625. package/dist/src/runtime/strict-fork.js +175 -31
  626. package/dist/src/runtime/strict-fork.js.map +1 -1
  627. package/dist/src/runtime/types.d.ts +102 -4
  628. package/dist/src/runtime/types.d.ts.map +1 -1
  629. package/dist/src/runtime/types.js +37 -0
  630. package/dist/src/runtime/types.js.map +1 -1
  631. package/dist/src/runtime/utils.d.ts.map +1 -1
  632. package/dist/src/runtime/utils.js +8 -17
  633. package/dist/src/runtime/utils.js.map +1 -1
  634. package/dist/src/schema/column.d.ts +8 -0
  635. package/dist/src/schema/column.d.ts.map +1 -1
  636. package/dist/src/schema/column.js.map +1 -1
  637. package/dist/src/schema/ddl-generator.js +5 -0
  638. package/dist/src/schema/ddl-generator.js.map +1 -1
  639. package/dist/src/schema/function.d.ts +79 -0
  640. package/dist/src/schema/function.d.ts.map +1 -1
  641. package/dist/src/schema/function.js.map +1 -1
  642. package/dist/src/schema/lens-compiler.js +2 -2
  643. package/dist/src/schema/lens-compiler.js.map +1 -1
  644. package/dist/src/schema/lens-prover.d.ts.map +1 -1
  645. package/dist/src/schema/lens-prover.js +2 -3
  646. package/dist/src/schema/lens-prover.js.map +1 -1
  647. package/dist/src/schema/lens.d.ts +1 -1
  648. package/dist/src/schema/manager.d.ts.map +1 -1
  649. package/dist/src/schema/manager.js +7 -2
  650. package/dist/src/schema/manager.js.map +1 -1
  651. package/dist/src/schema/rename-rewriter.d.ts +61 -0
  652. package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
  653. package/dist/src/schema/rename-rewriter.js +77 -0
  654. package/dist/src/schema/rename-rewriter.js.map +1 -1
  655. package/dist/src/schema/table.d.ts +36 -8
  656. package/dist/src/schema/table.d.ts.map +1 -1
  657. package/dist/src/schema/table.js +61 -11
  658. package/dist/src/schema/table.js.map +1 -1
  659. package/dist/src/schema/unique-enforcement.d.ts +28 -5
  660. package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
  661. package/dist/src/schema/unique-enforcement.js +37 -5
  662. package/dist/src/schema/unique-enforcement.js.map +1 -1
  663. package/dist/src/schema/view.d.ts +1 -1
  664. package/dist/src/schema/view.js +1 -1
  665. package/dist/src/types/json-type.d.ts.map +1 -1
  666. package/dist/src/types/json-type.js +18 -8
  667. package/dist/src/types/json-type.js.map +1 -1
  668. package/dist/src/types/logical-type.d.ts +26 -0
  669. package/dist/src/types/logical-type.d.ts.map +1 -1
  670. package/dist/src/types/logical-type.js.map +1 -1
  671. package/dist/src/util/comparison.d.ts +83 -59
  672. package/dist/src/util/comparison.d.ts.map +1 -1
  673. package/dist/src/util/comparison.js +191 -131
  674. package/dist/src/util/comparison.js.map +1 -1
  675. package/dist/src/util/json-canonical.d.ts +34 -0
  676. package/dist/src/util/json-canonical.d.ts.map +1 -0
  677. package/dist/src/util/json-canonical.js +32 -0
  678. package/dist/src/util/json-canonical.js.map +1 -0
  679. package/dist/src/util/key-serializer.d.ts +10 -3
  680. package/dist/src/util/key-serializer.d.ts.map +1 -1
  681. package/dist/src/util/key-serializer.js +43 -17
  682. package/dist/src/util/key-serializer.js.map +1 -1
  683. package/dist/src/util/key-tuple-codec.d.ts +37 -0
  684. package/dist/src/util/key-tuple-codec.d.ts.map +1 -0
  685. package/dist/src/util/key-tuple-codec.js +65 -0
  686. package/dist/src/util/key-tuple-codec.js.map +1 -0
  687. package/dist/src/util/latches.d.ts +29 -3
  688. package/dist/src/util/latches.d.ts.map +1 -1
  689. package/dist/src/util/latches.js +60 -6
  690. package/dist/src/util/latches.js.map +1 -1
  691. package/dist/src/util/patterns.d.ts +22 -8
  692. package/dist/src/util/patterns.d.ts.map +1 -1
  693. package/dist/src/util/patterns.js +87 -16
  694. package/dist/src/util/patterns.js.map +1 -1
  695. package/dist/src/util/qualified-name.d.ts +10 -0
  696. package/dist/src/util/qualified-name.d.ts.map +1 -0
  697. package/dist/src/util/qualified-name.js +15 -0
  698. package/dist/src/util/qualified-name.js.map +1 -0
  699. package/dist/src/vtab/backing-host.d.ts +8 -1
  700. package/dist/src/vtab/backing-host.d.ts.map +1 -1
  701. package/dist/src/vtab/backing-host.js +7 -0
  702. package/dist/src/vtab/backing-host.js.map +1 -1
  703. package/dist/src/vtab/best-access-plan.d.ts +18 -0
  704. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  705. package/dist/src/vtab/best-access-plan.js +15 -0
  706. package/dist/src/vtab/best-access-plan.js.map +1 -1
  707. package/dist/src/vtab/capabilities.d.ts +44 -0
  708. package/dist/src/vtab/capabilities.d.ts.map +1 -1
  709. package/dist/src/vtab/filter-info.d.ts +42 -0
  710. package/dist/src/vtab/filter-info.d.ts.map +1 -1
  711. package/dist/src/vtab/filter-info.js +137 -1
  712. package/dist/src/vtab/filter-info.js.map +1 -1
  713. package/dist/src/vtab/idx-str.d.ts +62 -0
  714. package/dist/src/vtab/idx-str.d.ts.map +1 -0
  715. package/dist/src/vtab/idx-str.js +130 -0
  716. package/dist/src/vtab/idx-str.js.map +1 -0
  717. package/dist/src/vtab/index-descriptor.d.ts +122 -0
  718. package/dist/src/vtab/index-descriptor.d.ts.map +1 -0
  719. package/dist/src/vtab/index-descriptor.js +104 -0
  720. package/dist/src/vtab/index-descriptor.js.map +1 -0
  721. package/dist/src/vtab/mapping-advertisement.d.ts +1 -1
  722. package/dist/src/vtab/memory/index.d.ts +12 -4
  723. package/dist/src/vtab/memory/index.d.ts.map +1 -1
  724. package/dist/src/vtab/memory/index.js +17 -9
  725. package/dist/src/vtab/memory/index.js.map +1 -1
  726. package/dist/src/vtab/memory/layer/base.d.ts +85 -31
  727. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  728. package/dist/src/vtab/memory/layer/base.js +127 -86
  729. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  730. package/dist/src/vtab/memory/layer/connection.d.ts +27 -0
  731. package/dist/src/vtab/memory/layer/connection.d.ts.map +1 -1
  732. package/dist/src/vtab/memory/layer/connection.js +36 -1
  733. package/dist/src/vtab/memory/layer/connection.js.map +1 -1
  734. package/dist/src/vtab/memory/layer/interface.d.ts +24 -4
  735. package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
  736. package/dist/src/vtab/memory/layer/manager.d.ts +212 -16
  737. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  738. package/dist/src/vtab/memory/layer/manager.js +754 -170
  739. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  740. package/dist/src/vtab/memory/layer/plan-filter.d.ts +26 -1
  741. package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
  742. package/dist/src/vtab/memory/layer/plan-filter.js +29 -11
  743. package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
  744. package/dist/src/vtab/memory/layer/safe-iterate.d.ts +2 -2
  745. package/dist/src/vtab/memory/layer/safe-iterate.d.ts.map +1 -1
  746. package/dist/src/vtab/memory/layer/safe-iterate.js +2 -2
  747. package/dist/src/vtab/memory/layer/safe-iterate.js.map +1 -1
  748. package/dist/src/vtab/memory/layer/scan-layer.d.ts +5 -1
  749. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  750. package/dist/src/vtab/memory/layer/scan-layer.js +59 -24
  751. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  752. package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
  753. package/dist/src/vtab/memory/layer/scan-plan.js +13 -21
  754. package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
  755. package/dist/src/vtab/memory/layer/transaction.d.ts +169 -7
  756. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  757. package/dist/src/vtab/memory/layer/transaction.js +334 -9
  758. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  759. package/dist/src/vtab/memory/module.d.ts +11 -4
  760. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  761. package/dist/src/vtab/memory/module.js +35 -16
  762. package/dist/src/vtab/memory/module.js.map +1 -1
  763. package/dist/src/vtab/memory/table.d.ts +30 -4
  764. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  765. package/dist/src/vtab/memory/table.js +63 -15
  766. package/dist/src/vtab/memory/table.js.map +1 -1
  767. package/dist/src/vtab/memory/utils/predicate.d.ts +9 -1
  768. package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
  769. package/dist/src/vtab/memory/utils/predicate.js +35 -14
  770. package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
  771. package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -1
  772. package/dist/src/vtab/memory/utils/primary-key-encode.js +12 -6
  773. package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -1
  774. package/dist/src/vtab/memory/utils/primary-key.d.ts +6 -1
  775. package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
  776. package/dist/src/vtab/memory/utils/primary-key.js +12 -8
  777. package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
  778. package/dist/src/vtab/module.d.ts +38 -14
  779. package/dist/src/vtab/module.d.ts.map +1 -1
  780. package/dist/src/vtab/table.d.ts +41 -2
  781. package/dist/src/vtab/table.d.ts.map +1 -1
  782. package/dist/src/vtab/table.js +19 -0
  783. package/dist/src/vtab/table.js.map +1 -1
  784. package/package.json +5 -4
  785. package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts +0 -18
  786. package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts.map +0 -1
  787. package/dist/src/planner/rules/cache/rule-materialization-advisory.js +0 -65
  788. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { canonicalJsonString } from './json-canonical.js';
1
2
  /** Identity normalizer for BINARY collation (no-op). */
2
3
  const IDENTITY_NORMALIZER = (s) => s;
3
4
  /** Strip trailing ASCII space (0x20) only, matching `RTRIM_COLLATION`'s
@@ -10,26 +11,54 @@ const RTRIM_NORMALIZER = (s) => {
10
11
  return end === s.length ? s : s.slice(0, end);
11
12
  };
12
13
  const NOCASE_NORMALIZER = (s) => s.toLowerCase();
13
- /** Map a collation name to a string normalizer for key serialization. */
14
- export function resolveKeyNormalizer(collationName) {
15
- if (!collationName || collationName === 'BINARY')
16
- return IDENTITY_NORMALIZER;
17
- switch (collationName.toUpperCase()) {
18
- case 'NOCASE': return NOCASE_NORMALIZER;
19
- case 'RTRIM': return RTRIM_NORMALIZER;
20
- default: return IDENTITY_NORMALIZER;
21
- }
22
- }
23
14
  /** Built-in normalizers, exported so the `Database` collation registry can seed
24
- * them alongside the comparators. Keys match the SQL canonical names. */
15
+ * them alongside the comparators, and so a caller with no `Database` in scope (the
16
+ * store's default key-normalizer resolver) can build a built-ins-only resolver over
17
+ * the same three functions rather than a divergent local copy. Keys match the SQL
18
+ * canonical names.
19
+ *
20
+ * Any caller that DOES hold a `Database` must resolve through
21
+ * `db.getKeyNormalizerResolver()` (or `EmissionContext.resolveKeyNormalizer()` from an
22
+ * emitter) — indexing this map directly cannot see a collation registered with
23
+ * `db.registerCollation`, so it buckets rows the database's own comparator considers
24
+ * equal into different groups. */
25
25
  export const BUILTIN_NORMALIZERS = {
26
26
  BINARY: IDENTITY_NORMALIZER,
27
27
  NOCASE: NOCASE_NORMALIZER,
28
28
  RTRIM: RTRIM_NORMALIZER,
29
29
  };
30
+ /**
31
+ * Normalize a numeric SQL value (number | bigint | boolean) to a decimal string
32
+ * so that values equal under {@link import('./comparison.js').compareSqlValues}
33
+ * (numeric storage class: `5n` == `5`, `true` == `1`) serialize identically.
34
+ *
35
+ * Integer-valued numbers route through `BigInt(n)` so `5`, `5.0`, and `5n` all
36
+ * yield `"5"` — and `BigInt` captures a float's exact mathematical value, so an
37
+ * imprecise integer float (e.g. `1e30`) matches whatever the mixed number/bigint
38
+ * comparator sees. Non-integer numbers keep their `String(n)` form.
39
+ *
40
+ * NOTE: NaN/±Infinity fall to `String(n)` ("NaN"/"Infinity"), so two NaN key
41
+ * alike but NaN never keys equal to a finite value — the numeric comparator
42
+ * treats NaN as equal to everything, a degenerate edge not worth splitting keys
43
+ * over. If NaN-valued numeric keys ever matter, revisit here.
44
+ */
45
+ function canonicalNumeric(val) {
46
+ if (typeof val === 'boolean')
47
+ return val ? '1' : '0';
48
+ if (typeof val === 'bigint')
49
+ return val.toString();
50
+ if (Number.isInteger(val))
51
+ return BigInt(val).toString();
52
+ return String(val);
53
+ }
30
54
  /**
31
55
  * Core serialization of a single SQL value with type tag and optional collation normalizer.
32
56
  * Appends to the key accumulator. Returns false if the value is NULL (caller decides semantics).
57
+ *
58
+ * The tag/normalization rules mirror `compareSqlValues`: numeric-class values
59
+ * (number/bigint/boolean) share the `n:` tag via {@link canonicalNumeric} so
60
+ * equal-but-differently-typed numerics key alike, and OBJECT-class values route
61
+ * through {@link canonicalJsonString} so reorder-equal JSON objects key alike.
33
62
  */
34
63
  function appendValue(val, normalizer) {
35
64
  if (val === null || val === undefined)
@@ -37,17 +66,14 @@ function appendValue(val, normalizer) {
37
66
  if (typeof val === 'string') {
38
67
  return 's:' + normalizer(val);
39
68
  }
40
- else if (typeof val === 'number') {
41
- return 'n:' + val;
42
- }
43
- else if (typeof val === 'bigint') {
44
- return 'b:' + val;
69
+ else if (typeof val === 'number' || typeof val === 'bigint' || typeof val === 'boolean') {
70
+ return 'n:' + canonicalNumeric(val);
45
71
  }
46
72
  else if (val instanceof Uint8Array) {
47
73
  return 'x:' + Array.from(val).join(',');
48
74
  }
49
75
  else {
50
- return 'o:' + String(val);
76
+ return 'o:' + canonicalJsonString(val);
51
77
  }
52
78
  }
53
79
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"key-serializer.js","sourceRoot":"","sources":["../../../src/util/key-serializer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"key-serializer.js","sourceRoot":"","sources":["../../../src/util/key-serializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Reversible, type-faithful codec for a tuple of `SqlValue`s, used to key the
3
+ * transaction change log by its primary-key (or captured-column) tuple.
4
+ *
5
+ * WHY NOT canonical JSON: the change log formerly keyed via
6
+ * `canonicalJsonString` (`JSON.stringify` under the hood), which throws
7
+ * "Do not know how to serialize a BigInt" the moment a PK value is a JS bigint
8
+ * (any integer beyond `Number.MAX_SAFE_INTEGER`). It is also not reversible for
9
+ * bigint/blob (a decoded number loses the low bits; a blob decodes as an object).
10
+ *
11
+ * WHY NOT `key-serializer.ts` (`serializeKey`): that encoder *unifies* numerics
12
+ * (`5`, `5.0`, `5n` all collapse to one key), is one-way (no decoder), and
13
+ * returns null on any NULL element. The change log needs a decoder
14
+ * (`decodeKeyTuple` feeds `getChangedKeyTuples`) and must stay type-distinct so
15
+ * its keys agree with `delta-executor`'s `tupleKey` (which keys bigint and
16
+ * number separately) when watch literals are intersected against changes.
17
+ *
18
+ * NOTE: this codec intentionally keeps `5n` (bigint) and `5` (number) as
19
+ * DISTINCT keys — matching `delta-executor` `tupleKey`, and unlike
20
+ * `compareSqlValues` (which treats `5n == 5`). If a single logical row's PK were
21
+ * ever presented as differently-typed numerics across two ops in one
22
+ * transaction, its INSERT/DELETE would not coalesce. Not reachable today (a
23
+ * table's PK storage type is stable per row); if it ever becomes reachable,
24
+ * unify numerics in BOTH this codec and `delta-executor` `tupleKey` together.
25
+ *
26
+ * Encoding: a JSON array of type-tagged element strings (first char = tag), then
27
+ * `JSON.stringify`d. The tag makes the encoding collision-free across types and
28
+ * the whole string reversible. Scalar-tuple keys stay stable across a decode/
29
+ * encode round-trip; JSON-object components keep the canonical (recursively
30
+ * key-sorted) form so reorder-equal objects still coalesce to one entry.
31
+ */
32
+ import type { SqlValue } from '../common/types.js';
33
+ /** Encode a tuple of `SqlValue`s to a stable, reversible string key. */
34
+ export declare function encodeKeyTuple(values: readonly SqlValue[]): string;
35
+ /** Decode a key produced by {@link encodeKeyTuple} back to its tuple. */
36
+ export declare function decodeKeyTuple(key: string): SqlValue[];
37
+ //# sourceMappingURL=key-tuple-codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-tuple-codec.d.ts","sourceRoot":"","sources":["../../../src/util/key-tuple-codec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAuDnD,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CAIlE;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAGtD"}
@@ -0,0 +1,65 @@
1
+ import { canonicalJsonString } from './json-canonical.js';
2
+ import { QuereusError } from '../common/errors.js';
3
+ import { StatusCode } from '../common/types.js';
4
+ function toHex(bytes) {
5
+ let s = '';
6
+ for (let i = 0; i < bytes.length; i++)
7
+ s += bytes[i].toString(16).padStart(2, '0');
8
+ return s;
9
+ }
10
+ function fromHex(hex) {
11
+ const out = new Uint8Array(hex.length >> 1);
12
+ for (let i = 0; i < out.length; i++)
13
+ out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
14
+ return out;
15
+ }
16
+ /** Encode a single element to a tag-prefixed string. */
17
+ function encodeElement(value) {
18
+ if (value === null || value === undefined)
19
+ return '0';
20
+ switch (typeof value) {
21
+ case 'string': return 's' + value;
22
+ // NOTE: JSON.stringify(NaN|±Infinity) → "null" and -0 → "0", so those
23
+ // degenerate number PKs decode lossily (NaN→null, -0→0). Matches the prior
24
+ // canonical-JSON keying (no regression); a NaN/±Inf PK is nonsensical and
25
+ // unreachable via real DML. Fix here + in decodeElement together if it ever matters.
26
+ case 'number': return 'n' + JSON.stringify(value); // round-trips via JSON.parse
27
+ case 'bigint': return 'i' + value.toString(); // decode: BigInt(rest)
28
+ case 'boolean': return value ? 'b1' : 'b0';
29
+ default:
30
+ if (value instanceof Uint8Array)
31
+ return 'x' + toHex(value);
32
+ // JSON object/array — keep canonical (recursively key-sorted) form so
33
+ // reorder-equal objects coalesce.
34
+ return 'j' + canonicalJsonString(value);
35
+ }
36
+ }
37
+ /** Decode a single tag-prefixed element string back to its `SqlValue`. */
38
+ function decodeElement(part) {
39
+ const tag = part[0];
40
+ const rest = part.slice(1);
41
+ switch (tag) {
42
+ case '0': return null;
43
+ case 's': return rest;
44
+ case 'n': return JSON.parse(rest);
45
+ case 'i': return BigInt(rest);
46
+ case 'b': return rest === '1';
47
+ case 'x': return fromHex(rest);
48
+ case 'j': return JSON.parse(rest);
49
+ default:
50
+ throw new QuereusError(`key-tuple-codec: unknown element tag '${tag}'`, StatusCode.INTERNAL);
51
+ }
52
+ }
53
+ /** Encode a tuple of `SqlValue`s to a stable, reversible string key. */
54
+ export function encodeKeyTuple(values) {
55
+ const parts = new Array(values.length);
56
+ for (let i = 0; i < values.length; i++)
57
+ parts[i] = encodeElement(values[i]);
58
+ return JSON.stringify(parts);
59
+ }
60
+ /** Decode a key produced by {@link encodeKeyTuple} back to its tuple. */
61
+ export function decodeKeyTuple(key) {
62
+ const parts = JSON.parse(key);
63
+ return parts.map(decodeElement);
64
+ }
65
+ //# sourceMappingURL=key-tuple-codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-tuple-codec.js","sourceRoot":"","sources":["../../../src/util/key-tuple-codec.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,42 @@
1
1
  /**
2
- * Lightweight implementation of a mutex lock queue for managing concurrent access.
2
+ * Lightweight mutex lock queue for serializing concurrent access by string key.
3
+ *
4
+ * Each `Latches` instance owns its own queue map, so two independent owners (e.g.
5
+ * two `Database` instances) never share a latch even when they pass the same key.
6
+ * The engine holds one instance per `Database` (`db.latches`); callers namespace
7
+ * their key with `schema.table` to keep intra-database collisions to genuinely
8
+ * same-named tables.
9
+ *
10
+ * A process-global default instance backs the {@link Latches.acquire} *static*
11
+ * method, preserving the original shared-queue entry point for standalone
12
+ * callers (e.g. external store modules) that hold no `Database`.
3
13
  */
4
14
  export declare class Latches {
5
- private static lockQueues;
15
+ private readonly lockQueues;
6
16
  /**
7
17
  * Acquires a lock for the given key. Waits if another operation holds the lock.
8
18
  * Returns a release function that must be called to release the lock.
9
19
  *
10
20
  * @param key A unique string identifier for the resource to lock.
11
21
  * Should use `ClassName.methodName:${id}` format to avoid conflicts.
22
+ * @param timeoutMs Optional deadlock guard. When set and the predecessor does not
23
+ * release within this many milliseconds, the wait is abandoned: a warning
24
+ * is logged naming the contended key, this waiter's queue slot is released
25
+ * so the queue behind it does not wedge, and the returned promise rejects
26
+ * with a `QuereusError` (StatusCode.BUSY). Omit (the default) for the
27
+ * original never-reject behavior.
12
28
  * @returns A function that must be called to release the lock
13
29
  */
14
- static acquire(key: string): Promise<() => void>;
30
+ acquire(key: string, timeoutMs?: number): Promise<() => void>;
31
+ /** Process-global default instance backing the static {@link Latches.acquire}. */
32
+ private static readonly global;
33
+ /**
34
+ * Backward-compatible static entry point delegating to a single process-global
35
+ * instance. Same shared-queue semantics this class had before it became
36
+ * instance-based — kept for standalone callers (external store modules) that
37
+ * hold no `Database`. Engine call sites should prefer the owned per-database
38
+ * instance (`db.latches`) so two databases never contend on the same key.
39
+ */
40
+ static acquire(key: string, timeoutMs?: number): Promise<() => void>;
15
41
  }
16
42
  //# sourceMappingURL=latches.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"latches.d.ts","sourceRoot":"","sources":["../../../src/util/latches.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,OAAO;IAEnB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAoC;IAE7D;;;;;;;OAOG;WACU,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;CA+BtD"}
1
+ {"version":3,"file":"latches.d.ts","sourceRoot":"","sources":["../../../src/util/latches.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;GAYG;AACH,qBAAa,OAAO;IAGnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAE/D;;;;;;;;;;;;;OAaG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAsDnE,kFAAkF;IAClF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAiB;IAE/C;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;CAGpE"}
@@ -1,18 +1,40 @@
1
+ import { createLogger } from '../common/logger.js';
2
+ import { QuereusError } from '../common/errors.js';
3
+ import { StatusCode } from '../common/types.js';
4
+ const log = createLogger('util:latches');
5
+ const warnLog = log.extend('warn');
1
6
  /**
2
- * Lightweight implementation of a mutex lock queue for managing concurrent access.
7
+ * Lightweight mutex lock queue for serializing concurrent access by string key.
8
+ *
9
+ * Each `Latches` instance owns its own queue map, so two independent owners (e.g.
10
+ * two `Database` instances) never share a latch even when they pass the same key.
11
+ * The engine holds one instance per `Database` (`db.latches`); callers namespace
12
+ * their key with `schema.table` to keep intra-database collisions to genuinely
13
+ * same-named tables.
14
+ *
15
+ * A process-global default instance backs the {@link Latches.acquire} *static*
16
+ * method, preserving the original shared-queue entry point for standalone
17
+ * callers (e.g. external store modules) that hold no `Database`.
3
18
  */
4
19
  export class Latches {
5
- // Stores the promise representing the completion of the last queued operation for a key.
6
- static lockQueues = new Map();
20
+ // Stores the promise representing the completion of the last queued operation
21
+ // for a key. Instance-scoped: one map per Latches instance.
22
+ lockQueues = new Map();
7
23
  /**
8
24
  * Acquires a lock for the given key. Waits if another operation holds the lock.
9
25
  * Returns a release function that must be called to release the lock.
10
26
  *
11
27
  * @param key A unique string identifier for the resource to lock.
12
28
  * Should use `ClassName.methodName:${id}` format to avoid conflicts.
29
+ * @param timeoutMs Optional deadlock guard. When set and the predecessor does not
30
+ * release within this many milliseconds, the wait is abandoned: a warning
31
+ * is logged naming the contended key, this waiter's queue slot is released
32
+ * so the queue behind it does not wedge, and the returned promise rejects
33
+ * with a `QuereusError` (StatusCode.BUSY). Omit (the default) for the
34
+ * original never-reject behavior.
13
35
  * @returns A function that must be called to release the lock
14
36
  */
15
- static async acquire(key) {
37
+ async acquire(key, timeoutMs) {
16
38
  // Get the promise the current operation needs to wait for (if any)
17
39
  const currentTail = this.lockQueues.get(key) ?? Promise.resolve();
18
40
  let resolveNewTail;
@@ -22,8 +44,6 @@ export class Latches {
22
44
  });
23
45
  // Immediately set the new promise as the tail for this key
24
46
  this.lockQueues.set(key, newTail);
25
- // Wait for the previous operation (if any) to complete
26
- await currentTail;
27
47
  // Return the function to release *this* lock
28
48
  const release = () => {
29
49
  // Signal that this operation is complete
@@ -35,7 +55,41 @@ export class Latches {
35
55
  this.lockQueues.delete(key);
36
56
  }
37
57
  };
58
+ if (timeoutMs === undefined) {
59
+ // Wait for the previous operation (if any) to complete
60
+ await currentTail;
61
+ return release;
62
+ }
63
+ // Opt-in deadlock guard: bound the wait for the predecessor.
64
+ let timer;
65
+ const timeout = new Promise((_resolve, reject) => {
66
+ timer = setTimeout(() => {
67
+ warnLog('latch acquire timed out after %dms for key %s (possible deadlock); releasing waiter slot', timeoutMs, key);
68
+ // Release our own slot so the queue behind us is not wedged by the abandoned wait.
69
+ release();
70
+ reject(new QuereusError(`Latch acquire timed out after ${timeoutMs}ms for '${key}' (possible deadlock)`, StatusCode.BUSY));
71
+ }, timeoutMs);
72
+ });
73
+ try {
74
+ await Promise.race([currentTail, timeout]);
75
+ }
76
+ finally {
77
+ if (timer !== undefined)
78
+ clearTimeout(timer);
79
+ }
38
80
  return release;
39
81
  }
82
+ /** Process-global default instance backing the static {@link Latches.acquire}. */
83
+ static global = new Latches();
84
+ /**
85
+ * Backward-compatible static entry point delegating to a single process-global
86
+ * instance. Same shared-queue semantics this class had before it became
87
+ * instance-based — kept for standalone callers (external store modules) that
88
+ * hold no `Database`. Engine call sites should prefer the owned per-database
89
+ * instance (`db.latches`) so two databases never contend on the same key.
90
+ */
91
+ static acquire(key, timeoutMs) {
92
+ return this.global.acquire(key, timeoutMs);
93
+ }
40
94
  }
41
95
  //# sourceMappingURL=latches.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"latches.js","sourceRoot":"","sources":["../../../src/util/latches.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,OAAO;IACnB,yFAAyF;IACjF,MAAM,CAAC,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE7D;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAW;QAC/B,mEAAmE;QACnE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAElE,IAAI,cAA2B,CAAC;QAChC,6DAA6D;QAC7D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YAC3C,cAAc,GAAG,OAAO,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,2DAA2D;QAC3D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAElC,uDAAuD;QACvD,MAAM,WAAW,CAAC;QAElB,6CAA6C;QAC7C,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,yCAAyC;YACzC,cAAc,EAAE,CAAC;YAEjB,wDAAwD;YACxD,8EAA8E;YAC9E,2EAA2E;YAC3E,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;gBAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACF,CAAC,CAAC;QAEF,OAAO,OAAO,CAAC;IAChB,CAAC"}
1
+ {"version":3,"file":"latches.js","sourceRoot":"","sources":["../../../src/util/latches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,GAAG,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;AACzC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAEnC;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,OAAO;IACnB,8EAA8E;IAC9E,4DAA4D;IAC3C,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE/D;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,SAAkB;QAC5C,mEAAmE;QACnE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAElE,IAAI,cAA2B,CAAC;QAChC,6DAA6D;QAC7D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YAC3C,cAAc,GAAG,OAAO,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,2DAA2D;QAC3D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAElC,6CAA6C;QAC7C,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,yCAAyC;YACzC,cAAc,EAAE,CAAC;YAEjB,wDAAwD;YACxD,8EAA8E;YAC9E,2EAA2E;YAC3E,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;gBAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACF,CAAC,CAAC;QAEF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7B,uDAAuD;YACvD,MAAM,WAAW,CAAC;YAClB,OAAO,OAAO,CAAC;QAChB,CAAC;QAED,6DAA6D;QAC7D,IAAI,KAAgD,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;YACvD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACvB,OAAO,CAAC,0FAA0F,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;gBACpH,mFAAmF;gBACnF,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,YAAY,CACtB,iCAAiC,SAAS,WAAW,GAAG,uBAAuB,EAC/E,UAAU,CAAC,IAAI,CACf,CAAC,CAAC;YACJ,CAAC,EAAE,SAAS,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACJ,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5C,CAAC;gBAAS,CAAC;YACV,IAAI,KAAK,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,kFAAkF;IAC1E,MAAM,CAAU,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;IAE/C;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAC,GAAW,EAAE,SAAkB;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC"}
@@ -1,8 +1,24 @@
1
1
  /**
2
- * Simple LIKE pattern matching implementation.
3
- * Supports SQL LIKE patterns:
4
- * - % matches any sequence of characters (including empty sequence)
5
- * - _ matches any single character
2
+ * A compiled pattern matcher: given some text, returns whether it matches the
3
+ * pattern the matcher was compiled from. Compilation (pattern → RegExp) happens
4
+ * once; the returned closure is cheap to call per row.
5
+ */
6
+ export type PatternMatcher = (text: string) => boolean;
7
+ /**
8
+ * Compile (memoized) a LIKE pattern into a reusable matcher. Prefer this over
9
+ * {@link simpleLike} when matching many texts against a pattern that is known
10
+ * once (e.g. a literal-constant pattern captured at emit time): compile once,
11
+ * call the returned matcher per row.
12
+ */
13
+ export declare const compileLikeMatcher: (pattern: string) => PatternMatcher;
14
+ /**
15
+ * Compile (memoized) a GLOB pattern into a reusable matcher. See
16
+ * {@link compileLikeMatcher}.
17
+ */
18
+ export declare const compileGlobMatcher: (pattern: string) => PatternMatcher;
19
+ /**
20
+ * Simple LIKE pattern matching. Compilation is memoized, so repeated calls with
21
+ * the same pattern reuse a single compiled matcher.
6
22
  *
7
23
  * @param pattern The LIKE pattern
8
24
  * @param text The text to match against
@@ -10,10 +26,8 @@
10
26
  */
11
27
  export declare function simpleLike(pattern: string, text: string): boolean;
12
28
  /**
13
- * Simple GLOB pattern matching implementation.
14
- * Supports SQL GLOB patterns:
15
- * - * matches any sequence of characters (including empty sequence)
16
- * - ? matches any single character
29
+ * Simple GLOB pattern matching. Compilation is memoized, so repeated calls with
30
+ * the same pattern reuse a single compiled matcher.
17
31
  *
18
32
  * @param pattern The GLOB pattern
19
33
  * @param text The text to match against
@@ -1 +1 @@
1
- {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../src/util/patterns.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAcjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA4CjE"}
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../src/util/patterns.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;AA2HvD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,YArGkD,MAAM,KAAK,cAqG/B,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,kBAAkB,YA3GkD,MAAM,KAAK,cA2G/B,CAAC;AAE9D;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjE"}
@@ -1,17 +1,57 @@
1
1
  import { createLogger } from '../common/logger.js';
2
2
  const log = createLogger('util:patterns');
3
3
  const errorLog = log.extend('error');
4
+ /** Matcher used when a pattern fails to compile — matches nothing (as before). */
5
+ const NEVER_MATCH = () => false;
4
6
  /**
5
- * Simple LIKE pattern matching implementation.
7
+ * Small bounded (LRU) cap for each compiled-pattern cache. A workload with many
8
+ * distinct patterns evicts the least-recently-used entry rather than growing
9
+ * the cache unboundedly.
10
+ *
11
+ * NOTE: 256 is an untuned guess. If a real workload thrashes distinct patterns
12
+ * (cache-miss rate stays high), raise the cap or make it configurable.
13
+ */
14
+ const PATTERN_CACHE_CAP = 256;
15
+ /**
16
+ * Wrap a `compile` function with a bounded LRU cache so the same pattern string
17
+ * is compiled at most once (until evicted). A `Map` preserves insertion order,
18
+ * which gives a cheap LRU: on a hit re-insert the key to mark it most-recently
19
+ * used; on overflow evict the oldest (first) key.
20
+ *
21
+ * NOTE: the cache key is the pattern string alone. LIKE and GLOB each get their
22
+ * own cache (via separate `memoizeCompile` calls) so identical strings in the
23
+ * two different pattern languages never collide. If LIKE `ESCAPE` or
24
+ * case-insensitive matching is ever added, the escape char / case-fold flag
25
+ * MUST become part of the key (or key each variant into its own cache), else
26
+ * compiled matchers will collide across those variants.
27
+ */
28
+ function memoizeCompile(compile) {
29
+ const cache = new Map();
30
+ return (pattern) => {
31
+ const cached = cache.get(pattern);
32
+ if (cached !== undefined) {
33
+ // Mark most-recently-used.
34
+ cache.delete(pattern);
35
+ cache.set(pattern, cached);
36
+ return cached;
37
+ }
38
+ const matcher = compile(pattern);
39
+ cache.set(pattern, matcher);
40
+ if (cache.size > PATTERN_CACHE_CAP) {
41
+ const oldest = cache.keys().next().value;
42
+ if (oldest !== undefined)
43
+ cache.delete(oldest);
44
+ }
45
+ return matcher;
46
+ };
47
+ }
48
+ /**
49
+ * Compile a SQL LIKE pattern into a matcher.
6
50
  * Supports SQL LIKE patterns:
7
51
  * - % matches any sequence of characters (including empty sequence)
8
52
  * - _ matches any single character
9
- *
10
- * @param pattern The LIKE pattern
11
- * @param text The text to match against
12
- * @returns true if the text matches the pattern, false otherwise
13
53
  */
14
- export function simpleLike(pattern, text) {
54
+ function compileLike(pattern) {
15
55
  // Escape regex special characters except % and _
16
56
  const escapedPattern = pattern.replace(/[.*+^${}()|[\]\\]/g, '\\$&');
17
57
  // Convert SQL LIKE wildcards to regex equivalents
@@ -19,24 +59,20 @@ export function simpleLike(pattern, text) {
19
59
  try {
20
60
  // 'u' flag: match by Unicode code point so `_` matches one code point (incl. non-BMP)
21
61
  const regex = new RegExp(`^${regexPattern}$`, 'u');
22
- return regex.test(text);
62
+ return (text) => regex.test(text);
23
63
  }
24
64
  catch (e) {
25
65
  errorLog('Invalid LIKE pattern converted to regex: ^%s$, %O', regexPattern, e);
26
- return false;
66
+ return NEVER_MATCH;
27
67
  }
28
68
  }
29
69
  /**
30
- * Simple GLOB pattern matching implementation.
70
+ * Compile a SQL GLOB pattern into a matcher.
31
71
  * Supports SQL GLOB patterns:
32
72
  * - * matches any sequence of characters (including empty sequence)
33
73
  * - ? matches any single character
34
- *
35
- * @param pattern The GLOB pattern
36
- * @param text The text to match against
37
- * @returns true if the text matches the pattern, false otherwise
38
74
  */
39
- export function simpleGlob(pattern, text) {
75
+ function compileGlob(pattern) {
40
76
  const chars = [...pattern]; // iterate by Unicode code point so non-BMP chars survive intact
41
77
  const regexMeta = '\\^$.|?*+()[]{}';
42
78
  let regex = '';
@@ -92,11 +128,46 @@ export function simpleGlob(pattern, text) {
92
128
  }
93
129
  try {
94
130
  // 'u' flag: code-point ranges like `[😀-😎]` and `?`/`.` matching by code point.
95
- return new RegExp(`^${regex}$`, 'u').test(text);
131
+ const compiled = new RegExp(`^${regex}$`, 'u');
132
+ return (text) => compiled.test(text);
96
133
  }
97
134
  catch (e) {
98
135
  errorLog('Invalid GLOB pattern compiled to regex: ^%s$, %O', regex, e);
99
- return false;
136
+ return NEVER_MATCH;
100
137
  }
101
138
  }
139
+ /**
140
+ * Compile (memoized) a LIKE pattern into a reusable matcher. Prefer this over
141
+ * {@link simpleLike} when matching many texts against a pattern that is known
142
+ * once (e.g. a literal-constant pattern captured at emit time): compile once,
143
+ * call the returned matcher per row.
144
+ */
145
+ export const compileLikeMatcher = memoizeCompile(compileLike);
146
+ /**
147
+ * Compile (memoized) a GLOB pattern into a reusable matcher. See
148
+ * {@link compileLikeMatcher}.
149
+ */
150
+ export const compileGlobMatcher = memoizeCompile(compileGlob);
151
+ /**
152
+ * Simple LIKE pattern matching. Compilation is memoized, so repeated calls with
153
+ * the same pattern reuse a single compiled matcher.
154
+ *
155
+ * @param pattern The LIKE pattern
156
+ * @param text The text to match against
157
+ * @returns true if the text matches the pattern, false otherwise
158
+ */
159
+ export function simpleLike(pattern, text) {
160
+ return compileLikeMatcher(pattern)(text);
161
+ }
162
+ /**
163
+ * Simple GLOB pattern matching. Compilation is memoized, so repeated calls with
164
+ * the same pattern reuse a single compiled matcher.
165
+ *
166
+ * @param pattern The GLOB pattern
167
+ * @param text The text to match against
168
+ * @returns true if the text matches the pattern, false otherwise
169
+ */
170
+ export function simpleGlob(pattern, text) {
171
+ return compileGlobMatcher(pattern)(text);
172
+ }
102
173
  //# sourceMappingURL=patterns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/util/patterns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/util/patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Recover the (schema, table) pair from a flat lowercased base key
3
+ * `` `${schema}.${table}` ``. Splits on the FIRST dot only, so a quoted
4
+ * table name that legally contains a dot (e.g. `"a.b"` → key `main.a.b`)
5
+ * survives intact. NOTE: a dotted *schema* name is still ambiguous; dotted
6
+ * schema names are effectively unreachable in practice and intentionally
7
+ * unsupported — see bug-core-fq-name-split-mis-routes-dotted-table-names.
8
+ */
9
+ export declare function splitBaseKey(base: string): [schema: string, table: string];
10
+ //# sourceMappingURL=qualified-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qualified-name.d.ts","sourceRoot":"","sources":["../../../src/util/qualified-name.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAI1E"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Recover the (schema, table) pair from a flat lowercased base key
3
+ * `` `${schema}.${table}` ``. Splits on the FIRST dot only, so a quoted
4
+ * table name that legally contains a dot (e.g. `"a.b"` → key `main.a.b`)
5
+ * survives intact. NOTE: a dotted *schema* name is still ambiguous; dotted
6
+ * schema names are effectively unreachable in practice and intentionally
7
+ * unsupported — see bug-core-fq-name-split-mis-routes-dotted-table-names.
8
+ */
9
+ export function splitBaseKey(base) {
10
+ const dot = base.indexOf('.');
11
+ if (dot < 0)
12
+ return ['', base]; // defensive: no schema segment
13
+ return [base.slice(0, dot), base.slice(dot + 1)];
14
+ }
15
+ //# sourceMappingURL=qualified-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qualified-name.js","sourceRoot":"","sources":["../../../src/util/qualified-name.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,+BAA+B;IAC/D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC"}