@quereus/quereus 4.8.0 → 4.10.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 (280) hide show
  1. package/dist/src/core/database.d.ts +6 -0
  2. package/dist/src/core/database.d.ts.map +1 -1
  3. package/dist/src/core/database.js +45 -5
  4. package/dist/src/core/database.js.map +1 -1
  5. package/dist/src/core/statement.d.ts.map +1 -1
  6. package/dist/src/core/statement.js +74 -15
  7. package/dist/src/core/statement.js.map +1 -1
  8. package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
  9. package/dist/src/func/builtins/aggregate.js +88 -35
  10. package/dist/src/func/builtins/aggregate.js.map +1 -1
  11. package/dist/src/func/builtins/conversion.d.ts +5 -0
  12. package/dist/src/func/builtins/conversion.d.ts.map +1 -1
  13. package/dist/src/func/builtins/conversion.js +16 -2
  14. package/dist/src/func/builtins/conversion.js.map +1 -1
  15. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  16. package/dist/src/func/builtins/explain.js +9 -2
  17. package/dist/src/func/builtins/explain.js.map +1 -1
  18. package/dist/src/func/builtins/index.d.ts.map +1 -1
  19. package/dist/src/func/builtins/index.js +5 -2
  20. package/dist/src/func/builtins/index.js.map +1 -1
  21. package/dist/src/func/builtins/scalar.d.ts.map +1 -1
  22. package/dist/src/func/builtins/scalar.js +4 -2
  23. package/dist/src/func/builtins/scalar.js.map +1 -1
  24. package/dist/src/func/builtins/string.d.ts +2 -0
  25. package/dist/src/func/builtins/string.d.ts.map +1 -1
  26. package/dist/src/func/builtins/string.js +60 -4
  27. package/dist/src/func/builtins/string.js.map +1 -1
  28. package/dist/src/func/registration.d.ts +6 -0
  29. package/dist/src/func/registration.d.ts.map +1 -1
  30. package/dist/src/func/registration.js +1 -0
  31. package/dist/src/func/registration.js.map +1 -1
  32. package/dist/src/index.d.ts +7 -3
  33. package/dist/src/index.d.ts.map +1 -1
  34. package/dist/src/index.js +21 -2
  35. package/dist/src/index.js.map +1 -1
  36. package/dist/src/planner/building/constraint-builder.js +1 -1
  37. package/dist/src/planner/building/constraint-builder.js.map +1 -1
  38. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  39. package/dist/src/planner/nodes/scalar.js +13 -1
  40. package/dist/src/planner/nodes/scalar.js.map +1 -1
  41. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
  42. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +121 -51
  43. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
  44. package/dist/src/planner/rules/shared/index-style-context.d.ts +14 -4
  45. package/dist/src/planner/rules/shared/index-style-context.d.ts.map +1 -1
  46. package/dist/src/planner/rules/shared/index-style-context.js +14 -4
  47. package/dist/src/planner/rules/shared/index-style-context.js.map +1 -1
  48. package/dist/src/runtime/emission-context.d.ts +14 -1
  49. package/dist/src/runtime/emission-context.d.ts.map +1 -1
  50. package/dist/src/runtime/emission-context.js +17 -5
  51. package/dist/src/runtime/emission-context.js.map +1 -1
  52. package/dist/src/runtime/emit/aggregate-setup.d.ts +44 -8
  53. package/dist/src/runtime/emit/aggregate-setup.d.ts.map +1 -1
  54. package/dist/src/runtime/emit/aggregate-setup.js +79 -15
  55. package/dist/src/runtime/emit/aggregate-setup.js.map +1 -1
  56. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  57. package/dist/src/runtime/emit/aggregate.js +21 -106
  58. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  59. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  60. package/dist/src/runtime/emit/alter-table.js +212 -155
  61. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  62. package/dist/src/runtime/emit/asof-scan.js +1 -1
  63. package/dist/src/runtime/emit/asof-scan.js.map +1 -1
  64. package/dist/src/runtime/emit/assertion-drop-guard.d.ts +26 -12
  65. package/dist/src/runtime/emit/assertion-drop-guard.d.ts.map +1 -1
  66. package/dist/src/runtime/emit/assertion-drop-guard.js +45 -26
  67. package/dist/src/runtime/emit/assertion-drop-guard.js.map +1 -1
  68. package/dist/src/runtime/emit/assertion-rename-helpers.d.ts +6 -6
  69. package/dist/src/runtime/emit/assertion-rename-helpers.d.ts.map +1 -1
  70. package/dist/src/runtime/emit/assertion-rename-helpers.js +18 -20
  71. package/dist/src/runtime/emit/assertion-rename-helpers.js.map +1 -1
  72. package/dist/src/runtime/emit/between.d.ts +2 -0
  73. package/dist/src/runtime/emit/between.d.ts.map +1 -1
  74. package/dist/src/runtime/emit/between.js +7 -8
  75. package/dist/src/runtime/emit/between.js.map +1 -1
  76. package/dist/src/runtime/emit/binary.d.ts +27 -5
  77. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  78. package/dist/src/runtime/emit/binary.js +278 -187
  79. package/dist/src/runtime/emit/binary.js.map +1 -1
  80. package/dist/src/runtime/emit/case.d.ts +34 -0
  81. package/dist/src/runtime/emit/case.d.ts.map +1 -1
  82. package/dist/src/runtime/emit/case.js +18 -11
  83. package/dist/src/runtime/emit/case.js.map +1 -1
  84. package/dist/src/runtime/emit/cast.d.ts +2 -0
  85. package/dist/src/runtime/emit/cast.d.ts.map +1 -1
  86. package/dist/src/runtime/emit/cast.js +7 -5
  87. package/dist/src/runtime/emit/cast.js.map +1 -1
  88. package/dist/src/runtime/emit/column-reference.d.ts +3 -1
  89. package/dist/src/runtime/emit/column-reference.d.ts.map +1 -1
  90. package/dist/src/runtime/emit/column-reference.js +6 -2
  91. package/dist/src/runtime/emit/column-reference.js.map +1 -1
  92. package/dist/src/runtime/emit/column-rename-cascade.d.ts +84 -0
  93. package/dist/src/runtime/emit/column-rename-cascade.d.ts.map +1 -0
  94. package/dist/src/runtime/emit/column-rename-cascade.js +134 -0
  95. package/dist/src/runtime/emit/column-rename-cascade.js.map +1 -0
  96. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  97. package/dist/src/runtime/emit/dml-executor.js +21 -0
  98. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  99. package/dist/src/runtime/emit/drop-column-guards.d.ts +82 -53
  100. package/dist/src/runtime/emit/drop-column-guards.d.ts.map +1 -1
  101. package/dist/src/runtime/emit/drop-column-guards.js +155 -90
  102. package/dist/src/runtime/emit/drop-column-guards.js.map +1 -1
  103. package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
  104. package/dist/src/runtime/emit/drop-table.js +5 -0
  105. package/dist/src/runtime/emit/drop-table.js.map +1 -1
  106. package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
  107. package/dist/src/runtime/emit/drop-view.js +5 -0
  108. package/dist/src/runtime/emit/drop-view.js.map +1 -1
  109. package/dist/src/runtime/emit/expression-drop-guard.d.ts +57 -0
  110. package/dist/src/runtime/emit/expression-drop-guard.d.ts.map +1 -0
  111. package/dist/src/runtime/emit/expression-drop-guard.js +82 -0
  112. package/dist/src/runtime/emit/expression-drop-guard.js.map +1 -0
  113. package/dist/src/runtime/emit/filter.d.ts +1 -1
  114. package/dist/src/runtime/emit/filter.js +1 -1
  115. package/dist/src/runtime/emit/hash-aggregate.d.ts.map +1 -1
  116. package/dist/src/runtime/emit/hash-aggregate.js +18 -88
  117. package/dist/src/runtime/emit/hash-aggregate.js.map +1 -1
  118. package/dist/src/runtime/emit/literal.d.ts +14 -1
  119. package/dist/src/runtime/emit/literal.d.ts.map +1 -1
  120. package/dist/src/runtime/emit/literal.js +33 -7
  121. package/dist/src/runtime/emit/literal.js.map +1 -1
  122. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +33 -10
  123. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  124. package/dist/src/runtime/emit/materialized-view-helpers.js +158 -49
  125. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  126. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  127. package/dist/src/runtime/emit/materialized-view.js +3 -0
  128. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  129. package/dist/src/runtime/emit/parameter.d.ts +3 -1
  130. package/dist/src/runtime/emit/parameter.d.ts.map +1 -1
  131. package/dist/src/runtime/emit/parameter.js +7 -2
  132. package/dist/src/runtime/emit/parameter.js.map +1 -1
  133. package/dist/src/runtime/emit/scalar-function.d.ts +29 -1
  134. package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
  135. package/dist/src/runtime/emit/scalar-function.js +66 -16
  136. package/dist/src/runtime/emit/scalar-function.js.map +1 -1
  137. package/dist/src/runtime/emit/scalar-op.d.ts +63 -0
  138. package/dist/src/runtime/emit/scalar-op.d.ts.map +1 -0
  139. package/dist/src/runtime/emit/scalar-op.js +37 -0
  140. package/dist/src/runtime/emit/scalar-op.js.map +1 -0
  141. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  142. package/dist/src/runtime/emit/scan.js +19 -1
  143. package/dist/src/runtime/emit/scan.js.map +1 -1
  144. package/dist/src/runtime/emit/temporal-arithmetic.d.ts +18 -8
  145. package/dist/src/runtime/emit/temporal-arithmetic.d.ts.map +1 -1
  146. package/dist/src/runtime/emit/temporal-arithmetic.js +29 -311
  147. package/dist/src/runtime/emit/temporal-arithmetic.js.map +1 -1
  148. package/dist/src/runtime/emit/unary.d.ts +2 -0
  149. package/dist/src/runtime/emit/unary.d.ts.map +1 -1
  150. package/dist/src/runtime/emit/unary.js +125 -53
  151. package/dist/src/runtime/emit/unary.js.map +1 -1
  152. package/dist/src/runtime/emitters.d.ts +22 -0
  153. package/dist/src/runtime/emitters.d.ts.map +1 -1
  154. package/dist/src/runtime/emitters.js +29 -0
  155. package/dist/src/runtime/emitters.js.map +1 -1
  156. package/dist/src/runtime/scalar-fusion.d.ts +47 -0
  157. package/dist/src/runtime/scalar-fusion.d.ts.map +1 -0
  158. package/dist/src/runtime/scalar-fusion.js +275 -0
  159. package/dist/src/runtime/scalar-fusion.js.map +1 -0
  160. package/dist/src/runtime/strict-flags.d.ts +9 -0
  161. package/dist/src/runtime/strict-flags.d.ts.map +1 -1
  162. package/dist/src/runtime/strict-flags.js +9 -0
  163. package/dist/src/runtime/strict-flags.js.map +1 -1
  164. package/dist/src/runtime/strict-fork.js +2 -2
  165. package/dist/src/runtime/strict-fork.js.map +1 -1
  166. package/dist/src/runtime/strict-representation.d.ts +78 -0
  167. package/dist/src/runtime/strict-representation.d.ts.map +1 -0
  168. package/dist/src/runtime/strict-representation.js +159 -0
  169. package/dist/src/runtime/strict-representation.js.map +1 -0
  170. package/dist/src/schema/assertion.d.ts +58 -0
  171. package/dist/src/schema/assertion.d.ts.map +1 -1
  172. package/dist/src/schema/assertion.js +78 -0
  173. package/dist/src/schema/assertion.js.map +1 -1
  174. package/dist/src/schema/catalog-persistability.d.ts +11 -3
  175. package/dist/src/schema/catalog-persistability.d.ts.map +1 -1
  176. package/dist/src/schema/catalog-persistability.js +48 -29
  177. package/dist/src/schema/catalog-persistability.js.map +1 -1
  178. package/dist/src/schema/catalog.d.ts +22 -0
  179. package/dist/src/schema/catalog.d.ts.map +1 -1
  180. package/dist/src/schema/catalog.js +4 -1
  181. package/dist/src/schema/catalog.js.map +1 -1
  182. package/dist/src/schema/column-republication.d.ts +126 -0
  183. package/dist/src/schema/column-republication.d.ts.map +1 -0
  184. package/dist/src/schema/column-republication.js +121 -0
  185. package/dist/src/schema/column-republication.js.map +1 -0
  186. package/dist/src/schema/column-source-resolver.d.ts +29 -6
  187. package/dist/src/schema/column-source-resolver.d.ts.map +1 -1
  188. package/dist/src/schema/column-source-resolver.js +78 -9
  189. package/dist/src/schema/column-source-resolver.js.map +1 -1
  190. package/dist/src/schema/expression-dependents.d.ts +160 -0
  191. package/dist/src/schema/expression-dependents.d.ts.map +1 -0
  192. package/dist/src/schema/expression-dependents.js +228 -0
  193. package/dist/src/schema/expression-dependents.js.map +1 -0
  194. package/dist/src/schema/function.d.ts +15 -0
  195. package/dist/src/schema/function.d.ts.map +1 -1
  196. package/dist/src/schema/function.js.map +1 -1
  197. package/dist/src/schema/object-dependency-closure.d.ts +127 -0
  198. package/dist/src/schema/object-dependency-closure.d.ts.map +1 -0
  199. package/dist/src/schema/object-dependency-closure.js +117 -0
  200. package/dist/src/schema/object-dependency-closure.js.map +1 -0
  201. package/dist/src/schema/object-ref-resolver.d.ts +83 -0
  202. package/dist/src/schema/object-ref-resolver.d.ts.map +1 -0
  203. package/dist/src/schema/object-ref-resolver.js +135 -0
  204. package/dist/src/schema/object-ref-resolver.js.map +1 -0
  205. package/dist/src/schema/rename/column-rename.d.ts +228 -0
  206. package/dist/src/schema/rename/column-rename.d.ts.map +1 -0
  207. package/dist/src/schema/rename/column-rename.js +1225 -0
  208. package/dist/src/schema/rename/column-rename.js.map +1 -0
  209. package/dist/src/schema/rename/self-qualifier-strip.d.ts +29 -0
  210. package/dist/src/schema/rename/self-qualifier-strip.d.ts.map +1 -0
  211. package/dist/src/schema/rename/self-qualifier-strip.js +267 -0
  212. package/dist/src/schema/rename/self-qualifier-strip.js.map +1 -0
  213. package/dist/src/schema/rename/shared.d.ts +108 -0
  214. package/dist/src/schema/rename/shared.d.ts.map +1 -0
  215. package/dist/src/schema/rename/shared.js +49 -0
  216. package/dist/src/schema/rename/shared.js.map +1 -0
  217. package/dist/src/schema/rename/table-rename.d.ts +263 -0
  218. package/dist/src/schema/rename/table-rename.d.ts.map +1 -0
  219. package/dist/src/schema/rename/table-rename.js +860 -0
  220. package/dist/src/schema/rename/table-rename.js.map +1 -0
  221. package/dist/src/schema/rename-rewriter.d.ts +18 -278
  222. package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
  223. package/dist/src/schema/rename-rewriter.js +17 -1506
  224. package/dist/src/schema/rename-rewriter.js.map +1 -1
  225. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  226. package/dist/src/schema/schema-differ.js +228 -21
  227. package/dist/src/schema/schema-differ.js.map +1 -1
  228. package/dist/src/types/builtin-types.d.ts.map +1 -1
  229. package/dist/src/types/builtin-types.js +29 -36
  230. package/dist/src/types/builtin-types.js.map +1 -1
  231. package/dist/src/types/cast-semantics.d.ts +7 -5
  232. package/dist/src/types/cast-semantics.d.ts.map +1 -1
  233. package/dist/src/types/cast-semantics.js +20 -9
  234. package/dist/src/types/cast-semantics.js.map +1 -1
  235. package/dist/src/types/index.d.ts +1 -1
  236. package/dist/src/types/index.d.ts.map +1 -1
  237. package/dist/src/types/index.js +1 -1
  238. package/dist/src/types/index.js.map +1 -1
  239. package/dist/src/types/registry.d.ts.map +1 -1
  240. package/dist/src/types/registry.js +2 -1
  241. package/dist/src/types/registry.js.map +1 -1
  242. package/dist/src/types/temporal-ops.d.ts +119 -0
  243. package/dist/src/types/temporal-ops.d.ts.map +1 -0
  244. package/dist/src/types/temporal-ops.js +348 -0
  245. package/dist/src/types/temporal-ops.js.map +1 -0
  246. package/dist/src/types/temporal-types.d.ts +11 -0
  247. package/dist/src/types/temporal-types.d.ts.map +1 -1
  248. package/dist/src/types/temporal-types.js +87 -0
  249. package/dist/src/types/temporal-types.js.map +1 -1
  250. package/dist/src/util/affinity.d.ts +2 -1
  251. package/dist/src/util/affinity.d.ts.map +1 -1
  252. package/dist/src/util/affinity.js +16 -5
  253. package/dist/src/util/affinity.js.map +1 -1
  254. package/dist/src/util/ast-spine-clone.d.ts +2 -2
  255. package/dist/src/util/ast-spine-clone.js +2 -2
  256. package/dist/src/util/coercion.d.ts +22 -7
  257. package/dist/src/util/coercion.d.ts.map +1 -1
  258. package/dist/src/util/coercion.js +28 -15
  259. package/dist/src/util/coercion.js.map +1 -1
  260. package/dist/src/util/comparison.d.ts +25 -0
  261. package/dist/src/util/comparison.d.ts.map +1 -1
  262. package/dist/src/util/comparison.js +25 -0
  263. package/dist/src/util/comparison.js.map +1 -1
  264. package/dist/src/util/key-tuple-codec.d.ts +12 -3
  265. package/dist/src/util/key-tuple-codec.d.ts.map +1 -1
  266. package/dist/src/util/key-tuple-codec.js.map +1 -1
  267. package/dist/src/util/numeric-canonical.d.ts +26 -0
  268. package/dist/src/util/numeric-canonical.d.ts.map +1 -0
  269. package/dist/src/util/numeric-canonical.js +66 -0
  270. package/dist/src/util/numeric-canonical.js.map +1 -0
  271. package/dist/src/util/value-text.d.ts +48 -0
  272. package/dist/src/util/value-text.d.ts.map +1 -0
  273. package/dist/src/util/value-text.js +35 -0
  274. package/dist/src/util/value-text.js.map +1 -0
  275. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  276. package/dist/src/vtab/memory/layer/manager.js +14 -5
  277. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  278. package/dist/src/vtab/module.d.ts +25 -0
  279. package/dist/src/vtab/module.d.ts.map +1 -1
  280. package/package.json +4 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-ref-resolver.d.ts","sourceRoot":"","sources":["../../../src/schema/object-ref-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAgB,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEnG;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IAClC,oFAAoF;IACpF,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACxD;;;;;;;OAOG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAAC;CAC3F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,GAAG,kBAAkB,CAa3E;AAqCD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACpC,SAAS,EAAE,kBAAkB,EAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACb,CAAC,cAAc,EAAE,MAAM,KAAK,iBAAiB,CAiB/C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB,CAE7F"}
