@antelopejs/postgres 0.2.1 → 0.2.3

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 (284) hide show
  1. package/README.md +6 -5
  2. package/dist/config.d.ts +1 -0
  3. package/dist/config.js +7 -3
  4. package/dist/config.js.map +1 -1
  5. package/dist/connect-failure.d.ts +1 -0
  6. package/dist/connect-failure.js +39 -0
  7. package/dist/connect-failure.js.map +1 -0
  8. package/dist/connection.d.ts +2 -1
  9. package/dist/connection.js +19 -2
  10. package/dist/connection.js.map +1 -1
  11. package/dist/implementations/catalog/index.js +3 -6
  12. package/dist/implementations/catalog/index.js.map +1 -1
  13. package/dist/implementations/database/coerce.js +20 -20
  14. package/dist/implementations/database/coerce.js.map +1 -1
  15. package/dist/implementations/database/context.d.ts +1 -0
  16. package/dist/implementations/database/context.js +4 -0
  17. package/dist/implementations/database/context.js.map +1 -1
  18. package/dist/implementations/database/convergence.d.ts +22 -0
  19. package/dist/implementations/database/convergence.js +183 -0
  20. package/dist/implementations/database/convergence.js.map +1 -0
  21. package/dist/implementations/database/cursors.js +3 -0
  22. package/dist/implementations/database/cursors.js.map +1 -1
  23. package/dist/implementations/database/ddl.d.ts +6 -26
  24. package/dist/implementations/database/ddl.js +28 -195
  25. package/dist/implementations/database/ddl.js.map +1 -1
  26. package/dist/implementations/database/duplicate-key.d.ts +2 -0
  27. package/dist/implementations/database/duplicate-key.js +49 -0
  28. package/dist/implementations/database/duplicate-key.js.map +1 -0
  29. package/dist/implementations/database/external-column-profile.js +6 -1
  30. package/dist/implementations/database/external-column-profile.js.map +1 -1
  31. package/dist/implementations/database/external-discovery.js +5 -5
  32. package/dist/implementations/database/external-discovery.js.map +1 -1
  33. package/dist/implementations/database/external-measures.js.map +1 -1
  34. package/dist/implementations/database/external-payload.d.ts +2 -2
  35. package/dist/implementations/database/external-payload.js +23 -13
  36. package/dist/implementations/database/external-payload.js.map +1 -1
  37. package/dist/implementations/database/external-schema.d.ts +2 -2
  38. package/dist/implementations/database/external-schema.js +3 -3
  39. package/dist/implementations/database/external-schema.js.map +1 -1
  40. package/dist/implementations/database/external-types.js +23 -16
  41. package/dist/implementations/database/external-types.js.map +1 -1
  42. package/dist/implementations/database/external-writes.d.ts +7 -1
  43. package/dist/implementations/database/external-writes.js +22 -21
  44. package/dist/implementations/database/external-writes.js.map +1 -1
  45. package/dist/implementations/database/feed-pipeline.js +3 -2
  46. package/dist/implementations/database/feed-pipeline.js.map +1 -1
  47. package/dist/implementations/database/feeds.d.ts +1 -1
  48. package/dist/implementations/database/feeds.js +36 -45
  49. package/dist/implementations/database/feeds.js.map +1 -1
  50. package/dist/implementations/database/fields.d.ts +9 -13
  51. package/dist/implementations/database/fields.js +25 -21
  52. package/dist/implementations/database/fields.js.map +1 -1
  53. package/dist/implementations/database/guards.d.ts +5 -0
  54. package/dist/implementations/database/guards.js +23 -0
  55. package/dist/implementations/database/guards.js.map +1 -0
  56. package/dist/implementations/database/introspect.d.ts +1 -1
  57. package/dist/implementations/database/listener.js +9 -3
  58. package/dist/implementations/database/listener.js.map +1 -1
  59. package/dist/implementations/database/migrate.d.ts +2 -2
  60. package/dist/implementations/database/migrate.js +10 -10
  61. package/dist/implementations/database/migrate.js.map +1 -1
  62. package/dist/implementations/database/payload.d.ts +3 -3
  63. package/dist/implementations/database/payload.js +4 -4
  64. package/dist/implementations/database/pipeline.d.ts +6 -2
  65. package/dist/implementations/database/pipeline.js +4 -1
  66. package/dist/implementations/database/pipeline.js.map +1 -1
  67. package/dist/implementations/database/query.js +27 -12
  68. package/dist/implementations/database/query.js.map +1 -1
  69. package/dist/implementations/database/reaper.js +6 -4
  70. package/dist/implementations/database/reaper.js.map +1 -1
  71. package/dist/implementations/database/relation.d.ts +2 -12
  72. package/dist/implementations/database/relation.js +5 -141
  73. package/dist/implementations/database/relation.js.map +1 -1
  74. package/dist/implementations/database/render.d.ts +11 -0
  75. package/dist/implementations/database/render.js +147 -0
  76. package/dist/implementations/database/render.js.map +1 -0
  77. package/dist/implementations/database/result.d.ts +2 -2
  78. package/dist/implementations/database/result.js +18 -19
  79. package/dist/implementations/database/result.js.map +1 -1
  80. package/dist/implementations/database/row-source.d.ts +10 -10
  81. package/dist/implementations/database/row-source.js +22 -19
  82. package/dist/implementations/database/row-source.js.map +1 -1
  83. package/dist/implementations/database/schema.d.ts +3 -2
  84. package/dist/implementations/database/schema.js +35 -19
  85. package/dist/implementations/database/schema.js.map +1 -1
  86. package/dist/implementations/database/selection.js +13 -7
  87. package/dist/implementations/database/selection.js.map +1 -1
  88. package/dist/implementations/database/sql.d.ts +7 -3
  89. package/dist/implementations/database/sql.js.map +1 -1
  90. package/dist/implementations/database/stage.js +3 -2
  91. package/dist/implementations/database/stage.js.map +1 -1
  92. package/dist/implementations/database/stages-aggregate.js +7 -5
  93. package/dist/implementations/database/stages-aggregate.js.map +1 -1
  94. package/dist/implementations/database/stages-array.js.map +1 -1
  95. package/dist/implementations/database/stages-core.js +2 -1
  96. package/dist/implementations/database/stages-core.js.map +1 -1
  97. package/dist/implementations/database/stages-date.js +2 -1
  98. package/dist/implementations/database/stages-date.js.map +1 -1
  99. package/dist/implementations/database/stages-group.js +11 -6
  100. package/dist/implementations/database/stages-group.js.map +1 -1
  101. package/dist/implementations/database/stages-join.js +13 -11
  102. package/dist/implementations/database/stages-join.js.map +1 -1
  103. package/dist/implementations/database/stages-numeric.js.map +1 -1
  104. package/dist/implementations/database/stages-object.js +1 -1
  105. package/dist/implementations/database/stages-object.js.map +1 -1
  106. package/dist/implementations/database/stages-projection.js +9 -8
  107. package/dist/implementations/database/stages-projection.js.map +1 -1
  108. package/dist/implementations/database/stages-rows.js +10 -8
  109. package/dist/implementations/database/stages-rows.js.map +1 -1
  110. package/dist/implementations/database/stages-selection.js +6 -4
  111. package/dist/implementations/database/stages-selection.js.map +1 -1
  112. package/dist/implementations/database/stages-string.js +7 -6
  113. package/dist/implementations/database/stages-string.js.map +1 -1
  114. package/dist/implementations/database/subquery.d.ts +1 -1
  115. package/dist/implementations/database/subquery.js +7 -5
  116. package/dist/implementations/database/subquery.js.map +1 -1
  117. package/dist/implementations/database/types.d.ts +5 -5
  118. package/dist/implementations/database/types.js +11 -11
  119. package/dist/implementations/database/types.js.map +1 -1
  120. package/dist/implementations/database/utils.js +2 -1
  121. package/dist/implementations/database/utils.js.map +1 -1
  122. package/dist/implementations/database/value.d.ts +1 -1
  123. package/dist/implementations/database/value.js +34 -33
  124. package/dist/implementations/database/value.js.map +1 -1
  125. package/dist/implementations/database/writes-atomic.js +6 -5
  126. package/dist/implementations/database/writes-atomic.js.map +1 -1
  127. package/dist/implementations/database/writes-identity.js +18 -19
  128. package/dist/implementations/database/writes-identity.js.map +1 -1
  129. package/dist/implementations/database/writes-insert.js +16 -22
  130. package/dist/implementations/database/writes-insert.js.map +1 -1
  131. package/dist/implementations/database/writes-shared.d.ts +1 -1
  132. package/dist/implementations/database/writes-shared.js +11 -7
  133. package/dist/implementations/database/writes-shared.js.map +1 -1
  134. package/dist/implementations/database/writes.d.ts +22 -1
  135. package/dist/implementations/database/writes.js +6 -3
  136. package/dist/implementations/database/writes.js.map +1 -1
  137. package/dist/test/catalog-owned.test.js +2 -0
  138. package/dist/test/catalog-owned.test.js.map +1 -1
  139. package/dist/test/contention.test.js.map +1 -1
  140. package/dist/test/duplicate-key.test.d.ts +1 -0
  141. package/dist/test/duplicate-key.test.js +103 -0
  142. package/dist/test/duplicate-key.test.js.map +1 -0
  143. package/dist/test/indexes.test.js +7 -7
  144. package/dist/test/indexes.test.js.map +1 -1
  145. package/dist/test/unit/coerce.spec.js +7 -7
  146. package/dist/test/unit/coerce.spec.js.map +1 -1
  147. package/dist/test/unit/config.spec.js +3 -1
  148. package/dist/test/unit/config.spec.js.map +1 -1
  149. package/dist/test/unit/connect-failure.spec.d.ts +1 -0
  150. package/dist/test/unit/connect-failure.spec.js +50 -0
  151. package/dist/test/unit/connect-failure.spec.js.map +1 -0
  152. package/dist/test/unit/connection.spec.js +16 -18
  153. package/dist/test/unit/connection.spec.js.map +1 -1
  154. package/dist/test/unit/convergence.spec.d.ts +1 -0
  155. package/dist/test/unit/convergence.spec.js +347 -0
  156. package/dist/test/unit/convergence.spec.js.map +1 -0
  157. package/dist/test/unit/cursors-fixture.d.ts +79 -0
  158. package/dist/test/unit/cursors-fixture.js +245 -0
  159. package/dist/test/unit/cursors-fixture.js.map +1 -0
  160. package/dist/test/unit/cursors.spec.js +138 -718
  161. package/dist/test/unit/cursors.spec.js.map +1 -1
  162. package/dist/test/unit/cursors.teardown.spec.d.ts +1 -0
  163. package/dist/test/unit/cursors.teardown.spec.js +322 -0
  164. package/dist/test/unit/cursors.teardown.spec.js.map +1 -0
  165. package/dist/test/unit/cursors.window.spec.d.ts +1 -0
  166. package/dist/test/unit/cursors.window.spec.js +78 -0
  167. package/dist/test/unit/cursors.window.spec.js.map +1 -0
  168. package/dist/test/unit/ddl-fixture.d.ts +5 -0
  169. package/dist/test/unit/ddl-fixture.js +19 -0
  170. package/dist/test/unit/ddl-fixture.js.map +1 -0
  171. package/dist/test/unit/ddl.spec.js +64 -366
  172. package/dist/test/unit/ddl.spec.js.map +1 -1
  173. package/dist/test/unit/expression-array-fixture.d.ts +17 -0
  174. package/dist/test/unit/expression-array-fixture.js +63 -0
  175. package/dist/test/unit/expression-array-fixture.js.map +1 -0
  176. package/dist/test/unit/expression-array-walk.spec.d.ts +1 -0
  177. package/dist/test/unit/expression-array-walk.spec.js +235 -0
  178. package/dist/test/unit/expression-array-walk.spec.js.map +1 -0
  179. package/dist/test/unit/expression-array.spec.js +48 -322
  180. package/dist/test/unit/expression-array.spec.js.map +1 -1
  181. package/dist/test/unit/expression-date.spec.js +4 -3
  182. package/dist/test/unit/expression-date.spec.js.map +1 -1
  183. package/dist/test/unit/expression-fixture.d.ts +15 -0
  184. package/dist/test/unit/expression-fixture.js +40 -0
  185. package/dist/test/unit/expression-fixture.js.map +1 -0
  186. package/dist/test/unit/expression-numeric.spec.js +10 -8
  187. package/dist/test/unit/expression-numeric.spec.js.map +1 -1
  188. package/dist/test/unit/expression-object.spec.js +3 -4
  189. package/dist/test/unit/expression-object.spec.js.map +1 -1
  190. package/dist/test/unit/expression-predicate.spec.d.ts +1 -0
  191. package/dist/test/unit/expression-predicate.spec.js +231 -0
  192. package/dist/test/unit/expression-predicate.spec.js.map +1 -0
  193. package/dist/test/unit/expression-stages.spec.js +0 -5
  194. package/dist/test/unit/expression-stages.spec.js.map +1 -1
  195. package/dist/test/unit/expression-string.spec.js +2 -5
  196. package/dist/test/unit/expression-string.spec.js.map +1 -1
  197. package/dist/test/unit/expression.spec.js +44 -292
  198. package/dist/test/unit/expression.spec.js.map +1 -1
  199. package/dist/test/unit/external-comparisons.spec.js +5 -5
  200. package/dist/test/unit/external-comparisons.spec.js.map +1 -1
  201. package/dist/test/unit/external-types.spec.js +2 -3
  202. package/dist/test/unit/external-types.spec.js.map +1 -1
  203. package/dist/test/unit/feeds.spec.js +40 -23
  204. package/dist/test/unit/feeds.spec.js.map +1 -1
  205. package/dist/test/unit/fields.spec.js +15 -9
  206. package/dist/test/unit/fields.spec.js.map +1 -1
  207. package/dist/test/unit/invalid-fixture.d.ts +3 -0
  208. package/dist/test/unit/invalid-fixture.js +11 -0
  209. package/dist/test/unit/invalid-fixture.js.map +1 -0
  210. package/dist/test/unit/payload.spec.js.map +1 -1
  211. package/dist/test/unit/pipeline-aggregate.spec.js +14 -14
  212. package/dist/test/unit/pipeline-aggregate.spec.js.map +1 -1
  213. package/dist/test/unit/pipeline-fixture.d.ts +25 -6
  214. package/dist/test/unit/pipeline-fixture.js +21 -11
  215. package/dist/test/unit/pipeline-fixture.js.map +1 -1
  216. package/dist/test/unit/pipeline-group-fixture.d.ts +2 -0
  217. package/dist/test/unit/pipeline-group-fixture.js +6 -0
  218. package/dist/test/unit/pipeline-group-fixture.js.map +1 -0
  219. package/dist/test/unit/pipeline-group.spec.js +15 -248
  220. package/dist/test/unit/pipeline-group.spec.js.map +1 -1
  221. package/dist/test/unit/pipeline-lookup.spec.js +13 -10
  222. package/dist/test/unit/pipeline-lookup.spec.js.map +1 -1
  223. package/dist/test/unit/pipeline-projection.spec.js +12 -13
  224. package/dist/test/unit/pipeline-projection.spec.js.map +1 -1
  225. package/dist/test/unit/pipeline-rows.spec.js +21 -18
  226. package/dist/test/unit/pipeline-rows.spec.js.map +1 -1
  227. package/dist/test/unit/pipeline-selection.spec.js +6 -4
  228. package/dist/test/unit/pipeline-selection.spec.js.map +1 -1
  229. package/dist/test/unit/pipeline-stages.spec.js +23 -35
  230. package/dist/test/unit/pipeline-stages.spec.js.map +1 -1
  231. package/dist/test/unit/pipeline-substream.spec.d.ts +1 -0
  232. package/dist/test/unit/pipeline-substream.spec.js +246 -0
  233. package/dist/test/unit/pipeline-substream.spec.js.map +1 -0
  234. package/dist/test/unit/pipeline.spec.js +1 -1
  235. package/dist/test/unit/query.spec.js +6 -2
  236. package/dist/test/unit/query.spec.js.map +1 -1
  237. package/dist/test/unit/reaper.spec.js +4 -3
  238. package/dist/test/unit/reaper.spec.js.map +1 -1
  239. package/dist/test/unit/relation.spec.js +37 -36
  240. package/dist/test/unit/relation.spec.js.map +1 -1
  241. package/dist/test/unit/result.spec.js +13 -11
  242. package/dist/test/unit/result.spec.js.map +1 -1
  243. package/dist/test/unit/row-source.spec.js +1 -1
  244. package/dist/test/unit/row-source.spec.js.map +1 -1
  245. package/dist/test/unit/schema.spec.js +5 -2
  246. package/dist/test/unit/schema.spec.js.map +1 -1
  247. package/dist/test/unit/selection.spec.js +7 -3
  248. package/dist/test/unit/selection.spec.js.map +1 -1
  249. package/dist/test/unit/types.spec.js +6 -6
  250. package/dist/test/unit/types.spec.js.map +1 -1
  251. package/dist/test/unit/writes-atomic.spec.js +2 -2
  252. package/dist/test/unit/writes-atomic.spec.js.map +1 -1
  253. package/dist/test/unit/writes-insert.spec.js +5 -4
  254. package/dist/test/unit/writes-insert.spec.js.map +1 -1
  255. package/dist/test/unit/writes-replace.spec.js +6 -6
  256. package/dist/test/unit/writes-replace.spec.js.map +1 -1
  257. package/dist/test/unit/writes-target.spec.js +3 -3
  258. package/dist/test/unit/writes-target.spec.js.map +1 -1
  259. package/dist/test/unit/writes-update-fixture.d.ts +9 -0
  260. package/dist/test/unit/writes-update-fixture.js +20 -0
  261. package/dist/test/unit/writes-update-fixture.js.map +1 -0
  262. package/dist/test/unit/writes-update-mapper.spec.d.ts +1 -0
  263. package/dist/test/unit/writes-update-mapper.spec.js +123 -0
  264. package/dist/test/unit/writes-update-mapper.spec.js.map +1 -0
  265. package/dist/test/unit/writes-update.spec.js +42 -171
  266. package/dist/test/unit/writes-update.spec.js.map +1 -1
  267. package/dist/test-external/catalog.test.js +11 -1
  268. package/dist/test-external/catalog.test.js.map +1 -1
  269. package/dist/test-external/native.test.js +8 -6
  270. package/dist/test-external/native.test.js.map +1 -1
  271. package/dist/test-external/reads.test.js +20 -22
  272. package/dist/test-external/reads.test.js.map +1 -1
  273. package/dist/test-external/refusals.test.js +45 -24
  274. package/dist/test-external/refusals.test.js.map +1 -1
  275. package/dist/test-external/registration.test.js +4 -2
  276. package/dist/test-external/registration.test.js.map +1 -1
  277. package/dist/test-external/sales.d.ts +9 -2
  278. package/dist/test-external/sales.js.map +1 -1
  279. package/dist/test-external/unreachable.test.d.ts +1 -0
  280. package/dist/test-external/unreachable.test.js +83 -0
  281. package/dist/test-external/unreachable.test.js.map +1 -0
  282. package/dist/test-external/writes.test.js +71 -37
  283. package/dist/test-external/writes.test.js.map +1 -1
  284. package/package.json +19 -6
