okmodel 0.7.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 (258) hide show
  1. package/README.md +14 -0
  2. package/dist/adapters/capabilities.d.ts +32 -0
  3. package/dist/adapters/failure.d.ts +1 -1
  4. package/dist/adapters/pg/bun-sql.d.ts +53 -0
  5. package/dist/adapters/pg/bunsql-extra.d.ts +1 -1
  6. package/dist/adapters/pg/bunsql.d.ts +1 -1
  7. package/dist/adapters/pg/neon-extra.d.ts +18 -0
  8. package/dist/adapters/pg/neon.d.ts +104 -0
  9. package/dist/adapters/pg/no-inflight-timeout.d.ts +1 -1
  10. package/dist/contracts/error.d.ts +1 -1
  11. package/dist/dialects/pg/ext/btree-gin.d.ts +26 -0
  12. package/dist/dialects/pg/ext/btree-gin.js +20 -0
  13. package/dist/dialects/pg/ext/btree-gist.d.ts +26 -0
  14. package/dist/dialects/pg/ext/btree-gist.js +20 -0
  15. package/dist/dialects/pg/ext/call.d.ts +53 -0
  16. package/dist/dialects/pg/ext/citext.js +1 -1
  17. package/dist/dialects/pg/ext/feature.d.ts +26 -0
  18. package/dist/dialects/pg/ext/fuzzystrmatch.d.ts +34 -0
  19. package/dist/dialects/pg/ext/fuzzystrmatch.js +33 -0
  20. package/dist/dialects/pg/ext/hstore.d.ts +41 -0
  21. package/dist/dialects/pg/ext/hstore.js +29 -0
  22. package/dist/dialects/pg/ext/index.d.ts +56 -0
  23. package/dist/dialects/pg/ext/index.js +1 -1
  24. package/dist/dialects/pg/ext/ltree.d.ts +41 -0
  25. package/dist/dialects/pg/ext/ltree.js +29 -0
  26. package/dist/dialects/pg/ext/pg-trgm.js +4 -13
  27. package/dist/dialects/pg/ext/pgcrypto.d.ts +33 -0
  28. package/dist/dialects/pg/ext/pgcrypto.js +33 -0
  29. package/dist/dialects/pg/ext/unaccent.d.ts +26 -0
  30. package/dist/dialects/pg/ext/unaccent.js +21 -0
  31. package/dist/dialects/pg/ext/using.d.ts +23 -0
  32. package/dist/dialects/pg/ext/versions.d.ts +36 -0
  33. package/dist/dialects/pg/external.d.ts +19 -0
  34. package/dist/dialects/pg/fn/index.d.ts +39 -1
  35. package/dist/dialects/pg/fn/index.js +118 -26
  36. package/dist/dialects/pg/index.d.ts +3 -0
  37. package/dist/dialects/pg/index.js +394 -14
  38. package/dist/dialects/pg/introspect.d.ts +11 -0
  39. package/dist/dialects/pg/operators.d.ts +1 -1
  40. package/dist/dialects/pg/ops/fragment.d.ts +119 -0
  41. package/dist/dialects/pg/ops/lane.d.ts +49 -0
  42. package/dist/dialects/pg/view/client.d.ts +14 -6
  43. package/dist/dialects/pg/view/index.d.ts +73 -1
  44. package/dist/dialects/pg/view/index.js +156 -5
  45. package/dist/dialects/pg/view/scratch.d.ts +11 -5
  46. package/dist/runtime/artifact-file.d.ts +22 -0
  47. package/dist/runtime/client.d.ts +10 -0
  48. package/dist/runtime/drift-detail.d.ts +2 -1
  49. package/dist/runtime/drift.d.ts +3 -10
  50. package/dist/runtime/otel.d.ts +105 -0
  51. package/dist/runtime/otel.js +97 -0
  52. package/dist/runtime/pg/bun.js +4 -4
  53. package/dist/runtime/pg/neon.d.ts +38 -0
  54. package/dist/runtime/pg/neon.js +64 -0
  55. package/dist/runtime/pg/pg.js +4 -4
  56. package/dist/runtime/pg/pglite.js +4 -4
  57. package/dist/runtime/pg/postgresjs.js +4 -4
  58. package/dist/runtime/plan.d.ts +1 -1
  59. package/dist/runtime/server-check.d.ts +36 -6
  60. package/dist/runtime/sql-fragment.d.ts +43 -0
  61. package/dist/runtime/tenancy/index.js +10 -10
  62. package/dist/runtime/topology.d.ts +1 -1
  63. package/dist/runtime/traits/index.js +16 -17
  64. package/dist/runtime/types.d.ts +15 -1
  65. package/dist/runtime/validate/index.js +4 -4
  66. package/dist/shared/{81ebdx9p.js → 0j6qe91y.js} +4 -4
  67. package/dist/shared/{qq3899ht.js → 12z7aznj.js} +243 -14
  68. package/dist/shared/{gzaveazc.js → 1d9q9cv2.js} +29 -2
  69. package/dist/shared/{w79hsckn.js → 1mxm04fy.js} +5 -5
  70. package/dist/shared/{7k9grvf6.js → 2szgv6yj.js} +5 -5
  71. package/dist/shared/{gs74dbj5.js → 2zdxkt7b.js} +933 -111
  72. package/dist/shared/{m6p12kbr.js → 3456242y.js} +23 -23
  73. package/dist/shared/3bb7wsqt.js +99 -0
  74. package/dist/shared/{y6njgyda.js → 3t6kw83m.js} +2 -2
  75. package/dist/shared/{xhfsfkgk.js → 4vbf83xx.js} +9 -2
  76. package/dist/shared/{pt94kz7f.js → 5kyb3tqx.js} +1 -1
  77. package/dist/shared/61bmrmhr.js +35 -0
  78. package/dist/shared/{x933k9a3.js → 62b603gr.js} +10 -10
  79. package/dist/shared/{jgqj11w4.js → 6f0z3hzh.js} +4 -0
  80. package/dist/shared/{tsvww22q.js → 6nae0spm.js} +156 -95
  81. package/dist/shared/{mtaszv5a.js → 71n0jmhc.js} +102 -4
  82. package/dist/shared/{5e3tf63j.js → 760ppr76.js} +14 -6
  83. package/dist/shared/7ba5h6pb.js +17 -0
  84. package/dist/shared/{sfz1ksn6.js → 8jesqsrk.js} +2 -2
  85. package/dist/shared/{5v3xf80k.js → 8n688yjg.js} +1 -1
  86. package/dist/shared/{rs73fca9.js → 8qzkd9f3.js} +6 -6
  87. package/dist/shared/{ax7qv55k.js → 90sg0w5a.js} +202 -25
  88. package/dist/shared/{zm0ptry0.js → 99qp9vtg.js} +1 -1
  89. package/dist/shared/{xnxsed62.js → 9dr2qnx7.js} +14 -14
  90. package/dist/shared/{1w508jbr.js → 9dtgn1z2.js} +21 -17
  91. package/dist/shared/{h15jx9bc.js → 9dvh1dr6.js} +1 -1
  92. package/dist/shared/{q5c6ngn3.js → a62rb2da.js} +1 -1
  93. package/dist/shared/{te5as7z7.js → aksb89mn.js} +3 -3
  94. package/dist/shared/{bz84tkzm.js → bphrgwz9.js} +2 -2
  95. package/dist/shared/bsek72fg.js +225 -0
  96. package/dist/shared/{7mnme5tn.js → c3mvnq7a.js} +1 -1
  97. package/dist/shared/{p6qc5gcp.js → ccsmhv9r.js} +25 -7
  98. package/dist/shared/{pbp1ss85.js → cexb7z6b.js} +2 -2
  99. package/dist/shared/{ab9gmbwy.js → cf8zdz5p.js} +5 -5
  100. package/dist/shared/{jvd0mqag.js → ckz05z15.js} +5 -5
  101. package/dist/shared/{dk8v79p3.js → d5nmj7vv.js} +1 -1
  102. package/dist/shared/{14vx95q4.js → dd5pmnky.js} +7 -7
  103. package/dist/shared/{vb6qfyve.js → ds229x4r.js} +2 -2
  104. package/dist/shared/{1qa0qajz.js → e275q7sd.js} +1 -1
  105. package/dist/shared/{zp9fmend.js → ebhz8vh6.js} +4 -4
  106. package/dist/shared/{hyh73qk6.js → ecn8mfdq.js} +5 -5
  107. package/dist/shared/{je4axnm8.js → fdsz3w80.js} +2 -2
  108. package/dist/shared/{9s0ypp87.js → fk9vef30.js} +85 -74
  109. package/dist/shared/{g6evj1j3.js → g89fmz5s.js} +1 -1
  110. package/dist/shared/{aytqh5y2.js → ghqzdp94.js} +2 -2
  111. package/dist/shared/h9811jjm.js +17 -0
  112. package/dist/shared/{dkxgzaqd.js → hqpxf4a4.js} +1 -1
  113. package/dist/shared/{8skf0cam.js → jpybhf98.js} +1 -1
  114. package/dist/shared/{67txcrcw.js → kgwp4jdd.js} +4 -4
  115. package/dist/shared/kzgrnckd.js +29 -0
  116. package/dist/shared/mazpbcdj.js +233 -0
  117. package/dist/shared/{kb2sdhfb.js → mfvx6kjx.js} +17 -1
  118. package/dist/shared/{svncdeh5.js → mgaq2sd3.js} +11 -8
  119. package/dist/shared/{5mtf6cj3.js → mvmm3xpb.js} +5 -2
  120. package/dist/shared/{b5pftnn2.js → myk8fswx.js} +66 -21
  121. package/dist/shared/{2shdbn8q.js → n306gqkd.js} +9 -9
  122. package/dist/shared/{n816peh1.js → n454kcnw.js} +1 -1
  123. package/dist/shared/n5whk3mt.js +665 -0
  124. package/dist/shared/n7kg8mmx.js +61 -0
  125. package/dist/shared/{vqrjpcqn.js → nmnsgj7x.js} +1 -1
  126. package/dist/shared/{tbrvgw6z.js → npdftanb.js} +19 -26
  127. package/dist/shared/{ek2wt2dz.js → pg4ezgyf.js} +11 -30
  128. package/dist/shared/{5fe3kbsh.js → pgsak1yw.js} +1 -1
  129. package/dist/shared/{bm22fvzr.js → qfw14tna.js} +2 -2
  130. package/dist/shared/{wa07eas9.js → qvwwp1mp.js} +62 -41
  131. package/dist/shared/rbxt795q.js +1766 -0
  132. package/dist/shared/{xjk7hnn5.js → s7he5e5d.js} +2 -2
  133. package/dist/shared/{w72kgg4q.js → ss2kv2rs.js} +6 -6
  134. package/dist/shared/stfa9xcw.js +450 -0
  135. package/dist/shared/{3v7t1yrv.js → th3be82n.js} +2 -2
  136. package/dist/shared/{79dt02vc.js → tr64w5p0.js} +1 -1
  137. package/dist/shared/{cn957f8d.js → tw1nvvfj.js} +3 -3
  138. package/dist/shared/{ed0b8k4s.js → typ3vy7t.js} +1 -1
  139. package/dist/shared/{9628a9xt.js → vk7rag46.js} +1 -1
  140. package/dist/shared/{ze4hxsmy.js → w9ejzaqf.js} +1 -1
  141. package/dist/shared/{vczs8gd4.js → wvtjg5m3.js} +2 -2
  142. package/dist/shared/{9y3mmmh1.js → xfhe73sb.js} +1 -1
  143. package/dist/shared/xqacq37x.js +61 -0
  144. package/dist/shared/{1est4ezg.js → xtsydxjg.js} +3 -3
  145. package/dist/shared/xv8qj97g.js +96 -0
  146. package/dist/shared/{bg3rym3g.js → xwhdcrm4.js} +2 -2
  147. package/dist/shared/{kr0jzbw2.js → yvabyg9k.js} +7 -7
  148. package/dist/shared/yybhre6n.js +136 -0
  149. package/dist/shared/zdqf8k5d.js +8 -0
  150. package/dist/shared/{jznfax0y.js → zq1he88x.js} +4 -4
  151. package/dist/tooling/cli.js +108 -23
  152. package/dist/tooling/driver-run.js +4654 -0
  153. package/dist/tooling/driver-test.d.ts +36 -0
  154. package/dist/tooling/github/comment.d.ts +50 -0
  155. package/dist/tooling/github/post-comment.d.ts +17 -0
  156. package/dist/tooling/migrate/commands.d.ts +3 -2
  157. package/dist/tooling/migrate/config.d.ts +13 -0
  158. package/dist/tooling/migrate/export.d.ts +165 -0
  159. package/dist/tooling/migrate/ext-surface.d.ts +80 -0
  160. package/dist/tooling/migrate/ext.d.ts +31 -4
  161. package/dist/tooling/migrate/import-drizzle.d.ts +40 -0
  162. package/dist/tooling/migrate/index.d.ts +3 -0
  163. package/dist/tooling/migrate/index.js +55 -10
  164. package/dist/tooling/migrate/lint-rules.d.ts +18 -1
  165. package/dist/tooling/migrate/lint.d.ts +14 -1
  166. package/dist/tooling/migrate/place.d.ts +18 -0
  167. package/dist/tooling/migrate/plan-json.d.ts +65 -0
  168. package/dist/tooling/migrate/project.d.ts +13 -1
  169. package/dist/tooling/migrate/pull-emit.d.ts +98 -0
  170. package/dist/tooling/migrate/pull-routines.d.ts +126 -0
  171. package/dist/tooling/migrate/pull-verify.d.ts +26 -0
  172. package/dist/tooling/migrate/pull.d.ts +62 -0
  173. package/dist/tooling/migrate/reprint.d.ts +32 -0
  174. package/dist/tooling/migrate/sandbox.d.ts +8 -2
  175. package/dist/tooling/migrate/schema-api.d.ts +43 -0
  176. package/dist/tooling/migrate/sql-lex.d.ts +18 -0
  177. package/dist/tooling/shared/04svnxxj.js +344 -0
  178. package/dist/tooling/shared/0j0jtse1.js +13 -0
  179. package/dist/tooling/shared/0r05zhyq.js +618 -0
  180. package/dist/tooling/shared/1800eymw.js +49 -0
  181. package/dist/tooling/shared/35zemrmf.js +12 -0
  182. package/dist/tooling/shared/3rmaz3pq.js +140 -0
  183. package/dist/tooling/shared/3yn79q5m.js +12 -0
  184. package/dist/tooling/shared/54tqkxja.js +51 -0
  185. package/dist/tooling/shared/57btdkgm.js +209 -0
  186. package/dist/tooling/shared/5bmksndh.js +118 -0
  187. package/dist/tooling/shared/5p8km5jb.js +38 -0
  188. package/dist/tooling/shared/5x3pf400.js +185 -0
  189. package/dist/tooling/shared/5zrzffnk.js +6 -0
  190. package/dist/tooling/shared/62fxpc1p.js +332 -0
  191. package/dist/tooling/shared/68tf18v4.js +20 -0
  192. package/dist/tooling/shared/6vk28rjp.js +98 -0
  193. package/dist/tooling/shared/76pv6qff.js +9 -0
  194. package/dist/tooling/shared/7aews1zg.js +311 -0
  195. package/dist/tooling/shared/7b3xp9gc.js +195 -0
  196. package/dist/tooling/shared/7kms6fvj.js +20 -0
  197. package/dist/tooling/shared/7pxncnzs.js +40 -0
  198. package/dist/tooling/shared/829fjxyw.js +198 -0
  199. package/dist/tooling/shared/8m5znpdt.js +66 -0
  200. package/dist/tooling/shared/8yr7ges1.js +211 -0
  201. package/dist/tooling/shared/96ps4g1z.js +32 -0
  202. package/dist/tooling/shared/9qr9rkbh.js +143 -0
  203. package/dist/tooling/shared/9sfbtwsk.js +49 -0
  204. package/dist/tooling/shared/9wsnsvbf.js +10 -0
  205. package/dist/tooling/shared/a2xe04bm.js +18 -0
  206. package/dist/tooling/shared/a4pzghha.js +20 -0
  207. package/dist/tooling/shared/am04v8na.js +233 -0
  208. package/dist/tooling/shared/asgr07mp.js +194 -0
  209. package/dist/tooling/shared/c0xevn1h.js +312 -0
  210. package/dist/tooling/shared/dhatassp.js +134 -0
  211. package/dist/tooling/shared/ezqn88nj.js +1696 -0
  212. package/dist/tooling/shared/f77nnfqy.js +231 -0
  213. package/dist/tooling/shared/fh07z1dt.js +15 -0
  214. package/dist/tooling/shared/gqwevek4.js +81 -0
  215. package/dist/tooling/shared/hfq3n3bd.js +4116 -0
  216. package/dist/tooling/shared/htnaj77v.js +17 -0
  217. package/dist/tooling/shared/j664qjrt.js +64 -0
  218. package/dist/tooling/shared/jpgmjsx3.js +38 -0
  219. package/dist/tooling/shared/jr2nmr81.js +497 -0
  220. package/dist/tooling/shared/jsjjz875.js +139 -0
  221. package/dist/tooling/shared/kbqnrs1x.js +1425 -0
  222. package/dist/tooling/shared/kz715295.js +94 -0
  223. package/dist/tooling/shared/m3xt8b1h.js +22 -0
  224. package/dist/tooling/shared/m4hhb8aa.js +9 -0
  225. package/dist/tooling/shared/mw5npye0.js +16 -0
  226. package/dist/tooling/shared/n4jqhpqz.js +27 -0
  227. package/dist/tooling/shared/nxq95eb6.js +42 -0
  228. package/dist/tooling/shared/qartgazh.js +70 -0
  229. package/dist/tooling/shared/rcywj2w8.js +190 -0
  230. package/dist/tooling/shared/s6qha57m.js +16 -0
  231. package/dist/tooling/shared/shjs0379.js +150 -0
  232. package/dist/tooling/shared/sjwkt1pg.js +16 -0
  233. package/dist/tooling/shared/stebqyyd.js +401 -0
  234. package/dist/tooling/shared/t4xveemq.js +250 -0
  235. package/dist/tooling/shared/t6zjeake.js +261 -0
  236. package/dist/tooling/shared/tcwpjvxe.js +9 -0
  237. package/dist/tooling/shared/tpssp7ac.js +160 -0
  238. package/dist/tooling/shared/v6j1ep6w.js +42 -0
  239. package/dist/tooling/shared/vwr2y833.js +270 -0
  240. package/dist/tooling/shared/w17sj05d.js +7 -0
  241. package/dist/tooling/shared/w5d89rb4.js +131 -0
  242. package/dist/tooling/shared/wbwq1jsa.js +157 -0
  243. package/dist/tooling/shared/wezxf3h8.js +17 -0
  244. package/dist/tooling/shared/yb4kd19s.js +12 -0
  245. package/dist/tooling/shared/ybdew6j7.js +294 -0
  246. package/dist/tooling/shared/yfedr1zb.js +6 -0
  247. package/dist/tooling/shared/yhp829bx.js +177 -0
  248. package/dist/tooling/shared/ytk1tjs0.js +604 -0
  249. package/dist/tooling/shared/zs9aymcp.js +210 -0
  250. package/dist/tooling/shared/zx3v9phv.js +8 -0
  251. package/dist/tooling/testing/index.js +3 -3
  252. package/package.json +50 -9
  253. package/dist/shared/ktz42yez.js +0 -113
  254. package/dist/shared/ttsqgp4p.js +0 -71
  255. package/dist/shared/y34a8714.js +0 -150
  256. package/dist/shared/zy8r7qvz.js +0 -116
  257. package/dist/shared/{ywr8hmey.js → 606g0nbf.js} +3 -3
  258. package/dist/shared/{rpycarcr.js → gcefca6p.js} +4 -4