@@ -0,0 +1,135 @@
1
+ import { objectRefKey } from './rename-rewriter.js';
2
+ /**
3
+ * The catalog-backed {@link ResolveObjectRef} the rename walkers consult to decide
4
+ * whether a table/view reference written in a stored body denotes the object being
5
+ * renamed / probed. It answers the way the PLANNER answers for that body — against
6
+ * the owning object's home schema path ({@link Database._homeSchemaPath}:
7
+ * `[homeSchema, ...session default path]`) — not against a single "default schema".
8
+ *
9
+ * Resolution rules:
10
+ * - **Qualified** (`schema` present) → `objectRefKey(schema, name)`, no catalog
11
+ * lookup. A qualified name means what it says even when the object does not
12
+ * exist (it may be the one about to be created, or the one just renamed away).
13
+ * - **Unqualified** → the first schema in the home path holding a table or view
14
+ * (a materialized view is a table) of that name.
15
+ * - **Miss in every schema** → the home schema's key, so a body naming an object
16
+ * that does not exist still gets a stable key rather than `undefined` —
17
+ * `undefined` is reserved for "no resolver could be consulted at all".
18
+ *
19
+ * NOTE: "the way the planner answers" is exact for the body kinds that plan under
20
+ * {@link Database._homeSchemaPath} — view bodies, materialized-view bodies, and
21
+ * assertion checks (`planner/stored-body-context.ts`). A CHECK constraint or a
22
+ * column DEFAULT / generated expression is stricter still: it plans under
23
+ * `schemaAuthoredContext` (`planner/building/schema-authored-context.ts`), the
24
+ * owning schema and NOTHING else, so an unqualified name the owning schema does
25
+ * not hold is an error there rather than a fallthrough down the session path.
26
+ * This resolver applies the looser home-path rule to all of them, which is
27
+ * deliberately safe rather than exact: the two rules can only disagree when the
28
+ * home schema lacks the name, and such a CHECK / DEFAULT cannot be evaluated at
29
+ * all — so no VALID body is ever matched (or missed) differently. Tighten to a
30
+ * per-body-kind path only if a rename ever needs to be right about a body the
31
+ * planner itself rejects.
32
+ *
33
+ * SNAPSHOT DISCIPLINE — the single most likely way to get this wrong: build the
34
+ * snapshot (`snapshotObjectRefResolvers` / `buildObjectRefResolver`) BEFORE the
35
+ * statement's first catalog mutation, and pass the same instance through the whole
36
+ * statement. Name-set lookups answer from the snapshot, NOT the live catalog, and
37
+ * that is load-bearing: rename propagation runs after the catalog swap, when the
38
+ * old name is gone — a live lookup of a bare `t` under `[main, temp]` after
39
+ * `main.t` was renamed would fall through to `temp.t` and silently match (or miss)
40
+ * the wrong object. The pre-mutation snapshot resolves every reference the way the
41
+ * body planned before the statement started, which is the question the rename is
42
+ * asking. (The session `schema_path` option is read at resolver-derivation time;
43
+ * it cannot change mid-statement.)
44
+ */
45
+ export function snapshotObjectRefResolvers(db) {
46
+ // NOTE: snapshots every schema's table+view name set on each DDL statement, and
47
+ // resolves per reference after that; both are Map/Set work over handfuls of
48
+ // names. If a schema-heavy workload ever shows this hot, snapshot lazily per
49
+ // schema actually consulted.
50
+ const bySchema = new Map();
51
+ for (const schema of db.schemaManager._getAllSchemas()) {
52
+ const names = new Set();
53
+ for (const table of schema.getAllTables())
54
+ names.add(table.name.toLowerCase());
55
+ for (const view of schema.getAllViews())
56
+ names.add(view.name.toLowerCase());
57
+ bySchema.set(schema.name.toLowerCase(), names);
58
+ }
59
+ return buildResolvers(db, bySchema);
60
+ }
61
+ /** The shared builder over `(db, bySchema)`, so a {@link ObjectRefResolvers.withTableRenamed}
62
+ * sibling reuses the base snapshot's resolution logic over its own name-set map. */
63
+ function buildResolvers(db, bySchema) {
64
+ const cache = new Map();
65
+ return {
66
+ forHomeSchema(homeSchemaName) {
67
+ const homeLower = homeSchemaName.toLowerCase();
68
+ const cached = cache.get(homeLower);
69
+ if (cached)
70
+ return cached;
71
+ const path = db._homeSchemaPath(homeSchemaName).map(s => s.toLowerCase());
72
+ const resolve = (schema, name) => {
73
+ if (schema !== undefined)
74
+ return objectRefKey(schema, name);
75
+ const nameLower = name.toLowerCase();
76
+ for (const schemaLower of path) {
77
+ if (bySchema.get(schemaLower)?.has(nameLower))
78
+ return `${schemaLower}.${nameLower}`;
79
+ }
80
+ return `${homeLower}.${nameLower}`;
81
+ };
82
+ cache.set(homeLower, resolve);
83
+ return resolve;
84
+ },
85
+ withTableRenamed(schemaName, oldName, newName) {
86
+ // Copy the affected schema's Set and the outer Map shallowly — the base
87
+ // snapshot must keep answering pre-rename.
88
+ const schemaLower = schemaName.toLowerCase();
89
+ const sibling = new Map(bySchema);
90
+ const names = new Set(bySchema.get(schemaLower) ?? []);
91
+ names.delete(oldName.toLowerCase());
92
+ names.add(newName.toLowerCase());
93
+ sibling.set(schemaLower, names);
94
+ return buildResolvers(db, sibling);
95
+ },
96
+ };
97
+ }
98
+ /**
99
+ * Per-home-schema {@link TableRenameTarget} factory for one `ALTER TABLE … RENAME TO`
100
+ * statement: binds the renamed object's identity to a pre-mutation `resolve` and a
101
+ * post-rename `resolveAfter` (the {@link ObjectRefResolvers.withTableRenamed} sibling),
102
+ * both derived per body-owning home schema. One statement builds this once and hands
103
+ * every walk the target for the walked body's owner, which is what lets the rewrite
104
+ * enforce its post-condition — a rewritten reference must still resolve to the renamed
105
+ * object — at the sink.
106
+ */
107
+ export function tableRenameTargetsFor(resolvers, schemaName, oldName, newName) {
108
+ const after = resolvers.withTableRenamed(schemaName, oldName, newName);
109
+ const cache = new Map();
110
+ return homeSchemaName => {
111
+ const homeLower = homeSchemaName.toLowerCase();
112
+ const cached = cache.get(homeLower);
113
+ if (cached)
114
+ return cached;
115
+ const target = {
116
+ oldName,
117
+ newName,
118
+ schemaName,
119
+ resolve: resolvers.forHomeSchema(homeSchemaName),
120
+ resolveAfter: after.forHomeSchema(homeSchemaName),
121
+ };
122
+ cache.set(homeLower, target);
123
+ return target;
124
+ };
125
+ }
126
+ /**
127
+ * Single-home convenience over {@link snapshotObjectRefResolvers}, for callers
128
+ * that walk bodies of one owning schema only (the DROP guards, a store module's
129
+ * own-table rewrite). Same snapshot discipline: build before the statement's
130
+ * first catalog mutation.
131
+ */
132
+ export function buildObjectRefResolver(db, homeSchemaName) {
133
+ return snapshotObjectRefResolvers(db).forHomeSchema(homeSchemaName);
134
+ }
135
+ //# sourceMappingURL=object-ref-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-ref-resolver.js","sourceRoot":"","sources":["../../../src/schema/object-ref-resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAiD,MAAM,sBAAsB,CAAC;AAsBnG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,UAAU,0BAA0B,CAAC,EAAY;IACtD,gFAAgF;IAChF,4EAA4E;IAC5E,6EAA6E;IAC7E,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAChD,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,YAAY,EAAE;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/E,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5E,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED;qFACqF;AACrF,SAAS,cAAc,CAAC,EAAY,EAAE,QAAkD;IACvF,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAClD,OAAO;QACN,aAAa,CAAC,cAAsB;YACnC,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1E,MAAM,OAAO,GAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBAClD,IAAI,MAAM,KAAK,SAAS;oBAAE,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrC,KAAK,MAAM,WAAW,IAAI,IAAI,EAAE,CAAC;oBAChC,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC;wBAAE,OAAO,GAAG,WAAW,IAAI,SAAS,EAAE,CAAC;gBACrF,CAAC;gBACD,OAAO,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;YACpC,CAAC,CAAC;YACF,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9B,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,gBAAgB,CAAC,UAAkB,EAAE,OAAe,EAAE,OAAe;YACpE,wEAAwE;YACxE,2CAA2C;YAC3C,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YACvD,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACpC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAChC,OAAO,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC;KACD,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACpC,SAA6B,EAC7B,UAAkB,EAClB,OAAe,EACf,OAAe;IAEf,MAAM,KAAK,GAAG,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,IAAI,GAAG,EAA6B,CAAC;IACnD,OAAO,cAAc,CAAC,EAAE;QACvB,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,MAAM,GAAsB;YACjC,OAAO;YACP,OAAO;YACP,UAAU;YACV,OAAO,EAAE,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC;YAChD,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;SACjD,CAAC;QACF,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IACf,CAAC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAY,EAAE,cAAsB;IAC1E,OAAO,0BAA0B,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,228 @@
1
+ import type * as AST from '../../parser/ast.js';
2
+ import { type ResolveColumnInSource, type ResolveObjectRef, type RowImageContext } from './shared.js';
3
+ /**
4
+ * Rewrite column references inside a full statement/expression AST, resolving
5
+ * unqualified refs against the FROM scopes the walk descends (no implicit seed,
6
+ * unlike {@link renameColumnInCheckExpression}). The walk descends a select
7
+ * body's trailing `with defaults (…)` clause ({@link AST.SelectStmt.defaults}),
8
+ * whose entry exprs evaluate in the body's FROM scope.
9
+ *
10
+ * `rowImage` says what a bare, unbound `new.` / `old.` qualifier means in the
11
+ * walked expression — independent of the (absent) seed; see
12
+ * {@link RowImageContext} and {@link matchesRowImage}. A view / assertion body
13
+ * is `'none'` (no written-row context — `new.x` is an ordinary table
14
+ * reference); another table's CHECK / DEFAULT / generated body is `'foreign'`
15
+ * (written-row context whose image belongs to that table, so the qualifier
16
+ * names nothing this walk cares about).
17
+ *
18
+ * When `resolveColumnInSource` is supplied, the scope walk consults it at each
19
+ * inner FROM frame so an unqualified ref that legitimately binds to a like-named
20
+ * column on a subquery's own FROM source is NOT false-captured by an enclosing
21
+ * binding (e.g. a `with defaults` expr `cap + (select max(cap) from lim)` under
22
+ * a `t.cap` rename must leave the inner `lim.cap` untouched). The same callback
23
+ * infrastructure backs {@link renameColumnInCheckExpression}; both the forward
24
+ * propagation (live schema lookup) and the differ's inverse reconcile
25
+ * (declared-side resolver) pass it so the two stay in parity.
26
+ */
27
+ export declare function renameColumnInAst(node: AST.AstNode | undefined, tableName: string, oldColName: string, newColName: string, resolve: ResolveObjectRef, targetKey: string, rowImage: RowImageContext, resolveColumnInSource?: ResolveColumnInSource): boolean;
28
+ /**
29
+ * Rewrite a column reference inside a CHECK expression. Unlike
30
+ * `renameColumnInAst`, this entry point seeds the scope stack with an
31
+ * implicit unaliased binding to `tableName` so top-level unqualified
32
+ * `ColumnExpr` nodes resolve to the owning table. CHECK expressions
33
+ * cannot reference other tables at top level, so the implicit binding
34
+ * is safe there.
35
+ *
36
+ * When `resolveColumnInSource` is supplied, the scope walk consults it at
37
+ * each inner FROM frame: if any real-table source in that frame exposes
38
+ * `oldColName`, the unqualified ref binds inside the subquery and the
39
+ * walk stops before reaching the seed. This stops the rewriter from
40
+ * false-positively rewriting an inner unqualified ref that legitimately
41
+ * binds to a like-named column on the subquery's FROM (e.g.
42
+ * `check ((select min(v) from u) > 0)` when `u` also has a `v` column).
43
+ *
44
+ * Limitation: subquery / function-source inner sources are not asked (the
45
+ * rewriter would need recursive column-set inference on their bodies), so an
46
+ * unqualified ref binding only through one of those falls through to the seed.
47
+ * An ALIASED real source is asked like any other — an alias adds a qualifier,
48
+ * it does not take the source's columns out of scope. `renameColumnInAst`
49
+ * shares the same callback (passed by the view-body callers) and the same
50
+ * residual.
51
+ *
52
+ * The seed and the `new.` / `old.` **row-image** namespace are INDEPENDENT: the
53
+ * seed answers how *unqualified* refs bind, while the explicit `rowImage`
54
+ * argument answers what a bare, unbound `new.` / `old.` qualifier names (see
55
+ * {@link RowImageContext}). A CHECK / DEFAULT / generated body of the renamed
56
+ * table itself passes `'own'` — those expressions evaluate against the row
57
+ * being written, so `check (new.a > 0)` (`docs/sql-ddl.md` § CHECK Constraints)
58
+ * names the owning table's row image and matches. A partial-index predicate is
59
+ * seeded too but passes `'none'`: it describes rows already stored, with no
60
+ * written-row context.
61
+ *
62
+ * The `'own'` match is scope-**aware**, not depth-blind, because `new` and `old`
63
+ * are not reserved words in this parser: `create table "new" (…)` is legal, so a
64
+ * CHECK may legitimately contain `(select max("new".a) from "new")`. The match
65
+ * therefore requires that no FROM/WITH frame above the seed rebind the
66
+ * qualifier — see `matchesRowImage`.
67
+ */
68
+ export declare function renameColumnInCheckExpression(expr: AST.AstNode | undefined, tableName: string, oldColName: string, newColName: string, resolve: ResolveObjectRef, targetKey: string, rowImage: RowImageContext, resolveColumnInSource?: ResolveColumnInSource): boolean;
69
+ /**
70
+ * Sentinel rename target for the read-only column probes: the two below, and
71
+ * the drop verb's republication fixpoint
72
+ * (`schema/column-republication.ts`), which probes exposure the same way. No
73
+ * user column can hold this name, and the probe rewrites *to* it, so it can
74
+ * never collide with anything the walk is looking for.
75
+ */
76
+ export declare const PROBE_COLUMN_NAME = "__quereus_column_probe__";
77
+ /**
78
+ * Whether `node` refers to `tableName`.`columnName` — read-only with respect to
79
+ * the caller's AST; a throwaway {@link spineCloneAst} copy is what gets
80
+ * rewritten.
81
+ *
82
+ * Same equivalence {@link tableReferencedInAst} establishes for the table verb,
83
+ * and for the same reason: "refers to" must mean "would have been rewritten by
84
+ * `ALTER TABLE … RENAME COLUMN`", or a DROP guard built on it refuses a
85
+ * different set of cases than the rename follows. See that function's comment
86
+ * for why the column verb reaches it by clone+sentinel rather than by `dryRun`.
87
+ *
88
+ * `resolveColumnInSource` is **not optional in practice**: without it the walk
89
+ * has no way to tell that an unqualified ref inside a subquery binds to a
90
+ * like-named column on the subquery's own FROM source, and a caller asking
91
+ * "does this body name `t.v`?" gets `true` for a body whose only `v` is
92
+ * another table's. Every caller should pass the catalog-backed resolver
93
+ * (`buildColumnSourceResolver`).
94
+ *
95
+ * NOTE: one spine clone plus one walk per probe, and the DROP COLUMN guard probes every
96
+ * live assertion. Trivial at the handful-of-assertions scale schemas have today, and it
97
+ * only runs on DDL; if a schema ever carries assertions by the hundred, filter by
98
+ * `tableReferencedInAst` (no clone) before paying for the column probe.
99
+ */
100
+ export declare function columnReferencedInAst(node: AST.AstNode | undefined, tableName: string, columnName: string, resolve: ResolveObjectRef, targetKey: string, rowImage: RowImageContext, resolveColumnInSource?: ResolveColumnInSource): boolean;
101
+ /**
102
+ * {@link columnReferencedInAst} for an expression that resolves unqualified refs
103
+ * against an implicit binding to `tableName` — a CHECK expression or a
104
+ * partial-index predicate. Uses {@link renameColumnInCheckExpression}'s seeded
105
+ * entry point so the probe answers for exactly the scope that expression is
106
+ * planned in.
107
+ */
108
+ export declare function columnReferencedInCheckExpression(expr: AST.AstNode | undefined, tableName: string, columnName: string, resolve: ResolveObjectRef, targetKey: string, rowImage: RowImageContext, resolveColumnInSource?: ResolveColumnInSource): boolean;
109
+ /**
110
+ * Rewrite the renamed column inside every partial-index predicate of `indexes`,
111
+ * in place. A predicate resolves unqualified refs against the indexed table
112
+ * itself — the same implicit seed a CHECK expression uses — so
113
+ * {@link renameColumnInCheckExpression} is the correct entry point here, not
114
+ * {@link renameColumnInAst}.
115
+ *
116
+ * The predicate `Expression` is shared by reference between the catalog's
117
+ * `TableSchema`, any module-local copy of it, and — for a unique partial index —
118
+ * the `derivedFromIndex` UNIQUE constraint that carries the same predicate.
119
+ * Rewriting in place keeps all of them in step; cloning would strand the derived
120
+ * constraint on the old AST.
121
+ *
122
+ * Idempotent: once rewritten, nothing names `oldColName` any more, so a second
123
+ * call with the same pair returns false without touching the AST.
124
+ *
125
+ * The parameter is structurally typed rather than `IndexSchema[]` so this module
126
+ * stays free of catalog imports; `IndexSchema` satisfies it.
127
+ *
128
+ * Row-image mode is `'none'`: a partial-index predicate describes rows already
129
+ * stored, so it has no written-row context and a bare `new.` / `old.` qualifier
130
+ * there is an ordinary table reference — the same asymmetry
131
+ * {@link import('./table-rename.js').renameTableInIndexPredicates} records by
132
+ * passing no `rowImageContext`. (An indexed table literally named `new` still
133
+ * matches through the seed binding, so this changes no answer for the case
134
+ * that plans.)
135
+ */
136
+ export declare function renameColumnInIndexPredicates(indexes: ReadonlyArray<{
137
+ readonly predicate?: AST.Expression;
138
+ }> | undefined, tableName: string, oldColName: string, newColName: string, resolve: ResolveObjectRef, targetKey: string, resolveColumnInSource?: ResolveColumnInSource): boolean;
139
+ /**
140
+ * Rewrite the renamed column inside every CHECK constraint expression of `checks`
141
+ * belonging to the renamed table itself, in place. The seeded-scope entry point
142
+ * applies for the same reason it does for a partial-index predicate: a CHECK
143
+ * resolves unqualified refs against its owning table.
144
+ *
145
+ * Only pass the renamed table's OWN checks — a CHECK on a *different* table that
146
+ * happens to reference the renamed table needs {@link renameColumnInAst}, whose
147
+ * walk has no implicit seed. That own-table contract is also why the row-image
148
+ * mode is hardcoded `'own'` here: a CHECK evaluates against the row being
149
+ * written, whose image IS the renamed table's.
150
+ */
151
+ export declare function renameColumnInCheckConstraints(checks: ReadonlyArray<{
152
+ readonly expr: AST.Expression;
153
+ }> | undefined, tableName: string, oldColName: string, newColName: string, resolve: ResolveObjectRef, targetKey: string, resolveColumnInSource?: ResolveColumnInSource): boolean;
154
+ /**
155
+ * Rewrite the renamed column inside the two expressions a `ColumnSchema` can carry —
156
+ * a column DEFAULT (`b integer default (new.a + 1)`, however authored: inline, or via
157
+ * `ALTER TABLE … ALTER COLUMN … SET DEFAULT`, which writes the same field) and a
158
+ * generated column's body (`g integer generated always as (a + 1)`) — in place, for
159
+ * every column of the renamed table itself.
160
+ *
161
+ * The seeded {@link renameColumnInCheckExpression} entry point with row-image mode
162
+ * `'own'` is correct for both:
163
+ *
164
+ * - The implicit unaliased binding to the owning table is what makes a generated
165
+ * column's **bare** `a` resolve — it has no FROM clause to bind against, exactly like
166
+ * a CHECK.
167
+ * - The `'own'` mode is what makes a default's `new.a` resolve. A default is evaluated
168
+ * against the row being written, so that qualifier names this table's row image, not
169
+ * anything a FROM binds.
170
+ *
171
+ * Case folding (`NEW.A`) and the shadowing edge (a real table literally named `new`,
172
+ * reached from a subquery inside the expression) therefore behave exactly as they do for
173
+ * a CHECK, because the same walk decides all three.
174
+ *
175
+ * Only pass the renamed table's OWN columns. A default on a *different* table can reach
176
+ * this table only through a subquery, so an unqualified ref there must bind inside that
177
+ * subquery's FROM — that caller wants {@link renameColumnInAst}, whose walk has no seed.
178
+ *
179
+ * Same sharing and idempotence story as {@link renameColumnInCheckConstraints}: a
180
+ * module's rename hook rebuilds only the renamed column's `ColumnSchema` and keeps every
181
+ * other one by reference, and even the rebuilt one carries the SAME expression nodes
182
+ * (`buildConstraintsFromColumn` passes them into the reconstructed `ColumnDef` by
183
+ * reference and `columnDefToSchema` assigns them straight back), so one in-place rewrite
184
+ * reaches every holder and a second call with the same pair is a no-op.
185
+ *
186
+ * The parameter is structurally typed rather than `ColumnSchema[]` so this module stays
187
+ * free of catalog imports; `ColumnSchema` satisfies it.
188
+ */
189
+ export declare function renameColumnInColumnExpressions(columns: ReadonlyArray<{
190
+ readonly defaultValue?: AST.Expression | null;
191
+ readonly generatedExpr?: AST.Expression;
192
+ }> | undefined, tableName: string, oldColName: string, newColName: string, resolve: ResolveObjectRef, targetKey: string, resolveColumnInSource?: ResolveColumnInSource): boolean;
193
+ /**
194
+ * Whether `body`'s top-level result columns publish the renamed column under
195
+ * `newColName` — i.e. whether rewriting this body shifted the name its readers
196
+ * see. Call AFTER the body rewrite: the predicate compares against the NEW
197
+ * name, exactly as the CTE exposure analysis it shares its internals with
198
+ * ({@link cteExposesRenamedColumn} / `isResultColumnExposure`). An explicit
199
+ * result-column alias suppresses exposure; a bare projection of the renamed
200
+ * column, or a `*` / `t.*` / `a.*` whose frame binds the target, exposes it —
201
+ * a FROM alias is no obstacle, since it only changes which qualifier names the
202
+ * source.
203
+ *
204
+ * An explicit view / materialized-view column list pins the published names
205
+ * regardless of the body — that guard belongs at the call site
206
+ * (`ViewSchema.columns` / `TableDerivation.columns` play the role
207
+ * `cte.columns` plays inside the CTE analysis; this predicate never sees them).
208
+ */
209
+ export declare function bodyExposesRenamedColumn(body: AST.QueryExpr | undefined, tableName: string, oldColName: string, newColName: string, resolve: ResolveObjectRef, targetKey: string, resolveColumnInSource?: ResolveColumnInSource): boolean;
210
+ /**
211
+ * Whether `body`'s top-level result columns publish a column named
212
+ * `columnName`, from ANY origin: an explicit alias, an unaliased bare
213
+ * projection of a column so named (wherever it binds), or a `*` / `t.*` whose
214
+ * bound real-table source exposes it (asked through `resolveColumnInSource`).
215
+ *
216
+ * The collision half of the rename-cascade pre-flight
217
+ * (`runtime/emit/column-rename-cascade.ts`): run against the PRISTINE
218
+ * (pre-rewrite) body with `columnName = newCol` — the rename target cannot
219
+ * publish `newCol` before the rename, so anything found is necessarily a
220
+ * DIFFERENT column the shifted name would collide with.
221
+ *
222
+ * Shares the walker's scope residual: a `*` over a subquery or function source
223
+ * has no askable column set, so a publication arriving only that way is not
224
+ * seen. A `*` over an aliased REAL source is seen — the alias binds like any
225
+ * other qualifier.
226
+ */
227
+ export declare function bodyPublishesColumnNamed(body: AST.QueryExpr | undefined, columnName: string, resolve: ResolveObjectRef, resolveColumnInSource?: ResolveColumnInSource): boolean;
228
+ //# sourceMappingURL=column-rename.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-rename.d.ts","sourceRoot":"","sources":["../../../../src/schema/rename/column-rename.ts"],"names":[],"mappings":"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"}