@quereus/quereus 4.4.0 → 4.4.1

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 (316) hide show
  1. package/README.md +5 -0
  2. package/dist/src/common/types.d.ts +9 -0
  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-events.d.ts +49 -0
  6. package/dist/src/core/database-events.d.ts.map +1 -1
  7. package/dist/src/core/database-events.js +148 -0
  8. package/dist/src/core/database-events.js.map +1 -1
  9. package/dist/src/core/database-materialized-views-plan-builders.d.ts +2 -1
  10. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -1
  11. package/dist/src/core/database-materialized-views-plan-builders.js +26 -5
  12. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
  13. package/dist/src/core/database-materialized-views-plans.d.ts +6 -3
  14. package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -1
  15. package/dist/src/core/database-materialized-views.d.ts +3 -2
  16. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  17. package/dist/src/core/database-materialized-views.js +26 -5
  18. package/dist/src/core/database-materialized-views.js.map +1 -1
  19. package/dist/src/core/database.d.ts +5 -0
  20. package/dist/src/core/database.d.ts.map +1 -1
  21. package/dist/src/core/database.js +21 -1
  22. package/dist/src/core/database.js.map +1 -1
  23. package/dist/src/core/internal-statement-cache.d.ts +18 -0
  24. package/dist/src/core/internal-statement-cache.d.ts.map +1 -0
  25. package/dist/src/core/internal-statement-cache.js +211 -0
  26. package/dist/src/core/internal-statement-cache.js.map +1 -0
  27. package/dist/src/func/builtins/aggregate.d.ts +13 -12
  28. package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
  29. package/dist/src/func/builtins/aggregate.js +45 -67
  30. package/dist/src/func/builtins/aggregate.js.map +1 -1
  31. package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
  32. package/dist/src/func/builtins/builtin-window-functions.js +63 -48
  33. package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
  34. package/dist/src/func/registration.d.ts +14 -1
  35. package/dist/src/func/registration.d.ts.map +1 -1
  36. package/dist/src/func/registration.js +25 -0
  37. package/dist/src/func/registration.js.map +1 -1
  38. package/dist/src/index.d.ts +8 -8
  39. package/dist/src/index.d.ts.map +1 -1
  40. package/dist/src/index.js +12 -11
  41. package/dist/src/index.js.map +1 -1
  42. package/dist/src/parser/parser.d.ts +6 -0
  43. package/dist/src/parser/parser.d.ts.map +1 -1
  44. package/dist/src/parser/parser.js +45 -34
  45. package/dist/src/parser/parser.js.map +1 -1
  46. package/dist/src/planner/analysis/comparison-collation.d.ts +2 -0
  47. package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
  48. package/dist/src/planner/analysis/comparison-collation.js +1 -1
  49. package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
  50. package/dist/src/planner/analysis/expression-fingerprint.d.ts.map +1 -1
  51. package/dist/src/planner/analysis/expression-fingerprint.js +29 -0
  52. package/dist/src/planner/analysis/expression-fingerprint.js.map +1 -1
  53. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +6 -0
  54. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  55. package/dist/src/planner/analysis/query-rewrite-matcher.js +11 -2
  56. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  57. package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -1
  58. package/dist/src/planner/analysis/sat-checker.js +43 -4
  59. package/dist/src/planner/analysis/sat-checker.js.map +1 -1
  60. package/dist/src/planner/building/delete.d.ts.map +1 -1
  61. package/dist/src/planner/building/delete.js +10 -3
  62. package/dist/src/planner/building/delete.js.map +1 -1
  63. package/dist/src/planner/building/expression.d.ts.map +1 -1
  64. package/dist/src/planner/building/expression.js +87 -6
  65. package/dist/src/planner/building/expression.js.map +1 -1
  66. package/dist/src/planner/building/foreign-key-builder.d.ts +44 -1
  67. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  68. package/dist/src/planner/building/foreign-key-builder.js +54 -0
  69. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  70. package/dist/src/planner/building/insert.d.ts.map +1 -1
  71. package/dist/src/planner/building/insert.js +9 -12
  72. package/dist/src/planner/building/insert.js.map +1 -1
  73. package/dist/src/planner/building/update.d.ts.map +1 -1
  74. package/dist/src/planner/building/update.js +13 -4
  75. package/dist/src/planner/building/update.js.map +1 -1
  76. package/dist/src/planner/framework/pass.js +3 -3
  77. package/dist/src/planner/nodes/dml-executor-node.d.ts +0 -9
  78. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  79. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  80. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  81. package/dist/src/planner/nodes/scalar.js +26 -3
  82. package/dist/src/planner/nodes/scalar.js.map +1 -1
  83. package/dist/src/planner/optimizer.d.ts.map +1 -1
  84. package/dist/src/planner/optimizer.js +5 -12
  85. package/dist/src/planner/optimizer.js.map +1 -1
  86. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  87. package/dist/src/planner/rules/access/rule-select-access-path.js +43 -18
  88. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  89. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -1
  90. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +23 -4
  91. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
  92. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts +10 -8
  93. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts.map +1 -1
  94. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js +10 -8
  95. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js.map +1 -1
  96. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +8 -1
  97. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
  98. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js +4 -0
  99. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js.map +1 -1
  100. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  101. package/dist/src/runtime/deferred-constraint-queue.js +10 -0
  102. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  103. package/dist/src/runtime/emit/aggregate-setup.d.ts +49 -0
  104. package/dist/src/runtime/emit/aggregate-setup.d.ts.map +1 -0
  105. package/dist/src/runtime/emit/aggregate-setup.js +99 -0
  106. package/dist/src/runtime/emit/aggregate-setup.js.map +1 -0
  107. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  108. package/dist/src/runtime/emit/aggregate.js +4 -69
  109. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  110. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  111. package/dist/src/runtime/emit/alter-table.js +348 -165
  112. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  113. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
  114. package/dist/src/runtime/emit/asof-scan.js +6 -0
  115. package/dist/src/runtime/emit/asof-scan.js.map +1 -1
  116. package/dist/src/runtime/emit/between.d.ts.map +1 -1
  117. package/dist/src/runtime/emit/between.js +32 -3
  118. package/dist/src/runtime/emit/between.js.map +1 -1
  119. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  120. package/dist/src/runtime/emit/binary.js +22 -2
  121. package/dist/src/runtime/emit/binary.js.map +1 -1
  122. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  123. package/dist/src/runtime/emit/bloom-join.js +24 -3
  124. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  125. package/dist/src/runtime/emit/cast.d.ts.map +1 -1
  126. package/dist/src/runtime/emit/cast.js +10 -23
  127. package/dist/src/runtime/emit/cast.js.map +1 -1
  128. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  129. package/dist/src/runtime/emit/constraint-check.js +41 -44
  130. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  131. package/dist/src/runtime/emit/create-view.d.ts.map +1 -1
  132. package/dist/src/runtime/emit/create-view.js +6 -0
  133. package/dist/src/runtime/emit/create-view.js.map +1 -1
  134. package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
  135. package/dist/src/runtime/emit/distinct.js +6 -3
  136. package/dist/src/runtime/emit/distinct.js.map +1 -1
  137. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  138. package/dist/src/runtime/emit/dml-executor.js +182 -81
  139. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  140. package/dist/src/runtime/emit/hash-aggregate.d.ts.map +1 -1
  141. package/dist/src/runtime/emit/hash-aggregate.js +16 -65
  142. package/dist/src/runtime/emit/hash-aggregate.js.map +1 -1
  143. package/dist/src/runtime/emit/insert.d.ts.map +1 -1
  144. package/dist/src/runtime/emit/insert.js +18 -7
  145. package/dist/src/runtime/emit/insert.js.map +1 -1
  146. package/dist/src/runtime/emit/join.js +5 -0
  147. package/dist/src/runtime/emit/join.js.map +1 -1
  148. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +14 -1
  149. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  150. package/dist/src/runtime/emit/materialized-view-helpers.js +33 -3
  151. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  152. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  153. package/dist/src/runtime/emit/materialized-view.js +47 -6
  154. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  155. package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
  156. package/dist/src/runtime/emit/merge-join.js +18 -8
  157. package/dist/src/runtime/emit/merge-join.js.map +1 -1
  158. package/dist/src/runtime/emit/set-object-tags.d.ts +8 -0
  159. package/dist/src/runtime/emit/set-object-tags.d.ts.map +1 -1
  160. package/dist/src/runtime/emit/set-object-tags.js +8 -0
  161. package/dist/src/runtime/emit/set-object-tags.js.map +1 -1
  162. package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
  163. package/dist/src/runtime/emit/set-operation.js +7 -4
  164. package/dist/src/runtime/emit/set-operation.js.map +1 -1
  165. package/dist/src/runtime/emit/sort.d.ts.map +1 -1
  166. package/dist/src/runtime/emit/sort.js +5 -2
  167. package/dist/src/runtime/emit/sort.js.map +1 -1
  168. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  169. package/dist/src/runtime/emit/subquery.js +113 -13
  170. package/dist/src/runtime/emit/subquery.js.map +1 -1
  171. package/dist/src/runtime/emit/temporal-arithmetic.d.ts +7 -0
  172. package/dist/src/runtime/emit/temporal-arithmetic.d.ts.map +1 -1
  173. package/dist/src/runtime/emit/temporal-arithmetic.js +15 -7
  174. package/dist/src/runtime/emit/temporal-arithmetic.js.map +1 -1
  175. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  176. package/dist/src/runtime/emit/update.js +44 -3
  177. package/dist/src/runtime/emit/update.js.map +1 -1
  178. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  179. package/dist/src/runtime/emit/window.js +72 -55
  180. package/dist/src/runtime/emit/window.js.map +1 -1
  181. package/dist/src/runtime/foreign-key-actions.d.ts +36 -1
  182. package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
  183. package/dist/src/runtime/foreign-key-actions.js +238 -116
  184. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  185. package/dist/src/runtime/parallel-driver.d.ts +6 -1
  186. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  187. package/dist/src/runtime/parallel-driver.js +7 -1
  188. package/dist/src/runtime/parallel-driver.js.map +1 -1
  189. package/dist/src/runtime/types.d.ts +18 -0
  190. package/dist/src/runtime/types.d.ts.map +1 -1
  191. package/dist/src/runtime/types.js.map +1 -1
  192. package/dist/src/schema/catalog-persistability.d.ts +58 -0
  193. package/dist/src/schema/catalog-persistability.d.ts.map +1 -0
  194. package/dist/src/schema/catalog-persistability.js +87 -0
  195. package/dist/src/schema/catalog-persistability.js.map +1 -0
  196. package/dist/src/schema/catalog.d.ts +17 -1
  197. package/dist/src/schema/catalog.d.ts.map +1 -1
  198. package/dist/src/schema/catalog.js +25 -3
  199. package/dist/src/schema/catalog.js.map +1 -1
  200. package/dist/src/schema/constraint-builder.d.ts +20 -22
  201. package/dist/src/schema/constraint-builder.d.ts.map +1 -1
  202. package/dist/src/schema/constraint-builder.js +43 -36
  203. package/dist/src/schema/constraint-builder.js.map +1 -1
  204. package/dist/src/schema/ddl-generator.d.ts +23 -0
  205. package/dist/src/schema/ddl-generator.d.ts.map +1 -1
  206. package/dist/src/schema/ddl-generator.js +27 -0
  207. package/dist/src/schema/ddl-generator.js.map +1 -1
  208. package/dist/src/schema/function.d.ts +30 -1
  209. package/dist/src/schema/function.d.ts.map +1 -1
  210. package/dist/src/schema/function.js.map +1 -1
  211. package/dist/src/schema/manager.d.ts +28 -0
  212. package/dist/src/schema/manager.d.ts.map +1 -1
  213. package/dist/src/schema/manager.js +82 -14
  214. package/dist/src/schema/manager.js.map +1 -1
  215. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  216. package/dist/src/schema/schema-differ.js +51 -12
  217. package/dist/src/schema/schema-differ.js.map +1 -1
  218. package/dist/src/schema/unique-enforcement.d.ts +31 -0
  219. package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
  220. package/dist/src/schema/unique-enforcement.js +37 -1
  221. package/dist/src/schema/unique-enforcement.js.map +1 -1
  222. package/dist/src/schema/window-function.d.ts +30 -10
  223. package/dist/src/schema/window-function.d.ts.map +1 -1
  224. package/dist/src/schema/window-function.js +20 -16
  225. package/dist/src/schema/window-function.js.map +1 -1
  226. package/dist/src/types/cast-semantics.d.ts +43 -0
  227. package/dist/src/types/cast-semantics.d.ts.map +1 -0
  228. package/dist/src/types/cast-semantics.js +59 -0
  229. package/dist/src/types/cast-semantics.js.map +1 -0
  230. package/dist/src/types/index.d.ts +1 -1
  231. package/dist/src/types/index.d.ts.map +1 -1
  232. package/dist/src/types/index.js +1 -1
  233. package/dist/src/types/index.js.map +1 -1
  234. package/dist/src/types/json-type.d.ts.map +1 -1
  235. package/dist/src/types/json-type.js +31 -10
  236. package/dist/src/types/json-type.js.map +1 -1
  237. package/dist/src/types/logical-type.d.ts +22 -0
  238. package/dist/src/types/logical-type.d.ts.map +1 -1
  239. package/dist/src/types/logical-type.js.map +1 -1
  240. package/dist/src/types/temporal-types.d.ts.map +1 -1
  241. package/dist/src/types/temporal-types.js +33 -11
  242. package/dist/src/types/temporal-types.js.map +1 -1
  243. package/dist/src/types/validation.d.ts +39 -1
  244. package/dist/src/types/validation.d.ts.map +1 -1
  245. package/dist/src/types/validation.js +60 -0
  246. package/dist/src/types/validation.js.map +1 -1
  247. package/dist/src/util/ast-spine-clone.d.ts +23 -0
  248. package/dist/src/util/ast-spine-clone.d.ts.map +1 -0
  249. package/dist/src/util/ast-spine-clone.js +41 -0
  250. package/dist/src/util/ast-spine-clone.js.map +1 -0
  251. package/dist/src/util/coercion.d.ts +13 -0
  252. package/dist/src/util/coercion.d.ts.map +1 -1
  253. package/dist/src/util/coercion.js +10 -1
  254. package/dist/src/util/coercion.js.map +1 -1
  255. package/dist/src/util/comparison.d.ts +89 -0
  256. package/dist/src/util/comparison.d.ts.map +1 -1
  257. package/dist/src/util/comparison.js +156 -27
  258. package/dist/src/util/comparison.js.map +1 -1
  259. package/dist/src/vtab/manifest.d.ts +7 -0
  260. package/dist/src/vtab/manifest.d.ts.map +1 -1
  261. package/dist/src/vtab/memory/connection.d.ts +14 -1
  262. package/dist/src/vtab/memory/connection.d.ts.map +1 -1
  263. package/dist/src/vtab/memory/connection.js +20 -2
  264. package/dist/src/vtab/memory/connection.js.map +1 -1
  265. package/dist/src/vtab/memory/layer/base.d.ts +6 -1
  266. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  267. package/dist/src/vtab/memory/layer/base.js +14 -5
  268. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  269. package/dist/src/vtab/memory/layer/connection.d.ts +17 -0
  270. package/dist/src/vtab/memory/layer/connection.d.ts.map +1 -1
  271. package/dist/src/vtab/memory/layer/connection.js +26 -0
  272. package/dist/src/vtab/memory/layer/connection.js.map +1 -1
  273. package/dist/src/vtab/memory/layer/manager.d.ts +96 -13
  274. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  275. package/dist/src/vtab/memory/layer/manager.js +595 -119
  276. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  277. package/dist/src/vtab/memory/layer/plan-filter.d.ts +41 -20
  278. package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
  279. package/dist/src/vtab/memory/layer/plan-filter.js +57 -27
  280. package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
  281. package/dist/src/vtab/memory/layer/row-convert.d.ts +21 -0
  282. package/dist/src/vtab/memory/layer/row-convert.d.ts.map +1 -0
  283. package/dist/src/vtab/memory/layer/row-convert.js +30 -0
  284. package/dist/src/vtab/memory/layer/row-convert.js.map +1 -0
  285. package/dist/src/vtab/memory/layer/scan-layer.d.ts +6 -3
  286. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  287. package/dist/src/vtab/memory/layer/scan-layer.js +48 -34
  288. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  289. package/dist/src/vtab/memory/layer/transaction.d.ts +127 -13
  290. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  291. package/dist/src/vtab/memory/layer/transaction.js +214 -65
  292. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  293. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  294. package/dist/src/vtab/memory/module.js +9 -2
  295. package/dist/src/vtab/memory/module.js.map +1 -1
  296. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  297. package/dist/src/vtab/memory/table.js +3 -2
  298. package/dist/src/vtab/memory/table.js.map +1 -1
  299. package/dist/src/vtab/memory/types.d.ts +27 -1
  300. package/dist/src/vtab/memory/types.d.ts.map +1 -1
  301. package/dist/src/vtab/memory/types.js +16 -1
  302. package/dist/src/vtab/memory/types.js.map +1 -1
  303. package/dist/src/vtab/memory/utils/primary-key.d.ts +9 -0
  304. package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
  305. package/dist/src/vtab/memory/utils/primary-key.js +11 -0
  306. package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
  307. package/dist/src/vtab/module.d.ts +63 -0
  308. package/dist/src/vtab/module.d.ts.map +1 -1
  309. package/dist/src/vtab/table.d.ts +24 -6
  310. package/dist/src/vtab/table.d.ts.map +1 -1
  311. package/dist/src/vtab/table.js.map +1 -1
  312. package/package.json +3 -3
  313. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts +0 -26
  314. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts.map +0 -1
  315. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js +0 -66
  316. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js.map +0 -1
