okmodel 0.8.0 → 0.9.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 (202) hide show
  1. package/README.md +14 -0
  2. package/dist/dialects/pg/ext/btree-gin.d.ts +26 -0
  3. package/dist/dialects/pg/ext/btree-gin.js +20 -0
  4. package/dist/dialects/pg/ext/btree-gist.d.ts +26 -0
  5. package/dist/dialects/pg/ext/btree-gist.js +20 -0
  6. package/dist/dialects/pg/ext/call.d.ts +53 -0
  7. package/dist/dialects/pg/ext/citext.js +1 -1
  8. package/dist/dialects/pg/ext/feature.d.ts +26 -0
  9. package/dist/dialects/pg/ext/fuzzystrmatch.d.ts +34 -0
  10. package/dist/dialects/pg/ext/fuzzystrmatch.js +33 -0
  11. package/dist/dialects/pg/ext/hstore.d.ts +41 -0
  12. package/dist/dialects/pg/ext/hstore.js +29 -0
  13. package/dist/dialects/pg/ext/index.d.ts +56 -0
  14. package/dist/dialects/pg/ext/index.js +1 -1
  15. package/dist/dialects/pg/ext/ltree.d.ts +41 -0
  16. package/dist/dialects/pg/ext/ltree.js +29 -0
  17. package/dist/dialects/pg/ext/pg-trgm.js +4 -13
  18. package/dist/dialects/pg/ext/pgcrypto.d.ts +33 -0
  19. package/dist/dialects/pg/ext/pgcrypto.js +33 -0
  20. package/dist/dialects/pg/ext/unaccent.d.ts +26 -0
  21. package/dist/dialects/pg/ext/unaccent.js +21 -0
  22. package/dist/dialects/pg/ext/using.d.ts +23 -0
  23. package/dist/dialects/pg/ext/versions.d.ts +36 -0
  24. package/dist/dialects/pg/external.d.ts +19 -0
  25. package/dist/dialects/pg/fn/index.js +4 -4
  26. package/dist/dialects/pg/index.d.ts +1 -0
  27. package/dist/dialects/pg/index.js +16 -11
  28. package/dist/dialects/pg/view/index.js +5 -5
  29. package/dist/dialects/pg/view/scratch.d.ts +4 -1
  30. package/dist/runtime/artifact-file.d.ts +22 -0
  31. package/dist/runtime/client.d.ts +10 -0
  32. package/dist/runtime/drift-detail.d.ts +2 -1
  33. package/dist/runtime/drift.d.ts +3 -10
  34. package/dist/runtime/pg/bun.js +4 -4
  35. package/dist/runtime/pg/neon.js +4 -4
  36. package/dist/runtime/pg/pg.js +4 -4
  37. package/dist/runtime/pg/pglite.js +4 -4
  38. package/dist/runtime/pg/postgresjs.js +4 -4
  39. package/dist/runtime/server-check.d.ts +36 -6
  40. package/dist/runtime/traits/index.js +5 -5
  41. package/dist/runtime/validate/index.js +1 -1
  42. package/dist/shared/{4m6hskg8.js → 0j6qe91y.js} +4 -4
  43. package/dist/shared/{14x60fbf.js → 1mxm04fy.js} +5 -5
  44. package/dist/shared/{b6d6p0zc.js → 2szgv6yj.js} +5 -5
  45. package/dist/shared/{f4jy1j7x.js → 2zdxkt7b.js} +909 -100
  46. package/dist/shared/{mnvjvqyp.js → 3456242y.js} +17 -17
  47. package/dist/shared/3t6kw83m.js +1 -1
  48. package/dist/shared/{6m78c8ss.js → 5kyb3tqx.js} +1 -1
  49. package/dist/shared/61bmrmhr.js +35 -0
  50. package/dist/shared/{zbqbmmrp.js → 62b603gr.js} +8 -8
  51. package/dist/shared/{jgqj11w4.js → 6f0z3hzh.js} +4 -0
  52. package/dist/shared/{dpc2r7rb.js → 6nae0spm.js} +150 -89
  53. package/dist/shared/{0wrea3jq.js → 71n0jmhc.js} +1 -1
  54. package/dist/shared/7ba5h6pb.js +17 -0
  55. package/dist/shared/{k86n8vq3.js → 8jesqsrk.js} +1 -1
  56. package/dist/shared/{qd9hhd8f.js → 8n688yjg.js} +1 -1
  57. package/dist/shared/{zgex00fd.js → 8qzkd9f3.js} +5 -5
  58. package/dist/shared/{mkrn359n.js → 90sg0w5a.js} +159 -31
  59. package/dist/shared/{7ghwamrf.js → 99qp9vtg.js} +1 -1
  60. package/dist/shared/{bxas03mq.js → 9dtgn1z2.js} +1 -1
  61. package/dist/shared/{p5nh3r8q.js → aksb89mn.js} +2 -2
  62. package/dist/shared/{wcrheftc.js → bphrgwz9.js} +2 -2
  63. package/dist/shared/{wz2a78mp.js → c3mvnq7a.js} +1 -1
  64. package/dist/shared/{pan0370z.js → ccsmhv9r.js} +24 -6
  65. package/dist/shared/{n0jmpgj1.js → cexb7z6b.js} +1 -1
  66. package/dist/shared/{wvdjznah.js → cf8zdz5p.js} +5 -5
  67. package/dist/shared/{3449rcae.js → ckz05z15.js} +4 -4
  68. package/dist/shared/{35q0n9tz.js → dd5pmnky.js} +7 -7
  69. package/dist/shared/{e8zyaqvj.js → ds229x4r.js} +1 -1
  70. package/dist/{tooling/shared/yw30vnq2.js → shared/e275q7sd.js} +1 -1
  71. package/dist/shared/{mfedzr74.js → ebhz8vh6.js} +4 -4
  72. package/dist/shared/{z581d7ny.js → fdsz3w80.js} +2 -2
  73. package/dist/shared/{sjk86yrx.js → fk9vef30.js} +84 -73
  74. package/dist/shared/{needfe47.js → g89fmz5s.js} +1 -1
  75. package/dist/shared/{m4xff2a6.js → ghqzdp94.js} +2 -2
  76. package/dist/shared/h9811jjm.js +17 -0
  77. package/dist/shared/{kj9d8maq.js → jpybhf98.js} +1 -1
  78. package/dist/shared/kzgrnckd.js +29 -0
  79. package/dist/shared/{agsfb86s.js → mazpbcdj.js} +4 -4
  80. package/dist/shared/{195pzzzz.js → mgaq2sd3.js} +10 -7
  81. package/dist/shared/{5mtf6cj3.js → mvmm3xpb.js} +5 -2
  82. package/dist/shared/{p3xbdcvt.js → myk8fswx.js} +55 -6
  83. package/dist/shared/{njga14v4.js → n306gqkd.js} +8 -8
  84. package/dist/shared/n5whk3mt.js +665 -0
  85. package/dist/shared/{bah9nbg3.js → npdftanb.js} +12 -20
  86. package/dist/shared/{16kvjebh.js → pg4ezgyf.js} +7 -26
  87. package/dist/{tooling/shared/08kemxjd.js → shared/pgsak1yw.js} +1 -1
  88. package/dist/shared/{jp36k7dp.js → qvwwp1mp.js} +61 -40
  89. package/dist/shared/rbxt795q.js +1766 -0
  90. package/dist/shared/{g5yc06ka.js → s7he5e5d.js} +1 -1
  91. package/dist/shared/{hfqmpasr.js → ss2kv2rs.js} +5 -5
  92. package/dist/shared/stfa9xcw.js +450 -0
  93. package/dist/{tooling/shared/rs1jb051.js → shared/tr64w5p0.js} +1 -1
  94. package/dist/shared/{jebgrkeq.js → tw1nvvfj.js} +2 -2
  95. package/dist/shared/{v1wad97q.js → wvtjg5m3.js} +1 -1
  96. package/dist/shared/xqacq37x.js +61 -0
  97. package/dist/shared/{n05z9nwz.js → xtsydxjg.js} +1 -1
  98. package/dist/shared/{jx2m62cs.js → xv8qj97g.js} +5 -5
  99. package/dist/shared/{63f4ksbz.js → xwhdcrm4.js} +1 -1
  100. package/dist/shared/{hm5f8jby.js → yvabyg9k.js} +6 -6
  101. package/dist/shared/yybhre6n.js +136 -0
  102. package/dist/shared/zdqf8k5d.js +8 -0
  103. package/dist/tooling/cli.js +94 -22
  104. package/dist/tooling/driver-run.js +15 -332
  105. package/dist/tooling/github/comment.d.ts +50 -0
  106. package/dist/tooling/github/post-comment.d.ts +17 -0
  107. package/dist/tooling/migrate/commands.d.ts +2 -1
  108. package/dist/tooling/migrate/config.d.ts +13 -0
  109. package/dist/tooling/migrate/export.d.ts +165 -0
  110. package/dist/tooling/migrate/ext-surface.d.ts +80 -0
  111. package/dist/tooling/migrate/ext.d.ts +31 -4
  112. package/dist/tooling/migrate/import-drizzle.d.ts +40 -0
  113. package/dist/tooling/migrate/index.d.ts +3 -0
  114. package/dist/tooling/migrate/index.js +55 -10
  115. package/dist/tooling/migrate/lint-rules.d.ts +18 -1
  116. package/dist/tooling/migrate/lint.d.ts +14 -1
  117. package/dist/tooling/migrate/place.d.ts +18 -0
  118. package/dist/tooling/migrate/plan-json.d.ts +65 -0
  119. package/dist/tooling/migrate/project.d.ts +10 -1
  120. package/dist/tooling/migrate/pull-emit.d.ts +98 -0
  121. package/dist/tooling/migrate/pull-routines.d.ts +126 -0
  122. package/dist/tooling/migrate/pull-verify.d.ts +26 -0
  123. package/dist/tooling/migrate/pull.d.ts +62 -0
  124. package/dist/tooling/migrate/reprint.d.ts +32 -0
  125. package/dist/tooling/migrate/sandbox.d.ts +8 -2
  126. package/dist/tooling/migrate/schema-api.d.ts +43 -0
  127. package/dist/tooling/migrate/sql-lex.d.ts +18 -0
  128. package/dist/tooling/shared/{3m1hkg7z.js → 04svnxxj.js} +4 -4
  129. package/dist/tooling/shared/{ppnnnvj8.js → 0j0jtse1.js} +1 -1
  130. package/dist/tooling/shared/{z8d7ptht.js → 0r05zhyq.js} +5 -5
  131. package/dist/tooling/shared/{a6pp9d12.js → 1800eymw.js} +3 -3
  132. package/dist/tooling/shared/{cmptmb4f.js → 35zemrmf.js} +1 -1
  133. package/dist/tooling/shared/{w7qe8sj1.js → 3rmaz3pq.js} +1 -1
  134. package/dist/{shared/q0cqt2sp.js → tooling/shared/3yn79q5m.js} +1 -1
  135. package/dist/tooling/shared/{2revefqt.js → 57btdkgm.js} +2 -2
  136. package/dist/tooling/shared/{ma2340rx.js → 5bmksndh.js} +2 -2
  137. package/dist/tooling/shared/{9xzm7hjg.js → 5p8km5jb.js} +3 -3
  138. package/dist/tooling/shared/{xhrnjch9.js → 5x3pf400.js} +3 -3
  139. package/dist/tooling/shared/{wwnekq5n.js → 5zrzffnk.js} +1 -1
  140. package/dist/tooling/shared/{p7f08ktn.js → 62fxpc1p.js} +7 -7
  141. package/dist/tooling/shared/{7ae7rjmn.js → 68tf18v4.js} +2 -2
  142. package/dist/tooling/shared/{rf83gr2d.js → 6vk28rjp.js} +7 -3
  143. package/dist/tooling/shared/76pv6qff.js +9 -0
  144. package/dist/tooling/shared/{bz2dqhab.js → 7aews1zg.js} +3 -3
  145. package/dist/tooling/shared/{9kazs5p6.js → 7b3xp9gc.js} +3 -3
  146. package/dist/tooling/shared/{4d2w25vw.js → 7pxncnzs.js} +2 -2
  147. package/dist/tooling/shared/{zvnhh1n0.js → 829fjxyw.js} +2 -2
  148. package/dist/tooling/shared/{dzx85q70.js → 8m5znpdt.js} +1 -1
  149. package/dist/tooling/shared/{g9ad4n80.js → 8yr7ges1.js} +7 -7
  150. package/dist/tooling/shared/{tn8gay14.js → 9qr9rkbh.js} +6 -6
  151. package/dist/tooling/shared/{8sqrsw3s.js → 9sfbtwsk.js} +3 -3
  152. package/dist/{shared/bnby0esn.js → tooling/shared/9wsnsvbf.js} +1 -1
  153. package/dist/tooling/shared/{aftb2mwr.js → a2xe04bm.js} +1 -1
  154. package/dist/tooling/shared/{nf7jmhfa.js → a4pzghha.js} +2 -2
  155. package/dist/tooling/shared/{y5656f0e.js → am04v8na.js} +5 -5
  156. package/dist/tooling/shared/{417zdsk7.js → asgr07mp.js} +5 -5
  157. package/dist/tooling/shared/{pqy21k24.js → c0xevn1h.js} +4 -4
  158. package/dist/tooling/shared/dhatassp.js +134 -0
  159. package/dist/tooling/shared/{spk1jg3r.js → ezqn88nj.js} +8 -8
  160. package/dist/tooling/shared/{6nyfyw70.js → f77nnfqy.js} +2 -2
  161. package/dist/tooling/shared/{wt7j7nf6.js → fh07z1dt.js} +1 -1
  162. package/dist/tooling/shared/{3rrw5w8f.js → gqwevek4.js} +1 -1
  163. package/dist/tooling/shared/{f9mphxej.js → hfq3n3bd.js} +346 -19
  164. package/dist/tooling/shared/{vs0t6qt8.js → j664qjrt.js} +2 -2
  165. package/dist/tooling/shared/{733a1tq3.js → jpgmjsx3.js} +3 -3
  166. package/dist/tooling/shared/{mtrqn2hn.js → jr2nmr81.js} +22 -30
  167. package/dist/{shared/mtw6jz76.js → tooling/shared/jsjjz875.js} +1 -1
  168. package/dist/tooling/shared/{2wtvc7rw.js → kbqnrs1x.js} +2 -2
  169. package/dist/tooling/shared/{gfvtj6d0.js → kz715295.js} +7 -7
  170. package/dist/tooling/shared/{a7q7t4n3.js → m3xt8b1h.js} +2 -2
  171. package/dist/tooling/shared/{dw08f3m8.js → m4hhb8aa.js} +2 -2
  172. package/dist/tooling/shared/{y031jct9.js → mw5npye0.js} +2 -2
  173. package/dist/tooling/shared/{vraj6d74.js → nxq95eb6.js} +3 -3
  174. package/dist/tooling/shared/{fb9k2qwd.js → qartgazh.js} +11 -30
  175. package/dist/tooling/shared/{xjs6zqtc.js → rcywj2w8.js} +9 -9
  176. package/dist/tooling/shared/{dy672fz6.js → s6qha57m.js} +2 -2
  177. package/dist/tooling/shared/{vx86qjv8.js → shjs0379.js} +3 -3
  178. package/dist/tooling/shared/{345tbc2k.js → sjwkt1pg.js} +1 -1
  179. package/dist/tooling/shared/{rq5kk8j6.js → stebqyyd.js} +3 -3
  180. package/dist/tooling/shared/{yk9mp7vb.js → t4xveemq.js} +4 -4
  181. package/dist/tooling/shared/{djydjpqt.js → t6zjeake.js} +5 -5
  182. package/dist/tooling/shared/{zhwnfyb2.js → tcwpjvxe.js} +1 -1
  183. package/dist/tooling/shared/{72fyg4zv.js → tpssp7ac.js} +1 -1
  184. package/dist/tooling/shared/{jne7b93p.js → v6j1ep6w.js} +3 -3
  185. package/dist/tooling/shared/{ec71zqgt.js → vwr2y833.js} +2 -2
  186. package/dist/tooling/shared/{j9t5s12a.js → w17sj05d.js} +2 -2
  187. package/dist/tooling/shared/{3tq8pnb8.js → w5d89rb4.js} +1 -1
  188. package/dist/tooling/shared/{smn6kz1p.js → wbwq1jsa.js} +2 -2
  189. package/dist/tooling/shared/{pwsytxm5.js → wezxf3h8.js} +1 -1
  190. package/dist/tooling/shared/{5bvw2nev.js → yb4kd19s.js} +1 -1
  191. package/dist/tooling/shared/{gmcf9cxf.js → ybdew6j7.js} +2 -2
  192. package/dist/tooling/shared/{ep8zh3bk.js → yfedr1zb.js} +1 -1
  193. package/dist/tooling/shared/{ddjtfgnx.js → yhp829bx.js} +3 -3
  194. package/dist/tooling/shared/{yfr8hzhm.js → ytk1tjs0.js} +1 -1
  195. package/dist/tooling/shared/{03k6res6.js → zs9aymcp.js} +1 -1
  196. package/dist/tooling/shared/zx3v9phv.js +8 -0
  197. package/dist/tooling/testing/index.js +2 -2
  198. package/package.json +38 -9
  199. package/dist/shared/fjpnhqan.js +0 -71
  200. package/dist/shared/n41w4fbz.js +0 -113
  201. package/dist/tooling/shared/pw8fgahx.js +0 -69
  202. /package/dist/shared/{ae4j5f42.js → mfvx6kjx.js} +0 -0
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Default versions and drift signatures for the generated packs.
3
+ *
4
+ * Generated by scripts/ext-generate.ts. Do not edit.
5
+ * Versions are the control-file default on each supported major.
6
+ */
7
+ /** One object the drift check requires on the connected server. */
8
+ export type ExtSignature = {
9
+ readonly kind: "function";
10
+ readonly name: string;
11
+ readonly args: string;
12
+ } | {
13
+ readonly kind: "operator";
14
+ readonly name: string;
15
+ readonly left: string;
16
+ readonly right: string;
17
+ } | {
18
+ readonly kind: "opclass";
19
+ readonly name: string;
20
+ readonly method: string;
21
+ };
22
+ /** One generated pack's versions and the objects the drift check names. */
23
+ export type ExtPackRecord = {
24
+ readonly name: string;
25
+ readonly versions: {
26
+ readonly 15: string;
27
+ readonly 16: string;
28
+ readonly 17: string;
29
+ readonly 18: string;
30
+ };
31
+ /** Oldest major the base methods exist on. */
32
+ readonly minPostgres: 15;
33
+ readonly signatures: readonly ExtSignature[];
34
+ };
35
+ /** Packs this version generates. `vector` is not in the list (D281). */
36
+ export declare const EXT_PACKS: readonly ExtPackRecord[];
@@ -0,0 +1,19 @@
1
+ /**
2
+ * A table owned by another catalog.
3
+ *
4
+ * The mark is the same one `withOwner(..., "external")` stores. `schema()`
5
+ * does not read it. Tooling stamps the catalog and, when `defineConfig`
6
+ * names a snapshot, keeps this table's namespace and name from that file.
7
+ */
8
+ import type { AnyTable } from "./table.js";
9
+ /**
10
+ * Turns a table exported by another catalog into an external definition.
11
+ *
12
+ * The table object is the same value: its name and columns stay. SQL for a
13
+ * managed foreign key is schema-qualified. A plan never creates, alters, or
14
+ * drops this table. `okm check` verifies it against the snapshot.
15
+ *
16
+ * @param table - A `table()` value declared by the owning catalog
17
+ * @returns The same table, marked external
18
+ */
19
+ export declare function external<T extends AnyTable>(table: T): T;
@@ -2,14 +2,14 @@ import {
2
2
  functionObject,
3
3
  triggerObject
4
4
  } from "../../../shared/12z7aznj.js";