@@ -1,18 +1,6 @@
1
1
  import {
2
2
  policyObject
3
3
  } from "./bdk4sty6.js";
4
- import {
5
- functionObject,
6
- triggerObject
7
- } from "./y34a8714.js";
8
- import {
9
- viewObject,
10
- materializedViewObject,
11
- materializedViewIndex
12
- } from "./zy8r7qvz.js";
13
- import {
14
- extensionObject
15
- } from "./r3j8s5y0.js";
16
4
  import {
17
5
  dependencyOrder,
18
6
  catalog,
@@ -20,10 +8,14 @@ import {
20
8
  domainType,
21
9
  isDomain
22
10
  } from "./ywspezzx.js";
11
+ import {
12
+ extensionObject
13
+ } from "./r3j8s5y0.js";
23
14
  import {
24
15
  canonicalJson,
25
16
  staticNamespace2,
26
17
  templateNamespace2,
18
+ assertNamespace2,
27
19
  identityKey2,
28
20
  identityLabel2,
29
21
  sameRef2,
@@ -48,7 +40,8 @@ import {
48
40
  import {
49
41
  sha2562,
50
42
  assertIdentifier2,
51
- fitIdentifier2
43
+ fitIdentifier2,
44
+ deterministicName2
52
45
  } from "./nfzc5z0w.js";
53
46
  import {
54
47
  catalogError2
@@ -164,6 +157,242 @@ function defaultPrivilegeObject(input) {
164
157
  };
165
158
  }
166
159
 
160
+ // src/contracts/catalog/routine.ts
161
+ var VOLATILITY = new Set(["volatile", "stable", "immutable"]);
162
+ var SECURITY = new Set(["invoker", "definer"]);
163
+ var TIMING = new Set(["before", "after", "instead"]);
164
+ var LEVEL = new Set(["row", "statement"]);
165
+ var EVENT_ORDER = ["insert", "update", "delete", "truncate"];
166
+ var TYPE_TEXT = /^[A-Za-z][A-Za-z0-9_ ]*(\(\d+(,\s*\d+)?\))?(\[\])*$/;
167
+ function functionObject(input) {
168
+ assertIdentifier2(input.name, "function");
169
+ const namespace = input.namespace ?? staticNamespace2("public");
170
+ assertNamespace2(namespace);
171
+ assertProvenance(input.provenance);
172
+ if (input.language !== "sql" && input.language !== "plpgsql") {
173
+ catalogError2("OKM1020", `Function ${input.name} language must be sql or plpgsql.`);
174
+ }
175
+ const volatility = input.volatility ?? "volatile";
176
+ if (!VOLATILITY.has(volatility)) {
177
+ catalogError2("OKM1020", `Function ${input.name} volatility ${volatility} is not supported.`);
178
+ }
179
+ const security = input.security ?? "invoker";
180
+ if (!SECURITY.has(security)) {
181
+ catalogError2("OKM1020", `Function ${input.name} security ${security} is not supported.`);
182
+ }
183
+ assertTypeName(input.returns, `function ${input.name} return type`);
184
+ const args = (input.arguments ?? []).map((argument) => readArgument(input.name, argument));
185
+ if (input.body.length === 0) {
186
+ catalogError2("OKM1020", `Function ${input.name} needs a body.`);
187
+ }
188
+ const atomic = input.atomic === true;
189
+ if (atomic && input.language !== "sql") {
190
+ catalogError2("OKM1020", `Function ${input.name} BEGIN ATOMIC needs language sql.`);
191
+ }
192
+ if (input.searchPath !== undefined && input.searchPath.trim().length === 0) {
193
+ catalogError2("OKM1020", `Function ${input.name} search_path is empty.`);
194
+ }
195
+ const definition = {
196
+ arguments: args,
197
+ returns: input.returns,
198
+ language: input.language,
199
+ volatility,
200
+ security,
201
+ body: input.body,
202
+ ...input.searchPath !== undefined ? { searchPath: input.searchPath } : {},
203
+ ...atomic ? { atomic: true } : {}
204
+ };
205
+ return {
206
+ kind: "function",
207
+ identity: {
208
+ kind: "function",
209
+ namespace,
210
+ name: input.name,
211
+ argTypes: args.map((arg) => arg.type)
212
+ },
213
+ owner: input.owner ?? "managed",
214
+ definition,
215
+ dependencies: normaliseEdges(input.dependencies ?? []),
216
+ provenance: input.provenance
217
+ };
218
+ }
219
+ function triggerObject(input) {
220
+ assertIdentifier2(input.name, "trigger");
221
+ assertNamespace2(input.parent.namespace);
222
+ assertIdentifier2(input.parent.name, "trigger table");
223
+ assertProvenance(input.provenance);
224
+ if (!TIMING.has(input.timing)) {
225
+ catalogError2("OKM1020", `Trigger ${input.name} timing ${input.timing} is not supported.`);
226
+ }
227
+ if (!LEVEL.has(input.level)) {
228
+ catalogError2("OKM1020", `Trigger ${input.name} level ${input.level} is not supported.`);
229
+ }
230
+ const events = EVENT_ORDER.filter((event) => input.events.includes(event));
231
+ if (events.length === 0) {
232
+ catalogError2("OKM1020", `Trigger ${input.name} needs an event.`);
233
+ }
234
+ const updateOf = input.updateOf === undefined ? undefined : [...input.updateOf];
235
+ if (updateOf !== undefined) {
236
+ if (!events.includes("update")) {
237
+ catalogError2("OKM1020", `Trigger ${input.name} lists UPDATE OF columns without an update event.`);
238
+ }
239
+ if (input.level !== "row") {
240
+ catalogError2("OKM1020", `Trigger ${input.name} UPDATE OF columns need level row.`);
241
+ }
242
+ for (const column of updateOf)
243
+ assertIdentifier2(column, "trigger column");
244
+ }
245
+ assertIdentifier2(input.calls.name, "trigger function");
246
+ assertNamespace2(input.calls.namespace);
247
+ for (const typeName of input.calls.argTypes)
248
+ assertTypeName(typeName, `trigger ${input.name}`);
249
+ const edges = [
250
+ { kind: "table", namespace: input.parent.namespace, name: input.parent.name },
251
+ {
252
+ kind: "function",
253
+ namespace: input.calls.namespace,
254
+ name: input.calls.name,
255
+ argTypes: input.calls.argTypes
256
+ },
257
+ ...(updateOf ?? []).map((column) => ({
258
+ kind: "column",
259
+ parent: input.parent,
260
+ name: column
261
+ })),
262
+ ...input.dependencies ?? []
263
+ ];
264
+ const definition = {
265
+ timing: input.timing,
266
+ events,
267
+ level: input.level,
268
+ calls: {
269
+ namespace: input.calls.namespace,
270
+ name: input.calls.name,
271
+ argTypes: [...input.calls.argTypes]
272
+ },
273
+ ...updateOf !== undefined && updateOf.length > 0 ? { updateOf } : {},
274
+ ...input.when !== undefined && input.when.length > 0 ? { when: input.when } : {}
275
+ };
276
+ return {
277
+ kind: "trigger",
278
+ identity: { kind: "trigger", parent: input.parent, name: input.name },
279
+ owner: input.owner ?? "managed",
280
+ definition,
281
+ dependencies: normaliseEdges(edges),
282
+ provenance: input.provenance
283
+ };
284
+ }
285
+ function readArgument(fn, argument) {
286
+ assertIdentifier2(argument.name, `function ${fn} argument`);
287
+ assertTypeName(argument.type, `function ${fn} argument ${argument.name}`);
288
+ return { name: argument.name, type: argument.type };
289
+ }
290
+ function assertTypeName(typeName, role) {
291
+ if (!TYPE_TEXT.test(typeName)) {
292
+ catalogError2("OKM1020", `${role} ${typeName} is not a type name.`);
293
+ }
294
+ }
295
+
296
+ // src/contracts/catalog/view.ts
297
+ function normaliseViewQuery(query) {
298
+ return query.trim().replace(/;\s*$/, "");
299
+ }
300
+ function viewObject(input) {
301
+ const namespace = input.namespace ?? staticNamespace2("public");
302
+ const columns = readColumns(input.name, input.columns);
303
+ const query = readQuery(input.name, input.query);
304
+ assertNamespace2(namespace);
305
+ assertProvenance(input.provenance);
306
+ const definition = {
307
+ columns,
308
+ query,
309
+ ...input.securityInvoker === true ? { securityInvoker: true } : {}
310
+ };
311
+ return {
312
+ kind: "view",
313
+ identity: { kind: "view", namespace, name: input.name },
314
+ owner: input.owner ?? "managed",
315
+ definition,
316
+ dependencies: normaliseEdges(input.dependencies ?? []),
317
+ provenance: input.provenance
318
+ };
319
+ }
320
+ function materializedViewObject(input) {
321
+ const namespace = input.namespace ?? staticNamespace2("public");
322
+ const columns = readColumns(input.name, input.columns);
323
+ const query = readQuery(input.name, input.query);
324
+ assertNamespace2(namespace);
325
+ assertProvenance(input.provenance);
326
+ const definition = {
327
+ columns,
328
+ query,
329
+ ...input.refresh === "concurrently" ? { refresh: "concurrently" } : {}
330
+ };
331
+ return {
332
+ kind: "materializedView",
333
+ identity: { kind: "materializedView", namespace, name: input.name },
334
+ owner: input.owner ?? "managed",
335
+ definition,
336
+ dependencies: normaliseEdges(input.dependencies ?? []),
337
+ provenance: input.provenance
338
+ };
339
+ }
340
+ function materializedViewIndex(input) {
341
+ assertNamespace2(input.parent.namespace);
342
+ assertIdentifier2(input.parent.name, "index parent");
343
+ assertProvenance(input.provenance);
344
+ const columns = [...input.columns];
345
+ for (const name of columns)
346
+ assertIdentifier2(name, "index column");
347
+ if (columns.length === 0 && input.expression === undefined) {
348
+ catalogError2("OKM1020", `Index on ${input.parent.name} needs a column or an expression.`);
349
+ }
350
+ const nameKey = input.nameKey ?? (columns.length > 0 ? columns.join("_") : "expr");
351
+ const name = input.name === undefined ? deterministicName2({ parent: input.parent.name, purpose: "index", nameKey }) : fitIdentifier2(input.name);
352
+ const parentView = {
353
+ kind: "materializedView",
354
+ namespace: input.parent.namespace,
355
+ name: input.parent.name
356
+ };
357
+ return {
358
+ kind: "index",
359
+ identity: { kind: "index", parent: input.parent, name },
360
+ owner: input.owner ?? "managed",
361
+ definition: {
362
+ columns,
363
+ unique: input.unique === true,
364
+ nameKey,
365
+ ...input.expression !== undefined ? { expression: input.expression } : {},
366
+ ...input.predicate !== undefined ? { predicate: input.predicate } : {}
367
+ },
368
+ dependencies: normaliseEdges(input.dependencies ?? [parentView]),
369
+ provenance: input.provenance
370
+ };
371
+ }
372
+ function readColumns(view, columns) {
373
+ assertIdentifier2(view, "view");
374
+ if (columns.length === 0)
375
+ catalogError2("OKM1020", `View ${view} needs a column.`);
376
+ const seen = new Set;
377
+ return columns.map((column) => {
378
+ assertIdentifier2(column.name, `view ${view} column`);
379
+ if (seen.has(column.name)) {
380
+ catalogError2("OKM1020", `View ${view} lists column ${column.name} twice.`);
381
+ }
382
+ seen.add(column.name);
383
+ if (column.dataType.length === 0 || /[;'"\\]/.test(column.dataType)) {
384
+ catalogError2("OKM1020", `View ${view} column ${column.name} type is not a type name.`);
385
+ }
386
+ return { name: column.name, dataType: column.dataType };
387
+ });
388
+ }
389
+ function readQuery(view, query) {
390
+ const text = normaliseViewQuery(query);
391
+ if (text.length === 0)
392
+ catalogError2("OKM1020", `View ${view} needs a query.`);
393
+ return text;
394
+ }
395
+
167
396
  // src/contracts/catalog/document.ts
168
397
  function creationOrder2(source) {
169
398
  return dependencyOrder(source.objects);
@@ -1565,4 +1794,4 @@ function assertNeverKind(value) {
1565
1794
  return catalogError2("OKM1020", `Unexpected kind ${JSON.stringify(value)}.`);
1566
1795
  }
1567
1796
 
1568
- export { roleObject, grantObject, defaultPrivilegeObject, creationOrder2, renameColumn2, renameTable2, serializeCatalog2, catalogHash2, startupCatalog2, startupHash2, loadTrustedCatalog2, catalogFileText2, parseCatalog2 };
1797
+ export { roleObject, grantObject, defaultPrivilegeObject, functionObject, triggerObject, normaliseViewQuery, viewObject, materializedViewObject, materializedViewIndex, creationOrder2, renameColumn2, renameTable2, serializeCatalog2, catalogHash2, startupCatalog2, startupHash2, loadTrustedCatalog2, catalogFileText2, parseCatalog2 };
@@ -1,9 +1,16 @@
1
+ import {
2
+ emitSqlSelect,
3
+ decodeSqlNumber
4
+ } from "./3bb7wsqt.js";
1
5
  import {
2
6
  refusePrototypeKey
3
- } from "./q5c6ngn3.js";
7
+ } from "./a62rb2da.js";
4
8
  import {
5
9
  isWindow
6
10
  } from "./9a4ae4p8.js";
11
+ import {
12
+ readSelectFragment
13
+ } from "./bsek72fg.js";
7
14
  import {
8
15
  emitWhere,
9
16
  emitOrder,
@@ -16,7 +23,7 @@ import {
16
23
  list,
17
24
  isRecord,
18
25
  fail2
19
- } from "./67txcrcw.js";
26
+ } from "./kgwp4jdd.js";
20
27
  import {
21
28
  throwNamed2
22
29
  } from "./52szzakm.js";
@@ -46,6 +53,15 @@ function statement(spec) {
46
53
  sink.text(projectExpr(`t.${quote(item.column.sql)}`, item.column.dataType));
47
54
  sink.mark(`s:${item.column.field}`);
48
55
  outputs?.fields.push({ key: item.column.field, at: column, decode: item.column.decode });
56
+ } else if (item.kind === "sql") {
57
+ emitSqlSelect(table, item.parts, sink, "t");
58
+ sink.text("::text");
59
+ sink.mark(`s:${item.as}`);
60
+ outputs?.fields.push({
61
+ key: item.as,
62
+ at: column,
63
+ decode: item.textual === true ? AS_TEXT : decodeSqlNumber
64
+ });
49
65
  } else {
50
66
  emitWindow(table, item.window, sink);
51
67
  sink.text("::text");
@@ -171,6 +187,17 @@ function readSpec(table, select) {
171
187
  items.push({ kind: "column", column });
172
188
  continue;
173
189
  }
190
+ const sql = readSelectFragment(entry);
191
+ if (sql !== undefined) {
192
+ const as = readAs(sql.as, "fragment");
193
+ if (names.has(as) || table.columns.has(as)) {
194
+ fail2("OKM1120", `fragment as ${as} clashes with a column of ${table.model.name}.`, "Pick an as name that is not a column.");
195
+ }
196
+ names.add(as);
197
+ ordinals.set(as, String(items.length + 1));
198
+ items.push(sql.textual === true ? { kind: "sql", as, parts: sql.parts, textual: true } : { kind: "sql", as, parts: sql.parts });
199
+ continue;
200
+ }
174
201
  if (!isWindow(entry)) {
175
202
  fail2("OKM1120", "select takes field names or a window helper. A plain object is not a window.", "Pass rowNumber, rank, denseRank, or runningTotal.");
176
203
  }
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  noticeBuffer,
3
3
  WireSession
4
- } from "./1qa0qajz.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 "./kb2sdhfb.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("./zp9fmend.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("./zp9fmend.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("./zp9fmend.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
1
  import {
2
- renderCatalog
3
- } from "./9s0ypp87.js";
2
+ renderCatalog2
3
+ } from "./fk9vef30.js";
4
4
  import {
5
5
  viewGlobalReason,
6
6
  viewMentions
7
- } from "./5e3tf63j.js";
7
+ } from "./760ppr76.js";
8
8
  import {
9
9
  createClient
10
- } from "./tbrvgw6z.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);