@@ -1,28 +1,58 @@
1
+ import { keyParts, leadingKeyPart } from '../types.js';
1
2
  import { IndexConstraintOp } from '../../../common/constants.js';
2
- import { BINARY_COLLATION, compareSqlValuesFast } from '../../../util/comparison.js';
3
+ import { BINARY_COLLATION, compareSqlValuesFast, createTypedComparator } from '../../../util/comparison.js';
3
4
  /**
4
- * Resolves a plan's declared collation names against the owning database once,
5
- * ahead of the scan. Throws (via the resolver) if the plan names a collation that
6
- * is not registered an unresolvable collation is never downgraded to BINARY.
5
+ * The scanned index's column definitions: the PK definition for the primary tree
6
+ * (falling back to the all-columns synthesized PK exactly as `createPrimaryKeyFunctions`
7
+ * does), or the named secondary index's columns. Undefined when the plan names an
8
+ * index the schema does not know — comparisons then fall back to storage-class +
9
+ * collation ordering, matching the degenerate unbounded walk such plans produce.
10
+ */
11
+ function resolveIndexColumns(indexName, schema) {
12
+ if (indexName === 'primary') {
13
+ return schema.primaryKeyDefinition
14
+ ?? schema.columns.map((col, index) => ({ index, collation: col.collation || 'BINARY' }));
15
+ }
16
+ return schema.indexes?.find(idx => idx.name === indexName)?.columns;
17
+ }
18
+ /**
19
+ * Resolves a plan's declared collation names and the scanned index's column logical
20
+ * types into ready-to-run comparators, once, ahead of the scan. Throws (via the
21
+ * resolver) if the plan names a collation that is not registered — an unresolvable
22
+ * collation is never downgraded to BINARY.
7
23
  *
8
- * NOTE: this runs once per `scanLayer` call, not per row. A BINARY-only plan (the
9
- * common case) costs one empty array and one branch. If per-scan setup ever shows
10
- * up on a workload of very many tiny scans, memoize the result on the plan object
11
- * via a `WeakMap` keyed by `ScanPlan`.
24
+ * NOTE: this runs once per `scanLayer` call, not per row. A plain BINARY plan (the
25
+ * common case) costs one empty array and a couple of closures. If per-scan setup
26
+ * ever shows up on a workload of very many tiny scans, memoize the result on the
27
+ * plan object via a `WeakMap` keyed by `ScanPlan`.
12
28
  */