package/README.md CHANGED
@@ -112,12 +112,13 @@ This repository documents what is specific to the PostgreSQL backend:
112
112
 
113
113
  ## Compatibility
114
114
 
115
- | Package | Supported range |
116
- | -------------------------------- | ---------------- |
117
- | `@antelopejs/interface-database` | `^0.1.8` |
118
- | `@antelopejs/interface-core` | `>=0.1.1 <1.0.0` |
115
+ | Package | Supported range |
116
+ | ---------------------------------------- | ---------------- |
117
+ | `@antelopejs/interface-database` | `>=0.2.0 <0.3.0` |
118
+ | `@antelopejs/interface-database-catalog` | `>=0.0.3 <0.1.0` |
119
+ | `@antelopejs/interface-core` | `>=0.1.1 <1.0.0` |
119
120
 
120
- The module is developed and tested against `@antelopejs/core` `^1.14.0` on Node.js 22 and 24, with the `pg` driver `^8.22.0` and PostgreSQL 18.
121
+ The module is developed and tested against `@antelopejs/core` `^1.14.0` on Node.js 24 (the `.nvmrc` version CI runs), with the `pg` driver `^8.22.0` and PostgreSQL 18.
121
122
 
122
123
  ## Contributing
123
124
 
package/dist/config.d.ts CHANGED
@@ -35,4 +35,5 @@ export interface ResolvedOptions {
35
35
  export declare function SetOptions(options?: Options): ResolvedOptions;
36
36
  export declare function GetOptions(): ResolvedOptions;
37
37
  export declare function IsExternal(): boolean;
38
+ export declare function IsCatalogEnabled(): Promise<boolean>;
38
39
  export declare function ClearOptions(): void;
package/dist/config.js CHANGED
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SetOptions = SetOptions;
4
4
  exports.GetOptions = GetOptions;
5
5
  exports.IsExternal = IsExternal;
6
+ exports.IsCatalogEnabled = IsCatalogEnabled;
6
7
  exports.ClearOptions = ClearOptions;
8
+ const runtime_1 = require("@antelopejs/interface-core/runtime");
7
9
  const DEFAULT_URL = "postgres://postgres@localhost:5432/antelopejs";
8
10
  const DEFAULT_MODE = "owned";
9
11
  const MODES = ["owned", "external"];
@@ -28,9 +30,7 @@ function PositiveSafeInteger(option, supplied, fallback) {
28
30
  if (supplied === undefined) {
29
31
  return fallback;
30
32
  }
31
- if (typeof supplied !== "number" ||
32
- !Number.isSafeInteger(supplied) ||
33
- supplied < SMALLEST_POSITIVE_INTEGER) {
33
+ if (!Number.isSafeInteger(supplied) || supplied < SMALLEST_POSITIVE_INTEGER) {
34
34
  throw new Error(`${option} must be a positive safe integer, received ${String(supplied)}`);
35
35
  }
36
36
  return supplied;
@@ -85,6 +85,10 @@ function GetOptions() {
85
85
  function IsExternal() {
86
86
  return GetOptions().mode === "external";
87
87
  }
88
+ async function IsCatalogEnabled() {
89
+ const configured = GetOptions().catalog.enabled;
90
+ return configured ?? (await (0, runtime_1.GetRuntimeInfo)()).dev;
91
+ }
88
92
  function ClearOptions() {
89
93
  resolved = undefined;
90
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function DescribeConnectFailure(err: Error, url: string): string;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DescribeConnectFailure = DescribeConnectFailure;
4
+ const DEFAULT_PORT = "5432";
5
+ const UNANSWERED_CODES = new Set(["ECONNREFUSED", "ENOTFOUND", "ETIMEDOUT"]);
6
+ const SSL_REQUIRED_MARKER = "no encryption";
7
+ function Endpoint(url) {
8
+ try {
9
+ const parsed = new URL(url);
10
+ return `${parsed.hostname}:${parsed.port || DEFAULT_PORT}`;
11
+ }
12
+ catch {
13
+ return "the configured host";
14
+ }
15
+ }
16
+ function Sentence(code, message, url) {
17
+ if (code === "28P01") {
18
+ return "wrong user or password";
19
+ }
20
+ if (code === "3D000") {
21
+ return "the database does not exist";
22
+ }
23
+ if (UNANSWERED_CODES.has(code)) {
24
+ return `the server is not answering at ${Endpoint(url)}`;
25
+ }
26
+ if (code === "28000" && message.includes(SSL_REQUIRED_MARKER)) {
27
+ return "the server requires SSL";
28
+ }
29
+ return undefined;
30
+ }
31
+ function DescribeConnectFailure(err, url) {
32
+ const code = "code" in err ? String(err.code) : undefined;
33
+ if (!code) {
34
+ return err.message;
35
+ }
36
+ const sentence = Sentence(code, err.message, url) ?? err.message;
37
+ return `${sentence} (${code})`;
38
+ }
39
+ //# sourceMappingURL=connect-failure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-failure.js","sourceRoot":"","sources":["../src/connect-failure.ts"],"names":[],"mappings":";;AAyCA,wDAOC;AAhDD,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAE7E,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAE5C,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,qBAAqB,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,IAAY,EACZ,OAAe,EACf,GAAW;IAEX,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,wBAAwB,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,6BAA6B,CAAC;IACvC,CAAC;IACD,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO,kCAAkC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IAC3D,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9D,OAAO,yBAAyB,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAQD,SAAgB,sBAAsB,CAAC,GAAU,EAAE,GAAW;IAC5D,MAAM,IAAI,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC;IACjE,OAAO,GAAG,QAAQ,KAAK,IAAI,GAAG,CAAC;AACjC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { Pool, type PoolClient, type QueryResult, type QueryResultRow } from "pg";
2
2
  import { type Options } from "./config";
3
- export type BeforeDisconnect = () => unknown;
3
+ export type BeforeDisconnect = () => void | PromiseLike<void>;
4
4
  export type PoolTeardown = () => Promise<void>;
5
5
  export declare function GuardPool(created: Pool): Pool;
6
6
  export declare function Connect(options?: Options): Promise<void>;
@@ -8,6 +8,7 @@ export declare function RegisterBeforeDisconnect(callback: BeforeDisconnect): ()
8
8
  export declare function SettleBeforeDisconnect(endPool: PoolTeardown): Promise<void>;
9
9
  export declare function Disconnect(): Promise<void>;
10
10
  export declare function GetPool(): Pool;
11
+ export declare function AssertConnected(): void;
11
12
  export declare function Query<T extends QueryResultRow = QueryResultRow>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
12
13
  export declare function GuardHeldClient(client: PoolClient): PoolClient;
13
14
  export declare function AcquireClient(): Promise<PoolClient>;
@@ -6,6 +6,7 @@ exports.RegisterBeforeDisconnect = RegisterBeforeDisconnect;
6
6
  exports.SettleBeforeDisconnect = SettleBeforeDisconnect;
7
7
  exports.Disconnect = Disconnect;
8
8
  exports.GetPool = GetPool;
9
+ exports.AssertConnected = AssertConnected;
9
10
  exports.Query = Query;
10
11
  exports.GuardHeldClient = GuardHeldClient;
11
12
  exports.AcquireClient = AcquireClient;
@@ -13,16 +14,20 @@ exports.GetSchemaPrefix = GetSchemaPrefix;
13
14
  const pg_1 = require("pg");
14
15
  const logger_1 = require("./logger");
15
16
  const config_1 = require("./config");
16
- const NOT_CONNECTED = "PostgreSQL adapter is not connected: construct() has not run yet";
17
+ const connect_failure_1 = require("./connect-failure");
18
+ const NOT_CONNECTED = "PostgreSQL adapter is not connected";
19
+ const NOT_CONSTRUCTED = "construct() has not run yet";
17
20
  const SESSION_SETTINGS = "SET TIME ZONE 'UTC'; SET DateStyle = 'ISO, MDY'";
18
21
  const CLIENT_ERROR = "error";
19
22
  const HELD_CLIENT_FAILED = "the connection under a borrowed PostgreSQL client failed while it was checked out";
20
23
  const IDLE_CLIENT_FAILED = "the connection under an idle pooled PostgreSQL client failed";
21
24
  const CONNECTED = "connected to PostgreSQL";
22
25
  const DISCONNECTED = "disconnected from PostgreSQL";
26
+ const STARTED_UNCONNECTED = "could not connect to PostgreSQL; the instance starts without a connection and refuses every call until the project reloads";
23
27
  const SLOW_ACQUIRE_MS = 10_000;
24
28
  const SLOW_ACQUIRE = `no PostgreSQL client has become available in ${SLOW_ACQUIRE_MS} ms: either every pooled connection is checked out — a cursor holds one for as long as it is iterated — or a new connection is not being answered. Raise pool.max, or set pool.connectionTimeoutMillis to fail rather than wait`;
25
29
  let pool;
30
+ let connectFailure;
26
31
  let isWaiting = false;
27
32
  const beforeDisconnect = new Set();
28
33
  function PinSession(client) {
@@ -38,6 +43,9 @@ function GuardPool(created) {
38
43
  created.on(CLIENT_ERROR, ReportIdleClientError);
39
44
  return created;
40
45
  }
46
+ async function ToleratesConnectFailure() {
47
+ return (0, config_1.IsExternal)() && (await (0, config_1.IsCatalogEnabled)());
48
+ }
41
49
  async function Connect(options) {
42
50
  await Disconnect();
43
51
  const resolved = (0, config_1.SetOptions)(options);
@@ -53,6 +61,11 @@ async function Connect(options) {
53
61
  }
54
62
  catch (err) {
55
63
  await created.end();
64
+ if (err instanceof Error && (await ToleratesConnectFailure())) {
65
+ connectFailure = (0, connect_failure_1.DescribeConnectFailure)(err, resolved.url);
66
+ logger_1.Logger.Warn(STARTED_UNCONNECTED, connectFailure);
67
+ return;
68
+ }
56
69
  (0, config_1.ClearOptions)();
57
70
  throw err;
58
71
  }
@@ -72,6 +85,7 @@ async function SettleBeforeDisconnect(endPool) {
72
85
  async function EndPool() {
73
86
  const current = pool;
74
87
  pool = undefined;
88
+ connectFailure = undefined;
75
89
  (0, config_1.ClearOptions)();
76
90
  if (current) {
77
91
  await current.end();
@@ -83,10 +97,13 @@ async function Disconnect() {
83
97
  }
84
98
  function GetPool() {
85
99
  if (!pool) {
86
- throw new Error(NOT_CONNECTED);
100
+ throw new Error(`${NOT_CONNECTED}: ${connectFailure ?? NOT_CONSTRUCTED}`);
87
101
  }
88
102
  return pool;
89
103
  }
104
+ function AssertConnected() {
105
+ GetPool();
106
+ }
90
107
  function Query(sql, params) {
91
108
  return GetPool().query(sql, params);
92
109
  }
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":";;AAiGA,8BAGC;AAqCD,0BA0BC;AAgBD,4DAKC;AAcD,wDAGC;AAcD,gCAEC;AAGD,0BAKC;AAGD,0CAEC;AAED,sBAKC;AA0CD,0CASC;AAwBD,sCAWC;AAED,0CAEC;AAvUD,2BAMY;AAEZ,qCAAkC;AAClC,qCAOkB;AAClB,uDAA2D;AAE3D,MAAM,aAAa,GAAG,qCAAqC,CAAC;AAE5D,MAAM,eAAe,GAAG,6BAA6B,CAAC;AAEtD,MAAM,gBAAgB,GAAG,iDAAiD,CAAC;AAE3E,MAAM,YAAY,GAAG,OAAO,CAAC;AAE7B,MAAM,kBAAkB,GACtB,mFAAmF,CAAC;AAEtF,MAAM,kBAAkB,GACtB,8DAA8D,CAAC;AAEjE,MAAM,SAAS,GAAG,yBAAyB,CAAC;AAE5C,MAAM,YAAY,GAAG,8BAA8B,CAAC;AAEpD,MAAM,mBAAmB,GACvB,4HAA4H,CAAC;AAE/H,MAAM,eAAe,GAAG,MAAM,CAAC;AAW/B,MAAM,YAAY,GAAG,gDAAgD,eAAe,iOAAiO,CAAC;AAEtT,IAAI,IAAsB,CAAC;AAC3B,IAAI,cAAkC,CAAC;AACvC,IAAI,SAAS,GAAG,KAAK,CAAC;AAMtB,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAoB,CAAC;AAErD,SAAS,UAAU,CAAC,MAAkB;IACpC,OAAO,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACxC,CAAC;AAGD,KAAK,UAAU,MAAM,CAAC,QAA0B;IAC9C,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC;AAGD,SAAS,qBAAqB,CAAC,GAAU;IACvC,eAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAsBD,SAAgB,SAAS,CAAC,OAAa;IACrC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC;AACjB,CAAC;AAMD,KAAK,UAAU,uBAAuB;IACpC,OAAO,IAAA,mBAAU,GAAE,IAAI,CAAC,MAAM,IAAA,yBAAgB,GAAE,CAAC,CAAC;AACpD,CAAC;AA6BM,KAAK,UAAU,OAAO,CAAC,OAAiB;IAC7C,MAAM,UAAU,EAAE,CAAC;IACnB,MAAM,QAAQ,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,SAAS,CACvB,IAAI,SAAI,CAAC;QACP,gBAAgB,EAAE,QAAQ,CAAC,GAAG;QAC9B,iBAAiB,EAAE,QAAQ,CAAC,kBAAkB;QAC9C,GAAG,QAAQ,CAAC,IAAI;QAChB,SAAS,EAAE,UAAU;KACtB,CAAC,CACH,CAAC;IACF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACvC,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC;QACpB,IAAI,GAAG,YAAY,KAAK,IAAI,CAAC,MAAM,uBAAuB,EAAE,CAAC,EAAE,CAAC;YAC9D,cAAc,GAAG,IAAA,wCAAsB,EAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC3D,eAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QACD,IAAA,qBAAY,GAAE,CAAC;QACf,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,IAAI,GAAG,OAAO,CAAC;IACf,eAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACzB,CAAC;AAgBD,SAAgB,wBAAwB,CAAC,QAA0B;IACjE,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/B,OAAO,GAAG,EAAE;QACV,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAcM,KAAK,UAAU,sBAAsB,CAAC,OAAqB;IAChE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,MAAM,OAAO,EAAE,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,MAAM,OAAO,GAAG,IAAI,CAAC;IACrB,IAAI,GAAG,SAAS,CAAC;IACjB,cAAc,GAAG,SAAS,CAAC;IAC3B,IAAA,qBAAY,GAAE,CAAC;IACf,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC;QACpB,eAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAGM,KAAK,UAAU,UAAU;IAC9B,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC;AAGD,SAAgB,OAAO;IACrB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,KAAK,cAAc,IAAI,eAAe,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAGD,SAAgB,eAAe;IAC7B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,KAAK,CACnB,GAAW,EACX,MAAkB;IAElB,OAAO,OAAO,EAAE,CAAC,KAAK,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAU;IACvC,eAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAGD,SAAS,eAAe;IACtB,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IACD,SAAS,GAAG,IAAI,CAAC;IACjB,eAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5B,CAAC;AA6BD,SAAgB,eAAe,CAAC,MAAkB;IAChD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,IAAuC,EAAE,EAAE;QAC9D,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAwBD,SAAgB,aAAa;IAC3B,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;IACb,OAAO,OAAO;SACX,OAAO,EAAE;SACT,IAAI,CAAC,eAAe,CAAC;SACrB,OAAO,CAAC,GAAG,EAAE;QACZ,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,IAAA,mBAAU,GAAE,CAAC,YAAY,CAAC;AACnC,CAAC"}
@@ -6,8 +6,8 @@ exports.DescribeRelations = DescribeRelations;
6
6
  exports.Profile = Profile;
7
7
  exports.CheckReference = CheckReference;
8
8
  exports.SampleRows = SampleRows;
9
- const runtime_1 = require("@antelopejs/interface-core/runtime");
10
9
  const config_1 = require("../../config");
10
+ const connection_1 = require("../../connection");
11
11
  const external_discovery_1 = require("../database/external-discovery");
12
12
  const external_measures_1 = require("../database/external-measures");
13
13
  const external_profile_1 = require("../database/external-profile");
@@ -15,17 +15,14 @@ const external_reference_1 = require("../database/external-reference");
15
15
  const external_rows_1 = require("../database/external-rows");
16
16
  const OWNED_REFUSAL = "the catalog describes a database an external instance was pointed at; this instance owns its tables";
17
17
  const DEVELOPMENT_REFUSAL = "the catalog is a development tool: it answers under ajs project dev or run, or with catalog.enabled";
18
- async function IsEnabled() {
19
- const configured = (0, config_1.GetOptions)().catalog.enabled;
20
- return configured ?? (await (0, runtime_1.GetRuntimeInfo)()).dev;
21
- }
22
18
  async function Guard() {
23
19
  if (!(0, config_1.IsExternal)()) {
24
20
  throw new Error(OWNED_REFUSAL);
25
21
  }
26
- if (!(await IsEnabled())) {
22
+ if (!(await (0, config_1.IsCatalogEnabled)())) {
27
23
  throw new Error(DEVELOPMENT_REFUSAL);
28
24
  }
25
+ (0, connection_1.AssertConnected)();
29
26
  }
30
27
  async function Info() {
31
28
  await Guard();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/implementations/catalog/index.ts"],"names":[],"mappings":";;AAgDA,oBAGC;AAED,sCAKC;AAED,8CAaC;AAED,0BAKC;AAED,wCAKC;AAED,gCAGC;AA5FD,gEAAoE;AAcpE,yCAAsD;AACtD,uEAOwC;AACxC,qEAA6D;AAC7D,mEAA+D;AAC/D,uEAAsE;AACtE,6DAA+D;AAE/D,MAAM,aAAa,GACjB,qGAAqG,CAAC;AACxG,MAAM,mBAAmB,GACvB,qGAAqG,CAAC;AAExG,KAAK,UAAU,SAAS;IACtB,MAAM,UAAU,GAAG,IAAA,mBAAU,GAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAChD,OAAO,UAAU,IAAI,CAAC,MAAM,IAAA,wBAAc,GAAE,CAAC,CAAC,GAAG,CAAC;AACpD,CAAC;AAGD,KAAK,UAAU,KAAK;IAClB,IAAI,CAAC,IAAA,mBAAU,GAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,SAAS,EAAE,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,IAAI;IACxB,MAAM,KAAK,EAAE,CAAC;IACd,OAAO,IAAA,6BAAQ,GAAE,CAAC;AACpB,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,OAAkB;IAElB,MAAM,KAAK,EAAE,CAAC;IACd,OAAO,IAAA,gCAAY,EAAC,MAAM,IAAA,qCAAgB,EAAC,OAAO,CAAC,EAAE,8BAAS,CAAC,CAAC;AAClE,CAAC;AAEM,KAAK,UAAU,iBAAiB,CACrC,SAAmB;IAEnB,MAAM,KAAK,EAAE,CAAC;IACd,MAAM,IAAI,GAAG,MAAM,IAAA,0CAAqB,EAAC,SAAS,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,iCAAY,CAAC,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,eAAe,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,IAAA,gCAAY,EAAC,IAAI,EAAE,gCAAW,CAAC,CAAC;AACzC,CAAC;AAEM,KAAK,UAAU,OAAO,CAC3B,OAAuB;IAEvB,MAAM,KAAK,EAAE,CAAC;IACd,OAAO,IAAA,kCAAe,EAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,KAAqB;IAErB,MAAM,KAAK,EAAE,CAAC;IACd,OAAO,IAAA,yCAAoB,EAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,OAAsB;IACrD,MAAM,KAAK,EAAE,CAAC;IACd,OAAO,IAAA,kCAAkB,EAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/implementations/catalog/index.ts"],"names":[],"mappings":";;AA+CA,oBAGC;AAED,sCAKC;AAED,8CAaC;AAED,0BAKC;AAED,wCAKC;AAED,gCAGC;AA9ED,yCAA4D;AAC5D,iDAAmD;AACnD,uEAOwC;AACxC,qEAA6D;AAC7D,mEAA+D;AAC/D,uEAAsE;AACtE,6DAA+D;AAE/D,MAAM,aAAa,GACjB,qGAAqG,CAAC;AACxG,MAAM,mBAAmB,GACvB,qGAAqG,CAAC;AAMxG,KAAK,UAAU,KAAK;IAClB,IAAI,CAAC,IAAA,mBAAU,GAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,IAAA,yBAAgB,GAAE,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAA,4BAAe,GAAE,CAAC;AACpB,CAAC;AAEM,KAAK,UAAU,IAAI;IACxB,MAAM,KAAK,EAAE,CAAC;IACd,OAAO,IAAA,6BAAQ,GAAE,CAAC;AACpB,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,OAAkB;IAElB,MAAM,KAAK,EAAE,CAAC;IACd,OAAO,IAAA,gCAAY,EAAC,MAAM,IAAA,qCAAgB,EAAC,OAAO,CAAC,EAAE,8BAAS,CAAC,CAAC;AAClE,CAAC;AAEM,KAAK,UAAU,iBAAiB,CACrC,SAAmB;IAEnB,MAAM,KAAK,EAAE,CAAC;IACd,MAAM,IAAI,GAAG,MAAM,IAAA,0CAAqB,EAAC,SAAS,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,iCAAY,CAAC,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,eAAe,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,IAAA,gCAAY,EAAC,IAAI,EAAE,gCAAW,CAAC,CAAC;AACzC,CAAC;AAEM,KAAK,UAAU,OAAO,CAC3B,OAAuB;IAEvB,MAAM,KAAK,EAAE,CAAC;IACd,OAAO,IAAA,kCAAe,EAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,KAAqB;IAErB,MAAM,KAAK,EAAE,CAAC;IACd,OAAO,IAAA,yCAAoB,EAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,OAAsB;IACrD,MAAM,KAAK,EAAE,CAAC;IACd,OAAO,IAAA,kCAAkB,EAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
@@ -26,35 +26,35 @@ function UnifySameKind(left, right) {
26
26
  return (0, types_1.ArrayOf)(Unify(left.elem, right.elem));
27
27
  }
28
28
  if (left.kind === "json" && right.kind === "json") {
29
- return (0, types_1.JsonOf)(UnifyShapes(left.shape, right.shape));
29
+ return (0, types_1.JsonOf)(UnifyKeyTypes(left.keys, right.keys));
30
30
  }
31
31
  return left;
32
32
  }
33
- function UnifyShapes(left, right) {
33
+ function UnifyKeyTypes(left, right) {
34
34
  if (!left || !right) {
35
35
  return undefined;
36
36
  }
37
- const shape = {};
37
+ const keyTypes = {};
38
38
  for (const [name, type] of Object.entries(left)) {
39
39
  if (Object.hasOwn(right, name)) {
40
- shape[name] = Unify(type, right[name]);
40
+ keyTypes[name] = Unify(type, right[name]);
41
41
  }
42
42
  }
43
- return Object.keys(shape).length > 0 ? shape : undefined;
43
+ return Object.keys(keyTypes).length > 0 ? keyTypes : undefined;
44
44
  }
45
45
  function Widen(left, right) {
46
- const leftShape = (0, types_1.ShapeOf)(left);
47
- const rightShape = (0, types_1.ShapeOf)(right);
48
- if (!leftShape || !rightShape) {
46
+ const leftKeys = (0, types_1.KeyTypesOf)(left);
47
+ const rightKeys = (0, types_1.KeyTypesOf)(right);
48
+ if (!leftKeys || !rightKeys) {
49
49
  return Unify(left, right);
50
50
  }
51
- const shape = { ...leftShape };
52
- for (const [name, type] of Object.entries(rightShape)) {
53
- shape[name] = Object.hasOwn(leftShape, name)
54
- ? Unify(leftShape[name], type)
51
+ const keyTypes = { ...leftKeys };
52
+ for (const [name, type] of Object.entries(rightKeys)) {
53
+ keyTypes[name] = Object.hasOwn(leftKeys, name)
54
+ ? Unify(leftKeys[name], type)
55
55
  : type;
56
56
  }
57
- return (0, types_1.JsonOf)(shape);
57
+ return (0, types_1.JsonOf)(keyTypes);
58
58
  }
59
59
  function Cast(value, target) {
60
60
  if (value.type.kind === target.kind) {
@@ -123,12 +123,12 @@ function UnifyOperands(left, right, operator = EQUALITY) {
123
123
  return NativePair(left, right, pair, operator);
124
124
  }
125
125
  const EQUALITY = "=";
126
- const MIRRORED = {
127
- ">": "<",
128
- "<": ">",
129
- ">=": "<=",
130
- "<=": ">=",
131
- };
126
+ const MIRRORED = new Map([
127
+ [">", "<"],
128
+ ["<", ">"],
129
+ [">=", "<="],
130
+ ["<=", ">="],
131
+ ]);
132
132
  function NativeSide(native, type) {
133
133
  return { sql: native.sql, type };
134
134
  }
@@ -154,7 +154,7 @@ function NativePair(left, right, pair, operator) {
154
154
  };
155
155
  }
156
156
  if (right.native && type.kind === right.type.kind) {
157
- const mirrored = MIRRORED[operator] ?? operator;
157
+ const mirrored = MIRRORED.get(operator) ?? operator;
158
158
  const converted = right.native.bind(pair.left.sql, mirrored);
159
159
  return {
160
160
  left: { sql: converted, type },
@@ -1 +1 @@
1
- {"version":3,"file":"coerce.js","sourceRoot":"","sources":["../../../src/implementations/database/coerce.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coerce.js","sourceRoot":"","sources":["../../../src/implementations/database/coerce.ts"],"names":[],"mappings":";;AAqCA,sBAWC;AA0CD,sBAaC;AAqBD,oBAcC;AAoBD,4BAEC;AA4CD,4BAOC;AAWD,sCAQC;AA6ED,kCAcC;AAjUD,+BAKe;AACf,mCAUiB;AAqBjB,SAAgB,KAAK,CAAC,IAAa,EAAE,KAAc;IACjD,IAAI,IAAA,gBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAA,gBAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,cAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,IAAa,EAAE,KAAc;IAClD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACpD,OAAO,IAAA,eAAO,EAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAClD,OAAO,IAAA,cAAM,EAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CACpB,IAAe,EACf,KAAgB;IAEhB,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAgBD,SAAgB,KAAK,CAAC,IAAa,EAAE,KAAc;IACjD,MAAM,QAAQ,GAAG,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;YAC5C,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IACD,OAAO,IAAA,cAAM,EAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAqBD,SAAgB,IAAI,CAAC,KAAe,EAAE,MAAe;IACnD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1C,CAAC;IACD,IAAI,IAAA,oBAAY,EAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAA,oBAAY,EAAC,MAAM,CAAC,EAAE,CAAC;QACrD,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1C,CAAC;IACD,IAAI,IAAA,oBAAY,EAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,GAAG,EAAE,YAAY,KAAK,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,cAAM,EAAE,CAAC;IACzD,CAAC;IACD,IAAI,IAAA,oBAAY,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,GAAG,MAAM,IAAA,oBAAY,EAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,WAAW,GAA6C;IAC5D,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,QAAQ;CACpB,CAAC;AAEF,MAAM,YAAY,GAA2C;IAC3D,SAAS,EAAE,IAAI;CAChB,CAAC;AASF,SAAgB,QAAQ,CAAC,GAAW,EAAE,MAAe;IACnD,OAAO,qBAAqB,GAAG,KAAK,IAAA,kBAAY,EAAC,IAAA,oBAAY,EAAC,MAAM,CAAC,CAAC,GAAG,CAAC;AAC5E,CAAC;AAED,SAAS,aAAa,CAAC,KAAe;IACpC,OAAO,IAAI,KAAK,CAAC,GAAG,YAAY,CAAC;AACnC,CAAC;AAED,SAAS,UAAU,CAAC,KAAe,EAAE,MAAe;IAClD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,IAAI,KAAK,IAAA,oBAAY,EAAC,MAAM,CAAC,GAAG,CAAC;AAC9C,CAAC;AAED,SAAS,UAAU,CACjB,KAAe,EACf,MAAe,EACf,QAAgB;IAEhB,MAAM,MAAM,GAAG,CAAC,gBAAgB,KAAK,CAAC,GAAG,QAAQ,QAAQ,GAAG,CAAC,CAAC;IAC9D,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAe,EAAE,MAAe;IAChD,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO;QACL,GAAG,EAAE,cAAc,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,UAAU,OAAO;QAChF,IAAI,EAAE,MAAM;KACb,CAAC;AACJ,CAAC;AAQD,SAAgB,QAAQ,CAAC,KAAgB;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,cAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAClC,IAAA,gBAAQ,EAAC,IAAI,CAAC,IAAI,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAChE,CAAC;AACJ,CAAC;AAWD,SAAgB,aAAa,CAC3B,IAAc,EACd,KAAe,EACf,QAAQ,GAAG,QAAQ;IAEnB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACxE,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,QAAQ,GAAG,GAAG,CAAC;AAGrB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACvB,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;CACb,CAAC,CAAC;AAEH,SAAS,UAAU,CAAC,MAAqB,EAAE,IAAa;IACtD,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,UAAU,CACjB,IAAc,EACd,KAAe,EACf,IAAkB,EAClB,QAAgB;IAEhB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;YACnC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;YACrC,IAAI;SACL,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7D,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;YACnC,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;YAC/B,IAAI;YACJ,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;QACpD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7D,OAAO;YACL,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;YAC9B,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;YACrC,IAAI;YACJ,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAMD,SAAS,MAAM,CAAC,IAAkB;IAChC,IAAI,CAAC,IAAA,oBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACvB,CAAC;IACD,OAAO,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,eAAS,GAAG,CAAC;AAClD,CAAC;AAMD,SAAS,WAAW,CAAC,KAAc,EAAE,GAAY;IAC/C,IAAI,IAAA,oBAAY,EAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;QACnD,OAAO,cAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,WAAW,CAAC,KAAe,EAAE,GAAc;IACzD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAiB;QACzB,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QACvB,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;QACtB,IAAI;KACL,CAAC;IACF,OAAO;QACL,GAAG,EAAE,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG;QACnD,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;AACJ,CAAC"}
@@ -5,6 +5,7 @@ import type { OriginResolver } from "./selection";
5
5
  import { type Compiled, ParamCollector } from "./sql";
6
6
  export type SubqueryProvider = (stages: QueryStage[]) => Compiled;
7
7
  export type ArgumentBinding = RowSource | SubqueryProvider | Compiled;
8
+ export declare function IsSubqueryProvider(binding: ArgumentBinding): binding is SubqueryProvider;
8
9
  type ExpressionCompiler = (stages: QueryStage[], context: DecodingContext, source?: RowSource) => Compiled;
9
10
  export type SubqueryCompiler = (stages: QueryStage[], context: DecodingContext) => Compiled;
10
11
  type RelationCompiler = (stages: QueryStage[], context: DecodingContext) => Relation;
@@ -4,8 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DecodingContext = void 0;
7
+ exports.IsSubqueryProvider = IsSubqueryProvider;
7
8
  const node_assert_1 = __importDefault(require("node:assert"));
8
9
  const sql_1 = require("./sql");
10
+ function IsSubqueryProvider(binding) {
11
+ return typeof binding === "function";
12
+ }
9
13
  const ALIAS_PREFIX = "t";
10
14
  class DecodingContext {
11
15
  compilers;
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/implementations/database/context.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAiC;AAMjC,+BAAsD;AAwCtD,MAAM,YAAY,GAAG,GAAG,CAAC;AAQzB,MAAa,eAAe;IAkBP;IACD;IAlBF,MAAM,GAAG,IAAI,oBAAc,EAAE,CAAC;IAE7B,QAAQ,GAAoC,EAAE,CAAC;IACxD,YAAY,GAAG,CAAC,CAAC;IAazB,YACmB,SAAoB,EACrB,aAA8B;QAD7B,cAAS,GAAT,SAAS,CAAW;QACrB,kBAAa,GAAb,aAAa,CAAiB;IAC7C,CAAC;IAGG,OAAO;QACZ,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;IAEM,SAAS;QACd,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;IACjD,CAAC;IAEM,IAAI,CAAC,EAAU,EAAE,OAAwB;QAC9C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;IAC9B,CAAC;IAEM,MAAM,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAEM,GAAG,CAAC,EAAU;QACnB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC9C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnB,CAAC,CAAC,SAAS,CAAC;QACd,IAAA,qBAAM,EAAC,OAAO,EAAE,4BAA4B,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,UAAU,CAAC,MAAoB,EAAE,MAAkB;QACxD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAEM,QAAQ,CAAC,MAAoB;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAGM,QAAQ,CAAC,MAAoB;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;CACF;AA3DD,0CA2DC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/implementations/database/context.ts"],"names":[],"mappings":";;;;;;AAaA,gDAIC;AAjBD,8DAAiC;AAMjC,+BAAsD;AAOtD,SAAgB,kBAAkB,CAChC,OAAwB;IAExB,OAAO,OAAO,OAAO,KAAK,UAAU,CAAC;AACvC,CAAC;AAoCD,MAAM,YAAY,GAAG,GAAG,CAAC;AAQzB,MAAa,eAAe;IAkBP;IACD;IAlBF,MAAM,GAAG,IAAI,oBAAc,EAAE,CAAC;IAE7B,QAAQ,GAAoC,EAAE,CAAC;IACxD,YAAY,GAAG,CAAC,CAAC;IAazB,YACmB,SAAoB,EACrB,aAA8B;QAD7B,cAAS,GAAT,SAAS,CAAW;QACrB,kBAAa,GAAb,aAAa,CAAiB;IAC7C,CAAC;IAGG,OAAO;QACZ,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;IAEM,SAAS;QACd,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;IACjD,CAAC;IAEM,IAAI,CAAC,EAAU,EAAE,OAAwB;QAC9C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;IAC9B,CAAC;IAEM,MAAM,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAEM,GAAG,CAAC,EAAU;QACnB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC9C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnB,CAAC,CAAC,SAAS,CAAC;QACd,IAAA,qBAAM,EAAC,OAAO,EAAE,4BAA4B,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,UAAU,CAAC,MAAoB,EAAE,MAAkB;QACxD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAEM,QAAQ,CAAC,MAAoB;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAGM,QAAQ,CAAC,MAAoB;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;CACF;AA3DD,0CA2DC"}
@@ -0,0 +1,22 @@
1
+ import type { MigrationMode } from "../../config";
2
+ import { type TablePlan } from "./ddl";
3
+ export interface ActualColumn {
4
+ readonly name: string;
5
+ readonly type: string;
6
+ }
7
+ export interface ActualIndex {
8
+ readonly name: string;
9
+ readonly signature?: string;
10
+ readonly valid: boolean;
11
+ }
12
+ export interface ActualTable {
13
+ readonly columns: readonly ActualColumn[];
14
+ readonly indexes: readonly ActualIndex[];
15
+ }
16
+ export interface ConvergencePlan {
17
+ statements: string[];
18
+ indexStatements: string[];
19
+ warnings: string[];
20
+ }
21
+ export declare function PlanIndexStatements(schemaName: string, plan: TablePlan, actual: ActualTable): string[];
22
+ export declare function PlanTable(schemaName: string, plan: TablePlan, actual: ActualTable, mode: MigrationMode): ConvergencePlan;
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlanIndexStatements = PlanIndexStatements;
4
+ exports.PlanTable = PlanTable;
5
+ const coerce_1 = require("./coerce");
6
+ const sql_1 = require("./sql");
7
+ const types_1 = require("./types");
8
+ const utils_1 = require("./utils");
9
+ const identifier_1 = require("./identifier");
10
+ const ddl_1 = require("./ddl");
11
+ const DESTRUCTIVE = "destructive";
12
+ const CAST_PIVOT_TYPE = (0, types_1.PhysicalType)(types_1.TEXT);
13
+ const CANONICAL_TYPES = new Map([
14
+ ["text", "text"],
15
+ ["double precision", "double precision"],
16
+ ["boolean", "boolean"],
17
+ ["timestamptz", "timestamp with time zone"],
18
+ ["jsonb", "jsonb"],
19
+ ]);
20
+ function Canonical(type) {
21
+ return CANONICAL_TYPES.get(type) ?? type;
22
+ }
23
+ function AlterTable(target, action) {
24
+ return `ALTER TABLE ${target} ${action}`;
25
+ }
26
+ function DropIndexSql(schemaName, name) {
27
+ return `DROP INDEX IF EXISTS ${(0, identifier_1.QualifiedName)(schemaName, name)}`;
28
+ }
29
+ function DropIndexConcurrentlySql(schemaName, name) {
30
+ return `DROP INDEX CONCURRENTLY IF EXISTS ${(0, identifier_1.QualifiedName)(schemaName, name)}`;
31
+ }
32
+ function RenameIndexSql(schemaName, from, to) {
33
+ return `ALTER INDEX ${(0, identifier_1.QualifiedName)(schemaName, from)} RENAME TO ${(0, sql_1.QuoteIdentifier)(to)}`;
34
+ }
35
+ function IsRetyped(column, currentType) {
36
+ return Canonical(currentType) !== Canonical(column.type);
37
+ }
38
+ function BackfillSql(target, column, declared) {
39
+ const overflow = (0, sql_1.QuoteIdentifier)(utils_1.EXTRA_COLUMN);
40
+ const key = (0, sql_1.QuoteLiteral)(declared.field);
41
+ const stored = `NULLIF(${(0, sql_1.JsonKey)(overflow, declared.field)}, ${sql_1.JSON_NULL})`;
42
+ const read = (0, coerce_1.Cast)({ sql: stored, type: types_1.OPAQUE }, declared.type).sql;
43
+ const name = (0, sql_1.QuoteIdentifier)(column.name);
44
+ return (`UPDATE ${target} SET ${name} = ${read}, ${overflow} = ${overflow} - ${key}` +
45
+ ` WHERE ${name} IS NULL AND ${read} IS NOT NULL`);
46
+ }
47
+ function PlanAddedColumn(target, column, out) {
48
+ if (column.notNull && column.defaultExpression === undefined) {
49
+ throw new Error(`Table ${target} has no '${column.name}' column and one cannot be added without a default, so the table was not created by this adapter; rename it or drop it`);
50
+ }
51
+ out.statements.push(AlterTable(target, `ADD COLUMN IF NOT EXISTS ${(0, ddl_1.ColumnDdl)(column)}`));
52
+ if (column.declared) {
53
+ out.statements.push(BackfillSql(target, column, column.declared));
54
+ }
55
+ }
56
+ function PlanAlteredColumn(target, column, current, mode, out) {
57
+ if (!IsRetyped(column, current.type)) {
58
+ return;
59
+ }
60
+ if (mode !== DESTRUCTIVE) {
61
+ throw new Error(`Column '${column.name}' on ${target} is ${current.type} but the schema declares ${column.type}; set migrations: "destructive" to alter it`);
62
+ }
63
+ const name = (0, sql_1.QuoteIdentifier)(column.name);
64
+ out.statements.push(AlterTable(target, `ALTER COLUMN ${name} TYPE ${column.type} USING (${name}::${CAST_PIVOT_TYPE}::${column.type})`));
65
+ }
66
+ function PlanRemovedColumns(target, plan, actual, mode, out) {
67
+ const declared = new Set(plan.columns.map((column) => column.name));
68
+ for (const column of actual.columns) {
69
+ if (declared.has(column.name)) {
70
+ continue;
71
+ }
72
+ if (mode === DESTRUCTIVE) {
73
+ out.statements.push(AlterTable(target, `DROP COLUMN ${(0, sql_1.QuoteIdentifier)(column.name)}`));
74
+ continue;
75
+ }
76
+ out.warnings.push(`Column '${column.name}' on ${target} is no longer declared and was left in place; set migrations: "destructive" to drop it`);
77
+ }
78
+ }
79
+ function PlanColumns(target, plan, actual, mode, out) {
80
+ const found = new Map(actual.columns.map((column) => [column.name, column]));
81
+ for (const column of plan.columns) {
82
+ const current = found.get(column.name);
83
+ if (!current) {
84
+ PlanAddedColumn(target, column, out);
85
+ continue;
86
+ }
87
+ PlanAlteredColumn(target, column, current, mode, out);
88
+ }
89
+ PlanRemovedColumns(target, plan, actual, mode, out);
90
+ }
91
+ function RetypesAColumn(plan, actual) {
92
+ const found = new Map(actual.columns.map((column) => [column.name, column]));
93
+ return plan.columns.some((column) => {
94
+ const current = found.get(column.name);
95
+ return current !== undefined && IsRetyped(column, current.type);
96
+ });
97
+ }
98
+ function IsObsolete(index, desired) {
99
+ const wanted = desired.get(index.name);
100
+ return wanted
101
+ ? wanted.signature !== index.signature
102
+ : (0, ddl_1.IsAdapterIndex)(index.signature);
103
+ }
104
+ function PlanRetypeDrops(schemaName, plan, actual, out) {
105
+ if (!RetypesAColumn(plan, actual)) {
106
+ return actual.indexes;
107
+ }
108
+ const desired = new Map(plan.indexes.map((index) => [index.name, index]));
109
+ const obsolete = actual.indexes.filter((index) => IsObsolete(index, desired));
110
+ for (const index of obsolete) {
111
+ out.statements.push(DropIndexSql(schemaName, index.name));
112
+ }
113
+ return actual.indexes.filter((index) => !obsolete.includes(index));
114
+ }
115
+ function IsReady(index, found) {
116
+ return found?.valid === true && found.signature === index.signature;
117
+ }
118
+ function ClearSql(schemaName, found) {
119
+ return found ? [DropIndexConcurrentlySql(schemaName, found.name)] : [];
120
+ }
121
+ function ReplaceIndexSql(schemaName, plan, index) {
122
+ const replacement = (0, identifier_1.ReplacementIndexName)(index.name);
123
+ return [
124
+ ...(0, ddl_1.CreateIndexSql)(schemaName, plan, index, replacement),
125
+ DropIndexConcurrentlySql(schemaName, index.name),
126
+ RenameIndexSql(schemaName, replacement, index.name),
127
+ ];
128
+ }
129
+ function PlanIndexBuild(schemaName, plan, index, state) {
130
+ const { current, replacement } = state;
131
+ if (IsReady(index, current)) {
132
+ return ClearSql(schemaName, replacement);
133
+ }
134
+ if (current === undefined && replacement && IsReady(index, replacement)) {
135
+ return [RenameIndexSql(schemaName, replacement.name, index.name)];
136
+ }
137
+ const cleared = ClearSql(schemaName, replacement);
138
+ if (current?.valid !== true) {
139
+ const rebuilt = (0, ddl_1.CreateIndexSql)(schemaName, plan, index);
140
+ return [...cleared, ...ClearSql(schemaName, current), ...rebuilt];
141
+ }
142
+ return [...cleared, ...ReplaceIndexSql(schemaName, plan, index)];
143
+ }
144
+ function PlanIndexes(schemaName, plan, actual) {
145
+ const found = new Map(actual.map((index) => [index.name, index]));
146
+ const managed = new Set();
147
+ const statements = [];
148
+ for (const index of plan.indexes) {
149
+ const replacement = (0, identifier_1.ReplacementIndexName)(index.name);
150
+ managed.add(index.name).add(replacement);
151
+ const state = {
152
+ current: found.get(index.name),
153
+ replacement: found.get(replacement),
154
+ };
155
+ statements.push(...PlanIndexBuild(schemaName, plan, index, state));
156
+ }
157
+ for (const index of actual) {
158
+ if (!managed.has(index.name) && (0, ddl_1.IsAdapterIndex)(index.signature)) {
159
+ statements.push(DropIndexConcurrentlySql(schemaName, index.name));
160
+ }
161
+ }
162
+ return statements;
163
+ }
164
+ function PlanIndexStatements(schemaName, plan, actual) {
165
+ return PlanIndexes(schemaName, plan, actual.indexes);
166
+ }
167
+ function PlanTable(schemaName, plan, actual, mode) {
168
+ const out = {
169
+ statements: [],
170
+ indexStatements: [],
171
+ warnings: [],
172
+ };
173
+ if (actual.columns.length === 0) {
174
+ out.statements.push((0, ddl_1.CreateTableSql)(schemaName, plan));
175
+ out.indexStatements.push(...PlanIndexes(schemaName, plan, []));
176
+ return out;
177
+ }
178
+ const kept = PlanRetypeDrops(schemaName, plan, actual, out);
179
+ PlanColumns((0, identifier_1.QualifiedName)(schemaName, plan.table), plan, actual, mode, out);
180
+ out.indexStatements.push(...PlanIndexes(schemaName, plan, kept));
181
+ return out;
182
+ }
183
+ //# sourceMappingURL=convergence.js.map