5
+ import {
6
+ quoteIdent2
7
+ } from "../../../shared/fk9vef30.js";
5
8
  import {
6
9
  isFragmentParts,
7
10
  sqlExpression,
8
11
  identName
9
12
  } from "../../../shared/bsek72fg.js";
10
- import {
11
- quoteIdent
12
- } from "../../../shared/sjk86yrx.js";
13
13
  import {
14
14
  staticNamespace2
15
15
  } from "../../../shared/358zsv4r.js";
@@ -103,7 +103,7 @@ function invoke(schemaName, name, declared, returns, args) {
103
103
  if (args.length !== declared.length) {
104
104
  throw new OkmError2("OKM1120", `Function ${name} expects ${String(declared.length)} arguments.`, { fix: { summary: "Pass one value for each declared argument, in order." } });
105
105
  }
106
- const parts = [{ k: "t", s: `${quoteIdent(schemaName)}.${quoteIdent(name)}(` }];
106
+ const parts = [{ k: "t", s: `${quoteIdent2(schemaName)}.${quoteIdent2(name)}(` }];
107
107
  for (let index = 0;index < args.length; index += 1) {
108
108
  if (index > 0)
109
109
  parts.push({ k: "t", s: ", " });
@@ -7,6 +7,7 @@
7
7
  export { type PostgresMajor } from "./floor.js";
8
8
  export { schema, type BuiltSchema, type SchemaCodecs, type SchemaInput, type SchemaRequires, } from "./schema.js";
9
9
  export { withOwner, type DeclaredOwner } from "./owner.js";
10
+ export { external } from "./external.js";
10
11
  export { index, sql, table, type AnyTable, type ColumnHandle, type IndexCall, type SqlText, type SqlValue, type FilterOperator, type Table, type TableOptions, } from "./table.js";
11
12
  export type { PresetQuery } from "./preset.js";
12
13
  export { custom } from "./custom.js";
@@ -1,9 +1,7 @@
1
1
  import"../../shared/12z7aznj.js";
2
2
  import {
3
- jsonReplacer2,
4
- json2,
5
- jsonb2
6
- } from "../../shared/vk7rag46.js";
3
+ quoteIdent2
4
+ } from "../../shared/fk9vef30.js";
7
5
  import {
8
6
  searchValue
9
7
  } from "../../shared/dzj09cye.js";
@@ -13,6 +11,11 @@ import {
13
11
  denseRank2,
14
12
  runningTotal2
15
13
  } from "../../shared/9a4ae4p8.js";
14
+ import {
15
+ jsonReplacer2,
16
+ json2,
17
+ jsonb2
18
+ } from "../../shared/vk7rag46.js";
16
19
  import {
17
20
  bucket2
18
21
  } from "../../shared/nbw1z4yd.js";
@@ -76,9 +79,6 @@ import {
76
79
  fragment2,
77
80
  ident2
78
81
  } from "../../shared/bsek72fg.js";
79
- import {
80
- quoteIdent
81
- } from "../../shared/sjk86yrx.js";
82
82
  import {
83
83
  domainType
84
84
  } from "../../shared/ywspezzx.js";
@@ -115,6 +115,10 @@ var __export = (target, all) => {
115
115
  set: __exportSetter.bind(all, name)
116
116
  });