13
- export function resolveScanCollations(plan, collationResolver) {
14
- const equalityPrefix = (plan.equalityPrefix ?? []).map((_, i) => {
15
- const name = plan.equalityPrefixCollations?.[i];
16
- return name ? collationResolver(name) : BINARY_COLLATION;
17
- });
18
- const bound = plan.boundCollation ? collationResolver(plan.boundCollation) : BINARY_COLLATION;
19
- return { equalityPrefix, bound };
29
+ export function resolveScanComparators(plan, schema, collationResolver) {
30
+ const indexColumns = resolveIndexColumns(plan.indexName, schema);
31
+ const comparatorAt = (position, collationName) => {
32
+ const collationFunc = collationName ? collationResolver(collationName) : BINARY_COLLATION;
33
+ const columnDef = indexColumns?.[position];
34
+ const logicalType = columnDef ? schema.columns[columnDef.index]?.logicalType : undefined;
35
+ // Mirror the tree's key comparator construction exactly (see interface doc).
36
+ return logicalType
37
+ ? createTypedComparator(logicalType, collationFunc)
38
+ : (a, b) => compareSqlValuesFast(a, b, collationFunc);
39
+ };
40
+ const equalityPrefix = (plan.equalityPrefix ?? []).map((_, i) => comparatorAt(i, plan.equalityPrefixCollations?.[i]));
41
+ // The range bound applies to the leading index column, or — for a prefix-range
42
+ // plan — to the column immediately after the equality prefix (see scan-plan.ts).
43
+ const bound = comparatorAt(plan.equalityPrefix?.length ?? 0, plan.boundCollation);
44
+ // `!== 1`, not `> 1`: the zero-column (singleton) primary key's extractor returns
45
+ // `[]`, so it stores tuple keys too. `resolveIndexColumns` falls back to the
46
+ // synthesized all-columns definition exactly as `createPrimaryKeyFunctions` does,
47
+ // so the two arities cannot drift.
48
+ const keyIsTuple = (indexColumns?.length ?? 1) !== 1;
49
+ return { equalityPrefix, bound, keyIsTuple };
20
50
  }
21
51
  /**
22
52
  * Checks whether a given BTree key satisfies the constraints in a ScanPlan.
23
53
  * Handles equality, prefix-range, and simple bound constraints.
24
54
  */
25
- export function planAppliesToKey(plan, key, keyComparator, collations) {
55
+ export function planAppliesToKey(plan, key, keyComparator, comparators) {
26
56
  if (plan.equalityKey != null) {
27
57
  return keyComparator(key, plan.equalityKey) === 0;
28
58
  }
@@ -30,7 +60,7 @@ export function planAppliesToKey(plan, key, keyComparator, collations) {
30
60
  // never true. Reachable when a parameter or correlated value binds NULL at
31
61
  // runtime — plan-time literal NULLs never get here (constraint extraction
32
62
  // declines range bounds; the access-path rule emits EmptyResult for seeks).
33
- // Without this, compareSqlValuesFast ranks every key above a NULL bound (key
63
+ // Without this, the key comparators rank every key above a NULL bound (key
34
64
  // ordering), so `col > ?` bound to NULL would admit every row, and a NULL
35
65
  // prefix component would equality-match stored NULL index entries.
36
66
  if (plan.lowerBound?.value === null || plan.upperBound?.value === null)
@@ -38,13 +68,13 @@ export function planAppliesToKey(plan, key, keyComparator, collations) {
38
68
  if (plan.equalityPrefix?.some(v => v === null))
39
69
  return false;
40
70
  // Prefix-range: check prefix equality + trailing column bounds. The prefix and
41
- // bound compares honour the index columns' declared collations (resolved once per
42
- // scan into `collations`) so a non-BINARY seek matches exactly the
43
- // collation-correct window; an undeclared collation resolves to BINARY.
71
+ // bound compares run under the index columns' typed comparators (resolved once per
72
+ // scan into `comparators`) so a non-BINARY or semantically-ordered seek matches
73
+ // exactly the window the tree's order defines.
44
74
  if (plan.equalityPrefix) {
45
- const keyArr = Array.isArray(key) ? key : [key];
75
+ const keyArr = keyParts(key, comparators.keyIsTuple);
46
76
  for (let i = 0; i < plan.equalityPrefix.length; i++) {
47
- if (compareSqlValuesFast(keyArr[i], plan.equalityPrefix[i], collations.equalityPrefix[i]) !== 0)
77
+ if (comparators.equalityPrefix[i](keyArr[i], plan.equalityPrefix[i]) !== 0)
48
78
  return false;
49
79
  }
50
80
  const trailingValue = keyArr[plan.equalityPrefix.length];
@@ -57,19 +87,19 @@ export function planAppliesToKey(plan, key, keyComparator, collations) {
57
87
  return false;
58
88
  if (trailingValue !== undefined && trailingValue !== null) {
59
89
  if (plan.lowerBound) {
60
- const cmp = compareSqlValuesFast(trailingValue, plan.lowerBound.value, collations.bound);
90
+ const cmp = comparators.bound(trailingValue, plan.lowerBound.value);
61
91
  if (cmp < 0 || (cmp === 0 && plan.lowerBound.op === IndexConstraintOp.GT))
62
92
  return false;
63
93
  }
64
94
  if (plan.upperBound) {
65
- const cmp = compareSqlValuesFast(trailingValue, plan.upperBound.value, collations.bound);
95
+ const cmp = comparators.bound(trailingValue, plan.upperBound.value);
66
96
  if (cmp > 0 || (cmp === 0 && plan.upperBound.op === IndexConstraintOp.LT))
67
97
  return false;
68
98
  }
69
99
  }
70
100
  return true;
71
101
  }
72
- const keyForBoundComparison = Array.isArray(key) ? key[0] : key;
102
+ const keyForBoundComparison = leadingKeyPart(key, comparators.keyIsTuple);
73
103
  // A NULL bound-column value never satisfies a range comparison (`NULL <op> v` is
74
104
  // NULL, never true), so a NULL key is excluded whenever a range bound is present.
75
105
  // The seek covers the predicate (the planner drops the residual `Filter`), so this
@@ -79,12 +109,12 @@ export function planAppliesToKey(plan, key, keyComparator, collations) {
79
109
  if (keyForBoundComparison === null && (plan.lowerBound || plan.upperBound))
80
110
  return false;
81
111
  if (plan.lowerBound && (keyForBoundComparison !== undefined && keyForBoundComparison !== null)) {
82
- const cmp = compareSqlValuesFast(keyForBoundComparison, plan.lowerBound.value, collations.bound);
112
+ const cmp = comparators.bound(keyForBoundComparison, plan.lowerBound.value);
83
113
  if (cmp < 0 || (cmp === 0 && plan.lowerBound.op === IndexConstraintOp.GT))
84
114
  return false;
85
115
  }
86
116
  if (plan.upperBound && (keyForBoundComparison !== undefined && keyForBoundComparison !== null)) {
87
- const cmp = compareSqlValuesFast(keyForBoundComparison, plan.upperBound.value, collations.bound);
117
+ const cmp = comparators.bound(keyForBoundComparison, plan.upperBound.value);
88
118
  if (cmp > 0 || (cmp === 0 && plan.upperBound.op === IndexConstraintOp.LT))
89
119
  return false;
90
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plan-filter.js","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/plan-filter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-filter.js","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/plan-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Row, SqlValue } from '../../../common/types.js';
2
+ /** Replaces the value at one column index of a row with its post-ALTER form. */
3
+ export type RowMapper = (row: Row) => Row;
4
+ /**
5
+ * One row's worth of the value rewrite an `alter column … set data type` / `set not null`
6
+ * backfill performs: the value at `colIndex` run through `convert`. A NULL passes through
7
+ * untouched UNLESS `convertNulls` is set (the SET NOT NULL backfill maps null → DEFAULT).
8
+ * The row is returned unchanged — same object — when nothing needs converting.
9
+ *
10
+ * Shared by every site that has to agree on what "the converted row" is: the pre-mutation
11
+ * UNIQUE probe, the committed-base rewrite, and each open transaction layer's own-write
12
+ * rewrite. Callers differ only in whether they let a conversion failure propagate; the two
13
+ * rewrite sites keep the row as-is (the value is shadowed and unreadable — see their
14
+ * docstrings), the probe lets it throw.
15
+ */
16
+ export declare function convertRowAtIndex(row: Row, colIndex: number, convert: (v: SqlValue) => SqlValue, convertNulls: boolean): Row;
17
+ /** Applies `mapRow` to a synchronous row stream (the memory module's own effective rows). */
18
+ export declare function mapRows(rows: Iterable<Row>, mapRow: RowMapper): Iterable<Row>;
19
+ /** Applies `mapRow` to an async row stream (a wrapper module's `EffectiveRowSource`). */
20
+ export declare function mapRowsAsync(rows: AsyncIterable<Row>, mapRow: RowMapper): AsyncIterable<Row>;
21
+ //# sourceMappingURL=row-convert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-convert.d.ts","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/row-convert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAE9D,gFAAgF;AAChF,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;AAE1C;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAChC,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,EAClC,YAAY,EAAE,OAAO,GACnB,GAAG,CAKL;AAED,6FAA6F;AAC7F,wBAAiB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAE9E;AAED,yFAAyF;AACzF,wBAAuB,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAEnG"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * One row's worth of the value rewrite an `alter column … set data type` / `set not null`
3
+ * backfill performs: the value at `colIndex` run through `convert`. A NULL passes through
4
+ * untouched UNLESS `convertNulls` is set (the SET NOT NULL backfill maps null → DEFAULT).
5
+ * The row is returned unchanged — same object — when nothing needs converting.
6
+ *
7
+ * Shared by every site that has to agree on what "the converted row" is: the pre-mutation
8
+ * UNIQUE probe, the committed-base rewrite, and each open transaction layer's own-write
9
+ * rewrite. Callers differ only in whether they let a conversion failure propagate; the two
10
+ * rewrite sites keep the row as-is (the value is shadowed and unreadable — see their
11
+ * docstrings), the probe lets it throw.
12
+ */
13
+ export function convertRowAtIndex(row, colIndex, convert, convertNulls) {
14
+ const oldVal = row[colIndex];
15
+ if (oldVal === null && !convertNulls)
16
+ return row;
17
+ const newVal = convert(oldVal);
18
+ return row.map((v, i) => i === colIndex ? newVal : v);
19
+ }
20
+ /** Applies `mapRow` to a synchronous row stream (the memory module's own effective rows). */
21
+ export function* mapRows(rows, mapRow) {
22
+ for (const row of rows)
23
+ yield mapRow(row);
24
+ }
25
+ /** Applies `mapRow` to an async row stream (a wrapper module's `EffectiveRowSource`). */
26
+ export async function* mapRowsAsync(rows, mapRow) {
27
+ for await (const row of rows)
28
+ yield mapRow(row);
29
+ }
30
+ //# sourceMappingURL=row-convert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-convert.js","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/row-convert.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAChC,GAAQ,EACR,QAAgB,EAChB,OAAkC,EAClC,YAAqB;IAErB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,GAAG,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAQ,CAAC;AAC9D,CAAC;AAED,6FAA6F;AAC7F,MAAM,SAAS,CAAC,CAAC,OAAO,CAAC,IAAmB,EAAE,MAAiB;IAC9D,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,CAAC,IAAwB,EAAE,MAAiB;IAC9E,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAI;QAAE,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;AACjD,CAAC"}
@@ -5,9 +5,12 @@ import { type Row } from '../../../common/types.js';
5
5
  * Scans a layer (base or transaction) according to a ScanPlan, yielding matching rows.
6
6
  * Operates on the Layer interface — the inherited BTrees handle data inheritance transparently.
7
7
  *
8
- * The plan's collation *names* are resolved against the layer's database exactly once
9
- * here; {@link scanLayerResolved} does the work and passes the functions down its own
10
- * recursion, so a multi-seek or multi-range plan never re-resolves per sub-scan or per row.
8
+ * The plan's collation names and the scanned index's column types are resolved into
9
+ * per-column comparators exactly once here; {@link scanLayerResolved} does the work and
10
+ * passes the functions down its own recursion, so a multi-seek or multi-range plan
11
+ * never re-resolves per sub-scan or per row. The comparators mirror the tree's own key
12
+ * comparator (typed — see plan-filter.ts), so bound filtering and early termination
13
+ * agree with the physical BTree order.
11
14
  */
12
15
  export declare function scanLayer(layer: Layer, plan: ScanPlan): Iterable<Row>;
13
16
  //# sourceMappingURL=scan-layer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan-layer.d.ts","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/scan-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAI5C,OAAO,EAAc,KAAK,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAehE;;;;;;;GAOG;AACH,wBAAiB,SAAS,CACzB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,QAAQ,GACZ,QAAQ,CAAC,GAAG,CAAC,CAEf"}
1
+ {"version":3,"file":"scan-layer.d.ts","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/scan-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,EAAc,KAAK,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAmBhE;;;;;;;;;;GAUG;AACH,wBAAiB,SAAS,CACzB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,QAAQ,GACZ,QAAQ,CAAC,GAAG,CAAC,CAEf"}
@@ -1,36 +1,43 @@
1
+ import { keyParts, leadingKeyPart } from '../types.js';
1
2
  import { IndexConstraintOp } from '../../../common/constants.js';
2
- import { compareSqlValuesFast } from '../../../util/comparison.js';
3
3
  import { StatusCode } from '../../../common/types.js';
4
4
  import { safeIterate } from './safe-iterate.js';
5
5
  import { QuereusError } from '../../../common/errors.js';
6
- import { planAppliesToKey, resolveScanCollations } from './plan-filter.js';
6
+ import { planAppliesToKey, resolveScanComparators } from './plan-filter.js';
7
7
  /**
8
8
  * True if a multi-seek key is SQL NULL (scalar) or contains any NULL component
9
9
  * (composite tuple). Such a key contributes no match: `x IN (…, NULL)` is TRUE on
10
10
  * a non-null equal element else NULL, so the WHERE excludes the row; for a tuple
11
11
  * seek, a NULL in any component makes the row-value comparison NULL ⇒ no match.
12
+ *
13
+ * `keyIsTuple` comes from the scanned structure's arity (see the {@link BTreeKey}
14
+ * invariant) — sniffing it would read the JSON document `[null]` as a NULL-bearing
15
+ * tuple and silently drop the equality seek that should match it.
12
16
  */
13
- function seekKeyHasNull(key) {
14
- return Array.isArray(key) ? key.some(v => v === null) : key === null;
17
+ function seekKeyHasNull(key, keyIsTuple) {
18
+ return keyParts(key, keyIsTuple).some(v => v === null);
15
19
  }
16
20
  /**
17
21
  * Scans a layer (base or transaction) according to a ScanPlan, yielding matching rows.
18
22
  * Operates on the Layer interface — the inherited BTrees handle data inheritance transparently.
19
23
  *
20
- * The plan's collation *names* are resolved against the layer's database exactly once
21
- * here; {@link scanLayerResolved} does the work and passes the functions down its own
22
- * recursion, so a multi-seek or multi-range plan never re-resolves per sub-scan or per row.
24
+ * The plan's collation names and the scanned index's column types are resolved into
25
+ * per-column comparators exactly once here; {@link scanLayerResolved} does the work and
26
+ * passes the functions down its own recursion, so a multi-seek or multi-range plan
27
+ * never re-resolves per sub-scan or per row. The comparators mirror the tree's own key
28
+ * comparator (typed — see plan-filter.ts), so bound filtering and early termination
29
+ * agree with the physical BTree order.
23
30
  */
24
31
  export function* scanLayer(layer, plan) {
25
- yield* scanLayerResolved(layer, plan, resolveScanCollations(plan, layer.collationResolver));
32
+ yield* scanLayerResolved(layer, plan, resolveScanComparators(plan, layer.getSchema(), layer.collationResolver));
26
33
  }
27
34
  /**
28
- * The scan body. `collations` holds the plan's already-resolved collation functions;
29
- * narrowing a plan (multi-seek → single key, multi-range → single range) never changes
30
- * which columns the prefix/bound collations describe, so the same functions are reused
31
- * down the recursion.
35
+ * The scan body. `comparators` holds the plan's already-resolved bound/prefix
36
+ * comparators; narrowing a plan (multi-seek → single key, multi-range → single range)
37
+ * never changes which columns the prefix/bound comparators describe, so the same
38
+ * functions are reused down the recursion.
32
39
  */
33
- function* scanLayerResolved(layer, plan, collations) {
40
+ function* scanLayerResolved(layer, plan, comparators) {
34
41
  // Multi-seek: iterate over multiple equality keys (e.g. `col IN (v1, v2, …)`).
35
42
  // This is set-membership, not a bag, so two faults must be avoided:
36
43
  // - A duplicate seek key (`IN (5, 5)`, or two case-variant literals that hit the
@@ -48,10 +55,10 @@ function* scanLayerResolved(layer, plan, collations) {
48
55
  const { primaryKeyExtractorFromRow, primaryKeyEncoder: encodePk } = layer.getPkExtractorsAndComparators(seekSchema);
49
56
  const seen = new Set();
50
57
  for (const key of plan.equalityKeys) {
51
- if (seekKeyHasNull(key))
58
+ if (seekKeyHasNull(key, comparators.keyIsTuple))
52
59
  continue;
53
60
  const singlePlan = { ...plan, equalityKey: key, equalityKeys: undefined };
54
- for (const row of scanLayerResolved(layer, singlePlan, collations)) {
61
+ for (const row of scanLayerResolved(layer, singlePlan, comparators)) {
55
62
  const encoded = encodePk(primaryKeyExtractorFromRow(row));
56
63
  // A key already in `seen` means this row was yielded by an earlier seek.
57
64
  if (seen.has(encoded))
@@ -71,7 +78,7 @@ function* scanLayerResolved(layer, plan, collations) {
71
78
  lowerBound: range.lowerBound,
72
79
  upperBound: range.upperBound,
73
80
  };
74
- yield* scanLayerResolved(layer, singlePlan, collations);
81
+ yield* scanLayerResolved(layer, singlePlan, comparators);
75
82
  }
76
83
  return;
77
84
  }
@@ -86,7 +93,7 @@ function* scanLayerResolved(layer, plan, collations) {
86
93
  // logic ⇒ no row matches. Short-circuit before `tree.get`: a literal `null`
87
94
  // could otherwise match a stored NULL index entry for a composite key. Only
88
95
  // `undefined` (no equality key) falls through to the full/range walk below.
89
- if (seekKeyHasNull(plan.equalityKey))
96
+ if (seekKeyHasNull(plan.equalityKey, comparators.keyIsTuple))
90
97
  return;
91
98
  const value = tree.get(plan.equalityKey);
92
99
  if (value) {
@@ -99,6 +106,11 @@ function* scanLayerResolved(layer, plan, collations) {
99
106
  // that column descending. The synthesized all-columns fallback definition
100
107
  // carries no `desc`, so the `?.` chain yields false there, which is correct.
101
108
  const isDescFirstColumn = schema.primaryKeyDefinition?.[0]?.desc === true;
109
+ // NOTE: `> 1`, whereas the key-shape flag `comparators.keyIsTuple` uses `!== 1`.
110
+ // They differ only for the zero-column singleton PK, which stores `[]`: neither
111
+ // branch below can reach it (an `equalityPrefix` needs a PK column, and there is
112
+ // no column for a bound to constrain), so the seek key is never built for it. If a
113
+ // zero-arity plan ever does reach here, switch this to `keyIsTuple`.
102
114
  const isComposite = (schema.primaryKeyDefinition?.length ?? schema.columns.length) > 1;
103
115
  // Seek-start selection must depend on the *physical* walk direction, not just
104
116
  // the key's declared direction. The four {isAscending}×{isDescFirstColumn}
@@ -141,13 +153,13 @@ function* scanLayerResolved(layer, plan, collations) {
141
153
  for (const value of safeIterate(tree, isAscending, startKey, primaryKeyExtractorFromRow)) {
142
154
  const row = value;
143
155
  const primaryKey = primaryKeyExtractorFromRow(row);
144
- if (!planAppliesToKey(plan, primaryKey, primaryKeyComparator, collations)) {
156
+ if (!planAppliesToKey(plan, primaryKey, primaryKeyComparator, comparators)) {
145
157
  // Early termination for prefix-range: break when prefix no longer matches
146
158
  if (plan.equalityPrefix) {
147
- const keyArr = Array.isArray(primaryKey) ? primaryKey : [primaryKey];
159
+ const keyArr = keyParts(primaryKey, comparators.keyIsTuple);
148
160
  let prefixMismatch = false;
149
161
  for (let i = 0; i < plan.equalityPrefix.length; i++) {
150
- if (compareSqlValuesFast(keyArr[i], plan.equalityPrefix[i], collations.equalityPrefix[i]) !== 0) {
162
+ if (comparators.equalityPrefix[i](keyArr[i], plan.equalityPrefix[i]) !== 0) {
151
163
  prefixMismatch = true;
152
164
  break;
153
165
  }
@@ -159,17 +171,18 @@ function* scanLayerResolved(layer, plan, collations) {
159
171
  // Past the bound we terminate at — early exit. We seek from one end
160
172
  // and terminate at the other, so this is the complement of
161
173
  // seekFromUpper and holds for both physical walk directions. The
162
- // terminating compare uses the bound column's declared collation so a
163
- // non-BINARY walk terminates at the collation-correct boundary.
164
- const keyForComparison = Array.isArray(primaryKey) ? primaryKey[0] : primaryKey;
174
+ // terminating compare uses the bound column's typed comparator (same
175
+ // construction as the tree's key comparator) so the walk terminates
176
+ // at the boundary of the tree's own order.
177
+ const keyForComparison = leadingKeyPart(primaryKey, comparators.keyIsTuple);
165
178
  if (!seekFromUpper && plan.upperBound) {
166
- const cmp = compareSqlValuesFast(keyForComparison, plan.upperBound.value, collations.bound);
179
+ const cmp = comparators.bound(keyForComparison, plan.upperBound.value);
167
180
  if (cmp > 0 || (cmp === 0 && plan.upperBound.op === IndexConstraintOp.LT)) {
168
181
  break;
169
182
  }
170
183
  }
171
184
  else if (seekFromUpper && plan.lowerBound) {
172
- const cmp = compareSqlValuesFast(keyForComparison, plan.lowerBound.value, collations.bound);
185
+ const cmp = comparators.bound(keyForComparison, plan.lowerBound.value);
173
186
  if (cmp < 0 || (cmp === 0 && plan.lowerBound.op === IndexConstraintOp.GT)) {
174
187
  break;
175
188
  }
@@ -199,7 +212,7 @@ function* scanLayerResolved(layer, plan, collations) {
199
212
  if (plan.equalityKey !== undefined) {
200
213
  // NULL equality is UNKNOWN ⇒ no rows (see the primary branch above). Only
201
214
  // `undefined` falls through to the ordered walk.
202
- if (seekKeyHasNull(plan.equalityKey))
215
+ if (seekKeyHasNull(plan.equalityKey, comparators.keyIsTuple))
203
216
  return;
204
217
  const indexEntry = indexTree.get(plan.equalityKey);
205
218
  if (indexEntry && primaryTree) {
@@ -249,13 +262,13 @@ function* scanLayerResolved(layer, plan, collations) {
249
262
  }
250
263
  }
251
264
  for (const indexEntry of safeIterate(indexTree, isAscending, startKey, entry => entry.indexKey)) {
252
- if (!planAppliesToKey(plan, indexEntry.indexKey, primaryKeyComparator, collations)) {
265
+ if (!planAppliesToKey(plan, indexEntry.indexKey, primaryKeyComparator, comparators)) {
253
266
  // Early termination for prefix-range: break when prefix no longer matches
254
267
  if (plan.equalityPrefix) {
255
- const keyArr = Array.isArray(indexEntry.indexKey) ? indexEntry.indexKey : [indexEntry.indexKey];
268
+ const keyArr = keyParts(indexEntry.indexKey, comparators.keyIsTuple);
256
269
  let prefixMismatch = false;
257
270
  for (let i = 0; i < plan.equalityPrefix.length; i++) {
258
- if (compareSqlValuesFast(keyArr[i], plan.equalityPrefix[i], collations.equalityPrefix[i]) !== 0) {
271
+ if (comparators.equalityPrefix[i](keyArr[i], plan.equalityPrefix[i]) !== 0) {
259
272
  prefixMismatch = true;
260
273
  break;
261
274
  }
@@ -266,17 +279,18 @@ function* scanLayerResolved(layer, plan, collations) {
266
279
  }
267
280
  // Early termination: break once the leading column passes the bound we
268
281
  // terminate at (the complement of seekFromUpper; holds for both
269
- // physical walk directions). Uses the bound column's declared collation
270
- // so a non-BINARY index walk terminates at the collation-correct boundary.
271
- const keyForComparison = Array.isArray(indexEntry.indexKey) ? indexEntry.indexKey[0] : indexEntry.indexKey;
282
+ // physical walk directions). Uses the bound column's typed comparator
283
+ // (same construction as the index tree's key comparator) so the walk
284
+ // terminates at the boundary of the tree's own order.
285
+ const keyForComparison = leadingKeyPart(indexEntry.indexKey, comparators.keyIsTuple);
272
286
  if (!seekFromUpper && plan.upperBound) {
273
- const cmp = compareSqlValuesFast(keyForComparison, plan.upperBound.value, collations.bound);
287
+ const cmp = comparators.bound(keyForComparison, plan.upperBound.value);
274
288
  if (cmp > 0 || (cmp === 0 && plan.upperBound.op === IndexConstraintOp.LT)) {
275
289
  break;
276
290
  }
277
291
  }
278
292
  else if (seekFromUpper && plan.lowerBound) {
279
- const cmp = compareSqlValuesFast(keyForComparison, plan.lowerBound.value, collations.bound);
293
+ const cmp = comparators.bound(keyForComparison, plan.lowerBound.value);
280
294
  if (cmp < 0 || (cmp === 0 && plan.lowerBound.op === IndexConstraintOp.GT)) {
281
295
  break;
282
296
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scan-layer.js","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/scan-layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scan-layer.js","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/scan-layer.ts"],"names":[],"mappings":"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"}