okmodel 0.6.0 → 0.8.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 (267) hide show
  1. package/README.md +100 -1131
  2. package/dist/adapters/capabilities.d.ts +35 -0
  3. package/dist/adapters/failure.d.ts +13 -2
  4. package/dist/adapters/lazy-errors.d.ts +22 -0
  5. package/dist/adapters/pg/bun-sql.d.ts +53 -0
  6. package/dist/adapters/pg/bunsql-extra.d.ts +54 -3
  7. package/dist/adapters/pg/bunsql.d.ts +15 -2
  8. package/dist/adapters/pg/cursor.d.ts +17 -0
  9. package/dist/adapters/pg/neon-extra.d.ts +18 -0
  10. package/dist/adapters/pg/neon.d.ts +104 -0
  11. package/dist/adapters/pg/no-inflight-timeout.d.ts +11 -8
  12. package/dist/adapters/pg/nodepostgres-extra.d.ts +22 -1
  13. package/dist/adapters/pg/nodepostgres.d.ts +12 -0
  14. package/dist/adapters/pg/pglite-wire.d.ts +24 -0
  15. package/dist/adapters/pg/pglite.d.ts +10 -0
  16. package/dist/adapters/pg/postgres-extra.d.ts +27 -11
  17. package/dist/adapters/pg/reserved.d.ts +42 -0
  18. package/dist/adapters/pg/session.d.ts +0 -18
  19. package/dist/contracts/connection.d.ts +7 -6
  20. package/dist/contracts/error.d.ts +1 -1
  21. package/dist/dialects/pg/floor.d.ts +68 -0
  22. package/dist/dialects/pg/fn/index.d.ts +39 -1
  23. package/dist/dialects/pg/fn/index.js +118 -26
  24. package/dist/dialects/pg/index.d.ts +8 -1
  25. package/dist/dialects/pg/index.js +435 -170
  26. package/dist/dialects/pg/introspect.d.ts +11 -0
  27. package/dist/dialects/pg/keys.d.ts +11 -8
  28. package/dist/dialects/pg/model.d.ts +40 -0
  29. package/dist/dialects/pg/morph.d.ts +43 -0
  30. package/dist/dialects/pg/operator-fit.d.ts +2 -2
  31. package/dist/dialects/pg/operators.d.ts +14 -7
  32. package/dist/dialects/pg/ops/bucket.d.ts +65 -0
  33. package/dist/dialects/pg/ops/fragment.d.ts +119 -0
  34. package/dist/dialects/pg/ops/inc.d.ts +2 -2
  35. package/dist/dialects/pg/ops/lane.d.ts +49 -0
  36. package/dist/dialects/pg/ops/matches.d.ts +9 -12
  37. package/dist/dialects/pg/ops/relevance.d.ts +13 -0
  38. package/dist/dialects/pg/ops/search-query.d.ts +22 -0
  39. package/dist/dialects/pg/ops/window.d.ts +103 -0
  40. package/dist/dialects/pg/preset.d.ts +1 -1
  41. package/dist/dialects/pg/relations.d.ts +100 -3
  42. package/dist/dialects/pg/schema.d.ts +31 -3
  43. package/dist/dialects/pg/view/client.d.ts +14 -6
  44. package/dist/dialects/pg/view/index.d.ts +73 -1
  45. package/dist/dialects/pg/view/index.js +156 -5
  46. package/dist/dialects/pg/view/scratch.d.ts +8 -5
  47. package/dist/runtime/aggregate.d.ts +8 -2
  48. package/dist/runtime/bucket-group.d.ts +70 -0
  49. package/dist/runtime/conflict.d.ts +22 -4
  50. package/dist/runtime/include.d.ts +0 -8
  51. package/dist/runtime/inflight.d.ts +1 -1
  52. package/dist/runtime/otel.d.ts +105 -0
  53. package/dist/runtime/otel.js +97 -0
  54. package/dist/runtime/page.d.ts +4 -1
  55. package/dist/runtime/pg/bun.js +12 -6
  56. package/dist/runtime/pg/neon.d.ts +38 -0
  57. package/dist/runtime/pg/neon.js +64 -0
  58. package/dist/runtime/pg/pg.js +5 -5
  59. package/dist/runtime/pg/pglite.d.ts +1 -0
  60. package/dist/runtime/pg/pglite.js +9 -9
  61. package/dist/runtime/pg/postgresjs.js +5 -5
  62. package/dist/runtime/plan.d.ts +95 -5
  63. package/dist/runtime/read-stream.d.ts +13 -16
  64. package/dist/runtime/result-name.d.ts +17 -0
  65. package/dist/runtime/server-check.d.ts +3 -3
  66. package/dist/runtime/sort-bind.d.ts +21 -0
  67. package/dist/runtime/sort.d.ts +56 -0
  68. package/dist/runtime/sql-fragment.d.ts +43 -0
  69. package/dist/runtime/sync.d.ts +70 -0
  70. package/dist/runtime/tenancy/index.js +15 -13
  71. package/dist/runtime/text-search.d.ts +20 -0
  72. package/dist/runtime/topology.d.ts +1 -1
  73. package/dist/runtime/traits/index.d.ts +80 -0
  74. package/dist/runtime/traits/index.js +184 -21
  75. package/dist/runtime/tree.d.ts +38 -0
  76. package/dist/runtime/types.d.ts +232 -22
  77. package/dist/runtime/validate/index.js +4 -4
  78. package/dist/runtime/version.d.ts +39 -0
  79. package/dist/runtime/window.d.ts +21 -0
  80. package/dist/runtime/write.d.ts +54 -2
  81. package/dist/shared/{929h19xp.js → 0wrea3jq.js} +141 -13
  82. package/dist/shared/{qq3899ht.js → 12z7aznj.js} +243 -14
  83. package/dist/shared/{1z04fa85.js → 14x60fbf.js} +12 -57
  84. package/dist/shared/{ek2wt2dz.js → 16kvjebh.js} +4 -4
  85. package/dist/shared/{wynzeggs.js → 195pzzzz.js} +8 -8
  86. package/dist/shared/1d9q9cv2.js +312 -0
  87. package/dist/shared/2c13q96h.js +18 -0
  88. package/dist/shared/{b4v57v3x.js → 2d3xq4ps.js} +2 -2
  89. package/dist/shared/{1f0xa3cb.js → 3449rcae.js} +5 -5
  90. package/dist/shared/{wkme6tep.js → 35q0n9tz.js} +8 -16
  91. package/dist/shared/3bb7wsqt.js +99 -0
  92. package/dist/shared/3t6kw83m.js +249 -0
  93. package/dist/shared/{5j36z8dn.js → 4m6hskg8.js} +39 -70
  94. package/dist/shared/{n076ydsc.js → 4vbf83xx.js} +69 -28
  95. package/dist/shared/{vmfkhszw.js → 63f4ksbz.js} +33 -26
  96. package/dist/shared/{c58secgj.js → 63qtkrca.js} +38 -4
  97. package/dist/shared/6m78c8ss.js +6 -0
  98. package/dist/shared/{x3jc53kg.js → 760ppr76.js} +15 -7
  99. package/dist/shared/7ghwamrf.js +40 -0
  100. package/dist/shared/7kms6fvj.js +20 -0
  101. package/dist/shared/7n7ddwt4.js +6 -0
  102. package/dist/shared/9a4ae4p8.js +31 -0
  103. package/dist/shared/{hazqqecq.js → 9dr2qnx7.js} +63 -34
  104. package/dist/shared/{h15jx9bc.js → 9dvh1dr6.js} +1 -1
  105. package/dist/shared/a62rb2da.js +13 -0
  106. package/dist/shared/{cgbamx3e.js → ae4j5f42.js} +23 -4
  107. package/dist/shared/agsfb86s.js +233 -0
  108. package/dist/shared/{8x72s86k.js → b6d6p0zc.js} +13 -7
  109. package/dist/shared/{ag4c7516.js → b76b8d95.js} +2 -2
  110. package/dist/shared/{j60w0dvr.js → bah9nbg3.js} +58 -38
  111. package/dist/shared/bnby0esn.js +10 -0
  112. package/dist/shared/bsek72fg.js +225 -0
  113. package/dist/shared/{2cg3wnxc.js → bxas03mq.js} +608 -141
  114. package/dist/shared/{31vm914h.js → cm3w0ywp.js} +15 -16
  115. package/dist/shared/{gwn6v667.js → cnkky55j.js} +25 -14
  116. package/dist/shared/{dk8v79p3.js → d5nmj7vv.js} +1 -1
  117. package/dist/shared/{ttmg09vd.js → dpc2r7rb.js} +8 -8
  118. package/dist/shared/dzj09cye.js +10 -0
  119. package/dist/shared/{sbdme3vy.js → e8zyaqvj.js} +60 -10
  120. package/dist/shared/{2jd1sn0e.js → ecn8mfdq.js} +6 -6
  121. package/dist/shared/exn3sd90.js +359 -0
  122. package/dist/shared/{t3g0k88x.js → f4jy1j7x.js} +39 -22
  123. package/dist/shared/{y2t3jktd.js → fjpnhqan.js} +20 -13
  124. package/dist/shared/g5yc06ka.js +272 -0
  125. package/dist/shared/ga9j92qj.js +25 -0
  126. package/dist/shared/{3fqwmr09.js → hfqmpasr.js} +6 -6
  127. package/dist/shared/{wt5rzv1h.js → hm5f8jby.js} +7 -7
  128. package/dist/shared/{ys0xzyaj.js → hqpxf4a4.js} +224 -19
  129. package/dist/shared/jebgrkeq.js +179 -0
  130. package/dist/shared/{09p049xa.js → jp36k7dp.js} +44 -16
  131. package/dist/shared/jx2m62cs.js +96 -0
  132. package/dist/shared/{r11n8grd.js → k86n8vq3.js} +7 -4
  133. package/dist/shared/{2z7wv5tj.js → kgwp4jdd.js} +56 -35
  134. package/dist/shared/{knmes2kh.js → kj9d8maq.js} +1 -1
  135. package/dist/shared/{g90m9b0g.js → m4xff2a6.js} +6 -5
  136. package/dist/shared/{r6nwkxnt.js → m7n9h2a5.js} +4 -4
  137. package/dist/shared/mfedzr74.js +145 -0
  138. package/dist/shared/{f0f1n281.js → mkrn359n.js} +60 -11
  139. package/dist/shared/{p248q79y.js → mnvjvqyp.js} +10 -10
  140. package/dist/shared/{672t5vym.js → mss6ctgv.js} +2 -2
  141. package/dist/shared/{4az561fn.js → mtw6jz76.js} +8 -23
  142. package/dist/shared/n05z9nwz.js +313 -0
  143. package/dist/shared/{pjr6xrm5.js → n0jmpgj1.js} +20 -17
  144. package/dist/shared/{p6bjzq9q.js → n41w4fbz.js} +14 -6
  145. package/dist/shared/{b3awxn7h.js → n454kcnw.js} +1 -1
  146. package/dist/shared/n7kg8mmx.js +61 -0
  147. package/dist/shared/nbw1z4yd.js +18 -0
  148. package/dist/shared/needfe47.js +66 -0
  149. package/dist/shared/{1nw1f3vs.js → njga14v4.js} +9 -9
  150. package/dist/shared/{5yv4k6a6.js → nmnsgj7x.js} +145 -3
  151. package/dist/shared/{vjpnzwjz.js → p3xbdcvt.js} +14 -18
  152. package/dist/shared/p5nh3r8q.js +622 -0
  153. package/dist/shared/{nx9hh281.js → pan0370z.js} +13 -12
  154. package/dist/shared/q0cqt2sp.js +12 -0
  155. package/dist/shared/qd9hhd8f.js +37 -0
  156. package/dist/shared/{mb2ycs1p.js → qfw14tna.js} +15 -15
  157. package/dist/shared/{9s0ypp87.js → sjk86yrx.js} +1 -1
  158. package/dist/shared/th3be82n.js +208 -0
  159. package/dist/shared/{ed0b8k4s.js → typ3vy7t.js} +1 -1
  160. package/dist/shared/{5d8t84hg.js → v1wad97q.js} +14 -14
  161. package/dist/shared/{x72jb7ad.js → v8g1vgv8.js} +1 -1
  162. package/dist/shared/{9628a9xt.js → vk7rag46.js} +1 -1
  163. package/dist/shared/{ze4hxsmy.js → w9ejzaqf.js} +1 -1
  164. package/dist/shared/{q3j1tq7a.js → wcrheftc.js} +148 -23
  165. package/dist/shared/wvdjznah.js +213 -0
  166. package/dist/shared/wz2a78mp.js +8 -0
  167. package/dist/shared/xfhe73sb.js +436 -0
  168. package/dist/shared/{r1fdd0f6.js → z581d7ny.js} +5 -2
  169. package/dist/shared/{8etn7d8w.js → z7s6fpxv.js} +1 -1
  170. package/dist/shared/{32cnm7kn.js → zbqbmmrp.js} +76 -40
  171. package/dist/shared/{n7mcc1gk.js → zchaghkf.js} +4 -3
  172. package/dist/shared/{xq0mvhts.js → zgex00fd.js} +6 -6
  173. package/dist/shared/{nsva2a6b.js → znm0bpp5.js} +3 -0
  174. package/dist/shared/zq1he88x.js +155 -0
  175. package/dist/tooling/cli.js +26 -13
  176. package/dist/tooling/driver-run.js +4971 -0
  177. package/dist/tooling/driver-test.d.ts +36 -0
  178. package/dist/tooling/migrate/commands.d.ts +2 -2
  179. package/dist/tooling/migrate/engine.d.ts +3 -2
  180. package/dist/tooling/migrate/index.js +9 -9
  181. package/dist/tooling/migrate/project.d.ts +3 -0
  182. package/dist/tooling/shared/03k6res6.js +210 -0
  183. package/dist/tooling/shared/08kemxjd.js +10 -0
  184. package/dist/tooling/shared/2revefqt.js +209 -0
  185. package/dist/tooling/shared/2wtvc7rw.js +1425 -0
  186. package/dist/tooling/shared/345tbc2k.js +16 -0
  187. package/dist/tooling/shared/3m1hkg7z.js +344 -0
  188. package/dist/tooling/shared/3rrw5w8f.js +81 -0
  189. package/dist/tooling/shared/3tq8pnb8.js +131 -0
  190. package/dist/tooling/shared/417zdsk7.js +194 -0
  191. package/dist/tooling/shared/4d2w25vw.js +40 -0
  192. package/dist/tooling/shared/54tqkxja.js +51 -0
  193. package/dist/tooling/shared/5bvw2nev.js +12 -0
  194. package/dist/tooling/shared/6nyfyw70.js +231 -0
  195. package/dist/tooling/shared/72fyg4zv.js +160 -0
  196. package/dist/tooling/shared/733a1tq3.js +38 -0
  197. package/dist/tooling/shared/7ae7rjmn.js +20 -0
  198. package/dist/tooling/shared/7kms6fvj.js +20 -0
  199. package/dist/tooling/shared/8sqrsw3s.js +49 -0
  200. package/dist/tooling/shared/96ps4g1z.js +32 -0
  201. package/dist/tooling/shared/9kazs5p6.js +195 -0
  202. package/dist/tooling/shared/9xzm7hjg.js +38 -0
  203. package/dist/tooling/shared/a6pp9d12.js +49 -0
  204. package/dist/tooling/shared/a7q7t4n3.js +22 -0
  205. package/dist/tooling/shared/aftb2mwr.js +18 -0
  206. package/dist/tooling/shared/bz2dqhab.js +311 -0
  207. package/dist/tooling/shared/cmptmb4f.js +12 -0
  208. package/dist/tooling/shared/ddjtfgnx.js +177 -0
  209. package/dist/tooling/shared/djydjpqt.js +261 -0
  210. package/dist/tooling/shared/dw08f3m8.js +9 -0
  211. package/dist/tooling/shared/dy672fz6.js +16 -0
  212. package/dist/tooling/shared/dzx85q70.js +66 -0
  213. package/dist/tooling/shared/ec71zqgt.js +270 -0
  214. package/dist/{shared/d5azex6s.js → tooling/shared/ep8zh3bk.js} +1 -1
  215. package/dist/tooling/shared/f9mphxej.js +3789 -0
  216. package/dist/tooling/shared/fb9k2qwd.js +89 -0
  217. package/dist/tooling/shared/g9ad4n80.js +211 -0
  218. package/dist/tooling/shared/gfvtj6d0.js +94 -0
  219. package/dist/tooling/shared/gmcf9cxf.js +294 -0
  220. package/dist/tooling/shared/htnaj77v.js +17 -0
  221. package/dist/tooling/shared/j9t5s12a.js +7 -0
  222. package/dist/tooling/shared/jne7b93p.js +42 -0
  223. package/dist/tooling/shared/ma2340rx.js +118 -0
  224. package/dist/tooling/shared/mtrqn2hn.js +505 -0
  225. package/dist/tooling/shared/n4jqhpqz.js +27 -0
  226. package/dist/tooling/shared/nf7jmhfa.js +20 -0
  227. package/dist/tooling/shared/p7f08ktn.js +332 -0
  228. package/dist/tooling/shared/ppnnnvj8.js +13 -0
  229. package/dist/tooling/shared/pqy21k24.js +312 -0
  230. package/dist/tooling/shared/pw8fgahx.js +69 -0
  231. package/dist/tooling/shared/pwsytxm5.js +17 -0
  232. package/dist/tooling/shared/rf83gr2d.js +94 -0
  233. package/dist/tooling/shared/rq5kk8j6.js +401 -0
  234. package/dist/tooling/shared/rs1jb051.js +12 -0
  235. package/dist/tooling/shared/smn6kz1p.js +157 -0
  236. package/dist/tooling/shared/spk1jg3r.js +1696 -0
  237. package/dist/tooling/shared/tn8gay14.js +143 -0
  238. package/dist/tooling/shared/vraj6d74.js +42 -0
  239. package/dist/tooling/shared/vs0t6qt8.js +64 -0
  240. package/dist/tooling/shared/vx86qjv8.js +150 -0
  241. package/dist/tooling/shared/w7qe8sj1.js +140 -0
  242. package/dist/tooling/shared/wt7j7nf6.js +15 -0
  243. package/dist/tooling/shared/wwnekq5n.js +6 -0
  244. package/dist/tooling/shared/xhrnjch9.js +185 -0
  245. package/dist/tooling/shared/xjs6zqtc.js +190 -0
  246. package/dist/tooling/shared/y031jct9.js +16 -0
  247. package/dist/tooling/shared/y5656f0e.js +233 -0
  248. package/dist/tooling/shared/yfr8hzhm.js +604 -0
  249. package/dist/tooling/shared/yk9mp7vb.js +250 -0
  250. package/dist/tooling/shared/yw30vnq2.js +139 -0
  251. package/dist/tooling/shared/z8d7ptht.js +618 -0
  252. package/dist/tooling/shared/zhwnfyb2.js +9 -0
  253. package/dist/tooling/shared/zvnhh1n0.js +198 -0
  254. package/dist/tooling/testing/index.js +3 -3
  255. package/package.json +17 -3
  256. package/dist/shared/3qnhc7w5.js +0 -38
  257. package/dist/shared/7m88x3e9.js +0 -45
  258. package/dist/shared/8dqhth8c.js +0 -12
  259. package/dist/shared/j3rkk835.js +0 -99
  260. package/dist/shared/k68eedmy.js +0 -85
  261. package/dist/shared/venqrjna.js +0 -216
  262. package/dist/shared/wxr8cwns.js +0 -6
  263. package/dist/shared/y34a8714.js +0 -150
  264. package/dist/shared/zm0mafk4.js +0 -92
  265. package/dist/shared/zy8r7qvz.js +0 -116
  266. package/dist/shared/{ywr8hmey.js → 606g0nbf.js} +3 -3
  267. package/dist/shared/{rpycarcr.js → gcefca6p.js} +4 -4