117
117
  };
118
+ // src/dialects/pg/external.ts
119
+ function external(table) {
120
+ return withOwner2(table, "external");
121
+ }
118
122
  // src/dialects/pg/custom.ts
119
123
  function custom(spec) {
120
124
  if (spec.sqlType.length === 0) {
@@ -1021,7 +1025,7 @@ function writeIdent(name, sink, table) {
1021
1025
  fix: { summary: "A raw statement cannot name a hidden field." }
1022
1026
  });
1023
1027
  }
1024
- sink.text(quoteIdent(column.sql));
1028
+ sink.text(quoteIdent2(column.sql));
1025
1029
  }
1026
1030
  function readClass(statement) {
1027
1031
  if (statement === READ || statement === WRITE)
@@ -1085,7 +1089,7 @@ function guardOf(table, tenancy, userCount) {
1085
1089
  if (tenancy !== undefined)
1086
1090
  parts.push(shift(tenancy.text, userCount));
1087
1091
  if (archive !== undefined)
1088
- parts.push(`okm_tenant.${quoteIdent(archive)} is null`);
1092
+ parts.push(`okm_tenant.${quoteIdent2(archive)} is null`);
1089
1093
  return { text: parts.join(" and "), params: tenancy?.params ?? [] };
1090
1094
  }
1091
1095
  function requireKey(table, tenantKey, parts) {
@@ -1116,8 +1120,8 @@ function wrap(table, tenantKey, text, where) {
1116
1120
  if (column === undefined) {
1117
1121
  unverifiable("A raw read needs one primary key column besides the tenant key.", "Declare one primary key. The tenant predicate binds that column.");
1118
1122
  }
1119
- const quoted = quoteIdent(column.sql);
1120
- return `select okm_raw.* from (${text}) as okm_raw where okm_raw.${quoted} in (select ${quoted} from ${quoteIdent(table.model.sql)} as okm_tenant where ${where})`;
1123
+ const quoted = quoteIdent2(column.sql);
1124
+ return `select okm_raw.* from (${text}) as okm_raw where okm_raw.${quoted} in (select ${quoted} from ${quoteIdent2(table.model.sql)} as okm_tenant where ${where})`;
1121
1125
  }
1122
1126
  function shift(text, by) {
1123
1127
  if (by === 0)
@@ -1210,6 +1214,7 @@ export {
1210
1214
  eq,
1211
1215
  every,
1212
1216
  explain,
1217
+ external,
1213
1218
  fragment2 as fragment,
1214
1219
  gt,
1215
1220
  gte,
@@ -3,6 +3,9 @@ import {
3
3
  materializedViewObject,
4
4
  materializedViewIndex
5
5
  } from "../../../shared/12z7aznj.js";
6
+ import {
7
+ quoteIdent2
8
+ } from "../../../shared/fk9vef30.js";
6
9
  import {
7
10
  viewClient
8
11
  } from "../../../shared/760ppr76.js";
@@ -12,9 +15,6 @@ import {
12
15
  import {
13
16
  formatType
14
17
  } from "../../../shared/606g0nbf.js";
15
- import {
16
- quoteIdent
17
- } from "../../../shared/sjk86yrx.js";
18
18
  import {
19
19
  staticNamespace2
20
20
  } from "../../../shared/358zsv4r.js";
@@ -204,10 +204,10 @@ function renderQuery(name, recipe, casing) {
204
204
  }
205
205
  const sqlName = columnSql(column, field, casing);
206
206
  columns.push({ name: sqlName, type: columnType(column, field) });
207
- selected.push(quoteIdent(sqlName));
207
+ selected.push(quoteIdent2(sqlName));
208
208
  }
209
209
  const tableName = tableSql(recipe.table, casing);
210
- let query = `select ${selected.join(", ")} from ${quoteIdent(tableName)}`;
210
+ let query = `select ${selected.join(", ")} from ${quoteIdent2(tableName)}`;
211
211
  if (recipe.predicate !== undefined && recipe.predicate.trim().length > 0) {
212
212
  query += ` where ${recipe.predicate}`;
213
213
  }
@@ -6,7 +6,10 @@
6
6
  * replaces the author query and `pg_depend` supplies column edges (D117).
7
7
  * A `BEGIN ATOMIC` body is replaced with the `pg_get_functiondef` block, so a
8
8
  * plan from the live catalog does not treat Postgres's reprint as a change
9
- * (D273). The scratch schema is dropped before this returns. Plans never use it.
9
+ * (D273). A name that appears once is that row. Overloads compare identity
10
+ * arguments after typmods and aliases are folded, so two overloads do not
11
+ * share a body. The scratch schema is dropped before this returns. Plans
12
+ * never use it.
10
13
  */
11
14
  import type { Catalog } from "../../../contracts/catalog/types.js";
12
15
  import { type CatalogQuery } from "../introspect.js";
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Optional build files under `.okm`.
3
+ *
4
+ * The runtime layer cannot import `node:fs`. Bun and Node expose a file read
5
+ * without that import. A missing file is `undefined`.
6
+ */
7
+ /**
8
+ * Directory of `catalog.hash` and `catalog.json`.
9
+ *
10
+ * A trailing `/` or `\` is removed so the joined file name is one path.
11
+ *
12
+ * @param catalogDir - Directory the caller passed, or the default `.okm`
13
+ * @returns The directory, without a trailing slash
14
+ */
15
+ export declare function artifactDir(catalogDir: string | undefined): string;
16
+ /**
17
+ * Reads an optional build artifact.
18
+ *
19
+ * @param path - File path
20
+ * @returns The text, or `undefined` when the file is missing
21
+ */
22
+ export declare function readText(path: string): Promise<string | undefined>;
@@ -7,6 +7,7 @@
7
7
  import type { DriverPool } from "../contracts/driver.js";
8
8
  import type { IdGenerators } from "../contracts/generator.js";
9
9
  import { OkmError, type ErrorStatuses, type OkmErrorOptions } from "../contracts/error.js";
10
+ import type { MapPostgresErrorOptions } from "../dialects/pg/errors.js";
10
11
  import type { PresetUse, QuerySchema } from "../dialects/pg/model.js";
11
12
  import { type ArchiveView, type Plan, type ReadCall, type CallScope, type ReadOp } from "./plan.js";
12
13
  import type { CatalogArtifact, Connected, Hookm, Timeouts } from "./types.js";
@@ -148,6 +149,15 @@ export declare function withHttp(http: ErrorStatuses | undefined, options: OkmEr
148
149
  * @returns The error `toHttp()` reads
149
150
  */
150
151
  export declare function attachHttp(http: ErrorStatuses | undefined, error: OkmError): OkmError;
152
+ /**
153
+ * Statuses and schema the Postgres error mapper reads.
154
+ *
155
+ * @param http - Status overrides from `connect`
156
+ * @param includeValues - When true, a mapped error may include bound values
157
+ * @param schema - Schema whose names the mapper can mention
158
+ * @returns Mapper options
159
+ */
160
+ export declare function mapOptions(http: ErrorStatuses | undefined, includeValues: boolean, schema: QuerySchema): MapPostgresErrorOptions;
151
161
  /**
152
162
  * Maps a driver or query error and records it on the session logger.
153
163
  *
@@ -44,5 +44,6 @@ export declare function driftVerdict(codeHash: string, recordedHash: string, mig
44
44
  * @param codeHash - Hash of the code's catalog
45
45
  * @param recordedHash - Hash from the startup query
46
46
  * @param options - The call's cancellation and deadline
47
+ * @param namespace - Schema that stores `okm_history`. `public` stays unqualified
47
48
  */
48
- export declare function assertDrift(pool: DriverPool, codeHash: string, recordedHash: string, options: ExecuteOptions | undefined): Promise<void>;
49
+ export declare function assertDrift(pool: DriverPool, codeHash: string, recordedHash: string, options: ExecuteOptions | undefined, namespace?: string): Promise<void>;
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import type { DriverPool, ExecuteOptions } from "../contracts/driver.js";
10
10
  import type { QuerySchema } from "../dialects/pg/model.js";
11
+ export { artifactDir } from "./artifact-file.js";
11
12
  /** Build artifact `okm build` wrote. */
12
13
  export type CatalogArtifact = {
13
14
  readonly text: string;
@@ -24,17 +25,9 @@ export type CatalogArtifact = {
24
25
  * @param recordedHash - Hash from the startup query
25
26
  * @param source - Optional build artifact, or a directory that contains one
26
27
  * @param options - Cancellation and deadline for the history query
28
+ * @param namespace - Schema that stores `okm_history`. `public` stays unqualified
27
29
  */
28
30
  export declare function assertCompatible(pool: DriverPool, schema: QuerySchema, recordedHash: string, source: {
29
31
  readonly catalog?: CatalogArtifact;
30
32
  readonly catalogDir?: string;
31
- }, options: ExecuteOptions | undefined): Promise<void>;
32
- /**
33
- * Directory of `catalog.hash` and `catalog.json`.
34
- *
35
- * A trailing `/` or `\` is removed so the joined file name is one path.
36
- *
37
- * @param catalogDir - Directory the caller passed, or the default `.okm`
38
- * @returns The directory, without a trailing slash
39
- */
40
- export declare function artifactDir(catalogDir: string | undefined): string;
33
+ }, options: ExecuteOptions | undefined, namespace?: string): Promise<void>;
@@ -4,20 +4,20 @@ import {
4
4
  import {
5
5
  markClientPool,
6
6
  open5
7
- } from "../../shared/zbqbmmrp.js";
7
+ } from "../../shared/62b603gr.js";
8
8
  import {
9
9
  BUNSQL_CAPABILITIES,
10
10
  readCapability2,
11
11
  hasCapability2
12
- } from "../../shared/ae4j5f42.js";
12
+ } from "../../shared/mfvx6kjx.js";
13
13
  import {
14
14
  createClient
15
- } from "../../shared/bah9nbg3.js";
15
+ } from "../../shared/npdftanb.js";
16
16
 
17
17
  // src/runtime/pg/bun.ts
18
18
  function connect(target, options) {
19
19
  if (typeof target === "object" && !isPool(target)) {
20
- return import("../../shared/0wrea3jq.js").then((mod) => mod.default(target, options, (config) => {
20
+ return import("../../shared/71n0jmhc.js").then((mod) => mod.default(target, options, (config) => {
21
21
  const pool = open5(config);
22
22
  markClientPool(pool);
23
23
  return pool;
@@ -3,21 +3,21 @@ import {
3
3
  } from "../../shared/cm3w0ywp.js";
4
4
  import {
5
5
  open6
6
- } from "../../shared/agsfb86s.js";
6
+ } from "../../shared/mazpbcdj.js";
7
7
  import {
8
8
  NEON_WEBSOCKET_CAPABILITIES,
9
9
  NEON_HTTP_CAPABILITIES,
10
10
  readCapability2,
11
11
  hasCapability2
12
- } from "../../shared/ae4j5f42.js";
12
+ } from "../../shared/mfvx6kjx.js";
13
13
  import {
14
14
  createClient
15
- } from "../../shared/bah9nbg3.js";
15
+ } from "../../shared/npdftanb.js";
16
16
 
17
17
  // src/runtime/pg/neon.ts
18
18
  function connect(target, options) {
19
19
  if (typeof target === "object" && !isPool(target)) {
20
- return import("../../shared/0wrea3jq.js").then((mod) => mod.default(target, options, (config) => open6({
20
+ return import("../../shared/71n0jmhc.js").then((mod) => mod.default(target, options, (config) => open6({
21
21
  url: config.url,
22
22
  ...options.mode !== undefined ? { mode: options.mode } : {},
23
23
  ...config.max !== undefined ? { max: config.max } : {},
@@ -3,20 +3,20 @@ import {
3
3
  } from "../../shared/cm3w0ywp.js";
4
4
  import {
5
5
  open4
6
- } from "../../shared/14x60fbf.js";
6
+ } from "../../shared/1mxm04fy.js";
7
7
  import {
8
8
  NODE_POSTGRES_CAPABILITIES,
9
9
  readCapability2,
10
10
  hasCapability2
11
- } from "../../shared/ae4j5f42.js";
11
+ } from "../../shared/mfvx6kjx.js";
12
12
  import {
13
13
  createClient
14
- } from "../../shared/bah9nbg3.js";
14
+ } from "../../shared/npdftanb.js";
15
15
 
16
16
  // src/runtime/pg/pg.ts
17
17
  function connect(target, options) {
18
18
  if (typeof target === "object" && !isPool(target)) {
19
- return import("../../shared/0wrea3jq.js").then((mod) => mod.default(target, options, open4));
19
+ return import("../../shared/71n0jmhc.js").then((mod) => mod.default(target, options, open4));
20
20
  }
21
21
  const owned = !isPool(target);
22
22
  const pool = isPool(target) ? target : open4({
@@ -4,20 +4,20 @@ import {
4
4
  import {
5
5
  open3,
6
6
  seal2
7
- } from "../../shared/4m6hskg8.js";
7
+ } from "../../shared/0j6qe91y.js";
8
8
  import {
9
9
  PGLITE_CAPABILITIES,
10
10
  readCapability2,
11
11
  hasCapability2
12
- } from "../../shared/ae4j5f42.js";
12
+ } from "../../shared/mfvx6kjx.js";
13
13
  import {
14
14
  createClient
15
- } from "../../shared/bah9nbg3.js";
15
+ } from "../../shared/npdftanb.js";
16
16
 
17
17
  // src/runtime/pg/pglite.ts
18
18
  async function connect(target, options) {
19
19
  if (typeof target === "object" && !isPool(target)) {
20
- return import("../../shared/0wrea3jq.js").then((mod) => mod.default(target, options, open3));
20
+ return import("../../shared/71n0jmhc.js").then((mod) => mod.default(target, options, open3));
21
21
  }
22
22
  const pool = isPool(target) ? seal2(target) : await open3({
23
23
  ...target !== undefined ? { dataDir: target } : {},
@@ -3,20 +3,20 @@ import {
3
3
  } from "../../shared/cm3w0ywp.js";
4
4
  import {
5
5
  open2
6
- } from "../../shared/35q0n9tz.js";
6
+ } from "../../shared/dd5pmnky.js";
7
7
  import {
8
8
  POSTGRESJS_CAPABILITIES,
9
9
  readCapability2,
10
10
  hasCapability2
11
- } from "../../shared/ae4j5f42.js";
11
+ } from "../../shared/mfvx6kjx.js";
12
12
  import {
13
13
  createClient
14
- } from "../../shared/bah9nbg3.js";
14
+ } from "../../shared/npdftanb.js";
15
15
 
16
16
  // src/runtime/pg/postgresjs.ts
17
17
  function connect(target, options) {
18
18
  if (typeof target === "object" && !isPool(target)) {
19
- return import("../../shared/0wrea3jq.js").then((mod) => mod.default(target, options, open2));
19
+ return import("../../shared/71n0jmhc.js").then((mod) => mod.default(target, options, open2));
20
20
  }
21
21
  const owned = !isPool(target);
22
22
  const pool = isPool(target) ? target : open2({
@@ -15,20 +15,50 @@ import type { CatalogArtifact } from "./types.js";
15
15
  */
16
16
  export declare const versionQuery = "select current_setting('server_version_num'), version(), (select (xpath('//catalog_hash/text()', query_to_xml('select catalog_hash from okm_meta where id = ''head''', true, false, '')))[1]::text where to_regclass('okm_meta') is not null)";
17
17
  /**
18
- * Accepts the `server_version_num` row, or throws OKM1801, OKM1520, OKM1802, or OKM1803.
18
+ * Startup query for the namespace `okm build` recorded.
19
19
  *
20
- * A declared floor is the minimum. With no floor, the minimum is 15.
21
- * A major below 15 is refused when the schema is built.
20
+ * `public` returns {@link versionQuery}, the same string as before.
21
+ * Another namespace qualifies `okm_meta`. `to_regclass` still lets a
22
+ * database with no such table plan.
22
23
  *
23
- * @param pool - Connection that ran the version query
24
+ * @param namespace - Catalog schema. `public` is unqualified
25
+ * @returns The version, dialect, and hash query
26
+ */
27
+ export declare function versionSql(namespace: string): Promise<string>;
28
+ /**
29
+ * History query used when the catalog hashes differ.
30
+ *
31
+ * `public` stays unqualified, so a search path still finds that table.
32
+ *
33
+ * @param namespace - Catalog schema. `public` is unqualified
34
+ * @returns The `okm_history` select
35
+ */
36
+ export declare function historySql(namespace: string): Promise<string>;
37
+ /**
38
+ * Namespace stored beside the catalog hash.
39
+ *
40
+ * A missing file means `public`. `okm build` writes the file only when
41
+ * `defineConfig({ namespace })` is not `public`.
42
+ *
43
+ * @param catalogDir - Directory `connect` was given, or the default `.okm`
44
+ * @returns The schema name
45
+ */
46
+ export declare function recordedNamespace(catalogDir: string | undefined): Promise<string>;
47
+ /**
48
+ * Accepts the server row, or throws OKM1801, OKM1520, OKM1802, or OKM1803.
49
+ *
50
+ * The first statement reads `okm_meta` in the catalog namespace. A declared
51
+ * floor is the minimum. With no floor, the minimum is 15. A major below 15
52
+ * is refused when the schema is built.
53
+ *
54
+ * @param pool - Connection that runs the version query
24
55
  * @param schema - Schema whose floor is the declared minimum
25
- * @param rows - `server_version_num`, `version()`, and the `okm_meta` hash
26
56
  * @param http - Status overrides from `connect`
27
57
  * @param requireMeta - When true, a missing hash is OKM1520
28
58
  * @param options - Signal and timeout for the compatibility read
29
59
  * @param source - Trusted catalog used when the hash does not match
30
60
  */
31
- export declare function acceptServer(pool: DriverPool, schema: QuerySchema, rows: readonly (readonly (string | null)[])[], http: ErrorStatuses | undefined, requireMeta: boolean, options: ExecuteOptions | undefined, source: {
61
+ export declare function acceptServer(pool: DriverPool, schema: QuerySchema, http: ErrorStatuses | undefined, requireMeta: boolean, options: ExecuteOptions | undefined, source: {
32
62
  readonly catalog?: CatalogArtifact;
33
63
  readonly catalogDir?: string;
34
64
  }): Promise<void>;
@@ -2,6 +2,9 @@ import {
2
2
  functionObject,
3
3
  triggerObject
4
4
  } from "../../shared/12z7aznj.js";
5
+ import {
6
+ quoteIdent2
7
+ } from "../../shared/fk9vef30.js";
5
8
  import {
6
9
  checkPresetNames,
7
10
  duplicatePreset
@@ -26,9 +29,6 @@ import {
26
29
  ColumnBuilder2,
27
30
  retarget
28
31
  } from "../../shared/606g0nbf.js";
29
- import {
30
- quoteIdent
31
- } from "../../shared/sjk86yrx.js";
32
32
  import {
33
33
  definition,
34
34
  unavailable
@@ -41,7 +41,7 @@ import {
41
41
  queryHandle,
42
42
  attachHttp,
43
43
  settleCall
44
- } from "../../shared/bah9nbg3.js";
44
+ } from "../../shared/npdftanb.js";
45
45
  import {
46
46
  installArchiveInspect,
47
47
  indexes,
@@ -299,7 +299,7 @@ function timestampRecords(built) {
299
299
  returns: "trigger",
300
300
  language: "plpgsql",
301
301
  volatility: "volatile",
302
- body: `begin new.${quoteIdent(column)} = now(); return new; end`,
302
+ body: `begin new.${quoteIdent2(column)} = now(); return new; end`,
303
303
  provenance: { origin: "trait", name: "timestamps" },
304
304
  dependencies: []
305
305
  }));
@@ -6,7 +6,7 @@ import {
6
6
  } from "../../shared/9dr2qnx7.js";
7
7
  import {
8
8
  queryHandle
9
- } from "../../shared/bah9nbg3.js";
9
+ } from "../../shared/npdftanb.js";
10
10
  import {
11
11
  OkmError2
12
12
  } from "../../shared/52szzakm.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  noTimeout
3
- } from "./q0cqt2sp.js";
3
+ } from "./tr64w5p0.js";
4
4
  import {
5
5
  PGLITE_CAPABILITIES,
6
6
  driverErrors,
@@ -11,12 +11,12 @@ import {
11
11
  runCall,
12
12
  EMPTY_NOTICES,
13
13
  resultFrom
14
- } from "./ae4j5f42.js";
14
+ } from "./mfvx6kjx.js";
15
15
 
16
16
  // src/adapters/pg/pglite.ts
17
17
  import { PGlite } from "@electric-sql/pglite";
18
18
  async function open3(config = {}) {
19
- const wire = await import("./needfe47.js");
19
+ const wire = await import("./g89fmz5s.js");
20
20
  const db = new PGlite({
21
21
  dataDir: config.dataDir ?? "memory://",
22
22
  parsers: wire.parsers,
@@ -67,7 +67,7 @@ async function open3(config = {}) {
67
67
  return;
68
68
  released = true;
69
69
  try {
70
- const { resetQueried } = await import("./bnby0esn.js");
70
+ const { resetQueried } = await import("./pgsak1yw.js");
71
71
  await resetQueried(session);
72
72
  } finally {
73
73
  slot.release();
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  noticeBuffer,
3
3
  WireSession
4
- } from "./mtw6jz76.js";
4
+ } from "./e275q7sd.js";
5
5
  import {
6
6
  NODE_POSTGRES_CAPABILITIES,
7
7
  driverErrors,
8
8
  rejectClosed,
9
9
  mapFailure,
10
10
  runCall
11
- } from "./ae4j5f42.js";
11
+ } from "./mfvx6kjx.js";
12
12
 
13
13
  // src/adapters/pg/nodepostgres.ts
14
14
  import net from "node:net";
@@ -55,7 +55,7 @@ function open4(config) {
55
55
  counters.busy = Math.max(0, counters.busy - 1);
56
56
  }, inflight);
57
57
  const held = { pool, acquireMs, counters, notices, named, isClosed };
58
- const checkout = () => closed ? rejectClosed() : import("./mfedzr74.js").then((mod) => mod.checkout(held));
58
+ const checkout = () => closed ? rejectClosed() : import("./ebhz8vh6.js").then((mod) => mod.checkout(held));
59
59
  return {
60
60
  capabilities: NODE_POSTGRES_CAPABILITIES,
61
61
  execute(text, params, options) {
@@ -88,14 +88,14 @@ function open4(config) {
88
88
  reserve: () => checkout(),
89
89
  stream(text, params) {
90
90
  return async function* () {
91
- const { streamRows } = await import("./mfedzr74.js");
91
+ const { streamRows } = await import("./ebhz8vh6.js");
92
92
  yield* streamRows(checkout, text, params);
93
93
  }();
94
94
  },
95
95
  listen(channel, onNotify) {
96
96
  if (closed)
97
97
  return rejectClosed();
98
- return import("./mfedzr74.js").then((mod) => mod.listen(held, channel, onNotify));
98
+ return import("./ebhz8vh6.js").then((mod) => mod.listen(held, channel, onNotify));
99
99
  },
100
100
  cancel() {
101
101
  for (const pending of inflight)
@@ -1,13 +1,13 @@
1
+ import {
2
+ renderCatalog2
3
+ } from "./fk9vef30.js";
1
4
  import {
2
5
  viewGlobalReason,
3
6
  viewMentions
4
7
  } from "./760ppr76.js";
5
- import {
6
- renderCatalog
7
- } from "./sjk86yrx.js";
8
8
  import {
9
9
  createClient
10
- } from "./bah9nbg3.js";
10
+ } from "./npdftanb.js";
11
11
  import {
12
12
  OkmError2
13
13
  } from "./52szzakm.js";
@@ -1301,7 +1301,7 @@ async function testing2(schema, options) {
1301
1301
  const seed = options.seed ?? 1;
1302
1302
  const pool = await options.driver;
1303
1303
  if (options.migrate !== false) {
1304
- for (const statement of renderCatalog(schema.catalog, "public")) {
1304
+ for (const statement of renderCatalog2(schema.catalog, "public")) {
1305
1305
  if (statement.trim().length === 0)
1306
1306
  continue;
1307
1307
  await pool.execute(statement);