@@ -1,9 +1,13 @@
1
+ import {
2
+ DriverError2,
3
+ timedOut2
4
+ } from "./cm3w0ywp.js";
1
5
  import {
2
6
  PgSession
3
- } from "./wkme6tep.js";
7
+ } from "./35q0n9tz.js";
4
8
  import {
5
9
  isConnectionLost
6
- } from "./gwn6v667.js";
10
+ } from "./cnkky55j.js";
7
11
  import {
8
12
  driverErrors,
9
13
  rejectClosed,
@@ -11,32 +15,45 @@ import {
11
15
  runCall,
12
16
  rowsFrom,
13
17
  resultFrom
14
- } from "./cgbamx3e.js";
18
+ } from "./ae4j5f42.js";
15
19
 
16
20
  // src/adapters/pg/postgres-extra.ts
17
21
  var RESET_ALL = "RESET ALL";
18
22
  var UNLOCK = "SELECT pg_advisory_unlock_all()";
19
- async function checkout2(pool) {
23
+ async function checkout2(pool, timeoutMs) {
20
24
  if (pool.isClosed())
21
25
  return rejectClosed();
22
- const reserved = await reserveConnection(pool.sql, pool.acquireMs, pool.counters);
26
+ const reserved = await reserveConnection(pool.sql, pool.acquireMs, pool.counters, timeoutMs);
23
27
  pool.counters.reserved += 1;
24
28
  const local = new Set;
25
29
  const session = new PgSession(reserved, pool.counters, "reserved", local, pool.isClosed, pool.poolInflight, pool.notices, pool.named);
26
30
  let released = false;
27
- const lost = { on: false };
31
+ const lost = { on: false, stop: () => {
32
+ return;
33
+ } };
28
34
  arm(reserved, lost);
29
- const guard = (run) => lost.on ? rejectClosed("CONNECTION_CLOSED") : run().catch((error) => {
35
+ let limit = timeoutMs !== undefined && timeoutMs > 0 ? timeoutMs : 0;
36
+ const remember = (timeout) => {
37
+ if (timeout !== undefined && timeout > 0)
38
+ limit = timeout;
39
+ };
40
+ const guard = (run) => lost.on ? rejectClosed() : run().catch((error) => {
30
41
  if (isConnectionLost(error))
31
42
  lost.on = true;
32
43
  throw error;
33
44
  });
34
45
  return {
35
- execute: (text, params, options) => guard(() => runCall(pool.isClosed(), options, (watch) => session.query(text, params, watch))),
36
- batch: (statements, options) => guard(() => runCall(pool.isClosed(), options, async (watch) => {
37
- const { runAtomicBatch } = await import("./ag4c7516.js");
38
- return runAtomicBatch(session, statements, watch);
39
- })),
46
+ execute: (text, params, options) => {
47
+ remember(options?.timeout);
48
+ return guard(() => runCall(pool.isClosed(), options, (watch) => session.query(text, params, watch)));
49
+ },
50
+ batch: (statements, options) => {
51
+ remember(options?.timeout);
52
+ return guard(() => runCall(pool.isClosed(), options, async (watch) => {
53
+ const { runAtomicBatch } = await import("./b76b8d95.js");
54
+ return runAtomicBatch(session, statements, watch);
55
+ }));
56
+ },
40
57
  cancel() {
41
58
  session.cancel();
42
59
  },
@@ -44,13 +61,16 @@ async function checkout2(pool) {
44
61
  if (released)
45
62
  return;
46
63
  released = true;
64
+ const ms = limit;
47
65
  try {
48
66
  if (!lost.on)
49
- await resetConnection(reserved, session.depth());
67
+ await deadline(ms, () => resetConnection(reserved, session.depth()), lost);
68
+ } catch {
69
+ lost.on = true;
50
70
  } finally {
51
71
  pool.counters.reserved = Math.max(0, pool.counters.reserved - 1);
52
72
  if (lost.on)
53
- await pool.sql.unsafe("select 1").catch(() => {
73
+ await deadline(ms, () => pool.sql.unsafe("select 1"), pool.sql).catch(() => {
54
74
  return;
55
75
  });
56
76
  else
@@ -73,37 +93,141 @@ async function* stream2(sql, text, params) {
73
93
  yield rowsFrom(chunk);
74
94
  }
75
95
  }
76
- function reserveConnection(sql, acquireMs, counters) {
96
+ function poolWaits(sql) {
97
+ const options = sql.options;
98
+ if (options === undefined || options.q !== undefined)
99
+ return options;
100
+ const q = new Set;
101
+ const n = new Set;
102
+ options.q = q;
103
+ options.n = n;
104
+ options.onclose = (id) => {
105
+ n.add(id);
106
+ if (n.size < options.max) {
107
+ queueMicrotask(() => {
108
+ for (const wait of q)
109
+ wait.a();
110
+ });
111
+ return;
112
+ }
113
+ n.clear();
114
+ for (const wait of q)
115
+ wait.s();
116
+ q.clear();
117
+ };
118
+ return options;
119
+ }
120
+ function deadline(ms, run, link) {
121
+ let timer;
122
+ let off = () => {
123
+ return;
124
+ };
125
+ const slot = link !== undefined && "stop" in link ? link : undefined;
126
+ const pool = slot === undefined && link !== undefined ? poolWaits(link) : undefined;
127
+ let ended = false;
128
+ return new Promise((resolve, reject) => {
129
+ const fail = (error) => {
130
+ if (ended)
131
+ return;
132
+ ended = true;
133
+ reject(error);
134
+ };
135
+ const stop = () => {
136
+ fail(new DriverError2("Connection closed", { sqlstate: "08006" }));
137
+ };
138
+ if (slot !== undefined)
139
+ slot.stop = stop;
140
+ const go = () => {
141
+ const pending = run();
142
+ if (ms > 0 && timer === undefined) {
143
+ timer = setTimeout(() => {
144
+ pending.cancel?.();
145
+ fail(timedOut2());
146
+ }, ms);
147
+ }
148
+ pending.then((value) => {
149
+ if (ended) {
150
+ value.release?.();
151
+ return;
152
+ }
153
+ ended = true;
154
+ pool?.n?.clear();
155
+ resolve(value);
156
+ }, fail);
157
+ };
158
+ if (ms === 0 && pool?.q !== undefined) {
159
+ let used = false;
160
+ const wait = {
161
+ s: stop,
162
+ a() {
163
+ if (used || ended)
164
+ return;
165
+ used = true;
166
+ go();
167
+ }
168
+ };
169
+ pool.q.add(wait);
170
+ off = () => pool.q?.delete(wait);
171
+ }
172
+ go();
173
+ }).finally(() => {
174
+ clearTimeout(timer);
175
+ if (slot !== undefined)
176
+ slot.stop = () => {
177
+ return;
178
+ };
179
+ off();
180
+ });
181
+ }
182
+ async function runBatch2(pool, statements, options) {
183
+ const connection = await checkout2(pool, options?.timeout);
184
+ try {
185
+ return await connection.batch(statements, options);
186
+ } finally {
187
+ await connection.release();
188
+ }
189
+ }
190
+ function reserveConnection(sql, acquireMs, counters, callMs) {
77
191
  counters.waiting += 1;
78
192
  let settled = false;
193
+ const finish = () => {
194
+ counters.waiting = Math.max(0, counters.waiting - 1);
195
+ };
79
196
  return new Promise((resolve, reject) => {
80
197
  let timer;
81
198
  if (acquireMs !== undefined) {
82
199
  timer = setTimeout(() => {
200
+ if (settled)
201
+ return;
83
202
  settled = true;
84
- counters.waiting = Math.max(0, counters.waiting - 1);
203
+ finish();
85
204
  driverErrors().then((errors) => {
86
205
  reject(errors.acquireTimeout());
87
206
  });
88
207
  }, acquireMs);
89
208
  }
90
- sql.reserve().then((connection) => {
209
+ const ms = callMs !== undefined && callMs > 0 ? callMs : 0;
210
+ deadline(ms, () => sql.reserve(), sql).then((connection) => {
91
211
  if (settled) {
92
- resetConnection(connection, 0).finally(() => {
212
+ resetConnection(connection, 0).catch(() => {
213
+ return;
214
+ }).finally(() => {
93
215
  connection.release();
94
216
  });
95
217
  return;
96
218
  }
219
+ settled = true;
97
220
  if (timer !== undefined)
98
221
  clearTimeout(timer);
99
- counters.waiting = Math.max(0, counters.waiting - 1);
222
+ finish();
100
223
  resolve(connection);
101
224
  }, (error) => {
102
225
  if (settled)
103
226
  return;
227
+ settled = true;
104
228
  if (timer !== undefined)
105
229
  clearTimeout(timer);
106
- counters.waiting = Math.max(0, counters.waiting - 1);
230
+ finish();
107
231
  mapFailure(error).then(reject);
108
232
  });
109
233
  });
@@ -139,6 +263,7 @@ function arm(sql, lost) {
139
263
  onexecute(connection) {
140
264
  connection.onclose = () => {
141
265
  lost.on = true;
266
+ lost.stop();
142
267
  };
143
268
  }
144
269
  });
@@ -182,13 +307,13 @@ async function holdListener2(gate, start) {
182
307
  }
183
308
  }
184
309
  function watchQuery2(pending, watch, onAbort, ctx) {
185
- return pending.then((result) => {
310
+ return pending.then((value) => {
186
311
  finishWatch(pending, watch, onAbort, ctx);
187
312
  const why = watch.reason();
188
313
  if (why === "timeout" || why === "cancelled")
189
314
  return classify(why, watch);
190
315
  ctx.note(ctx.text);
191
- return resultFrom(result, ctx.notices.since(ctx.start));
316
+ return resultFrom(value, ctx.notices.since(ctx.start));
192
317
  }, (error) => {
193
318
  finishWatch(pending, watch, onAbort, ctx);
194
319
  return classify(error, watch);
@@ -214,4 +339,4 @@ async function classify(error, watch) {
214
339
  return Promise.reject(errors.mapDriverError(error));
215
340
  }
216
341
 
217
- export { checkout2, describe2, stream2, watchReserved2, holdCheckout2, holdListener2, watchQuery2 };
342
+ export { checkout2, describe2, stream2, runBatch2, watchReserved2, holdCheckout2, holdListener2, watchQuery2 };
@@ -0,0 +1,213 @@
1
+ import {
2
+ DriverError2
3
+ } from "./cm3w0ywp.js";
4
+ import {
5
+ send2,
6
+ reserve,
7
+ park
8
+ } from "./zbqbmmrp.js";
9
+ import {
10
+ resetSession2,
11
+ refuseWhenLost2
12
+ } from "./7ghwamrf.js";
13
+ import {
14
+ cursorStream
15
+ } from "./7kms6fvj.js";
16
+ import {
17
+ isConnectionFailure
18
+ } from "./cnkky55j.js";
19
+ import {
20
+ noTimeout
21
+ } from "./q0cqt2sp.js";
22
+ import {
23
+ WireSession
24
+ } from "./mtw6jz76.js";
25
+ import {
26
+ rejectClosed,
27
+ runCall
28
+ } from "./ae4j5f42.js";
29
+
30
+ // src/adapters/pg/bunsql-extra.ts
31
+ async function recover(sql, error, text, depth, clientRead, closedDuring, again) {
32
+ if (!lostQuery(error))
33
+ throw error;
34
+ await flushClosed(sql);
35
+ const alreadyDead = closedDuring || socketClosed(error);
36
+ if (!clientRead && !alreadyDead || depth !== 0 || !readStatement(text))
37
+ throw error;
38
+ try {
39
+ return await again();
40
+ } catch (next) {
41
+ if (lostQuery(next))
42
+ await flushClosed(sql);
43
+ throw next;
44
+ }
45
+ }
46
+ function drainClosed(sql) {
47
+ return flushClosed(sql).then(() => {
48
+ return;
49
+ });
50
+ }
51
+ function readStatement(text) {
52
+ const head = text.trimStart().toLowerCase().replace(/\s+/g, " ");
53
+ if (head.length === 0 || head.includes("pg_advisory"))
54
+ return false;
55
+ if (/\sfor (?:no key update|key share|update|share)\b/.test(head))
56
+ return false;
57
+ return !/^(?:insert|update|delete|refresh|with|create|alter|drop|truncate|grant|revoke|comment|vacuum|analyze|reindex|copy|begin|start|commit|rollback|savepoint|release|set|reset)\b/.test(head);
58
+ }
59
+ function lostQuery(error) {
60
+ return isConnectionFailure(error) || socketClosed(error);
61
+ }
62
+ function socketClosed(error) {
63
+ if (!(error instanceof Error))
64
+ return false;
65
+ if (error.message === "Connection closed")
66
+ return true;
67
+ return error.cause instanceof Error && error.cause.message === "Connection closed";
68
+ }
69
+ async function listen(sql, parked, closed, channel, onNotify) {
70
+ if (closed)
71
+ return rejectClosed();
72
+ const pending = parked.splice(0);
73
+ for (const reserved of pending) {
74
+ const done = reserved.release();
75
+ if (done instanceof Promise)
76
+ await done;
77
+ }
78
+ const subscription = await sql.listen(channel, onNotify);
79
+ return async () => {
80
+ await subscription.unlisten();
81
+ };
82
+ }
83
+ async function checkout(held) {
84
+ const { counters, isClosed } = held;
85
+ if (isClosed())
86
+ return rejectClosed();
87
+ const reserved = await takeOpen(held) ?? await reserve(held.sql, held.acquireMs, counters);
88
+ counters.reserved += 1;
89
+ const session = new WireSession((text, params) => send2(reserved, text, params), held.notices, isClosed, false, () => {
90
+ counters.reservedBusy += 1;
91
+ }, () => {
92
+ counters.reservedBusy = Math.max(0, counters.reservedBusy - 1);
93
+ });
94
+ let lost = { on: false };
95
+ const opened = held.closures();
96
+ const reconnected = () => {
97
+ if (held.closures() === opened)
98
+ return;
99
+ lost.on = true;
100
+ return Promise.reject(new DriverError2("Connection closed", { sqlstate: "08006" }));
101
+ };
102
+ const guard = (run) => refuseWhenLost2(lost, () => run().catch((error) => {
103
+ if (error instanceof Error && bunClosed(error.message)) {
104
+ throw new DriverError2(error.message, { cause: error, sqlstate: "08006" });
105
+ }
106
+ throw error;
107
+ }));
108
+ let released = false;
109
+ return {
110
+ execute: (text, params, options) => {
111
+ const refused = noTimeout(options);
112
+ if (refused !== undefined)
113
+ return refused;
114
+ const gone = reconnected();
115
+ if (gone !== undefined)
116
+ return gone;
117
+ return guard(() => runCall(isClosed(), options, (watch) => session.query(text, params, watch)));
118
+ },
119
+ batch: (statements, options) => {
120
+ const refused = noTimeout(options);
121
+ if (refused !== undefined)
122
+ return refused;
123
+ const gone = reconnected();
124
+ if (gone !== undefined)
125
+ return gone;
126
+ return guard(() => runCall(isClosed(), options, async (watch) => {
127
+ const { runAtomicBatch } = await import("./b76b8d95.js");
128
+ return runAtomicBatch(session, statements, watch);
129
+ }));
130
+ },
131
+ evict() {
132
+ lost.on = true;
133
+ },
134
+ async release() {
135
+ if (released)
136
+ return;
137
+ released = true;
138
+ if (!lost.on && reportsClosed(reserved))
139
+ lost.on = true;
140
+ try {
141
+ if (!lost.on)
142
+ await reset(session, reserved);
143
+ } catch (error) {
144
+ if (lostQuery(error) || reportsClosed(reserved))
145
+ lost.on = true;
146
+ else
147
+ throw error;
148
+ } finally {
149
+ counters.reserved = Math.max(0, counters.reserved - 1);
150
+ if (lost.on) {
151
+ try {
152
+ reserved.release();
153
+ } catch {}
154
+ await flushClosed(held.sql);
155
+ } else
156
+ await park(held.parked, reserved);
157
+ }
158
+ }
159
+ };
160
+ }
161
+ function reportsClosed(reserved) {
162
+ return Reflect.get(reserved, "closed") === true;
163
+ }
164
+ async function takeOpen(held) {
165
+ while (held.parked.length > 0) {
166
+ const next = held.parked.pop();
167
+ if (next === undefined)
168
+ return;
169
+ if (!reportsClosed(next))
170
+ return next;
171
+ try {
172
+ next.release();
173
+ } catch {}
174
+ await flushClosed(held.sql);
175
+ }
176
+ return;
177
+ }
178
+ async function flushClosed(sql) {
179
+ for (let attempt = 0;attempt < 3; attempt += 1) {
180
+ try {
181
+ await sql.unsafe("select 1");
182
+ return true;
183
+ } catch {}
184
+ }
185
+ return false;
186
+ }
187
+ function bunClosed(message) {
188
+ return message === "Connection closed" || message === "connection must be a PostgresSQLConnection";
189
+ }
190
+ async function reset(session, sql) {
191
+ const run = (text) => sql.unsafe(text);
192
+ await resetSession2(session.depth(), run);
193
+ }
194
+ function streamRows(checkout, text, params) {
195
+ return async function* () {
196
+ const connection = await checkout();
197
+ try {
198
+ yield* cursorStream((statement, values) => connection.execute(statement, values), text, params);
199
+ } catch (error) {
200
+ connection.evict?.();
201
+ throw error;
202
+ } finally {
203
+ await connection.release();
204
+ }
205
+ }();
206
+ }
207
+ export {
208
+ checkout,
209
+ drainClosed,
210
+ listen,
211
+ recover,
212
+ streamRows
213
+ };
@@ -0,0 +1,8 @@
1
+ import {
2
+ build2,
3
+ identityColumn2
4
+ } from "./g5yc06ka.js";
5
+ export {
6
+ build2 as build,
7
+ identityColumn2 as identityColumn
8
+ };