drizzle-orm 1.0.0-beta.21 → 1.0.0-beta.21-af6b4cb

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 (1631) hide show
  1. package/_relations.cjs.map +1 -1
  2. package/_relations.d.cts +2 -13
  3. package/_relations.d.ts +2 -13
  4. package/_relations.js.map +1 -1
  5. package/alias.cjs +1 -1
  6. package/alias.js +1 -1
  7. package/aws-data-api/common/index.cjs +2 -0
  8. package/aws-data-api/common/index.cjs.map +1 -1
  9. package/aws-data-api/common/index.d.cts +1 -1
  10. package/aws-data-api/common/index.d.ts +1 -1
  11. package/aws-data-api/common/index.js +2 -0
  12. package/aws-data-api/common/index.js.map +1 -1
  13. package/aws-data-api/pg/driver.cjs +93 -20
  14. package/aws-data-api/pg/driver.cjs.map +1 -1
  15. package/aws-data-api/pg/driver.d.cts +17 -13
  16. package/aws-data-api/pg/driver.d.ts +17 -13
  17. package/aws-data-api/pg/driver.js +93 -20
  18. package/aws-data-api/pg/driver.js.map +1 -1
  19. package/aws-data-api/pg/index.cjs +1 -1
  20. package/aws-data-api/pg/index.d.cts +3 -3
  21. package/aws-data-api/pg/index.d.ts +3 -3
  22. package/aws-data-api/pg/index.js +3 -3
  23. package/aws-data-api/pg/migrator.cjs.map +1 -1
  24. package/aws-data-api/pg/migrator.d.cts +1 -1
  25. package/aws-data-api/pg/migrator.d.ts +1 -1
  26. package/aws-data-api/pg/migrator.js.map +1 -1
  27. package/aws-data-api/pg/session.cjs +44 -113
  28. package/aws-data-api/pg/session.cjs.map +1 -1
  29. package/aws-data-api/pg/session.d.cts +12 -42
  30. package/aws-data-api/pg/session.d.ts +13 -43
  31. package/aws-data-api/pg/session.js +46 -114
  32. package/aws-data-api/pg/session.js.map +1 -1
  33. package/better-sqlite3/driver.cjs +5 -2
  34. package/better-sqlite3/driver.cjs.map +1 -1
  35. package/better-sqlite3/driver.d.ts +1 -1
  36. package/better-sqlite3/driver.js +5 -2
  37. package/better-sqlite3/driver.js.map +1 -1
  38. package/better-sqlite3/session.cjs +16 -15
  39. package/better-sqlite3/session.cjs.map +1 -1
  40. package/better-sqlite3/session.d.cts +10 -6
  41. package/better-sqlite3/session.d.ts +11 -7
  42. package/better-sqlite3/session.js +17 -16
  43. package/better-sqlite3/session.js.map +1 -1
  44. package/bun-sql/driver.cjs.map +1 -1
  45. package/bun-sql/driver.d.cts +7 -6
  46. package/bun-sql/driver.d.ts +7 -6
  47. package/bun-sql/driver.js.map +1 -1
  48. package/bun-sql/index.cjs +0 -1
  49. package/bun-sql/index.d.cts +2 -2
  50. package/bun-sql/index.d.ts +2 -2
  51. package/bun-sql/index.js +2 -2
  52. package/bun-sql/migrator.cjs.map +1 -1
  53. package/bun-sql/migrator.d.cts +2 -2
  54. package/bun-sql/migrator.d.ts +2 -2
  55. package/bun-sql/migrator.js.map +1 -1
  56. package/bun-sql/mysql/driver.cjs +4 -3
  57. package/bun-sql/mysql/driver.cjs.map +1 -1
  58. package/bun-sql/mysql/driver.js +3 -2
  59. package/bun-sql/mysql/driver.js.map +1 -1
  60. package/bun-sql/mysql/session.cjs +37 -24
  61. package/bun-sql/mysql/session.cjs.map +1 -1
  62. package/bun-sql/mysql/session.d.cts +10 -4
  63. package/bun-sql/mysql/session.d.ts +12 -6
  64. package/bun-sql/mysql/session.js +38 -25
  65. package/bun-sql/mysql/session.js.map +1 -1
  66. package/bun-sql/postgres/driver.cjs +144 -20
  67. package/bun-sql/postgres/driver.cjs.map +1 -1
  68. package/bun-sql/postgres/driver.d.cts +10 -6
  69. package/bun-sql/postgres/driver.d.ts +11 -7
  70. package/bun-sql/postgres/driver.js +144 -20
  71. package/bun-sql/postgres/driver.js.map +1 -1
  72. package/bun-sql/postgres/index.cjs +1 -1
  73. package/bun-sql/postgres/index.d.cts +3 -3
  74. package/bun-sql/postgres/index.d.ts +3 -3
  75. package/bun-sql/postgres/index.js +3 -3
  76. package/bun-sql/postgres/migrator.cjs.map +1 -1
  77. package/bun-sql/postgres/migrator.d.cts +1 -1
  78. package/bun-sql/postgres/migrator.d.ts +1 -1
  79. package/bun-sql/postgres/migrator.js.map +1 -1
  80. package/bun-sql/postgres/session.cjs +17 -112
  81. package/bun-sql/postgres/session.cjs.map +1 -1
  82. package/bun-sql/postgres/session.d.cts +11 -33
  83. package/bun-sql/postgres/session.d.ts +12 -34
  84. package/bun-sql/postgres/session.js +18 -112
  85. package/bun-sql/postgres/session.js.map +1 -1
  86. package/bun-sql/session.cjs +0 -1
  87. package/bun-sql/session.d.cts +2 -2
  88. package/bun-sql/session.d.ts +2 -2
  89. package/bun-sql/session.js +2 -2
  90. package/bun-sql/sqlite/driver.cjs +4 -3
  91. package/bun-sql/sqlite/driver.cjs.map +1 -1
  92. package/bun-sql/sqlite/driver.d.ts +1 -1
  93. package/bun-sql/sqlite/driver.js +3 -2
  94. package/bun-sql/sqlite/driver.js.map +1 -1
  95. package/bun-sql/sqlite/session.cjs +18 -17
  96. package/bun-sql/sqlite/session.cjs.map +1 -1
  97. package/bun-sql/sqlite/session.d.cts +9 -6
  98. package/bun-sql/sqlite/session.d.ts +10 -7
  99. package/bun-sql/sqlite/session.js +19 -18
  100. package/bun-sql/sqlite/session.js.map +1 -1
  101. package/bun-sqlite/driver.cjs +5 -2
  102. package/bun-sqlite/driver.cjs.map +1 -1
  103. package/bun-sqlite/driver.d.ts +1 -1
  104. package/bun-sqlite/driver.js +5 -2
  105. package/bun-sqlite/driver.js.map +1 -1
  106. package/bun-sqlite/session.cjs +15 -14
  107. package/bun-sqlite/session.cjs.map +1 -1
  108. package/bun-sqlite/session.d.cts +10 -6
  109. package/bun-sqlite/session.d.ts +10 -6
  110. package/bun-sqlite/session.js +16 -15
  111. package/bun-sqlite/session.js.map +1 -1
  112. package/cache/core/cache-effect.cjs +2 -2
  113. package/cache/core/cache-effect.d.ts +1 -1
  114. package/cache/core/cache-effect.js +1 -1
  115. package/cockroach/driver.cjs +10 -4
  116. package/cockroach/driver.cjs.map +1 -1
  117. package/cockroach/driver.d.cts +1 -0
  118. package/cockroach/driver.d.ts +3 -2
  119. package/cockroach/driver.js +10 -4
  120. package/cockroach/driver.js.map +1 -1
  121. package/cockroach/session.cjs +7 -9
  122. package/cockroach/session.cjs.map +1 -1
  123. package/cockroach/session.d.cts +5 -3
  124. package/cockroach/session.d.ts +7 -5
  125. package/cockroach/session.js +8 -10
  126. package/cockroach/session.js.map +1 -1
  127. package/cockroach-core/columns/bigint.cjs +4 -4
  128. package/cockroach-core/columns/bigint.cjs.map +1 -1
  129. package/cockroach-core/columns/bigint.d.cts +2 -2
  130. package/cockroach-core/columns/bigint.d.ts +2 -2
  131. package/cockroach-core/columns/bigint.js +4 -4
  132. package/cockroach-core/columns/bigint.js.map +1 -1
  133. package/cockroach-core/columns/common.cjs +5 -5
  134. package/cockroach-core/columns/common.cjs.map +1 -1
  135. package/cockroach-core/columns/common.d.cts +2 -2
  136. package/cockroach-core/columns/common.d.ts +3 -3
  137. package/cockroach-core/columns/common.js +5 -5
  138. package/cockroach-core/columns/common.js.map +1 -1
  139. package/cockroach-core/columns/custom.cjs +4 -4
  140. package/cockroach-core/columns/custom.cjs.map +1 -1
  141. package/cockroach-core/columns/custom.d.cts +2 -2
  142. package/cockroach-core/columns/custom.d.ts +2 -2
  143. package/cockroach-core/columns/custom.js +4 -4
  144. package/cockroach-core/columns/custom.js.map +1 -1
  145. package/cockroach-core/columns/date.cjs +6 -6
  146. package/cockroach-core/columns/date.cjs.map +1 -1
  147. package/cockroach-core/columns/date.d.cts +3 -3
  148. package/cockroach-core/columns/date.d.ts +3 -3
  149. package/cockroach-core/columns/date.js +6 -6
  150. package/cockroach-core/columns/date.js.map +1 -1
  151. package/cockroach-core/columns/decimal.cjs +4 -4
  152. package/cockroach-core/columns/decimal.cjs.map +1 -1
  153. package/cockroach-core/columns/decimal.d.cts +2 -2
  154. package/cockroach-core/columns/decimal.d.ts +2 -2
  155. package/cockroach-core/columns/decimal.js +4 -4
  156. package/cockroach-core/columns/decimal.js.map +1 -1
  157. package/cockroach-core/columns/float.cjs +2 -2
  158. package/cockroach-core/columns/float.cjs.map +1 -1
  159. package/cockroach-core/columns/float.d.cts +1 -1
  160. package/cockroach-core/columns/float.d.ts +1 -1
  161. package/cockroach-core/columns/float.js +2 -2
  162. package/cockroach-core/columns/float.js.map +1 -1
  163. package/cockroach-core/columns/geometry.cjs +8 -8
  164. package/cockroach-core/columns/geometry.cjs.map +1 -1
  165. package/cockroach-core/columns/geometry.d.cts +5 -5
  166. package/cockroach-core/columns/geometry.d.ts +5 -5
  167. package/cockroach-core/columns/geometry.js +8 -8
  168. package/cockroach-core/columns/geometry.js.map +1 -1
  169. package/cockroach-core/columns/integer.cjs +2 -2
  170. package/cockroach-core/columns/integer.cjs.map +1 -1
  171. package/cockroach-core/columns/integer.d.cts +1 -1
  172. package/cockroach-core/columns/integer.d.ts +1 -1
  173. package/cockroach-core/columns/integer.js +2 -2
  174. package/cockroach-core/columns/integer.js.map +1 -1
  175. package/cockroach-core/columns/jsonb.cjs +4 -4
  176. package/cockroach-core/columns/jsonb.cjs.map +1 -1
  177. package/cockroach-core/columns/jsonb.d.cts +2 -2
  178. package/cockroach-core/columns/jsonb.d.ts +2 -2
  179. package/cockroach-core/columns/jsonb.js +4 -4
  180. package/cockroach-core/columns/jsonb.js.map +1 -1
  181. package/cockroach-core/columns/vector.cjs +4 -4
  182. package/cockroach-core/columns/vector.cjs.map +1 -1
  183. package/cockroach-core/columns/vector.d.cts +2 -2
  184. package/cockroach-core/columns/vector.d.ts +2 -2
  185. package/cockroach-core/columns/vector.js +4 -4
  186. package/cockroach-core/columns/vector.js.map +1 -1
  187. package/cockroach-core/db.cjs +1 -1
  188. package/cockroach-core/db.cjs.map +1 -1
  189. package/cockroach-core/db.d.ts +2 -2
  190. package/cockroach-core/db.js +1 -1
  191. package/cockroach-core/db.js.map +1 -1
  192. package/cockroach-core/dialect.cjs +2 -2
  193. package/cockroach-core/dialect.d.ts +2 -2
  194. package/cockroach-core/dialect.js +2 -2
  195. package/cockroach-core/index.cjs +14 -14
  196. package/cockroach-core/index.js +14 -14
  197. package/cockroach-core/query-builders/delete.cjs +1 -1
  198. package/cockroach-core/query-builders/delete.cjs.map +1 -1
  199. package/cockroach-core/query-builders/delete.d.cts +1 -1
  200. package/cockroach-core/query-builders/delete.d.ts +2 -2
  201. package/cockroach-core/query-builders/delete.js +1 -1
  202. package/cockroach-core/query-builders/delete.js.map +1 -1
  203. package/cockroach-core/query-builders/index.cjs +2 -2
  204. package/cockroach-core/query-builders/index.js +2 -2
  205. package/cockroach-core/query-builders/insert.cjs +1 -1
  206. package/cockroach-core/query-builders/insert.cjs.map +1 -1
  207. package/cockroach-core/query-builders/insert.d.ts +1 -1
  208. package/cockroach-core/query-builders/insert.js +1 -1
  209. package/cockroach-core/query-builders/insert.js.map +1 -1
  210. package/cockroach-core/query-builders/query.cjs +1 -1
  211. package/cockroach-core/query-builders/query.cjs.map +1 -1
  212. package/cockroach-core/query-builders/query.js +1 -1
  213. package/cockroach-core/query-builders/query.js.map +1 -1
  214. package/cockroach-core/query-builders/raw.cjs +0 -4
  215. package/cockroach-core/query-builders/raw.cjs.map +1 -1
  216. package/cockroach-core/query-builders/raw.js +0 -4
  217. package/cockroach-core/query-builders/raw.js.map +1 -1
  218. package/cockroach-core/query-builders/refresh-materialized-view.cjs +1 -1
  219. package/cockroach-core/query-builders/refresh-materialized-view.cjs.map +1 -1
  220. package/cockroach-core/query-builders/refresh-materialized-view.js +1 -1
  221. package/cockroach-core/query-builders/refresh-materialized-view.js.map +1 -1
  222. package/cockroach-core/query-builders/select.cjs +2 -2
  223. package/cockroach-core/query-builders/select.cjs.map +1 -1
  224. package/cockroach-core/query-builders/select.d.ts +3 -3
  225. package/cockroach-core/query-builders/select.js +2 -2
  226. package/cockroach-core/query-builders/select.js.map +1 -1
  227. package/cockroach-core/query-builders/select.types.d.ts +1 -1
  228. package/cockroach-core/query-builders/update.cjs +2 -2
  229. package/cockroach-core/query-builders/update.cjs.map +1 -1
  230. package/cockroach-core/query-builders/update.d.ts +1 -1
  231. package/cockroach-core/query-builders/update.js +2 -2
  232. package/cockroach-core/query-builders/update.js.map +1 -1
  233. package/cockroach-core/schema.cjs +1 -1
  234. package/cockroach-core/schema.js +1 -1
  235. package/cockroach-core/session.cjs +2 -2
  236. package/cockroach-core/session.cjs.map +1 -1
  237. package/cockroach-core/session.d.cts +1 -1
  238. package/cockroach-core/session.d.ts +1 -1
  239. package/cockroach-core/session.js +2 -2
  240. package/cockroach-core/session.js.map +1 -1
  241. package/cockroach-core/table.cjs +1 -1
  242. package/cockroach-core/table.cjs.map +1 -1
  243. package/cockroach-core/table.js +1 -1
  244. package/cockroach-core/table.js.map +1 -1
  245. package/cockroach-core/utils.cjs +3 -3
  246. package/cockroach-core/utils.js +3 -3
  247. package/cockroach-core/view.cjs +1 -1
  248. package/cockroach-core/view.js +1 -1
  249. package/codecs.cjs +77 -0
  250. package/codecs.cjs.map +1 -0
  251. package/codecs.d.cts +68 -0
  252. package/codecs.d.ts +68 -0
  253. package/codecs.js +74 -0
  254. package/codecs.js.map +1 -0
  255. package/column.cjs +10 -5
  256. package/column.cjs.map +1 -1
  257. package/column.d.cts +3 -3
  258. package/column.d.ts +3 -3
  259. package/column.js +10 -5
  260. package/column.js.map +1 -1
  261. package/d1/driver.cjs +3 -2
  262. package/d1/driver.cjs.map +1 -1
  263. package/d1/driver.d.ts +1 -1
  264. package/d1/driver.js +3 -2
  265. package/d1/driver.js.map +1 -1
  266. package/d1/session.cjs +17 -15
  267. package/d1/session.cjs.map +1 -1
  268. package/d1/session.d.cts +9 -6
  269. package/d1/session.d.ts +10 -7
  270. package/d1/session.js +18 -16
  271. package/d1/session.js.map +1 -1
  272. package/durable-sqlite/driver.cjs +5 -2
  273. package/durable-sqlite/driver.cjs.map +1 -1
  274. package/durable-sqlite/driver.d.ts +1 -1
  275. package/durable-sqlite/driver.js +5 -2
  276. package/durable-sqlite/driver.js.map +1 -1
  277. package/durable-sqlite/migrator.cjs +1 -1
  278. package/durable-sqlite/migrator.js +1 -1
  279. package/durable-sqlite/session.cjs +15 -14
  280. package/durable-sqlite/session.cjs.map +1 -1
  281. package/durable-sqlite/session.d.cts +10 -6
  282. package/durable-sqlite/session.d.ts +10 -6
  283. package/durable-sqlite/session.js +16 -15
  284. package/durable-sqlite/session.js.map +1 -1
  285. package/effect-core/index.cjs +1 -1
  286. package/effect-core/index.js +1 -1
  287. package/effect-postgres/driver.cjs +100 -14
  288. package/effect-postgres/driver.cjs.map +1 -1
  289. package/effect-postgres/driver.d.cts +12 -8
  290. package/effect-postgres/driver.d.ts +14 -10
  291. package/effect-postgres/driver.js +100 -14
  292. package/effect-postgres/driver.js.map +1 -1
  293. package/effect-postgres/index.cjs +1 -1
  294. package/effect-postgres/index.d.cts +3 -3
  295. package/effect-postgres/index.d.ts +3 -3
  296. package/effect-postgres/index.js +3 -3
  297. package/effect-postgres/migrator.cjs.map +1 -1
  298. package/effect-postgres/migrator.d.cts +1 -1
  299. package/effect-postgres/migrator.d.ts +2 -2
  300. package/effect-postgres/migrator.js.map +1 -1
  301. package/effect-postgres/session.cjs +12 -71
  302. package/effect-postgres/session.cjs.map +1 -1
  303. package/effect-postgres/session.d.cts +14 -31
  304. package/effect-postgres/session.d.ts +17 -34
  305. package/effect-postgres/session.js +13 -71
  306. package/effect-postgres/session.js.map +1 -1
  307. package/effect-schema/column.cjs +1 -1
  308. package/effect-schema/column.d.ts +8 -8
  309. package/effect-schema/column.js +1 -1
  310. package/effect-schema/column.types.d.ts +14 -14
  311. package/effect-schema/schema.types.internal.d.ts +7 -7
  312. package/expo-sqlite/driver.cjs +5 -2
  313. package/expo-sqlite/driver.cjs.map +1 -1
  314. package/expo-sqlite/driver.d.ts +1 -1
  315. package/expo-sqlite/driver.js +5 -2
  316. package/expo-sqlite/driver.js.map +1 -1
  317. package/expo-sqlite/session.cjs +15 -14
  318. package/expo-sqlite/session.cjs.map +1 -1
  319. package/expo-sqlite/session.d.cts +10 -6
  320. package/expo-sqlite/session.d.ts +10 -6
  321. package/expo-sqlite/session.js +16 -15
  322. package/expo-sqlite/session.js.map +1 -1
  323. package/gel/driver.cjs +5 -3
  324. package/gel/driver.cjs.map +1 -1
  325. package/gel/driver.d.cts +1 -0
  326. package/gel/driver.d.ts +5 -4
  327. package/gel/driver.js +5 -3
  328. package/gel/driver.js.map +1 -1
  329. package/gel/session.cjs +13 -13
  330. package/gel/session.cjs.map +1 -1
  331. package/gel/session.d.cts +8 -5
  332. package/gel/session.d.ts +12 -9
  333. package/gel/session.js +14 -14
  334. package/gel/session.js.map +1 -1
  335. package/gel-core/columns/bigintT.cjs +2 -2
  336. package/gel-core/columns/bigintT.cjs.map +1 -1
  337. package/gel-core/columns/bigintT.d.cts +1 -1
  338. package/gel-core/columns/bigintT.d.ts +1 -1
  339. package/gel-core/columns/bigintT.js +2 -2
  340. package/gel-core/columns/bigintT.js.map +1 -1
  341. package/gel-core/columns/common.cjs +3 -3
  342. package/gel-core/columns/common.cjs.map +1 -1
  343. package/gel-core/columns/common.d.cts +1 -1
  344. package/gel-core/columns/common.d.ts +1 -1
  345. package/gel-core/columns/common.js +3 -3
  346. package/gel-core/columns/common.js.map +1 -1
  347. package/gel-core/columns/custom.cjs +4 -4
  348. package/gel-core/columns/custom.cjs.map +1 -1
  349. package/gel-core/columns/custom.d.cts +2 -2
  350. package/gel-core/columns/custom.d.ts +2 -2
  351. package/gel-core/columns/custom.js +4 -4
  352. package/gel-core/columns/custom.js.map +1 -1
  353. package/gel-core/columns/double-precision.cjs +2 -2
  354. package/gel-core/columns/double-precision.cjs.map +1 -1
  355. package/gel-core/columns/double-precision.d.cts +1 -1
  356. package/gel-core/columns/double-precision.d.ts +1 -1
  357. package/gel-core/columns/double-precision.js +2 -2
  358. package/gel-core/columns/double-precision.js.map +1 -1
  359. package/gel-core/columns/timestamp.d.ts +1 -1
  360. package/gel-core/columns/timestamptz.cjs +2 -2
  361. package/gel-core/columns/timestamptz.cjs.map +1 -1
  362. package/gel-core/columns/timestamptz.d.cts +1 -1
  363. package/gel-core/columns/timestamptz.d.ts +1 -1
  364. package/gel-core/columns/timestamptz.js +2 -2
  365. package/gel-core/columns/timestamptz.js.map +1 -1
  366. package/gel-core/db.cjs +1 -1
  367. package/gel-core/db.cjs.map +1 -1
  368. package/gel-core/db.d.ts +3 -3
  369. package/gel-core/db.js +1 -1
  370. package/gel-core/db.js.map +1 -1
  371. package/gel-core/index.cjs +13 -13
  372. package/gel-core/index.js +13 -13
  373. package/gel-core/query-builders/_query.cjs +1 -1
  374. package/gel-core/query-builders/_query.cjs.map +1 -1
  375. package/gel-core/query-builders/_query.js +1 -1
  376. package/gel-core/query-builders/_query.js.map +1 -1
  377. package/gel-core/query-builders/delete.cjs +1 -1
  378. package/gel-core/query-builders/delete.cjs.map +1 -1
  379. package/gel-core/query-builders/delete.d.ts +2 -2
  380. package/gel-core/query-builders/delete.js +1 -1
  381. package/gel-core/query-builders/delete.js.map +1 -1
  382. package/gel-core/query-builders/index.cjs +1 -1
  383. package/gel-core/query-builders/index.js +1 -1
  384. package/gel-core/query-builders/insert.cjs +1 -1
  385. package/gel-core/query-builders/insert.cjs.map +1 -1
  386. package/gel-core/query-builders/insert.d.ts +2 -2
  387. package/gel-core/query-builders/insert.js +1 -1
  388. package/gel-core/query-builders/insert.js.map +1 -1
  389. package/gel-core/query-builders/query.cjs +13 -5
  390. package/gel-core/query-builders/query.cjs.map +1 -1
  391. package/gel-core/query-builders/query.d.ts +1 -1
  392. package/gel-core/query-builders/query.js +13 -5
  393. package/gel-core/query-builders/query.js.map +1 -1
  394. package/gel-core/query-builders/raw.cjs +0 -4
  395. package/gel-core/query-builders/raw.cjs.map +1 -1
  396. package/gel-core/query-builders/raw.js +0 -4
  397. package/gel-core/query-builders/raw.js.map +1 -1
  398. package/gel-core/query-builders/refresh-materialized-view.cjs +1 -1
  399. package/gel-core/query-builders/refresh-materialized-view.cjs.map +1 -1
  400. package/gel-core/query-builders/refresh-materialized-view.d.ts +1 -1
  401. package/gel-core/query-builders/refresh-materialized-view.js +1 -1
  402. package/gel-core/query-builders/refresh-materialized-view.js.map +1 -1
  403. package/gel-core/query-builders/select.cjs +1 -1
  404. package/gel-core/query-builders/select.cjs.map +1 -1
  405. package/gel-core/query-builders/select.d.ts +3 -3
  406. package/gel-core/query-builders/select.js +1 -1
  407. package/gel-core/query-builders/select.js.map +1 -1
  408. package/gel-core/query-builders/select.types.d.ts +1 -1
  409. package/gel-core/query-builders/update.cjs +1 -1
  410. package/gel-core/query-builders/update.cjs.map +1 -1
  411. package/gel-core/query-builders/update.d.ts +2 -2
  412. package/gel-core/query-builders/update.js +1 -1
  413. package/gel-core/query-builders/update.js.map +1 -1
  414. package/gel-core/session.cjs +2 -2
  415. package/gel-core/session.cjs.map +1 -1
  416. package/gel-core/session.d.cts +3 -3
  417. package/gel-core/session.d.ts +3 -3
  418. package/gel-core/session.js +2 -2
  419. package/gel-core/session.js.map +1 -1
  420. package/gel-core/table.cjs +1 -1
  421. package/gel-core/table.cjs.map +1 -1
  422. package/gel-core/table.js +1 -1
  423. package/gel-core/table.js.map +1 -1
  424. package/gel-core/utils.cjs +4 -4
  425. package/gel-core/utils.js +4 -4
  426. package/gel-core/view.cjs +1 -1
  427. package/gel-core/view.js +1 -1
  428. package/index.cjs +12 -6
  429. package/index.d.cts +6 -6
  430. package/index.d.ts +6 -6
  431. package/index.js +9 -9
  432. package/libsql/driver-core.cjs +3 -2
  433. package/libsql/driver-core.cjs.map +1 -1
  434. package/libsql/driver-core.d.ts +1 -1
  435. package/libsql/driver-core.js +3 -2
  436. package/libsql/driver-core.js.map +1 -1
  437. package/libsql/session.cjs +14 -15
  438. package/libsql/session.cjs.map +1 -1
  439. package/libsql/session.d.cts +9 -6
  440. package/libsql/session.d.ts +10 -7
  441. package/libsql/session.js +15 -16
  442. package/libsql/session.js.map +1 -1
  443. package/mssql-core/columns/bigint.cjs +2 -2
  444. package/mssql-core/columns/bigint.cjs.map +1 -1
  445. package/mssql-core/columns/bigint.d.cts +1 -1
  446. package/mssql-core/columns/bigint.d.ts +1 -1
  447. package/mssql-core/columns/bigint.js +2 -2
  448. package/mssql-core/columns/bigint.js.map +1 -1
  449. package/mssql-core/columns/custom.cjs +4 -4
  450. package/mssql-core/columns/custom.cjs.map +1 -1
  451. package/mssql-core/columns/custom.d.cts +2 -2
  452. package/mssql-core/columns/custom.d.ts +2 -2
  453. package/mssql-core/columns/custom.js +4 -4
  454. package/mssql-core/columns/custom.js.map +1 -1
  455. package/mssql-core/columns/date.cjs +4 -4
  456. package/mssql-core/columns/date.cjs.map +1 -1
  457. package/mssql-core/columns/date.d.cts +2 -2
  458. package/mssql-core/columns/date.d.ts +2 -2
  459. package/mssql-core/columns/date.js +4 -4
  460. package/mssql-core/columns/date.js.map +1 -1
  461. package/mssql-core/columns/datetime.cjs +2 -2
  462. package/mssql-core/columns/datetime.cjs.map +1 -1
  463. package/mssql-core/columns/datetime.d.cts +1 -1
  464. package/mssql-core/columns/datetime.d.ts +1 -1
  465. package/mssql-core/columns/datetime.js +2 -2
  466. package/mssql-core/columns/datetime.js.map +1 -1
  467. package/mssql-core/columns/datetime2.cjs +2 -2
  468. package/mssql-core/columns/datetime2.cjs.map +1 -1
  469. package/mssql-core/columns/datetime2.d.cts +1 -1
  470. package/mssql-core/columns/datetime2.d.ts +1 -1
  471. package/mssql-core/columns/datetime2.js +2 -2
  472. package/mssql-core/columns/datetime2.js.map +1 -1
  473. package/mssql-core/columns/datetimeoffset.cjs +2 -2
  474. package/mssql-core/columns/datetimeoffset.cjs.map +1 -1
  475. package/mssql-core/columns/datetimeoffset.d.cts +1 -1
  476. package/mssql-core/columns/datetimeoffset.d.ts +1 -1
  477. package/mssql-core/columns/datetimeoffset.js +2 -2
  478. package/mssql-core/columns/datetimeoffset.js.map +1 -1
  479. package/mssql-core/columns/decimal.cjs +4 -4
  480. package/mssql-core/columns/decimal.cjs.map +1 -1
  481. package/mssql-core/columns/decimal.d.cts +2 -2
  482. package/mssql-core/columns/decimal.d.ts +2 -2
  483. package/mssql-core/columns/decimal.js +4 -4
  484. package/mssql-core/columns/decimal.js.map +1 -1
  485. package/mssql-core/columns/numeric.cjs +4 -4
  486. package/mssql-core/columns/numeric.cjs.map +1 -1
  487. package/mssql-core/columns/numeric.d.cts +2 -2
  488. package/mssql-core/columns/numeric.d.ts +2 -2
  489. package/mssql-core/columns/numeric.js +4 -4
  490. package/mssql-core/columns/numeric.js.map +1 -1
  491. package/mssql-core/columns/smallint.cjs +2 -2
  492. package/mssql-core/columns/smallint.cjs.map +1 -1
  493. package/mssql-core/columns/smallint.d.cts +1 -1
  494. package/mssql-core/columns/smallint.d.ts +1 -1
  495. package/mssql-core/columns/smallint.js +2 -2
  496. package/mssql-core/columns/smallint.js.map +1 -1
  497. package/mssql-core/columns/time.cjs +2 -2
  498. package/mssql-core/columns/time.cjs.map +1 -1
  499. package/mssql-core/columns/time.d.cts +1 -1
  500. package/mssql-core/columns/time.d.ts +1 -1
  501. package/mssql-core/columns/time.js +2 -2
  502. package/mssql-core/columns/time.js.map +1 -1
  503. package/mssql-core/columns/tinyint.cjs +2 -2
  504. package/mssql-core/columns/tinyint.cjs.map +1 -1
  505. package/mssql-core/columns/tinyint.d.cts +1 -1
  506. package/mssql-core/columns/tinyint.d.ts +1 -1
  507. package/mssql-core/columns/tinyint.js +2 -2
  508. package/mssql-core/columns/tinyint.js.map +1 -1
  509. package/mssql-core/columns/varchar.cjs +4 -4
  510. package/mssql-core/columns/varchar.cjs.map +1 -1
  511. package/mssql-core/columns/varchar.d.cts +2 -2
  512. package/mssql-core/columns/varchar.d.ts +2 -2
  513. package/mssql-core/columns/varchar.js +4 -4
  514. package/mssql-core/columns/varchar.js.map +1 -1
  515. package/mssql-core/dialect.cjs +2 -2
  516. package/mssql-core/dialect.d.ts +1 -1
  517. package/mssql-core/dialect.js +2 -2
  518. package/mssql-core/index.cjs +13 -13
  519. package/mssql-core/index.js +13 -13
  520. package/mssql-core/query-builders/delete.d.ts +1 -1
  521. package/mssql-core/query-builders/insert.d.ts +1 -1
  522. package/mssql-core/query-builders/select.d.ts +1 -1
  523. package/mssql-core/query-builders/update.d.ts +2 -2
  524. package/mssql-core/table.cjs +1 -1
  525. package/mssql-core/table.cjs.map +1 -1
  526. package/mssql-core/table.js +1 -1
  527. package/mssql-core/table.js.map +1 -1
  528. package/mssql-core/utils.cjs +3 -3
  529. package/mssql-core/utils.js +3 -3
  530. package/mssql-core/view.cjs +2 -2
  531. package/mssql-core/view.js +2 -2
  532. package/mysql-core/columns/bigint.cjs +8 -8
  533. package/mysql-core/columns/bigint.cjs.map +1 -1
  534. package/mysql-core/columns/bigint.d.cts +4 -4
  535. package/mysql-core/columns/bigint.d.ts +4 -4
  536. package/mysql-core/columns/bigint.js +8 -8
  537. package/mysql-core/columns/bigint.js.map +1 -1
  538. package/mysql-core/columns/binary.cjs +2 -2
  539. package/mysql-core/columns/binary.cjs.map +1 -1
  540. package/mysql-core/columns/binary.d.cts +1 -1
  541. package/mysql-core/columns/binary.d.ts +1 -1
  542. package/mysql-core/columns/binary.js +2 -2
  543. package/mysql-core/columns/binary.js.map +1 -1
  544. package/mysql-core/columns/blob.cjs +4 -4
  545. package/mysql-core/columns/blob.cjs.map +1 -1
  546. package/mysql-core/columns/blob.d.cts +2 -2
  547. package/mysql-core/columns/blob.d.ts +2 -2
  548. package/mysql-core/columns/blob.js +4 -4
  549. package/mysql-core/columns/blob.js.map +1 -1
  550. package/mysql-core/columns/boolean.cjs +2 -2
  551. package/mysql-core/columns/boolean.cjs.map +1 -1
  552. package/mysql-core/columns/boolean.d.cts +1 -1
  553. package/mysql-core/columns/boolean.d.ts +1 -1
  554. package/mysql-core/columns/boolean.js +2 -2
  555. package/mysql-core/columns/boolean.js.map +1 -1
  556. package/mysql-core/columns/custom.cjs +4 -4
  557. package/mysql-core/columns/custom.cjs.map +1 -1
  558. package/mysql-core/columns/custom.d.cts +2 -2
  559. package/mysql-core/columns/custom.d.ts +2 -2
  560. package/mysql-core/columns/custom.js +4 -4
  561. package/mysql-core/columns/custom.js.map +1 -1
  562. package/mysql-core/columns/date.cjs +4 -4
  563. package/mysql-core/columns/date.cjs.map +1 -1
  564. package/mysql-core/columns/date.d.cts +2 -2
  565. package/mysql-core/columns/date.d.ts +2 -2
  566. package/mysql-core/columns/date.js +4 -4
  567. package/mysql-core/columns/date.js.map +1 -1
  568. package/mysql-core/columns/datetime.cjs +8 -8
  569. package/mysql-core/columns/datetime.cjs.map +1 -1
  570. package/mysql-core/columns/datetime.d.cts +4 -4
  571. package/mysql-core/columns/datetime.d.ts +4 -4
  572. package/mysql-core/columns/datetime.js +8 -8
  573. package/mysql-core/columns/datetime.js.map +1 -1
  574. package/mysql-core/columns/decimal.cjs +4 -4
  575. package/mysql-core/columns/decimal.cjs.map +1 -1
  576. package/mysql-core/columns/decimal.d.cts +2 -2
  577. package/mysql-core/columns/decimal.d.ts +2 -2
  578. package/mysql-core/columns/decimal.js +4 -4
  579. package/mysql-core/columns/decimal.js.map +1 -1
  580. package/mysql-core/columns/float.cjs +2 -2
  581. package/mysql-core/columns/float.cjs.map +1 -1
  582. package/mysql-core/columns/float.d.cts +1 -1
  583. package/mysql-core/columns/float.d.ts +1 -1
  584. package/mysql-core/columns/float.js +2 -2
  585. package/mysql-core/columns/float.js.map +1 -1
  586. package/mysql-core/columns/int.cjs +2 -2
  587. package/mysql-core/columns/int.cjs.map +1 -1
  588. package/mysql-core/columns/int.d.cts +1 -1
  589. package/mysql-core/columns/int.d.ts +1 -1
  590. package/mysql-core/columns/int.js +2 -2
  591. package/mysql-core/columns/int.js.map +1 -1
  592. package/mysql-core/columns/json.cjs +2 -2
  593. package/mysql-core/columns/json.cjs.map +1 -1
  594. package/mysql-core/columns/json.d.cts +1 -1
  595. package/mysql-core/columns/json.d.ts +1 -1
  596. package/mysql-core/columns/json.js +2 -2
  597. package/mysql-core/columns/json.js.map +1 -1
  598. package/mysql-core/columns/mediumint.cjs +2 -2
  599. package/mysql-core/columns/mediumint.cjs.map +1 -1
  600. package/mysql-core/columns/mediumint.d.cts +1 -1
  601. package/mysql-core/columns/mediumint.d.ts +1 -1
  602. package/mysql-core/columns/mediumint.js +2 -2
  603. package/mysql-core/columns/mediumint.js.map +1 -1
  604. package/mysql-core/columns/serial.cjs +2 -2
  605. package/mysql-core/columns/serial.cjs.map +1 -1
  606. package/mysql-core/columns/serial.d.cts +1 -1
  607. package/mysql-core/columns/serial.d.ts +1 -1
  608. package/mysql-core/columns/serial.js +2 -2
  609. package/mysql-core/columns/serial.js.map +1 -1
  610. package/mysql-core/columns/smallint.cjs +2 -2
  611. package/mysql-core/columns/smallint.cjs.map +1 -1
  612. package/mysql-core/columns/smallint.d.cts +1 -1
  613. package/mysql-core/columns/smallint.d.ts +1 -1
  614. package/mysql-core/columns/smallint.js +2 -2
  615. package/mysql-core/columns/smallint.js.map +1 -1
  616. package/mysql-core/columns/time.cjs +2 -2
  617. package/mysql-core/columns/time.cjs.map +1 -1
  618. package/mysql-core/columns/time.d.cts +1 -1
  619. package/mysql-core/columns/time.d.ts +1 -1
  620. package/mysql-core/columns/time.js +2 -2
  621. package/mysql-core/columns/time.js.map +1 -1
  622. package/mysql-core/columns/timestamp.cjs +8 -8
  623. package/mysql-core/columns/timestamp.cjs.map +1 -1
  624. package/mysql-core/columns/timestamp.d.cts +4 -4
  625. package/mysql-core/columns/timestamp.d.ts +4 -4
  626. package/mysql-core/columns/timestamp.js +8 -8
  627. package/mysql-core/columns/timestamp.js.map +1 -1
  628. package/mysql-core/columns/tinyint.cjs +2 -2
  629. package/mysql-core/columns/tinyint.cjs.map +1 -1
  630. package/mysql-core/columns/tinyint.d.cts +1 -1
  631. package/mysql-core/columns/tinyint.d.ts +1 -1
  632. package/mysql-core/columns/tinyint.js +2 -2
  633. package/mysql-core/columns/tinyint.js.map +1 -1
  634. package/mysql-core/columns/varbinary.cjs +2 -2
  635. package/mysql-core/columns/varbinary.cjs.map +1 -1
  636. package/mysql-core/columns/varbinary.d.cts +1 -1
  637. package/mysql-core/columns/varbinary.d.ts +1 -1
  638. package/mysql-core/columns/varbinary.js +2 -2
  639. package/mysql-core/columns/varbinary.js.map +1 -1
  640. package/mysql-core/columns/year.cjs +2 -2
  641. package/mysql-core/columns/year.cjs.map +1 -1
  642. package/mysql-core/columns/year.d.cts +1 -1
  643. package/mysql-core/columns/year.d.ts +1 -1
  644. package/mysql-core/columns/year.js +2 -2
  645. package/mysql-core/columns/year.js.map +1 -1
  646. package/mysql-core/db.d.ts +2 -2
  647. package/mysql-core/dialect.cjs +2 -2
  648. package/mysql-core/dialect.d.ts +1 -1
  649. package/mysql-core/dialect.js +2 -2
  650. package/mysql-core/index.cjs +1 -1
  651. package/mysql-core/index.js +1 -1
  652. package/mysql-core/query-builders/query.cjs +13 -5
  653. package/mysql-core/query-builders/query.cjs.map +1 -1
  654. package/mysql-core/query-builders/query.d.ts +1 -1
  655. package/mysql-core/query-builders/query.js +13 -5
  656. package/mysql-core/query-builders/query.js.map +1 -1
  657. package/mysql-core/session.cjs +1 -2
  658. package/mysql-core/session.cjs.map +1 -1
  659. package/mysql-core/session.d.cts +3 -4
  660. package/mysql-core/session.d.ts +3 -4
  661. package/mysql-core/session.js +1 -2
  662. package/mysql-core/session.js.map +1 -1
  663. package/mysql-core/table.cjs +1 -1
  664. package/mysql-core/table.cjs.map +1 -1
  665. package/mysql-core/table.js +1 -1
  666. package/mysql-core/table.js.map +1 -1
  667. package/mysql-proxy/driver.cjs +5 -2
  668. package/mysql-proxy/driver.cjs.map +1 -1
  669. package/mysql-proxy/driver.js +5 -2
  670. package/mysql-proxy/driver.js.map +1 -1
  671. package/mysql-proxy/session.cjs +26 -19
  672. package/mysql-proxy/session.cjs.map +1 -1
  673. package/mysql-proxy/session.d.cts +11 -4
  674. package/mysql-proxy/session.d.ts +13 -6
  675. package/mysql-proxy/session.js +27 -20
  676. package/mysql-proxy/session.js.map +1 -1
  677. package/mysql2/driver.cjs +3 -2
  678. package/mysql2/driver.cjs.map +1 -1
  679. package/mysql2/driver.d.cts +1 -0
  680. package/mysql2/driver.d.ts +4 -3
  681. package/mysql2/driver.js +3 -2
  682. package/mysql2/driver.js.map +1 -1
  683. package/mysql2/session.cjs +49 -39
  684. package/mysql2/session.cjs.map +1 -1
  685. package/mysql2/session.d.cts +11 -4
  686. package/mysql2/session.d.ts +13 -6
  687. package/mysql2/session.js +50 -40
  688. package/mysql2/session.js.map +1 -1
  689. package/neon-http/driver.cjs +34 -65
  690. package/neon-http/driver.cjs.map +1 -1
  691. package/neon-http/driver.d.cts +15 -19
  692. package/neon-http/driver.d.ts +16 -20
  693. package/neon-http/driver.js +34 -64
  694. package/neon-http/driver.js.map +1 -1
  695. package/neon-http/index.cjs +2 -4
  696. package/neon-http/index.d.cts +3 -3
  697. package/neon-http/index.d.ts +3 -3
  698. package/neon-http/index.js +3 -3
  699. package/neon-http/migrator.cjs +1 -1
  700. package/neon-http/migrator.cjs.map +1 -1
  701. package/neon-http/migrator.d.cts +1 -1
  702. package/neon-http/migrator.d.ts +1 -1
  703. package/neon-http/migrator.js +1 -1
  704. package/neon-http/migrator.js.map +1 -1
  705. package/neon-http/session.cjs +28 -117
  706. package/neon-http/session.cjs.map +1 -1
  707. package/neon-http/session.d.cts +10 -38
  708. package/neon-http/session.d.ts +12 -40
  709. package/neon-http/session.js +30 -117
  710. package/neon-http/session.js.map +1 -1
  711. package/neon-serverless/driver.cjs +14 -32
  712. package/neon-serverless/driver.cjs.map +1 -1
  713. package/neon-serverless/driver.d.cts +12 -17
  714. package/neon-serverless/driver.d.ts +13 -18
  715. package/neon-serverless/driver.js +14 -31
  716. package/neon-serverless/driver.js.map +1 -1
  717. package/neon-serverless/index.cjs +2 -3
  718. package/neon-serverless/index.d.cts +3 -3
  719. package/neon-serverless/index.d.ts +3 -3
  720. package/neon-serverless/index.js +3 -3
  721. package/neon-serverless/migrator.cjs.map +1 -1
  722. package/neon-serverless/migrator.d.cts +1 -1
  723. package/neon-serverless/migrator.d.ts +1 -1
  724. package/neon-serverless/migrator.js.map +1 -1
  725. package/neon-serverless/session.cjs +32 -108
  726. package/neon-serverless/session.cjs.map +1 -1
  727. package/neon-serverless/session.d.cts +9 -32
  728. package/neon-serverless/session.d.ts +10 -33
  729. package/neon-serverless/session.js +34 -109
  730. package/neon-serverless/session.js.map +1 -1
  731. package/netlify-db/driver.cjs +36 -43
  732. package/netlify-db/driver.cjs.map +1 -1
  733. package/netlify-db/driver.d.cts +29 -29
  734. package/netlify-db/driver.d.ts +31 -31
  735. package/netlify-db/driver.js +35 -42
  736. package/netlify-db/driver.js.map +1 -1
  737. package/netlify-db/index.cjs +3 -2
  738. package/netlify-db/index.d.cts +3 -3
  739. package/netlify-db/index.d.ts +3 -3
  740. package/netlify-db/index.js +2 -2
  741. package/netlify-db/migrator.cjs.map +1 -1
  742. package/netlify-db/migrator.d.cts +1 -1
  743. package/netlify-db/migrator.d.ts +1 -1
  744. package/netlify-db/migrator.js.map +1 -1
  745. package/netlify-db/session.cjs +61 -39
  746. package/netlify-db/session.cjs.map +1 -1
  747. package/netlify-db/session.d.cts +22 -23
  748. package/netlify-db/session.d.ts +24 -25
  749. package/netlify-db/session.js +63 -41
  750. package/netlify-db/session.js.map +1 -1
  751. package/node-mssql/driver.cjs +9 -3
  752. package/node-mssql/driver.cjs.map +1 -1
  753. package/node-mssql/driver.d.cts +1 -0
  754. package/node-mssql/driver.d.ts +3 -2
  755. package/node-mssql/driver.js +9 -3
  756. package/node-mssql/driver.js.map +1 -1
  757. package/node-mssql/session.cjs +6 -4
  758. package/node-mssql/session.cjs.map +1 -1
  759. package/node-mssql/session.d.cts +4 -1
  760. package/node-mssql/session.d.ts +6 -3
  761. package/node-mssql/session.js +7 -5
  762. package/node-mssql/session.js.map +1 -1
  763. package/node-postgres/driver.cjs +15 -18
  764. package/node-postgres/driver.cjs.map +1 -1
  765. package/node-postgres/driver.d.cts +11 -6
  766. package/node-postgres/driver.d.ts +12 -7
  767. package/node-postgres/driver.js +15 -18
  768. package/node-postgres/driver.js.map +1 -1
  769. package/node-postgres/index.cjs +2 -2
  770. package/node-postgres/index.d.cts +3 -3
  771. package/node-postgres/index.d.ts +3 -3
  772. package/node-postgres/index.js +3 -3
  773. package/node-postgres/migrator.cjs.map +1 -1
  774. package/node-postgres/migrator.d.cts +1 -1
  775. package/node-postgres/migrator.d.ts +1 -1
  776. package/node-postgres/migrator.js.map +1 -1
  777. package/node-postgres/session.cjs +33 -126
  778. package/node-postgres/session.cjs.map +1 -1
  779. package/node-postgres/session.d.cts +10 -30
  780. package/node-postgres/session.d.ts +11 -31
  781. package/node-postgres/session.js +35 -127
  782. package/node-postgres/session.js.map +1 -1
  783. package/node-sqlite/driver.cjs +1 -1
  784. package/node-sqlite/driver.d.ts +1 -1
  785. package/node-sqlite/driver.js +1 -1
  786. package/node-sqlite/session.cjs +4 -9
  787. package/node-sqlite/session.cjs.map +1 -1
  788. package/node-sqlite/session.d.cts +3 -4
  789. package/node-sqlite/session.d.ts +4 -5
  790. package/node-sqlite/session.js +4 -9
  791. package/node-sqlite/session.js.map +1 -1
  792. package/op-sqlite/driver.cjs +3 -2
  793. package/op-sqlite/driver.cjs.map +1 -1
  794. package/op-sqlite/driver.d.ts +1 -1
  795. package/op-sqlite/driver.js +3 -2
  796. package/op-sqlite/driver.js.map +1 -1
  797. package/op-sqlite/session.cjs +18 -16
  798. package/op-sqlite/session.cjs.map +1 -1
  799. package/op-sqlite/session.d.cts +10 -6
  800. package/op-sqlite/session.d.ts +11 -7
  801. package/op-sqlite/session.js +19 -17
  802. package/op-sqlite/session.js.map +1 -1
  803. package/operations.d.cts +3 -0
  804. package/operations.d.ts +3 -0
  805. package/package.json +4727 -4715
  806. package/pg-core/{utils/array.cjs → array.cjs} +1 -1
  807. package/pg-core/array.cjs.map +1 -0
  808. package/pg-core/{utils/array.d.cts → array.d.cts} +1 -1
  809. package/pg-core/{utils/array.d.ts → array.d.ts} +1 -1
  810. package/pg-core/{utils/array.js → array.js} +1 -1
  811. package/pg-core/array.js.map +1 -0
  812. package/pg-core/async/count.cjs +2 -9
  813. package/pg-core/async/count.cjs.map +1 -1
  814. package/pg-core/async/count.js +2 -9
  815. package/pg-core/async/count.js.map +1 -1
  816. package/pg-core/async/db.cjs +10 -27
  817. package/pg-core/async/db.cjs.map +1 -1
  818. package/pg-core/async/db.d.cts +5 -13
  819. package/pg-core/async/db.d.ts +8 -16
  820. package/pg-core/async/db.js +10 -27
  821. package/pg-core/async/db.js.map +1 -1
  822. package/pg-core/async/delete.cjs +8 -13
  823. package/pg-core/async/delete.cjs.map +1 -1
  824. package/pg-core/async/delete.js +8 -13
  825. package/pg-core/async/delete.js.map +1 -1
  826. package/pg-core/async/insert.cjs +7 -12
  827. package/pg-core/async/insert.cjs.map +1 -1
  828. package/pg-core/async/insert.js +7 -12
  829. package/pg-core/async/insert.js.map +1 -1
  830. package/pg-core/async/query.cjs +8 -14
  831. package/pg-core/async/query.cjs.map +1 -1
  832. package/pg-core/async/query.js +8 -14
  833. package/pg-core/async/query.js.map +1 -1
  834. package/pg-core/async/refresh-materialized-view.cjs +1 -9
  835. package/pg-core/async/refresh-materialized-view.cjs.map +1 -1
  836. package/pg-core/async/refresh-materialized-view.js +1 -9
  837. package/pg-core/async/refresh-materialized-view.js.map +1 -1
  838. package/pg-core/async/select.cjs +4 -13
  839. package/pg-core/async/select.cjs.map +1 -1
  840. package/pg-core/async/select.js +4 -13
  841. package/pg-core/async/select.js.map +1 -1
  842. package/pg-core/async/session.cjs +46 -22
  843. package/pg-core/async/session.cjs.map +1 -1
  844. package/pg-core/async/session.d.cts +25 -31
  845. package/pg-core/async/session.d.ts +26 -32
  846. package/pg-core/async/session.js +47 -23
  847. package/pg-core/async/session.js.map +1 -1
  848. package/pg-core/async/update.cjs +11 -15
  849. package/pg-core/async/update.cjs.map +1 -1
  850. package/pg-core/async/update.js +11 -15
  851. package/pg-core/async/update.js.map +1 -1
  852. package/pg-core/codecs.cjs +156 -0
  853. package/pg-core/codecs.cjs.map +1 -0
  854. package/pg-core/codecs.d.cts +27 -0
  855. package/pg-core/codecs.d.ts +27 -0
  856. package/pg-core/codecs.js +148 -0
  857. package/pg-core/codecs.js.map +1 -0
  858. package/pg-core/columns/bigint.cjs +10 -9
  859. package/pg-core/columns/bigint.cjs.map +1 -1
  860. package/pg-core/columns/bigint.d.cts +2 -3
  861. package/pg-core/columns/bigint.d.ts +2 -3
  862. package/pg-core/columns/bigint.js +10 -9
  863. package/pg-core/columns/bigint.js.map +1 -1
  864. package/pg-core/columns/bigserial.cjs +6 -6
  865. package/pg-core/columns/bigserial.cjs.map +1 -1
  866. package/pg-core/columns/bigserial.d.cts +1 -2
  867. package/pg-core/columns/bigserial.d.ts +1 -2
  868. package/pg-core/columns/bigserial.js +6 -6
  869. package/pg-core/columns/bigserial.js.map +1 -1
  870. package/pg-core/columns/boolean.cjs +2 -0
  871. package/pg-core/columns/boolean.cjs.map +1 -1
  872. package/pg-core/columns/boolean.js +2 -0
  873. package/pg-core/columns/boolean.js.map +1 -1
  874. package/pg-core/columns/bytea.cjs +2 -8
  875. package/pg-core/columns/bytea.cjs.map +1 -1
  876. package/pg-core/columns/bytea.d.cts +0 -1
  877. package/pg-core/columns/bytea.d.ts +0 -1
  878. package/pg-core/columns/bytea.js +2 -8
  879. package/pg-core/columns/bytea.js.map +1 -1
  880. package/pg-core/columns/char.cjs +2 -0
  881. package/pg-core/columns/char.cjs.map +1 -1
  882. package/pg-core/columns/char.js +2 -0
  883. package/pg-core/columns/char.js.map +1 -1
  884. package/pg-core/columns/cidr.cjs +2 -0
  885. package/pg-core/columns/cidr.cjs.map +1 -1
  886. package/pg-core/columns/cidr.js +2 -0
  887. package/pg-core/columns/cidr.js.map +1 -1
  888. package/pg-core/columns/common.cjs +11 -9
  889. package/pg-core/columns/common.cjs.map +1 -1
  890. package/pg-core/columns/common.d.cts +34 -39
  891. package/pg-core/columns/common.d.ts +34 -39
  892. package/pg-core/columns/common.js +11 -9
  893. package/pg-core/columns/common.js.map +1 -1
  894. package/pg-core/columns/custom.cjs +16 -46
  895. package/pg-core/columns/custom.cjs.map +1 -1
  896. package/pg-core/columns/custom.d.cts +17 -8
  897. package/pg-core/columns/custom.d.ts +17 -8
  898. package/pg-core/columns/custom.js +16 -46
  899. package/pg-core/columns/custom.js.map +1 -1
  900. package/pg-core/columns/date.cjs +11 -12
  901. package/pg-core/columns/date.cjs.map +1 -1
  902. package/pg-core/columns/date.d.cts +3 -4
  903. package/pg-core/columns/date.d.ts +3 -4
  904. package/pg-core/columns/date.js +11 -12
  905. package/pg-core/columns/date.js.map +1 -1
  906. package/pg-core/columns/double-precision.cjs +2 -4
  907. package/pg-core/columns/double-precision.cjs.map +1 -1
  908. package/pg-core/columns/double-precision.d.cts +0 -1
  909. package/pg-core/columns/double-precision.d.ts +0 -1
  910. package/pg-core/columns/double-precision.js +2 -4
  911. package/pg-core/columns/double-precision.js.map +1 -1
  912. package/pg-core/columns/enum.cjs +4 -0
  913. package/pg-core/columns/enum.cjs.map +1 -1
  914. package/pg-core/columns/enum.js +4 -0
  915. package/pg-core/columns/enum.js.map +1 -1
  916. package/pg-core/columns/index.d.cts +2 -2
  917. package/pg-core/columns/index.d.ts +2 -2
  918. package/pg-core/columns/inet.cjs +2 -0
  919. package/pg-core/columns/inet.cjs.map +1 -1
  920. package/pg-core/columns/inet.js +2 -0
  921. package/pg-core/columns/inet.js.map +1 -1
  922. package/pg-core/columns/integer.cjs +2 -4
  923. package/pg-core/columns/integer.cjs.map +1 -1
  924. package/pg-core/columns/integer.d.cts +0 -1
  925. package/pg-core/columns/integer.d.ts +0 -1
  926. package/pg-core/columns/integer.js +2 -4
  927. package/pg-core/columns/integer.js.map +1 -1
  928. package/pg-core/columns/interval.cjs +2 -0
  929. package/pg-core/columns/interval.cjs.map +1 -1
  930. package/pg-core/columns/interval.js +2 -0
  931. package/pg-core/columns/interval.js.map +1 -1
  932. package/pg-core/columns/json.cjs +2 -11
  933. package/pg-core/columns/json.cjs.map +1 -1
  934. package/pg-core/columns/json.d.cts +0 -2
  935. package/pg-core/columns/json.d.ts +0 -2
  936. package/pg-core/columns/json.js +2 -11
  937. package/pg-core/columns/json.js.map +1 -1
  938. package/pg-core/columns/jsonb.cjs +2 -11
  939. package/pg-core/columns/jsonb.cjs.map +1 -1
  940. package/pg-core/columns/jsonb.d.cts +0 -2
  941. package/pg-core/columns/jsonb.d.ts +0 -2
  942. package/pg-core/columns/jsonb.js +2 -11
  943. package/pg-core/columns/jsonb.js.map +1 -1
  944. package/pg-core/columns/line.cjs +12 -8
  945. package/pg-core/columns/line.cjs.map +1 -1
  946. package/pg-core/columns/line.d.cts +5 -5
  947. package/pg-core/columns/line.d.ts +5 -5
  948. package/pg-core/columns/line.js +12 -8
  949. package/pg-core/columns/line.js.map +1 -1
  950. package/pg-core/columns/macaddr.cjs +2 -0
  951. package/pg-core/columns/macaddr.cjs.map +1 -1
  952. package/pg-core/columns/macaddr.js +2 -0
  953. package/pg-core/columns/macaddr.js.map +1 -1
  954. package/pg-core/columns/macaddr8.cjs +2 -0
  955. package/pg-core/columns/macaddr8.cjs.map +1 -1
  956. package/pg-core/columns/macaddr8.js +2 -0
  957. package/pg-core/columns/macaddr8.js.map +1 -1
  958. package/pg-core/columns/numeric.cjs +12 -15
  959. package/pg-core/columns/numeric.cjs.map +1 -1
  960. package/pg-core/columns/numeric.d.cts +4 -5
  961. package/pg-core/columns/numeric.d.ts +4 -5
  962. package/pg-core/columns/numeric.js +12 -15
  963. package/pg-core/columns/numeric.js.map +1 -1
  964. package/pg-core/columns/point.cjs +19 -21
  965. package/pg-core/columns/point.cjs.map +1 -1
  966. package/pg-core/columns/point.d.cts +5 -11
  967. package/pg-core/columns/point.d.ts +5 -11
  968. package/pg-core/columns/point.js +19 -21
  969. package/pg-core/columns/point.js.map +1 -1
  970. package/pg-core/columns/postgis_extension/geometry.cjs +12 -9
  971. package/pg-core/columns/postgis_extension/geometry.cjs.map +1 -1
  972. package/pg-core/columns/postgis_extension/geometry.d.cts +5 -5
  973. package/pg-core/columns/postgis_extension/geometry.d.ts +5 -5
  974. package/pg-core/columns/postgis_extension/geometry.js +12 -9
  975. package/pg-core/columns/postgis_extension/geometry.js.map +1 -1
  976. package/pg-core/columns/real.cjs +2 -4
  977. package/pg-core/columns/real.cjs.map +1 -1
  978. package/pg-core/columns/real.d.cts +0 -1
  979. package/pg-core/columns/real.d.ts +0 -1
  980. package/pg-core/columns/real.js +2 -4
  981. package/pg-core/columns/real.js.map +1 -1
  982. package/pg-core/columns/serial.cjs +2 -0
  983. package/pg-core/columns/serial.cjs.map +1 -1
  984. package/pg-core/columns/serial.js +2 -0
  985. package/pg-core/columns/serial.js.map +1 -1
  986. package/pg-core/columns/smallint.cjs +2 -4
  987. package/pg-core/columns/smallint.cjs.map +1 -1
  988. package/pg-core/columns/smallint.d.cts +0 -1
  989. package/pg-core/columns/smallint.d.ts +0 -1
  990. package/pg-core/columns/smallint.js +2 -4
  991. package/pg-core/columns/smallint.js.map +1 -1
  992. package/pg-core/columns/smallserial.cjs +2 -0
  993. package/pg-core/columns/smallserial.cjs.map +1 -1
  994. package/pg-core/columns/smallserial.js +2 -0
  995. package/pg-core/columns/smallserial.js.map +1 -1
  996. package/pg-core/columns/text.cjs +2 -0
  997. package/pg-core/columns/text.cjs.map +1 -1
  998. package/pg-core/columns/text.js +2 -0
  999. package/pg-core/columns/text.js.map +1 -1
  1000. package/pg-core/columns/time.cjs +2 -0
  1001. package/pg-core/columns/time.cjs.map +1 -1
  1002. package/pg-core/columns/time.js +2 -0
  1003. package/pg-core/columns/time.js.map +1 -1
  1004. package/pg-core/columns/timestamp.cjs +13 -14
  1005. package/pg-core/columns/timestamp.cjs.map +1 -1
  1006. package/pg-core/columns/timestamp.d.cts +3 -4
  1007. package/pg-core/columns/timestamp.d.ts +3 -4
  1008. package/pg-core/columns/timestamp.js +13 -14
  1009. package/pg-core/columns/timestamp.js.map +1 -1
  1010. package/pg-core/columns/uuid.cjs +2 -0
  1011. package/pg-core/columns/uuid.cjs.map +1 -1
  1012. package/pg-core/columns/uuid.js +2 -0
  1013. package/pg-core/columns/uuid.js.map +1 -1
  1014. package/pg-core/columns/varchar.cjs +2 -0
  1015. package/pg-core/columns/varchar.cjs.map +1 -1
  1016. package/pg-core/columns/varchar.js +2 -0
  1017. package/pg-core/columns/varchar.js.map +1 -1
  1018. package/pg-core/columns/vector_extension/bit.cjs +2 -0
  1019. package/pg-core/columns/vector_extension/bit.cjs.map +1 -1
  1020. package/pg-core/columns/vector_extension/bit.js +2 -0
  1021. package/pg-core/columns/vector_extension/bit.js.map +1 -1
  1022. package/pg-core/columns/vector_extension/halfvec.cjs +6 -4
  1023. package/pg-core/columns/vector_extension/halfvec.cjs.map +1 -1
  1024. package/pg-core/columns/vector_extension/halfvec.d.cts +2 -2
  1025. package/pg-core/columns/vector_extension/halfvec.d.ts +2 -2
  1026. package/pg-core/columns/vector_extension/halfvec.js +6 -4
  1027. package/pg-core/columns/vector_extension/halfvec.js.map +1 -1
  1028. package/pg-core/columns/vector_extension/sparsevec.cjs +2 -0
  1029. package/pg-core/columns/vector_extension/sparsevec.cjs.map +1 -1
  1030. package/pg-core/columns/vector_extension/sparsevec.js +2 -0
  1031. package/pg-core/columns/vector_extension/sparsevec.js.map +1 -1
  1032. package/pg-core/columns/vector_extension/vector.cjs +6 -4
  1033. package/pg-core/columns/vector_extension/vector.cjs.map +1 -1
  1034. package/pg-core/columns/vector_extension/vector.d.cts +2 -2
  1035. package/pg-core/columns/vector_extension/vector.d.ts +2 -2
  1036. package/pg-core/columns/vector_extension/vector.js +6 -4
  1037. package/pg-core/columns/vector_extension/vector.js.map +1 -1
  1038. package/pg-core/dialect.cjs +52 -217
  1039. package/pg-core/dialect.cjs.map +1 -1
  1040. package/pg-core/dialect.d.cts +19 -30
  1041. package/pg-core/dialect.d.ts +20 -31
  1042. package/pg-core/dialect.js +57 -221
  1043. package/pg-core/dialect.js.map +1 -1
  1044. package/pg-core/effect/count.cjs +1 -1
  1045. package/pg-core/effect/count.cjs.map +1 -1
  1046. package/pg-core/effect/count.d.cts +2 -2
  1047. package/pg-core/effect/count.d.ts +2 -2
  1048. package/pg-core/effect/count.js +1 -1
  1049. package/pg-core/effect/count.js.map +1 -1
  1050. package/pg-core/effect/db.cjs +14 -20
  1051. package/pg-core/effect/db.cjs.map +1 -1
  1052. package/pg-core/effect/db.d.cts +7 -11
  1053. package/pg-core/effect/db.d.ts +9 -13
  1054. package/pg-core/effect/db.js +14 -20
  1055. package/pg-core/effect/db.js.map +1 -1
  1056. package/pg-core/effect/delete.cjs +8 -6
  1057. package/pg-core/effect/delete.cjs.map +1 -1
  1058. package/pg-core/effect/delete.d.cts +1 -1
  1059. package/pg-core/effect/delete.d.ts +1 -1
  1060. package/pg-core/effect/delete.js +8 -6
  1061. package/pg-core/effect/delete.js.map +1 -1
  1062. package/pg-core/effect/index.cjs +3 -3
  1063. package/pg-core/effect/index.js +3 -3
  1064. package/pg-core/effect/insert.cjs +7 -5
  1065. package/pg-core/effect/insert.cjs.map +1 -1
  1066. package/pg-core/effect/insert.d.cts +1 -1
  1067. package/pg-core/effect/insert.d.ts +1 -1
  1068. package/pg-core/effect/insert.js +7 -5
  1069. package/pg-core/effect/insert.js.map +1 -1
  1070. package/pg-core/effect/query.cjs +7 -6
  1071. package/pg-core/effect/query.cjs.map +1 -1
  1072. package/pg-core/effect/query.d.cts +1 -1
  1073. package/pg-core/effect/query.d.ts +1 -1
  1074. package/pg-core/effect/query.js +7 -6
  1075. package/pg-core/effect/query.js.map +1 -1
  1076. package/pg-core/effect/refresh-materialized-view.cjs +1 -2
  1077. package/pg-core/effect/refresh-materialized-view.cjs.map +1 -1
  1078. package/pg-core/effect/refresh-materialized-view.d.cts +1 -1
  1079. package/pg-core/effect/refresh-materialized-view.d.ts +1 -1
  1080. package/pg-core/effect/refresh-materialized-view.js +1 -2
  1081. package/pg-core/effect/refresh-materialized-view.js.map +1 -1
  1082. package/pg-core/effect/select.cjs +3 -5
  1083. package/pg-core/effect/select.cjs.map +1 -1
  1084. package/pg-core/effect/select.d.cts +1 -1
  1085. package/pg-core/effect/select.d.ts +1 -1
  1086. package/pg-core/effect/select.js +3 -5
  1087. package/pg-core/effect/select.js.map +1 -1
  1088. package/pg-core/effect/session.cjs +30 -19
  1089. package/pg-core/effect/session.cjs.map +1 -1
  1090. package/pg-core/effect/session.d.cts +24 -28
  1091. package/pg-core/effect/session.d.ts +25 -29
  1092. package/pg-core/effect/session.js +31 -20
  1093. package/pg-core/effect/session.js.map +1 -1
  1094. package/pg-core/effect/update.cjs +8 -8
  1095. package/pg-core/effect/update.cjs.map +1 -1
  1096. package/pg-core/effect/update.d.cts +1 -1
  1097. package/pg-core/effect/update.d.ts +1 -1
  1098. package/pg-core/effect/update.js +8 -8
  1099. package/pg-core/effect/update.js.map +1 -1
  1100. package/pg-core/index.cjs +16 -16
  1101. package/pg-core/index.d.cts +4 -4
  1102. package/pg-core/index.d.ts +4 -4
  1103. package/pg-core/index.js +13 -13
  1104. package/pg-core/query-builders/delete.cjs +1 -1
  1105. package/pg-core/query-builders/delete.cjs.map +1 -1
  1106. package/pg-core/query-builders/delete.js +1 -1
  1107. package/pg-core/query-builders/delete.js.map +1 -1
  1108. package/pg-core/query-builders/index.cjs +1 -1
  1109. package/pg-core/query-builders/index.js +1 -1
  1110. package/pg-core/query-builders/insert.cjs +1 -1
  1111. package/pg-core/query-builders/insert.cjs.map +1 -1
  1112. package/pg-core/query-builders/insert.js +1 -1
  1113. package/pg-core/query-builders/insert.js.map +1 -1
  1114. package/pg-core/query-builders/query.cjs +0 -1
  1115. package/pg-core/query-builders/query.cjs.map +1 -1
  1116. package/pg-core/query-builders/query.d.cts +2 -1
  1117. package/pg-core/query-builders/query.d.ts +2 -1
  1118. package/pg-core/query-builders/query.js +0 -1
  1119. package/pg-core/query-builders/query.js.map +1 -1
  1120. package/pg-core/query-builders/raw.cjs +0 -4
  1121. package/pg-core/query-builders/raw.cjs.map +1 -1
  1122. package/pg-core/query-builders/raw.js +0 -4
  1123. package/pg-core/query-builders/raw.js.map +1 -1
  1124. package/pg-core/query-builders/update.cjs +1 -1
  1125. package/pg-core/query-builders/update.cjs.map +1 -1
  1126. package/pg-core/query-builders/update.js +1 -1
  1127. package/pg-core/query-builders/update.js.map +1 -1
  1128. package/pg-core/schema.cjs +1 -1
  1129. package/pg-core/schema.js +1 -1
  1130. package/pg-core/session.cjs +3 -5
  1131. package/pg-core/session.cjs.map +1 -1
  1132. package/pg-core/session.d.cts +4 -7
  1133. package/pg-core/session.d.ts +4 -7
  1134. package/pg-core/session.js +3 -5
  1135. package/pg-core/session.js.map +1 -1
  1136. package/pg-core/table.cjs +1 -1
  1137. package/pg-core/table.cjs.map +1 -1
  1138. package/pg-core/table.js +1 -1
  1139. package/pg-core/table.js.map +1 -1
  1140. package/pg-core/utils.cjs +2 -2
  1141. package/pg-core/utils.cjs.map +1 -1
  1142. package/pg-core/utils.d.cts +7 -1
  1143. package/pg-core/utils.d.ts +7 -1
  1144. package/pg-core/utils.js +2 -2
  1145. package/pg-core/utils.js.map +1 -1
  1146. package/pg-core/view.cjs +1 -1
  1147. package/pg-core/view.js +1 -1
  1148. package/pg-proxy/driver.cjs +10 -15
  1149. package/pg-proxy/driver.cjs.map +1 -1
  1150. package/pg-proxy/driver.d.cts +6 -3
  1151. package/pg-proxy/driver.d.ts +7 -4
  1152. package/pg-proxy/driver.js +10 -14
  1153. package/pg-proxy/driver.js.map +1 -1
  1154. package/pg-proxy/index.cjs +0 -2
  1155. package/pg-proxy/index.d.cts +2 -2
  1156. package/pg-proxy/index.d.ts +2 -2
  1157. package/pg-proxy/index.js +2 -2
  1158. package/pg-proxy/migrator.cjs.map +1 -1
  1159. package/pg-proxy/migrator.d.cts +1 -1
  1160. package/pg-proxy/migrator.d.ts +1 -1
  1161. package/pg-proxy/migrator.js.map +1 -1
  1162. package/pg-proxy/session.cjs +8 -84
  1163. package/pg-proxy/session.cjs.map +1 -1
  1164. package/pg-proxy/session.d.cts +9 -32
  1165. package/pg-proxy/session.d.ts +10 -33
  1166. package/pg-proxy/session.js +10 -84
  1167. package/pg-proxy/session.js.map +1 -1
  1168. package/pglite/driver.cjs +71 -33
  1169. package/pglite/driver.cjs.map +1 -1
  1170. package/pglite/driver.d.cts +12 -17
  1171. package/pglite/driver.d.ts +14 -19
  1172. package/pglite/driver.js +71 -32
  1173. package/pglite/driver.js.map +1 -1
  1174. package/pglite/index.cjs +2 -3
  1175. package/pglite/index.d.cts +3 -3
  1176. package/pglite/index.d.ts +3 -3
  1177. package/pglite/index.js +3 -3
  1178. package/pglite/migrator.cjs.map +1 -1
  1179. package/pglite/migrator.d.cts +1 -1
  1180. package/pglite/migrator.d.ts +1 -1
  1181. package/pglite/migrator.js.map +1 -1
  1182. package/pglite/session.cjs +25 -86
  1183. package/pglite/session.cjs.map +1 -1
  1184. package/pglite/session.d.cts +9 -30
  1185. package/pglite/session.d.ts +11 -32
  1186. package/pglite/session.js +27 -87
  1187. package/pglite/session.js.map +1 -1
  1188. package/planetscale-serverless/driver.cjs +3 -2
  1189. package/planetscale-serverless/driver.cjs.map +1 -1
  1190. package/planetscale-serverless/driver.d.cts +1 -0
  1191. package/planetscale-serverless/driver.d.ts +1 -0
  1192. package/planetscale-serverless/driver.js +3 -2
  1193. package/planetscale-serverless/driver.js.map +1 -1
  1194. package/planetscale-serverless/session.cjs +27 -20
  1195. package/planetscale-serverless/session.cjs.map +1 -1
  1196. package/planetscale-serverless/session.d.cts +12 -6
  1197. package/planetscale-serverless/session.d.ts +14 -8
  1198. package/planetscale-serverless/session.js +28 -21
  1199. package/planetscale-serverless/session.js.map +1 -1
  1200. package/postgres-js/driver.cjs +124 -19
  1201. package/postgres-js/driver.cjs.map +1 -1
  1202. package/postgres-js/driver.d.cts +10 -6
  1203. package/postgres-js/driver.d.ts +11 -7
  1204. package/postgres-js/driver.js +124 -19
  1205. package/postgres-js/driver.js.map +1 -1
  1206. package/postgres-js/index.cjs +2 -2
  1207. package/postgres-js/index.d.cts +3 -3
  1208. package/postgres-js/index.d.ts +3 -3
  1209. package/postgres-js/index.js +3 -3
  1210. package/postgres-js/migrator.cjs.map +1 -1
  1211. package/postgres-js/migrator.d.cts +1 -1
  1212. package/postgres-js/migrator.d.ts +1 -1
  1213. package/postgres-js/migrator.js.map +1 -1
  1214. package/postgres-js/session.cjs +17 -112
  1215. package/postgres-js/session.cjs.map +1 -1
  1216. package/postgres-js/session.d.cts +10 -31
  1217. package/postgres-js/session.d.ts +11 -32
  1218. package/postgres-js/session.js +18 -112
  1219. package/postgres-js/session.js.map +1 -1
  1220. package/prisma/mysql/driver.cjs +1 -1
  1221. package/prisma/mysql/driver.js +1 -1
  1222. package/prisma/mysql/session.cjs +2 -1
  1223. package/prisma/mysql/session.cjs.map +1 -1
  1224. package/prisma/mysql/session.d.cts +1 -0
  1225. package/prisma/mysql/session.d.ts +2 -1
  1226. package/prisma/mysql/session.js +2 -1
  1227. package/prisma/mysql/session.js.map +1 -1
  1228. package/prisma/pg/driver.cjs +9 -3
  1229. package/prisma/pg/driver.cjs.map +1 -1
  1230. package/prisma/pg/driver.d.cts +7 -3
  1231. package/prisma/pg/driver.d.ts +7 -3
  1232. package/prisma/pg/driver.js +9 -4
  1233. package/prisma/pg/driver.js.map +1 -1
  1234. package/prisma/pg/index.cjs +2 -2
  1235. package/prisma/pg/index.d.cts +3 -3
  1236. package/prisma/pg/index.d.ts +3 -3
  1237. package/prisma/pg/index.js +3 -3
  1238. package/prisma/pg/session.cjs +1 -25
  1239. package/prisma/pg/session.cjs.map +1 -1
  1240. package/prisma/pg/session.d.cts +3 -15
  1241. package/prisma/pg/session.d.ts +3 -15
  1242. package/prisma/pg/session.js +2 -25
  1243. package/prisma/pg/session.js.map +1 -1
  1244. package/prisma/sqlite/session.cjs +0 -3
  1245. package/prisma/sqlite/session.cjs.map +1 -1
  1246. package/prisma/sqlite/session.d.cts +0 -1
  1247. package/prisma/sqlite/session.d.ts +1 -2
  1248. package/prisma/sqlite/session.js +0 -3
  1249. package/prisma/sqlite/session.js.map +1 -1
  1250. package/relations.cjs +85 -24
  1251. package/relations.cjs.map +1 -1
  1252. package/relations.d.cts +41 -16
  1253. package/relations.d.ts +41 -16
  1254. package/relations.js +84 -25
  1255. package/relations.js.map +1 -1
  1256. package/row-mappers/index.cjs +1 -1
  1257. package/row-mappers/index.cjs.map +1 -1
  1258. package/row-mappers/index.js +1 -1
  1259. package/row-mappers/index.js.map +1 -1
  1260. package/selection-proxy.cjs +1 -1
  1261. package/selection-proxy.js +1 -1
  1262. package/singlestore/driver.cjs +4 -2
  1263. package/singlestore/driver.cjs.map +1 -1
  1264. package/singlestore/driver.d.cts +2 -1
  1265. package/singlestore/driver.d.ts +4 -3
  1266. package/singlestore/driver.js +4 -2
  1267. package/singlestore/driver.js.map +1 -1
  1268. package/singlestore/session.cjs +17 -7
  1269. package/singlestore/session.cjs.map +1 -1
  1270. package/singlestore/session.d.cts +8 -4
  1271. package/singlestore/session.d.ts +10 -6
  1272. package/singlestore/session.js +18 -8
  1273. package/singlestore/session.js.map +1 -1
  1274. package/singlestore-core/columns/bigint.cjs +4 -4
  1275. package/singlestore-core/columns/bigint.cjs.map +1 -1
  1276. package/singlestore-core/columns/bigint.d.cts +2 -2
  1277. package/singlestore-core/columns/bigint.d.ts +2 -2
  1278. package/singlestore-core/columns/bigint.js +4 -4
  1279. package/singlestore-core/columns/bigint.js.map +1 -1
  1280. package/singlestore-core/columns/binary.cjs +2 -2
  1281. package/singlestore-core/columns/binary.cjs.map +1 -1
  1282. package/singlestore-core/columns/binary.d.cts +1 -1
  1283. package/singlestore-core/columns/binary.d.ts +1 -1
  1284. package/singlestore-core/columns/binary.js +2 -2
  1285. package/singlestore-core/columns/binary.js.map +1 -1
  1286. package/singlestore-core/columns/boolean.cjs +2 -2
  1287. package/singlestore-core/columns/boolean.cjs.map +1 -1
  1288. package/singlestore-core/columns/boolean.d.cts +1 -1
  1289. package/singlestore-core/columns/boolean.d.ts +1 -1
  1290. package/singlestore-core/columns/boolean.js +2 -2
  1291. package/singlestore-core/columns/boolean.js.map +1 -1
  1292. package/singlestore-core/columns/custom.cjs +4 -4
  1293. package/singlestore-core/columns/custom.cjs.map +1 -1
  1294. package/singlestore-core/columns/custom.d.cts +2 -2
  1295. package/singlestore-core/columns/custom.d.ts +2 -2
  1296. package/singlestore-core/columns/custom.js +4 -4
  1297. package/singlestore-core/columns/custom.js.map +1 -1
  1298. package/singlestore-core/columns/date.cjs +2 -2
  1299. package/singlestore-core/columns/date.cjs.map +1 -1
  1300. package/singlestore-core/columns/date.d.cts +1 -1
  1301. package/singlestore-core/columns/date.d.ts +1 -1
  1302. package/singlestore-core/columns/date.js +2 -2
  1303. package/singlestore-core/columns/date.js.map +1 -1
  1304. package/singlestore-core/columns/datetime.cjs +6 -6
  1305. package/singlestore-core/columns/datetime.cjs.map +1 -1
  1306. package/singlestore-core/columns/datetime.d.cts +3 -3
  1307. package/singlestore-core/columns/datetime.d.ts +3 -3
  1308. package/singlestore-core/columns/datetime.js +6 -6
  1309. package/singlestore-core/columns/datetime.js.map +1 -1
  1310. package/singlestore-core/columns/decimal.cjs +4 -4
  1311. package/singlestore-core/columns/decimal.cjs.map +1 -1
  1312. package/singlestore-core/columns/decimal.d.cts +2 -2
  1313. package/singlestore-core/columns/decimal.d.ts +2 -2
  1314. package/singlestore-core/columns/decimal.js +4 -4
  1315. package/singlestore-core/columns/decimal.js.map +1 -1
  1316. package/singlestore-core/columns/float.cjs +2 -2
  1317. package/singlestore-core/columns/float.cjs.map +1 -1
  1318. package/singlestore-core/columns/float.d.cts +1 -1
  1319. package/singlestore-core/columns/float.d.ts +1 -1
  1320. package/singlestore-core/columns/float.js +2 -2
  1321. package/singlestore-core/columns/float.js.map +1 -1
  1322. package/singlestore-core/columns/int.cjs +2 -2
  1323. package/singlestore-core/columns/int.cjs.map +1 -1
  1324. package/singlestore-core/columns/int.d.cts +1 -1
  1325. package/singlestore-core/columns/int.d.ts +1 -1
  1326. package/singlestore-core/columns/int.js +2 -2
  1327. package/singlestore-core/columns/int.js.map +1 -1
  1328. package/singlestore-core/columns/json.cjs +2 -2
  1329. package/singlestore-core/columns/json.cjs.map +1 -1
  1330. package/singlestore-core/columns/json.d.cts +1 -1
  1331. package/singlestore-core/columns/json.d.ts +1 -1
  1332. package/singlestore-core/columns/json.js +2 -2
  1333. package/singlestore-core/columns/json.js.map +1 -1
  1334. package/singlestore-core/columns/mediumint.cjs +2 -2
  1335. package/singlestore-core/columns/mediumint.cjs.map +1 -1
  1336. package/singlestore-core/columns/mediumint.d.cts +1 -1
  1337. package/singlestore-core/columns/mediumint.d.ts +1 -1
  1338. package/singlestore-core/columns/mediumint.js +2 -2
  1339. package/singlestore-core/columns/mediumint.js.map +1 -1
  1340. package/singlestore-core/columns/serial.cjs +2 -2
  1341. package/singlestore-core/columns/serial.cjs.map +1 -1
  1342. package/singlestore-core/columns/serial.d.cts +1 -1
  1343. package/singlestore-core/columns/serial.d.ts +1 -1
  1344. package/singlestore-core/columns/serial.js +2 -2
  1345. package/singlestore-core/columns/serial.js.map +1 -1
  1346. package/singlestore-core/columns/smallint.cjs +2 -2
  1347. package/singlestore-core/columns/smallint.cjs.map +1 -1
  1348. package/singlestore-core/columns/smallint.d.cts +1 -1
  1349. package/singlestore-core/columns/smallint.d.ts +1 -1
  1350. package/singlestore-core/columns/smallint.js +2 -2
  1351. package/singlestore-core/columns/smallint.js.map +1 -1
  1352. package/singlestore-core/columns/timestamp.cjs +6 -6
  1353. package/singlestore-core/columns/timestamp.cjs.map +1 -1
  1354. package/singlestore-core/columns/timestamp.d.cts +3 -3
  1355. package/singlestore-core/columns/timestamp.d.ts +3 -3
  1356. package/singlestore-core/columns/timestamp.js +6 -6
  1357. package/singlestore-core/columns/timestamp.js.map +1 -1
  1358. package/singlestore-core/columns/tinyint.cjs +2 -2
  1359. package/singlestore-core/columns/tinyint.cjs.map +1 -1
  1360. package/singlestore-core/columns/tinyint.d.cts +1 -1
  1361. package/singlestore-core/columns/tinyint.d.ts +1 -1
  1362. package/singlestore-core/columns/tinyint.js +2 -2
  1363. package/singlestore-core/columns/tinyint.js.map +1 -1
  1364. package/singlestore-core/columns/varbinary.cjs +2 -2
  1365. package/singlestore-core/columns/varbinary.cjs.map +1 -1
  1366. package/singlestore-core/columns/varbinary.d.cts +1 -1
  1367. package/singlestore-core/columns/varbinary.d.ts +1 -1
  1368. package/singlestore-core/columns/varbinary.js +2 -2
  1369. package/singlestore-core/columns/varbinary.js.map +1 -1
  1370. package/singlestore-core/columns/vector.cjs +8 -8
  1371. package/singlestore-core/columns/vector.cjs.map +1 -1
  1372. package/singlestore-core/columns/vector.d.cts +4 -4
  1373. package/singlestore-core/columns/vector.d.ts +4 -4
  1374. package/singlestore-core/columns/vector.js +8 -8
  1375. package/singlestore-core/columns/vector.js.map +1 -1
  1376. package/singlestore-core/columns/year.cjs +2 -2
  1377. package/singlestore-core/columns/year.cjs.map +1 -1
  1378. package/singlestore-core/columns/year.d.cts +1 -1
  1379. package/singlestore-core/columns/year.d.ts +1 -1
  1380. package/singlestore-core/columns/year.js +2 -2
  1381. package/singlestore-core/columns/year.js.map +1 -1
  1382. package/singlestore-core/db.d.ts +2 -2
  1383. package/singlestore-core/dialect.cjs +2 -2
  1384. package/singlestore-core/dialect.d.ts +1 -1
  1385. package/singlestore-core/dialect.js +2 -2
  1386. package/singlestore-core/query-builders/delete.d.ts +1 -1
  1387. package/singlestore-core/query-builders/insert.d.ts +1 -1
  1388. package/singlestore-core/query-builders/query.cjs +13 -5
  1389. package/singlestore-core/query-builders/query.cjs.map +1 -1
  1390. package/singlestore-core/query-builders/query.d.ts +1 -1
  1391. package/singlestore-core/query-builders/query.js +13 -5
  1392. package/singlestore-core/query-builders/query.js.map +1 -1
  1393. package/singlestore-core/query-builders/select.d.ts +1 -1
  1394. package/singlestore-core/query-builders/update.d.ts +1 -1
  1395. package/singlestore-core/session.cjs.map +1 -1
  1396. package/singlestore-core/session.d.cts +2 -2
  1397. package/singlestore-core/session.d.ts +2 -2
  1398. package/singlestore-core/session.js.map +1 -1
  1399. package/singlestore-core/table.cjs +1 -1
  1400. package/singlestore-core/table.cjs.map +1 -1
  1401. package/singlestore-core/table.js +1 -1
  1402. package/singlestore-core/table.js.map +1 -1
  1403. package/singlestore-proxy/driver.cjs +5 -2
  1404. package/singlestore-proxy/driver.cjs.map +1 -1
  1405. package/singlestore-proxy/driver.js +5 -2
  1406. package/singlestore-proxy/driver.js.map +1 -1
  1407. package/singlestore-proxy/session.cjs +11 -6
  1408. package/singlestore-proxy/session.cjs.map +1 -1
  1409. package/singlestore-proxy/session.d.cts +9 -4
  1410. package/singlestore-proxy/session.d.ts +10 -5
  1411. package/singlestore-proxy/session.js +12 -7
  1412. package/singlestore-proxy/session.js.map +1 -1
  1413. package/sql/index.cjs +1 -0
  1414. package/sql/index.d.cts +2 -2
  1415. package/sql/index.d.ts +2 -2
  1416. package/sql/index.js +2 -2
  1417. package/sql/sql.cjs +32 -11
  1418. package/sql/sql.cjs.map +1 -1
  1419. package/sql/sql.d.cts +15 -5
  1420. package/sql/sql.d.ts +15 -5
  1421. package/sql/sql.js +32 -12
  1422. package/sql/sql.js.map +1 -1
  1423. package/sql-js/driver.cjs +5 -2
  1424. package/sql-js/driver.cjs.map +1 -1
  1425. package/sql-js/driver.d.ts +1 -1
  1426. package/sql-js/driver.js +5 -2
  1427. package/sql-js/driver.js.map +1 -1
  1428. package/sql-js/session.cjs +14 -14
  1429. package/sql-js/session.cjs.map +1 -1
  1430. package/sql-js/session.d.cts +10 -6
  1431. package/sql-js/session.d.ts +10 -6
  1432. package/sql-js/session.js +15 -15
  1433. package/sql-js/session.js.map +1 -1
  1434. package/sqlite-cloud/driver.cjs +3 -2
  1435. package/sqlite-cloud/driver.cjs.map +1 -1
  1436. package/sqlite-cloud/driver.d.ts +1 -1
  1437. package/sqlite-cloud/driver.js +3 -2
  1438. package/sqlite-cloud/driver.js.map +1 -1
  1439. package/sqlite-cloud/session.cjs +21 -20
  1440. package/sqlite-cloud/session.cjs.map +1 -1
  1441. package/sqlite-cloud/session.d.cts +9 -6
  1442. package/sqlite-cloud/session.d.ts +10 -7
  1443. package/sqlite-cloud/session.js +22 -21
  1444. package/sqlite-cloud/session.js.map +1 -1
  1445. package/sqlite-core/columns/blob.cjs +10 -10
  1446. package/sqlite-core/columns/blob.cjs.map +1 -1
  1447. package/sqlite-core/columns/blob.d.cts +5 -5
  1448. package/sqlite-core/columns/blob.d.ts +5 -5
  1449. package/sqlite-core/columns/blob.js +10 -10
  1450. package/sqlite-core/columns/blob.js.map +1 -1
  1451. package/sqlite-core/columns/custom.cjs +4 -4
  1452. package/sqlite-core/columns/custom.cjs.map +1 -1
  1453. package/sqlite-core/columns/custom.d.cts +2 -2
  1454. package/sqlite-core/columns/custom.d.ts +2 -2
  1455. package/sqlite-core/columns/custom.js +4 -4
  1456. package/sqlite-core/columns/custom.js.map +1 -1
  1457. package/sqlite-core/columns/integer.cjs +8 -8
  1458. package/sqlite-core/columns/integer.cjs.map +1 -1
  1459. package/sqlite-core/columns/integer.d.cts +4 -4
  1460. package/sqlite-core/columns/integer.d.ts +4 -4
  1461. package/sqlite-core/columns/integer.js +8 -8
  1462. package/sqlite-core/columns/integer.js.map +1 -1
  1463. package/sqlite-core/columns/numeric.cjs +4 -4
  1464. package/sqlite-core/columns/numeric.cjs.map +1 -1
  1465. package/sqlite-core/columns/numeric.d.cts +2 -2
  1466. package/sqlite-core/columns/numeric.d.ts +2 -2
  1467. package/sqlite-core/columns/numeric.js +4 -4
  1468. package/sqlite-core/columns/numeric.js.map +1 -1
  1469. package/sqlite-core/columns/text.cjs +4 -4
  1470. package/sqlite-core/columns/text.cjs.map +1 -1
  1471. package/sqlite-core/columns/text.d.cts +2 -2
  1472. package/sqlite-core/columns/text.d.ts +2 -2
  1473. package/sqlite-core/columns/text.js +4 -4
  1474. package/sqlite-core/columns/text.js.map +1 -1
  1475. package/sqlite-core/db.d.ts +1 -1
  1476. package/sqlite-core/dialect.cjs +2 -2
  1477. package/sqlite-core/dialect.d.ts +1 -1
  1478. package/sqlite-core/dialect.js +2 -2
  1479. package/sqlite-core/index.cjs +9 -9
  1480. package/sqlite-core/index.js +9 -9
  1481. package/sqlite-core/query-builders/_query.cjs +1 -1
  1482. package/sqlite-core/query-builders/_query.cjs.map +1 -1
  1483. package/sqlite-core/query-builders/_query.js +1 -1
  1484. package/sqlite-core/query-builders/_query.js.map +1 -1
  1485. package/sqlite-core/query-builders/delete.cjs +1 -1
  1486. package/sqlite-core/query-builders/delete.cjs.map +1 -1
  1487. package/sqlite-core/query-builders/delete.js +1 -1
  1488. package/sqlite-core/query-builders/delete.js.map +1 -1
  1489. package/sqlite-core/query-builders/index.cjs +1 -1
  1490. package/sqlite-core/query-builders/index.js +1 -1
  1491. package/sqlite-core/query-builders/insert.cjs +1 -1
  1492. package/sqlite-core/query-builders/insert.cjs.map +1 -1
  1493. package/sqlite-core/query-builders/insert.js +1 -1
  1494. package/sqlite-core/query-builders/insert.js.map +1 -1
  1495. package/sqlite-core/query-builders/query.cjs +13 -5
  1496. package/sqlite-core/query-builders/query.cjs.map +1 -1
  1497. package/sqlite-core/query-builders/query.d.ts +1 -1
  1498. package/sqlite-core/query-builders/query.js +13 -5
  1499. package/sqlite-core/query-builders/query.js.map +1 -1
  1500. package/sqlite-core/query-builders/raw.cjs +0 -4
  1501. package/sqlite-core/query-builders/raw.cjs.map +1 -1
  1502. package/sqlite-core/query-builders/raw.js +0 -4
  1503. package/sqlite-core/query-builders/raw.js.map +1 -1
  1504. package/sqlite-core/query-builders/select.cjs +2 -2
  1505. package/sqlite-core/query-builders/select.cjs.map +1 -1
  1506. package/sqlite-core/query-builders/select.js +2 -2
  1507. package/sqlite-core/query-builders/select.js.map +1 -1
  1508. package/sqlite-core/query-builders/update.cjs +2 -2
  1509. package/sqlite-core/query-builders/update.cjs.map +1 -1
  1510. package/sqlite-core/query-builders/update.js +2 -2
  1511. package/sqlite-core/query-builders/update.js.map +1 -1
  1512. package/sqlite-core/session.cjs +8 -8
  1513. package/sqlite-core/session.cjs.map +1 -1
  1514. package/sqlite-core/session.d.cts +5 -5
  1515. package/sqlite-core/session.d.ts +5 -5
  1516. package/sqlite-core/session.js +8 -8
  1517. package/sqlite-core/session.js.map +1 -1
  1518. package/sqlite-core/table.cjs +1 -1
  1519. package/sqlite-core/table.cjs.map +1 -1
  1520. package/sqlite-core/table.js +1 -1
  1521. package/sqlite-core/table.js.map +1 -1
  1522. package/sqlite-core/utils.cjs +3 -3
  1523. package/sqlite-core/utils.js +3 -3
  1524. package/sqlite-proxy/driver.cjs +3 -2
  1525. package/sqlite-proxy/driver.cjs.map +1 -1
  1526. package/sqlite-proxy/driver.d.ts +1 -1
  1527. package/sqlite-proxy/driver.js +3 -2
  1528. package/sqlite-proxy/driver.js.map +1 -1
  1529. package/sqlite-proxy/session.cjs +20 -17
  1530. package/sqlite-proxy/session.cjs.map +1 -1
  1531. package/sqlite-proxy/session.d.cts +11 -7
  1532. package/sqlite-proxy/session.d.ts +12 -8
  1533. package/sqlite-proxy/session.js +21 -18
  1534. package/sqlite-proxy/session.js.map +1 -1
  1535. package/table.d.cts +1 -1
  1536. package/table.d.ts +1 -1
  1537. package/tidb-serverless/driver.cjs +3 -2
  1538. package/tidb-serverless/driver.cjs.map +1 -1
  1539. package/tidb-serverless/driver.d.cts +1 -0
  1540. package/tidb-serverless/driver.d.ts +1 -0
  1541. package/tidb-serverless/driver.js +3 -2
  1542. package/tidb-serverless/driver.js.map +1 -1
  1543. package/tidb-serverless/session.cjs +25 -37
  1544. package/tidb-serverless/session.cjs.map +1 -1
  1545. package/tidb-serverless/session.d.cts +10 -4
  1546. package/tidb-serverless/session.d.ts +12 -6
  1547. package/tidb-serverless/session.js +26 -38
  1548. package/tidb-serverless/session.js.map +1 -1
  1549. package/tursodatabase/driver-core.cjs +3 -2
  1550. package/tursodatabase/driver-core.cjs.map +1 -1
  1551. package/tursodatabase/driver-core.d.ts +1 -1
  1552. package/tursodatabase/driver-core.js +3 -2
  1553. package/tursodatabase/driver-core.js.map +1 -1
  1554. package/tursodatabase/session.cjs +20 -19
  1555. package/tursodatabase/session.cjs.map +1 -1
  1556. package/tursodatabase/session.d.cts +9 -6
  1557. package/tursodatabase/session.d.ts +10 -7
  1558. package/tursodatabase/session.js +21 -20
  1559. package/tursodatabase/session.js.map +1 -1
  1560. package/up-migrations/effect-pg.cjs +3 -3
  1561. package/up-migrations/effect-pg.cjs.map +1 -1
  1562. package/up-migrations/effect-pg.d.ts +1 -1
  1563. package/up-migrations/effect-pg.js +3 -3
  1564. package/up-migrations/effect-pg.js.map +1 -1
  1565. package/up-migrations/pg.cjs +3 -8
  1566. package/up-migrations/pg.cjs.map +1 -1
  1567. package/up-migrations/pg.d.cts +1 -1
  1568. package/up-migrations/pg.d.ts +2 -2
  1569. package/up-migrations/pg.js +3 -8
  1570. package/up-migrations/pg.js.map +1 -1
  1571. package/up-migrations/sqlite.d.ts +2 -2
  1572. package/utils.cjs +129 -7
  1573. package/utils.cjs.map +1 -1
  1574. package/utils.d.cts +10 -3
  1575. package/utils.d.ts +10 -3
  1576. package/utils.js +127 -8
  1577. package/utils.js.map +1 -1
  1578. package/vercel-postgres/driver.cjs +14 -32
  1579. package/vercel-postgres/driver.cjs.map +1 -1
  1580. package/vercel-postgres/driver.d.cts +12 -17
  1581. package/vercel-postgres/driver.d.ts +13 -18
  1582. package/vercel-postgres/driver.js +14 -31
  1583. package/vercel-postgres/driver.js.map +1 -1
  1584. package/vercel-postgres/index.cjs +2 -3
  1585. package/vercel-postgres/index.d.cts +3 -3
  1586. package/vercel-postgres/index.d.ts +3 -3
  1587. package/vercel-postgres/index.js +3 -3
  1588. package/vercel-postgres/migrator.cjs.map +1 -1
  1589. package/vercel-postgres/migrator.d.cts +1 -1
  1590. package/vercel-postgres/migrator.d.ts +1 -1
  1591. package/vercel-postgres/migrator.js.map +1 -1
  1592. package/vercel-postgres/session.cjs +32 -110
  1593. package/vercel-postgres/session.cjs.map +1 -1
  1594. package/vercel-postgres/session.d.cts +9 -32
  1595. package/vercel-postgres/session.d.ts +10 -33
  1596. package/vercel-postgres/session.js +34 -111
  1597. package/vercel-postgres/session.js.map +1 -1
  1598. package/xata-http/driver.cjs +91 -31
  1599. package/xata-http/driver.cjs.map +1 -1
  1600. package/xata-http/driver.d.cts +10 -16
  1601. package/xata-http/driver.d.ts +11 -17
  1602. package/xata-http/driver.js +91 -30
  1603. package/xata-http/driver.js.map +1 -1
  1604. package/xata-http/index.cjs +2 -4
  1605. package/xata-http/index.d.cts +3 -3
  1606. package/xata-http/index.d.ts +3 -3
  1607. package/xata-http/index.js +3 -3
  1608. package/xata-http/migrator.cjs +1 -1
  1609. package/xata-http/migrator.cjs.map +1 -1
  1610. package/xata-http/migrator.d.cts +1 -1
  1611. package/xata-http/migrator.d.ts +1 -1
  1612. package/xata-http/migrator.js +1 -1
  1613. package/xata-http/migrator.js.map +1 -1
  1614. package/xata-http/session.cjs +24 -110
  1615. package/xata-http/session.cjs.map +1 -1
  1616. package/xata-http/session.d.cts +7 -33
  1617. package/xata-http/session.d.ts +8 -34
  1618. package/xata-http/session.js +26 -110
  1619. package/xata-http/session.js.map +1 -1
  1620. package/pg-core/query-builders/_query.cjs +0 -101
  1621. package/pg-core/query-builders/_query.cjs.map +0 -1
  1622. package/pg-core/query-builders/_query.d.cts +0 -55
  1623. package/pg-core/query-builders/_query.d.ts +0 -55
  1624. package/pg-core/query-builders/_query.js +0 -97
  1625. package/pg-core/query-builders/_query.js.map +0 -1
  1626. package/pg-core/utils/array.cjs.map +0 -1
  1627. package/pg-core/utils/array.js.map +0 -1
  1628. package/pg-core/utils/index.cjs +0 -6
  1629. package/pg-core/utils/index.d.cts +0 -2
  1630. package/pg-core/utils/index.d.ts +0 -2
  1631. package/pg-core/utils/index.js +0 -3
@@ -1,9 +1,10 @@
1
1
  import { entityKind } from "../entity.js";
2
- import { mapResultRow } from "../utils.js";
2
+ import { makeJitQueryMapper, mapResultRow } from "../utils.js";
3
3
  import { fillPlaceholders } from "../sql/sql.js";
4
- import { NoopLogger } from "../logger.js";
5
4
  import { NoopCache } from "../cache/core/index.js";
5
+ import { NoopLogger } from "../logger.js";
6
6
  import { DrizzleError } from "../errors.js";
7
+ import { makeJitRqbMapper } from "../relations.js";
7
8
  import { SQLiteTransaction } from "../sqlite-core/index.js";
8
9
  import { SQLitePreparedQuery as SQLitePreparedQuery$1, SQLiteSession as SQLiteSession$1 } from "../sqlite-core/session.js";
9
10
 
@@ -21,11 +22,11 @@ var TursoDatabaseSession = class TursoDatabaseSession extends SQLiteSession$1 {
21
22
  this.logger = options.logger ?? new NoopLogger();
22
23
  this.cache = options.cache ?? new NoopCache();
23
24
  }
24
- prepareQuery(query, fields, executeMethod, isResponseInArrayMode, customResultMapper, queryMetadata, cacheConfig) {
25
- return new TursoDatabasePreparedQuery(this.client.prepare(query.sql), query, this.logger, this.cache, queryMetadata, cacheConfig, fields, executeMethod, isResponseInArrayMode, customResultMapper);
25
+ prepareQuery(query, fields, executeMethod, customResultMapper, queryMetadata, cacheConfig) {
26
+ return new TursoDatabasePreparedQuery(this.client.prepare(query.sql), query, this.logger, this.cache, queryMetadata, cacheConfig, fields, executeMethod, this.options.useJitMapper, customResultMapper);
26
27
  }
27
- prepareRelationalQuery(query, fields, executeMethod, customResultMapper) {
28
- return new TursoDatabasePreparedQuery(this.client.prepare(query.sql), query, this.logger, this.cache, void 0, void 0, fields, executeMethod, false, customResultMapper, true);
28
+ prepareRelationalQuery(query, fields, executeMethod, customResultMapper, config) {
29
+ return new TursoDatabasePreparedQuery(this.client.prepare(query.sql), query, this.logger, this.cache, void 0, void 0, fields, executeMethod, this.options.useJitMapper, customResultMapper, true, config);
29
30
  }
30
31
  async transaction(transaction, _config, tx) {
31
32
  const session = new TursoDatabaseSession(this.client, this.dialect, this.relations, this.schema, this.options);
@@ -35,7 +36,7 @@ var TursoDatabaseSession = class TursoDatabaseSession extends SQLiteSession$1 {
35
36
  async run(query) {
36
37
  const staticQuery = this.dialect.sqlToQuery(query);
37
38
  try {
38
- return await this.prepareOneTimeQuery(staticQuery, void 0, "run", false).run();
39
+ return await this.prepareOneTimeQuery(staticQuery, void 0, "run").run();
39
40
  } catch (err) {
40
41
  throw new DrizzleError({
41
42
  cause: err,
@@ -44,13 +45,13 @@ var TursoDatabaseSession = class TursoDatabaseSession extends SQLiteSession$1 {
44
45
  }
45
46
  }
46
47
  async all(query) {
47
- return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run", false).all();
48
+ return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run").all();
48
49
  }
49
50
  async get(query) {
50
- return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run", false).get();
51
+ return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run").get();
51
52
  }
52
53
  async values(query) {
53
- return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run", false).values();
54
+ return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run").values();
54
55
  }
55
56
  };
56
57
  var TursoDatabaseTransaction = class extends SQLiteTransaction {
@@ -61,14 +62,16 @@ var TursoDatabaseTransaction = class extends SQLiteTransaction {
61
62
  };
62
63
  var TursoDatabasePreparedQuery = class extends SQLitePreparedQuery$1 {
63
64
  static [entityKind] = "TursoDatabasePreparedQuery";
64
- constructor(stmt, query, logger, cache, queryMetadata, cacheConfig, fields, executeMethod, _isResponseInArrayMode, customResultMapper, isRqbV2Query) {
65
+ jitMapper;
66
+ constructor(stmt, query, logger, cache, queryMetadata, cacheConfig, fields, executeMethod, useJitMapper, customResultMapper, isRqbV2Query, rqbConfig) {
65
67
  super("async", executeMethod, query, cache, queryMetadata, cacheConfig);
66
68
  this.stmt = stmt;
67
69
  this.logger = logger;
68
70
  this.fields = fields;
69
- this._isResponseInArrayMode = _isResponseInArrayMode;
71
+ this.useJitMapper = useJitMapper;
70
72
  this.customResultMapper = customResultMapper;
71
73
  this.isRqbV2Query = isRqbV2Query;
74
+ this.rqbConfig = rqbConfig;
72
75
  }
73
76
  async run(placeholderValues) {
74
77
  const { stmt, query, logger } = this;
@@ -88,13 +91,15 @@ var TursoDatabasePreparedQuery = class extends SQLitePreparedQuery$1 {
88
91
  return await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());
89
92
  });
90
93
  }
91
- return (await this.values(placeholderValues)).map((row) => mapResultRow(fields, row, joinsNotNullableMap));
94
+ const rows = await this.values(placeholderValues);
95
+ return this.useJitMapper ? (this.jitMapper = this.jitMapper ?? makeJitQueryMapper(fields, joinsNotNullableMap))(rows) : rows.map((row) => mapResultRow(fields, row, joinsNotNullableMap));
92
96
  }
93
97
  async allRqbV2(placeholderValues) {
94
98
  const { logger, query, customResultMapper, stmt } = this;
95
99
  const params = fillPlaceholders(query.params, placeholderValues ?? {});
96
100
  logger.logQuery(query.sql, params);
97
- return customResultMapper(await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all()));
101
+ const rows = await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());
102
+ return this.useJitMapper ? (this.jitMapper = this.jitMapper ?? makeJitRqbMapper(this.rqbConfig))(rows) : customResultMapper(rows);
98
103
  }
99
104
  async get(placeholderValues) {
100
105
  if (this.isRqbV2Query) return await this.getRqbV2(placeholderValues);
@@ -110,7 +115,7 @@ var TursoDatabasePreparedQuery = class extends SQLitePreparedQuery$1 {
110
115
  return await (params.length ? stmt.raw(true).get(...params) : stmt.raw(true).get());
111
116
  });
112
117
  if (row === void 0) return row;
113
- return mapResultRow(fields, row, joinsNotNullableMap);
118
+ return this.useJitMapper ? (this.jitMapper = this.jitMapper ?? makeJitQueryMapper(fields, joinsNotNullableMap))([row])[0] : mapResultRow(fields, row, joinsNotNullableMap);
114
119
  }
115
120
  async getRqbV2(placeholderValues) {
116
121
  const { logger, query, stmt, customResultMapper } = this;
@@ -118,7 +123,7 @@ var TursoDatabasePreparedQuery = class extends SQLitePreparedQuery$1 {
118
123
  logger.logQuery(query.sql, params);
119
124
  const row = await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());
120
125
  if (row === void 0) return row;
121
- return customResultMapper([row]);
126
+ return this.useJitMapper ? (this.jitMapper = this.jitMapper ?? makeJitRqbMapper(this.rqbConfig))([row]) : customResultMapper([row]);
122
127
  }
123
128
  async values(placeholderValues) {
124
129
  const { logger, stmt, query } = this;
@@ -128,10 +133,6 @@ var TursoDatabasePreparedQuery = class extends SQLitePreparedQuery$1 {
128
133
  return await (params.length ? stmt.raw(true).all(...params) : stmt.raw(true).all());
129
134
  });
130
135
  }
131
- /** @internal */
132
- isResponseInArrayMode() {
133
- return this._isResponseInArrayMode;
134
- }
135
136
  };
136
137
 
137
138
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","names":["SQLiteSession","SQLitePreparedQuery"],"sources":["../../src/tursodatabase/session.ts"],"sourcesContent":["import type { DatabasePromise } from '@tursodatabase/database-common';\nimport type * as V1 from '~/_relations.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleError } from '~/errors.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tResult,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\nimport type { TursoDatabaseRunResult } from './driver-core.ts';\n\nexport interface TursoDatabaseSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class TursoDatabaseSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: DatabasePromise,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate relations: TRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: TursoDatabaseSessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): TursoDatabasePreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t): TursoDatabasePreparedQuery<T, true> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (db: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\t_config?: SQLiteTransactionConfig,\n\t\ttx?: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>,\n\t): Promise<T> {\n\t\tconst session = new TursoDatabaseSession<TFullSchema, TRelations, TSchema>(\n\t\t\tthis.client,\n\t\t\tthis.dialect,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.options,\n\t\t);\n\t\tconst localTx = tx ?? new TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>(\n\t\t\t'async',\n\t\t\tthis.dialect,\n\t\t\tsession,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t);\n\n\t\tconst clientTx = this.client.transaction(async () => await transaction(localTx));\n\n\t\tconst result = await clientTx();\n\t\treturn result;\n\t}\n\n\toverride async run(query: SQL): Result<'async', TursoDatabaseRunResult> {\n\t\tconst staticQuery = this.dialect.sqlToQuery(query);\n\t\ttry {\n\t\t\treturn await this.prepareOneTimeQuery(staticQuery, undefined, 'run', false).run() as Result<\n\t\t\t\t'async',\n\t\t\t\tTursoDatabaseRunResult\n\t\t\t>;\n\t\t} catch (err) {\n\t\t\tthrow new DrizzleError({ cause: err, message: `Failed to run the query '${staticQuery.sql}'` });\n\t\t}\n\t}\n\n\toverride async all<T = unknown>(query: SQL): Result<'async', T[]> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).all() as Result<\n\t\t\t'async',\n\t\t\tT[]\n\t\t>;\n\t}\n\n\toverride async get<T = unknown>(query: SQL): Result<'async', T> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).get() as Result<\n\t\t\t'async',\n\t\t\tT\n\t\t>;\n\t}\n\n\toverride async values<T extends any[] = unknown[]>(\n\t\tquery: SQL,\n\t): Result<'async', T[]> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).values() as Result<\n\t\t\t'async',\n\t\t\tT[]\n\t\t>;\n\t}\n}\n\nexport class TursoDatabaseTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseTransaction';\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\t// Not supported by driver\n\t\tthrow new Error('Nested transactions are not supported');\n\n\t\t// const savepointName = `sp${this.nestedIndex}`;\n\n\t\t// const tx = new TursoDatabaseTransaction(\n\t\t// \t'async',\n\t\t// \tthis.dialect,\n\t\t// \tthis.session,\n\t\t// \tthis.relations,\n\t\t// \tthis.schema,\n\t\t// \tthis.nestedIndex + 1,\n\t\t// );\n\n\t\t// await this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\t// try {\n\t\t// \tconst result = await (<TursoDatabaseSession<TFullSchema, TRelations, TSchema>> (this.session)).transaction(\n\t\t// \t\ttransaction,\n\t\t// \t\tundefined,\n\t\t// \t\ttx,\n\t\t// \t);\n\t\t// \tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t// \treturn result;\n\t\t// } catch (err) {\n\t\t// \tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t// \tthrow err;\n\t\t// }\n\t}\n}\n\nexport class TursoDatabasePreparedQuery<\n\tT extends PreparedQueryConfig = PreparedQueryConfig,\n\tTIsRqbV2 extends boolean = false,\n> extends SQLitePreparedQuery<\n\t{\n\t\ttype: 'async';\n\t\trun: TursoDatabaseRunResult;\n\t\tall: T['all'];\n\t\tget: T['get'];\n\t\tvalues: T['values'];\n\t\texecute: T['execute'];\n\t}\n> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabasePreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: ReturnType<DatabasePromise['prepare']>,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\t/** @internal */ public fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper('async', executeMethod, query, cache, queryMetadata, cacheConfig);\n\t}\n\n\tasync run(placeholderValues?: Record<string, unknown>): Promise<TursoDatabaseRunResult> {\n\t\tconst { stmt, query, logger } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.run(...params) : stmt.run());\n\t\t});\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tif (this.isRqbV2Query) return await this.allRqbV2(placeholderValues);\n\n\t\tconst { fields, logger, query, customResultMapper, joinsNotNullableMap, stmt } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());\n\t\t\t});\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tprivate async allRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { logger, query, customResultMapper, stmt } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst rows = await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());\n\n\t\treturn (customResultMapper as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown)(rows as Record<string, unknown>[]) as T['all'];\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tif (this.isRqbV2Query) return await this.getRqbV2(placeholderValues);\n\n\t\tconst { fields, logger, query, stmt, customResultMapper, joinsNotNullableMap } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());\n\t\t\t});\n\t\t}\n\n\t\tconst row = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.raw(true).get(...params) : stmt.raw(true).get());\n\t\t});\n\n\t\tif (row === undefined) return row;\n\n\t\treturn mapResultRow(fields!, row, joinsNotNullableMap);\n\t}\n\n\tprivate async getRqbV2(placeholderValues?: Record<string, unknown>) {\n\t\tconst { logger, query, stmt, customResultMapper } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst row = await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());\n\n\t\tif (row === undefined) return row;\n\n\t\treturn (customResultMapper as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown)([row] as Record<string, unknown>[]) as T['get'];\n\t}\n\n\tasync values(placeholderValues?: Record<string, unknown>): Promise<T['values']> {\n\t\tconst { logger, stmt, query } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.raw(true).all(...params) : stmt.raw(true).all());\n\t\t});\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"session.js","names":["SQLiteSession","SQLitePreparedQuery"],"sources":["../../src/tursodatabase/session.ts"],"sourcesContent":["import type { DatabasePromise } from '@tursodatabase/database-common';\nimport type * as V1 from '~/_relations.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleError } from '~/errors.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport {\n\ttype AnyRelations,\n\tmakeJitRqbMapper,\n\ttype RelationalQueryMapperConfig,\n\ttype RelationalRowsMapper,\n} from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tResult,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { makeJitQueryMapper, mapResultRow, type RowsMapper } from '~/utils.ts';\nimport type { TursoDatabaseRunResult } from './driver-core.ts';\n\nexport interface TursoDatabaseSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n\tuseJitMapper?: boolean;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class TursoDatabaseSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: DatabasePromise,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate relations: TRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: TursoDatabaseSessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): TursoDatabasePreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tthis.options.useJitMapper,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t\tconfig: RelationalQueryMapperConfig,\n\t): TursoDatabasePreparedQuery<T, true> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tthis.options.useJitMapper,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t\tconfig,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (db: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\t_config?: SQLiteTransactionConfig,\n\t\ttx?: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>,\n\t): Promise<T> {\n\t\tconst session = new TursoDatabaseSession<TFullSchema, TRelations, TSchema>(\n\t\t\tthis.client,\n\t\t\tthis.dialect,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.options,\n\t\t);\n\t\tconst localTx = tx ?? new TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>(\n\t\t\t'async',\n\t\t\tthis.dialect,\n\t\t\tsession,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t);\n\n\t\tconst clientTx = this.client.transaction(async () => await transaction(localTx));\n\n\t\tconst result = await clientTx();\n\t\treturn result;\n\t}\n\n\toverride async run(query: SQL): Result<'async', TursoDatabaseRunResult> {\n\t\tconst staticQuery = this.dialect.sqlToQuery(query);\n\t\ttry {\n\t\t\treturn await this.prepareOneTimeQuery(staticQuery, undefined, 'run').run() as Result<\n\t\t\t\t'async',\n\t\t\t\tTursoDatabaseRunResult\n\t\t\t>;\n\t\t} catch (err) {\n\t\t\tthrow new DrizzleError({ cause: err, message: `Failed to run the query '${staticQuery.sql}'` });\n\t\t}\n\t}\n\n\toverride async all<T = unknown>(query: SQL): Result<'async', T[]> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run').all() as Result<\n\t\t\t'async',\n\t\t\tT[]\n\t\t>;\n\t}\n\n\toverride async get<T = unknown>(query: SQL): Result<'async', T> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run').get() as Result<\n\t\t\t'async',\n\t\t\tT\n\t\t>;\n\t}\n\n\toverride async values<T extends any[] = unknown[]>(\n\t\tquery: SQL,\n\t): Result<'async', T[]> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run').values() as Result<\n\t\t\t'async',\n\t\t\tT[]\n\t\t>;\n\t}\n}\n\nexport class TursoDatabaseTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseTransaction';\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\t// Not supported by driver\n\t\tthrow new Error('Nested transactions are not supported');\n\n\t\t// const savepointName = `sp${this.nestedIndex}`;\n\n\t\t// const tx = new TursoDatabaseTransaction(\n\t\t// \t'async',\n\t\t// \tthis.dialect,\n\t\t// \tthis.session,\n\t\t// \tthis.relations,\n\t\t// \tthis.schema,\n\t\t// \tthis.nestedIndex + 1,\n\t\t// );\n\n\t\t// await this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\t// try {\n\t\t// \tconst result = await (<TursoDatabaseSession<TFullSchema, TRelations, TSchema>> (this.session)).transaction(\n\t\t// \t\ttransaction,\n\t\t// \t\tundefined,\n\t\t// \t\ttx,\n\t\t// \t);\n\t\t// \tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t// \treturn result;\n\t\t// } catch (err) {\n\t\t// \tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t// \tthrow err;\n\t\t// }\n\t}\n}\n\nexport class TursoDatabasePreparedQuery<\n\tT extends PreparedQueryConfig = PreparedQueryConfig,\n\tTIsRqbV2 extends boolean = false,\n> extends SQLitePreparedQuery<\n\t{\n\t\ttype: 'async';\n\t\trun: TursoDatabaseRunResult;\n\t\tall: T['all'];\n\t\tget: T['get'];\n\t\tvalues: T['values'];\n\t\texecute: T['execute'];\n\t}\n> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabasePreparedQuery';\n\tprivate jitMapper?: RowsMapper<any> | RelationalRowsMapper<any>;\n\n\tconstructor(\n\t\tprivate stmt: ReturnType<DatabasePromise['prepare']>,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\t/** @internal */ public fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate useJitMapper: boolean | undefined,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t\tprivate rqbConfig?: RelationalQueryMapperConfig,\n\t) {\n\t\tsuper('async', executeMethod, query, cache, queryMetadata, cacheConfig);\n\t}\n\n\tasync run(placeholderValues?: Record<string, unknown>): Promise<TursoDatabaseRunResult> {\n\t\tconst { stmt, query, logger } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.run(...params) : stmt.run());\n\t\t});\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tif (this.isRqbV2Query) return await this.allRqbV2(placeholderValues);\n\n\t\tconst { fields, logger, query, customResultMapper, joinsNotNullableMap, stmt } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());\n\t\t\t});\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.useJitMapper\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['all']>\n\t\t\t\t?? makeJitQueryMapper<T['all']>(fields!, joinsNotNullableMap))(rows)\n\t\t\t: rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tprivate async allRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { logger, query, customResultMapper, stmt } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst rows = await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());\n\n\t\treturn this.useJitMapper\n\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['all']>\n\t\t\t\t?? makeJitRqbMapper<T['all']>(this.rqbConfig!))(rows)\n\t\t\t: (customResultMapper as (\n\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)(rows as Record<string, unknown>[]) as T['all'];\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tif (this.isRqbV2Query) return await this.getRqbV2(placeholderValues);\n\n\t\tconst { fields, logger, query, stmt, customResultMapper, joinsNotNullableMap } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());\n\t\t\t});\n\t\t}\n\n\t\tconst row = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.raw(true).get(...params) : stmt.raw(true).get());\n\t\t});\n\n\t\tif (row === undefined) return row;\n\n\t\treturn this.useJitMapper\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['get'][]>\n\t\t\t\t?? makeJitQueryMapper<T['get'][]>(fields!, joinsNotNullableMap))(\n\t\t\t\t\t[row],\n\t\t\t\t)[0]\n\t\t\t: mapResultRow(fields!, row, joinsNotNullableMap);\n\t}\n\n\tprivate async getRqbV2(placeholderValues?: Record<string, unknown>) {\n\t\tconst { logger, query, stmt, customResultMapper } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst row = await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());\n\n\t\tif (row === undefined) return row;\n\n\t\treturn this.useJitMapper\n\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['get'][]>\n\t\t\t\t?? makeJitRqbMapper<T['get'][]>(this.rqbConfig!))([row])\n\t\t\t: (customResultMapper as (\n\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)([row] as Record<string, unknown>[]) as T['get'];\n\t}\n\n\tasync values(placeholderValues?: Record<string, unknown>): Promise<T['values']> {\n\t\tconst { logger, stmt, query } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.raw(true).all(...params) : stmt.raw(true).all());\n\t\t});\n\t}\n}\n"],"mappings":"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"}
@@ -16,7 +16,7 @@ function getVersion(columns) {
16
16
  const upgradeFunctions = { 0: (migrationsSchema, migrationsTable, session, localMigrations) => {
17
17
  return effect.Effect.gen(function* () {
18
18
  const table = __sql_sql_ts.sql`${__sql_sql_ts.sql.identifier(migrationsSchema)}.${__sql_sql_ts.sql.identifier(migrationsTable)}`;
19
- const dbRows = yield* session.all(__sql_sql_ts.sql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`);
19
+ const dbRows = yield* session.objects(__sql_sql_ts.sql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`);
20
20
  localMigrations.sort((a, b) => a.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? "").localeCompare(b.name ?? ""));
21
21
  const byMillis = /* @__PURE__ */ new Map();
22
22
  const byHash = /* @__PURE__ */ new Map();
@@ -56,10 +56,10 @@ const upgradeFunctions = { 0: (migrationsSchema, migrationsTable, session, local
56
56
  * Version 1: Extended schema (id, hash, created_at, name, applied_at)
57
57
  */
58
58
  const upgradeIfNeeded = effect.Effect.fn("upgradeIfNeeded")(function* (migrationsSchema, migrationsTable, session, localMigrations) {
59
- if ((yield* session.all(__sql_sql_ts.sql`SELECT 1 FROM information_schema.tables
59
+ if ((yield* session.objects(__sql_sql_ts.sql`SELECT 1 FROM information_schema.tables
60
60
  WHERE table_schema = ${migrationsSchema}
61
61
  AND table_name = ${migrationsTable}`)).length === 0) return { newDb: true };
62
- const version = getVersion((yield* session.all(__sql_sql_ts.sql`SELECT
62
+ const version = getVersion((yield* session.objects(__sql_sql_ts.sql`SELECT
63
63
  n.nspname AS "schema",
64
64
  c.relname AS "table_name",
65
65
  a.attname AS "column_name",
@@ -1 +1 @@
1
- {"version":3,"file":"effect-pg.cjs","names":["Effect","sql"],"sources":["../../src/up-migrations/effect-pg.ts"],"sourcesContent":["import { Effect } from 'effect';\nimport type { QueryEffectHKTBase } from '~/effect-core/query-effect.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { PgEffectSession } from '~/pg-core/effect/session.ts';\nimport { sql } from '~/sql/sql.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) => Effect.Effect<void, TEffectHKT['error'], TEffectHKT['context']>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: (migrationsSchema, migrationsTable, session, localMigrations) => {\n\t\treturn Effect.gen(function*() {\n\t\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t\t// 1. Read all existing DB migrations\n\t\t\t// Sort them by ids asc (order how they were applied)\n\t\t\tconst dbRows = yield* session.all<{ id: number; hash: string; created_at: string }>(\n\t\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t\t);\n\n\t\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\t\tlocalMigrations.sort((a, b) =>\n\t\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t\t);\n\n\t\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\t\tfor (const lm of localMigrations) {\n\t\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t\t}\n\t\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\t\tbyHash.set(lm.hash, lm);\n\t\t\t}\n\n\t\t\t// 3. Match each DB row to a local migration\n\t\t\t// Priority: millis -> hash\n\t\t\tconst toApply: { id: number; name: string }[] = [];\n\t\t\tlet unmatchedIds: number[] = [];\n\n\t\t\tfor (const dbRow of dbRows) {\n\t\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\t\tmatched = candidates[0];\n\t\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t\t} else {\n\t\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t\t}\n\n\t\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t\t}\n\n\t\t\t// 4. Check for unmatched\n\t\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\t\tif (unmatchedIds.length > 0) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// 5. Create extra column and backfill names for matched migrations\n\t\t\tyield* session.transaction((tx) =>\n\t\t\t\tEffect.gen(function*() {\n\t\t\t\t\tyield* tx.execute(sql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`);\n\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\t\t\t\tsql.identifier('applied_at')\n\t\t\t\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const backfillEntry of toApply) {\n\t\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${backfillEntry.name}, ${\n\t\t\t\t\t\t\t\tsql.identifier('applied_at')\n\t\t\t\t\t\t\t} = NULL WHERE ${sql.identifier('id')} = ${backfillEntry.id}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport const upgradeIfNeeded: <TEffectHKT extends QueryEffectHKTBase>(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tsession: PgEffectSession<TEffectHKT>,\n\tlocalMigrations: MigrationMeta[],\n) => Effect.Effect<UpgradeResult, TEffectHKT['error'], TEffectHKT['context']> = Effect.fn('upgradeIfNeeded')(\n\tfunction*<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) {\n\t\t// Check if the table exists at all\n\t\tconst result = yield* session.all(\n\t\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t\t);\n\n\t\tif (result.length === 0) {\n\t\t\treturn { newDb: true };\n\t\t}\n\n\t\t// Table exists, check table shape\n\t\tconst rows = yield* session.all<{ schema: string; table_name: string; column_name: string; type: string }>(\n\t\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t\t);\n\n\t\tconst version = getVersion(rows.map((r) => r.column_name));\n\n\t\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\t\tconst upgradeFn = upgradeFunctions[v];\n\t\t\tif (!upgradeFn) {\n\t\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t\t}\n\t\t\tyield* upgradeFn(migrationsSchema, migrationsTable, session, localMigrations);\n\t\t}\n\n\t\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n\t},\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"effect-pg.cjs","names":["Effect","sql"],"sources":["../../src/up-migrations/effect-pg.ts"],"sourcesContent":["import { Effect } from 'effect';\nimport type { QueryEffectHKTBase } from '~/effect-core/query-effect.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { PgEffectSession } from '~/pg-core/effect/session.ts';\nimport { sql } from '~/sql/sql.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) => Effect.Effect<void, TEffectHKT['error'], TEffectHKT['context']>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: (migrationsSchema, migrationsTable, session, localMigrations) => {\n\t\treturn Effect.gen(function*() {\n\t\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t\t// 1. Read all existing DB migrations\n\t\t\t// Sort them by ids asc (order how they were applied)\n\t\t\tconst dbRows = yield* session.objects<{ id: number; hash: string; created_at: string }>(\n\t\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t\t);\n\n\t\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\t\tlocalMigrations.sort((a, b) =>\n\t\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t\t);\n\n\t\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\t\tfor (const lm of localMigrations) {\n\t\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t\t}\n\t\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\t\tbyHash.set(lm.hash, lm);\n\t\t\t}\n\n\t\t\t// 3. Match each DB row to a local migration\n\t\t\t// Priority: millis -> hash\n\t\t\tconst toApply: { id: number; name: string }[] = [];\n\t\t\tlet unmatchedIds: number[] = [];\n\n\t\t\tfor (const dbRow of dbRows) {\n\t\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\t\tmatched = candidates[0];\n\t\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t\t} else {\n\t\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t\t}\n\n\t\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t\t}\n\n\t\t\t// 4. Check for unmatched\n\t\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\t\tif (unmatchedIds.length > 0) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// 5. Create extra column and backfill names for matched migrations\n\t\t\tyield* session.transaction((tx) =>\n\t\t\t\tEffect.gen(function*() {\n\t\t\t\t\tyield* tx.execute(sql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`);\n\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\t\t\t\tsql.identifier('applied_at')\n\t\t\t\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const backfillEntry of toApply) {\n\t\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${backfillEntry.name}, ${\n\t\t\t\t\t\t\t\tsql.identifier('applied_at')\n\t\t\t\t\t\t\t} = NULL WHERE ${sql.identifier('id')} = ${backfillEntry.id}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport const upgradeIfNeeded: <TEffectHKT extends QueryEffectHKTBase>(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tsession: PgEffectSession<TEffectHKT>,\n\tlocalMigrations: MigrationMeta[],\n) => Effect.Effect<UpgradeResult, TEffectHKT['error'], TEffectHKT['context']> = Effect.fn('upgradeIfNeeded')(\n\tfunction*<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) {\n\t\t// Check if the table exists at all\n\t\tconst result = yield* session.objects(\n\t\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t\t);\n\n\t\tif (result.length === 0) {\n\t\t\treturn { newDb: true };\n\t\t}\n\n\t\t// Table exists, check table shape\n\t\tconst rows = yield* session.objects<{ schema: string; table_name: string; column_name: string; type: string }>(\n\t\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t\t);\n\n\t\tconst version = getVersion(rows.map((r) => r.column_name));\n\n\t\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\t\tconst upgradeFn = upgradeFunctions[v];\n\t\t\tif (!upgradeFn) {\n\t\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t\t}\n\t\t\tyield* upgradeFn(migrationsSchema, migrationsTable, session, localMigrations);\n\t\t}\n\n\t\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n\t},\n);\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { MigrationMeta } from "../migrator.js";
2
- import { Effect } from "effect";
3
2
  import { PgEffectSession } from "../pg-core/effect/session.js";
3
+ import { Effect } from "effect";
4
4
  import { QueryEffectHKTBase } from "../effect-core/query-effect.js";
5
5
 
6
6
  //#region src/up-migrations/effect-pg.d.ts
@@ -14,7 +14,7 @@ function getVersion(columns) {
14
14
  const upgradeFunctions = { 0: (migrationsSchema, migrationsTable, session, localMigrations) => {
15
15
  return Effect.gen(function* () {
16
16
  const table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;
17
- const dbRows = yield* session.all(sql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`);
17
+ const dbRows = yield* session.objects(sql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`);
18
18
  localMigrations.sort((a, b) => a.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? "").localeCompare(b.name ?? ""));
19
19
  const byMillis = /* @__PURE__ */ new Map();
20
20
  const byHash = /* @__PURE__ */ new Map();
@@ -54,10 +54,10 @@ const upgradeFunctions = { 0: (migrationsSchema, migrationsTable, session, local
54
54
  * Version 1: Extended schema (id, hash, created_at, name, applied_at)
55
55
  */
56
56
  const upgradeIfNeeded = Effect.fn("upgradeIfNeeded")(function* (migrationsSchema, migrationsTable, session, localMigrations) {
57
- if ((yield* session.all(sql`SELECT 1 FROM information_schema.tables
57
+ if ((yield* session.objects(sql`SELECT 1 FROM information_schema.tables
58
58
  WHERE table_schema = ${migrationsSchema}
59
59
  AND table_name = ${migrationsTable}`)).length === 0) return { newDb: true };
60
- const version = getVersion((yield* session.all(sql`SELECT
60
+ const version = getVersion((yield* session.objects(sql`SELECT
61
61
  n.nspname AS "schema",
62
62
  c.relname AS "table_name",
63
63
  a.attname AS "column_name",
@@ -1 +1 @@
1
- {"version":3,"file":"effect-pg.js","names":[],"sources":["../../src/up-migrations/effect-pg.ts"],"sourcesContent":["import { Effect } from 'effect';\nimport type { QueryEffectHKTBase } from '~/effect-core/query-effect.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { PgEffectSession } from '~/pg-core/effect/session.ts';\nimport { sql } from '~/sql/sql.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) => Effect.Effect<void, TEffectHKT['error'], TEffectHKT['context']>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: (migrationsSchema, migrationsTable, session, localMigrations) => {\n\t\treturn Effect.gen(function*() {\n\t\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t\t// 1. Read all existing DB migrations\n\t\t\t// Sort them by ids asc (order how they were applied)\n\t\t\tconst dbRows = yield* session.all<{ id: number; hash: string; created_at: string }>(\n\t\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t\t);\n\n\t\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\t\tlocalMigrations.sort((a, b) =>\n\t\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t\t);\n\n\t\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\t\tfor (const lm of localMigrations) {\n\t\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t\t}\n\t\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\t\tbyHash.set(lm.hash, lm);\n\t\t\t}\n\n\t\t\t// 3. Match each DB row to a local migration\n\t\t\t// Priority: millis -> hash\n\t\t\tconst toApply: { id: number; name: string }[] = [];\n\t\t\tlet unmatchedIds: number[] = [];\n\n\t\t\tfor (const dbRow of dbRows) {\n\t\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\t\tmatched = candidates[0];\n\t\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t\t} else {\n\t\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t\t}\n\n\t\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t\t}\n\n\t\t\t// 4. Check for unmatched\n\t\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\t\tif (unmatchedIds.length > 0) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// 5. Create extra column and backfill names for matched migrations\n\t\t\tyield* session.transaction((tx) =>\n\t\t\t\tEffect.gen(function*() {\n\t\t\t\t\tyield* tx.execute(sql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`);\n\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\t\t\t\tsql.identifier('applied_at')\n\t\t\t\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const backfillEntry of toApply) {\n\t\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${backfillEntry.name}, ${\n\t\t\t\t\t\t\t\tsql.identifier('applied_at')\n\t\t\t\t\t\t\t} = NULL WHERE ${sql.identifier('id')} = ${backfillEntry.id}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport const upgradeIfNeeded: <TEffectHKT extends QueryEffectHKTBase>(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tsession: PgEffectSession<TEffectHKT>,\n\tlocalMigrations: MigrationMeta[],\n) => Effect.Effect<UpgradeResult, TEffectHKT['error'], TEffectHKT['context']> = Effect.fn('upgradeIfNeeded')(\n\tfunction*<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) {\n\t\t// Check if the table exists at all\n\t\tconst result = yield* session.all(\n\t\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t\t);\n\n\t\tif (result.length === 0) {\n\t\t\treturn { newDb: true };\n\t\t}\n\n\t\t// Table exists, check table shape\n\t\tconst rows = yield* session.all<{ schema: string; table_name: string; column_name: string; type: string }>(\n\t\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t\t);\n\n\t\tconst version = getVersion(rows.map((r) => r.column_name));\n\n\t\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\t\tconst upgradeFn = upgradeFunctions[v];\n\t\t\tif (!upgradeFn) {\n\t\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t\t}\n\t\t\tyield* upgradeFn(migrationsSchema, migrationsTable, session, localMigrations);\n\t\t}\n\n\t\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n\t},\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"effect-pg.js","names":[],"sources":["../../src/up-migrations/effect-pg.ts"],"sourcesContent":["import { Effect } from 'effect';\nimport type { QueryEffectHKTBase } from '~/effect-core/query-effect.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { PgEffectSession } from '~/pg-core/effect/session.ts';\nimport { sql } from '~/sql/sql.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) => Effect.Effect<void, TEffectHKT['error'], TEffectHKT['context']>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: (migrationsSchema, migrationsTable, session, localMigrations) => {\n\t\treturn Effect.gen(function*() {\n\t\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t\t// 1. Read all existing DB migrations\n\t\t\t// Sort them by ids asc (order how they were applied)\n\t\t\tconst dbRows = yield* session.objects<{ id: number; hash: string; created_at: string }>(\n\t\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t\t);\n\n\t\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\t\tlocalMigrations.sort((a, b) =>\n\t\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t\t);\n\n\t\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\t\tfor (const lm of localMigrations) {\n\t\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t\t}\n\t\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\t\tbyHash.set(lm.hash, lm);\n\t\t\t}\n\n\t\t\t// 3. Match each DB row to a local migration\n\t\t\t// Priority: millis -> hash\n\t\t\tconst toApply: { id: number; name: string }[] = [];\n\t\t\tlet unmatchedIds: number[] = [];\n\n\t\t\tfor (const dbRow of dbRows) {\n\t\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\t\tmatched = candidates[0];\n\t\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t\t} else {\n\t\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t\t}\n\n\t\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t\t}\n\n\t\t\t// 4. Check for unmatched\n\t\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\t\tif (unmatchedIds.length > 0) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// 5. Create extra column and backfill names for matched migrations\n\t\t\tyield* session.transaction((tx) =>\n\t\t\t\tEffect.gen(function*() {\n\t\t\t\t\tyield* tx.execute(sql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`);\n\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\t\t\t\tsql.identifier('applied_at')\n\t\t\t\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const backfillEntry of toApply) {\n\t\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${backfillEntry.name}, ${\n\t\t\t\t\t\t\t\tsql.identifier('applied_at')\n\t\t\t\t\t\t\t} = NULL WHERE ${sql.identifier('id')} = ${backfillEntry.id}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport const upgradeIfNeeded: <TEffectHKT extends QueryEffectHKTBase>(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tsession: PgEffectSession<TEffectHKT>,\n\tlocalMigrations: MigrationMeta[],\n) => Effect.Effect<UpgradeResult, TEffectHKT['error'], TEffectHKT['context']> = Effect.fn('upgradeIfNeeded')(\n\tfunction*<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) {\n\t\t// Check if the table exists at all\n\t\tconst result = yield* session.objects(\n\t\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t\t);\n\n\t\tif (result.length === 0) {\n\t\t\treturn { newDb: true };\n\t\t}\n\n\t\t// Table exists, check table shape\n\t\tconst rows = yield* session.objects<{ schema: string; table_name: string; column_name: string; type: string }>(\n\t\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t\t);\n\n\t\tconst version = getVersion(rows.map((r) => r.column_name));\n\n\t\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\t\tconst upgradeFn = upgradeFunctions[v];\n\t\t\tif (!upgradeFn) {\n\t\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t\t}\n\t\t\tyield* upgradeFn(migrationsSchema, migrationsTable, session, localMigrations);\n\t\t}\n\n\t\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n\t},\n);\n"],"mappings":"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"}
@@ -8,18 +8,13 @@ function getVersion(columns) {
8
8
  if (columns.includes("name")) return 1;
9
9
  return 0;
10
10
  }
11
- async function execute(session, sql) {
12
- const result = await session.execute(sql);
13
- if ("rows" in result) return result.rows;
14
- return result;
15
- }
16
11
  /**
17
12
  * Map of upgrade functions. Each key is the version being upgraded FROM,
18
13
  * and the function upgrades the table to the next version.
19
14
  */
20
15
  const upgradeFunctions = { 0: async (migrationsSchema, migrationsTable, db, localMigrations, mode) => {
21
16
  const table = __sql_sql_ts.sql`${__sql_sql_ts.sql.identifier(migrationsSchema)}.${__sql_sql_ts.sql.identifier(migrationsTable)}`;
22
- const dbRows = await execute(db.session, __sql_sql_ts.sql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`);
17
+ const dbRows = await db.session.objects(__sql_sql_ts.sql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`);
23
18
  localMigrations.sort((a, b) => a.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? "").localeCompare(b.name ?? ""));
24
19
  const byMillis = /* @__PURE__ */ new Map();
25
20
  const byHash = /* @__PURE__ */ new Map();
@@ -62,10 +57,10 @@ const upgradeFunctions = { 0: async (migrationsSchema, migrationsTable, db, loca
62
57
  * Version 1: Extended schema (id, hash, created_at, name, applied_at)
63
58
  */
64
59
  async function upgradeIfNeeded(migrationsSchema, migrationsTable, db, localMigrations, mode = "transaction") {
65
- if ((await execute(db.session, __sql_sql_ts.sql`SELECT 1 FROM information_schema.tables
60
+ if ((await db.session.objects(__sql_sql_ts.sql`SELECT 1 FROM information_schema.tables
66
61
  WHERE table_schema = ${migrationsSchema}
67
62
  AND table_name = ${migrationsTable}`)).length === 0) return { newDb: true };
68
- let version = getVersion((await execute(db.session, __sql_sql_ts.sql`SELECT
63
+ let version = getVersion((await db.session.objects(__sql_sql_ts.sql`SELECT
69
64
  n.nspname AS "schema",
70
65
  c.relname AS "table_name",
71
66
  a.attname AS "column_name",
@@ -1 +1 @@
1
- {"version":3,"file":"pg.cjs","names":["sql"],"sources":["../../src/up-migrations/pg.ts"],"sourcesContent":["import type { TablesRelationalConfig } from '~/_relations.ts';\nimport type { BatchItem } from '~/batch.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { NeonHttpDatabase } from '~/neon-http/driver.ts';\nimport type { NeonHttpSession } from '~/neon-http/session.ts';\nimport type { PgAsyncDatabase } from '~/pg-core/async/db.ts';\nimport type { PgAsyncSession, PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgQueryResultHKT } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { type SQL, sql } from '~/sql/sql.ts';\nimport type { XataHttpSession } from '~/xata-http/session.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n// postgres.js returns array of objects\n// pg-proxy returns arrays of objects\n// node-postgres returns { rows: array of objects }\nasync function execute<T extends any[]>(\n\tsession:\n\t\t| PgAsyncSession\n\t\t| NeonHttpSession<Record<string, unknown>, AnyRelations, TablesRelationalConfig>\n\t\t| XataHttpSession<Record<string, unknown>, AnyRelations, TablesRelationalConfig>,\n\tsql: SQL,\n): Promise<T> {\n\tconst result: { rows: T } | T = await session.execute(sql);\n\tif ('rows' in result) return result.rows;\n\treturn result;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tdb: PgAsyncDatabase<PgQueryResultHKT, any, any, any>,\n\t\tlocalMigrations: MigrationMeta[],\n\t\tmode: 'transaction' | 'execute' | 'batch',\n\t) => Promise<void>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: async (migrationsSchema, migrationsTable, db, localMigrations, mode) => {\n\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t// 1. Read all existing DB migrations\n\t\t// Sort them by ids asc (order how they were applied)\n\t\tconst dbRows = await execute<{ id: number; hash: string; created_at: string }[]>(\n\t\t\tdb.session,\n\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t);\n\n\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\tlocalMigrations.sort((a, b) =>\n\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t);\n\n\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\tfor (const lm of localMigrations) {\n\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t}\n\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\tbyHash.set(lm.hash, lm);\n\t\t}\n\n\t\t// \t3. Match each DB row to a local migration\n\t\t// \tPriority: millis -> hash\n\t\tconst toApply: { id: number; name: string }[] = [];\n\t\tlet unmatchedIds: number[] = [];\n\n\t\tfor (const dbRow of dbRows) {\n\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\tmatched = candidates[0];\n\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t} else {\n\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t}\n\n\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t}\n\n\t\t// 4. Check for unmatched\n\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\tif (unmatchedIds.length > 0) {\n\t\t\tthrow Error(\n\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t);\n\t\t}\n\n\t\t// 5. Create extra column and backfill names for matched migrations\n\t\tconst sqls: SQL[] = [\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`,\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\tsql.identifier('applied_at')\n\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t];\n\t\tfor (const { id, name } of toApply) {\n\t\t\tsqls.push(\n\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${name}, ${sql.identifier('applied_at')} = NULL WHERE ${\n\t\t\t\t\tsql.identifier('id')\n\t\t\t\t} = ${id}`,\n\t\t\t);\n\t\t}\n\n\t\t// check if http\n\t\t// execute -> proxy, http drivers\n\t\t// transaction -> other\n\t\tif (mode === 'transaction') {\n\t\t\tawait db.transaction(async (tx: PgAsyncTransaction<any, any, any>) => {\n\t\t\t\tfor (const sql of sqls) {\n\t\t\t\t\tawait tx.execute(sql);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (mode === 'batch') {\n\t\t\tconst database = db as NeonHttpDatabase;\n\n\t\t\tawait database.batch(\n\t\t\t\tsqls.map((s) => database.execute(s)) as unknown as [BatchItem<'pg'>, ...BatchItem<'pg'>[]],\n\t\t\t);\n\t\t} else {\n\t\t\tfor (const sql of sqls) {\n\t\t\t\tawait db.execute(sql);\n\t\t\t}\n\t\t}\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport async function upgradeIfNeeded(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tdb: PgAsyncDatabase<PgQueryResultHKT, any, any, any>,\n\tlocalMigrations: MigrationMeta[],\n\tmode: 'transaction' | 'execute' | 'batch' = 'transaction',\n): Promise<UpgradeResult> {\n\t// Check if the table exists at all\n\tconst result = await execute<{ '1': 1 }[]>(\n\t\tdb.session,\n\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t);\n\n\tif (result.length === 0) {\n\t\treturn { newDb: true };\n\t}\n\n\t// Table exists, check table shape\n\tconst rows = await execute<\n\t\t{ schema: string; table_name: string; column_name: string; type: string }[]\n\t>(\n\t\tdb.session,\n\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t);\n\n\tlet version = getVersion(rows.map((r) => r.column_name));\n\n\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\tconst upgradeFn = upgradeFunctions[v];\n\t\tif (!upgradeFn) {\n\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t}\n\t\tawait upgradeFn(migrationsSchema, migrationsTable, db, localMigrations, mode);\n\t}\n\n\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"pg.cjs","names":["sql"],"sources":["../../src/up-migrations/pg.ts"],"sourcesContent":["import type { BatchItem } from '~/batch.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { NeonHttpDatabase } from '~/neon-http/driver.ts';\nimport type { PgAsyncDatabase } from '~/pg-core/async/db.ts';\nimport type { PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgQueryResultHKT } from '~/pg-core/session.ts';\nimport { type SQL, sql } from '~/sql/sql.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tdb: PgAsyncDatabase<PgQueryResultHKT, any>,\n\t\tlocalMigrations: MigrationMeta[],\n\t\tmode: 'transaction' | 'execute' | 'batch',\n\t) => Promise<void>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: async (migrationsSchema, migrationsTable, db, localMigrations, mode) => {\n\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t// 1. Read all existing DB migrations\n\t\t// Sort them by ids asc (order how they were applied)\n\t\tconst dbRows = await db.session.objects<{ id: number; hash: string; created_at: string }>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t);\n\n\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\tlocalMigrations.sort((a, b) =>\n\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t);\n\n\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\tfor (const lm of localMigrations) {\n\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t}\n\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\tbyHash.set(lm.hash, lm);\n\t\t}\n\n\t\t// \t3. Match each DB row to a local migration\n\t\t// \tPriority: millis -> hash\n\t\tconst toApply: { id: number; name: string }[] = [];\n\t\tlet unmatchedIds: number[] = [];\n\n\t\tfor (const dbRow of dbRows) {\n\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\tmatched = candidates[0];\n\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t} else {\n\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t}\n\n\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t}\n\n\t\t// 4. Check for unmatched\n\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\tif (unmatchedIds.length > 0) {\n\t\t\tthrow Error(\n\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t);\n\t\t}\n\n\t\t// 5. Create extra column and backfill names for matched migrations\n\t\tconst sqls: SQL[] = [\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`,\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\tsql.identifier('applied_at')\n\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t];\n\t\tfor (const { id, name } of toApply) {\n\t\t\tsqls.push(\n\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${name}, ${sql.identifier('applied_at')} = NULL WHERE ${\n\t\t\t\t\tsql.identifier('id')\n\t\t\t\t} = ${id}`,\n\t\t\t);\n\t\t}\n\n\t\t// check if http\n\t\t// execute -> proxy, http drivers\n\t\t// transaction -> other\n\t\tif (mode === 'transaction') {\n\t\t\tawait db.transaction(async (tx: PgAsyncTransaction<any, any>) => {\n\t\t\t\tfor (const sql of sqls) {\n\t\t\t\t\tawait tx.execute(sql);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (mode === 'batch') {\n\t\t\tconst database = db as NeonHttpDatabase;\n\n\t\t\tawait database.batch(\n\t\t\t\tsqls.map((s) => database.execute(s)) as unknown as [BatchItem<'pg'>, ...BatchItem<'pg'>[]],\n\t\t\t);\n\t\t} else {\n\t\t\tfor (const sql of sqls) {\n\t\t\t\tawait db.execute(sql);\n\t\t\t}\n\t\t}\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport async function upgradeIfNeeded(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tdb: PgAsyncDatabase<PgQueryResultHKT, any>,\n\tlocalMigrations: MigrationMeta[],\n\tmode: 'transaction' | 'execute' | 'batch' = 'transaction',\n): Promise<UpgradeResult> {\n\t// Check if the table exists at all\n\tconst result = await db.session.objects<{ '1': 1 }>(\n\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t);\n\n\tif (result.length === 0) {\n\t\treturn { newDb: true };\n\t}\n\n\t// Table exists, check table shape\n\tconst rows = await db.session.objects<\n\t\t{ schema: string; table_name: string; column_name: string; type: string }\n\t>(\n\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t);\n\n\tlet version = getVersion(rows.map((r) => r.column_name));\n\n\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\tconst upgradeFn = upgradeFunctions[v];\n\t\tif (!upgradeFn) {\n\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t}\n\t\tawait upgradeFn(migrationsSchema, migrationsTable, db, localMigrations, mode);\n\t}\n\n\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n}\n"],"mappings":"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"}
@@ -14,7 +14,7 @@ interface UpgradeResult {
14
14
  * Version 0: Original schema (id, hash, created_at)
15
15
  * Version 1: Extended schema (id, hash, created_at, name, applied_at)
16
16
  */
17
- declare function upgradeIfNeeded(migrationsSchema: string, migrationsTable: string, db: PgAsyncDatabase<PgQueryResultHKT, any, any, any>, localMigrations: MigrationMeta[], mode?: 'transaction' | 'execute' | 'batch'): Promise<UpgradeResult>;
17
+ declare function upgradeIfNeeded(migrationsSchema: string, migrationsTable: string, db: PgAsyncDatabase<PgQueryResultHKT, any>, localMigrations: MigrationMeta[], mode?: 'transaction' | 'execute' | 'batch'): Promise<UpgradeResult>;
18
18
  //#endregion
19
19
  export { upgradeIfNeeded };
20
20
  //# sourceMappingURL=pg.d.cts.map
@@ -1,5 +1,5 @@
1
- import { PgAsyncDatabase } from "../pg-core/async/db.js";
2
1
  import { MigrationMeta } from "../migrator.js";
2
+ import { PgAsyncDatabase } from "../pg-core/async/db.js";
3
3
  import { PgQueryResultHKT } from "../pg-core/session.js";
4
4
 
5
5
  //#region src/up-migrations/pg.d.ts
@@ -14,7 +14,7 @@ interface UpgradeResult {
14
14
  * Version 0: Original schema (id, hash, created_at)
15
15
  * Version 1: Extended schema (id, hash, created_at, name, applied_at)
16
16
  */
17
- declare function upgradeIfNeeded(migrationsSchema: string, migrationsTable: string, db: PgAsyncDatabase<PgQueryResultHKT, any, any, any>, localMigrations: MigrationMeta[], mode?: 'transaction' | 'execute' | 'batch'): Promise<UpgradeResult>;
17
+ declare function upgradeIfNeeded(migrationsSchema: string, migrationsTable: string, db: PgAsyncDatabase<PgQueryResultHKT, any>, localMigrations: MigrationMeta[], mode?: 'transaction' | 'execute' | 'batch'): Promise<UpgradeResult>;
18
18
  //#endregion
19
19
  export { upgradeIfNeeded };
20
20
  //# sourceMappingURL=pg.d.ts.map
@@ -6,18 +6,13 @@ function getVersion(columns) {
6
6
  if (columns.includes("name")) return 1;
7
7
  return 0;
8
8
  }
9
- async function execute(session, sql) {
10
- const result = await session.execute(sql);
11
- if ("rows" in result) return result.rows;
12
- return result;
13
- }
14
9
  /**
15
10
  * Map of upgrade functions. Each key is the version being upgraded FROM,
16
11
  * and the function upgrades the table to the next version.
17
12
  */
18
13
  const upgradeFunctions = { 0: async (migrationsSchema, migrationsTable, db, localMigrations, mode) => {
19
14
  const table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;
20
- const dbRows = await execute(db.session, sql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`);
15
+ const dbRows = await db.session.objects(sql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`);
21
16
  localMigrations.sort((a, b) => a.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? "").localeCompare(b.name ?? ""));
22
17
  const byMillis = /* @__PURE__ */ new Map();
23
18
  const byHash = /* @__PURE__ */ new Map();
@@ -60,10 +55,10 @@ const upgradeFunctions = { 0: async (migrationsSchema, migrationsTable, db, loca
60
55
  * Version 1: Extended schema (id, hash, created_at, name, applied_at)
61
56
  */
62
57
  async function upgradeIfNeeded(migrationsSchema, migrationsTable, db, localMigrations, mode = "transaction") {
63
- if ((await execute(db.session, sql`SELECT 1 FROM information_schema.tables
58
+ if ((await db.session.objects(sql`SELECT 1 FROM information_schema.tables
64
59
  WHERE table_schema = ${migrationsSchema}
65
60
  AND table_name = ${migrationsTable}`)).length === 0) return { newDb: true };
66
- let version = getVersion((await execute(db.session, sql`SELECT
61
+ let version = getVersion((await db.session.objects(sql`SELECT
67
62
  n.nspname AS "schema",
68
63
  c.relname AS "table_name",
69
64
  a.attname AS "column_name",
@@ -1 +1 @@
1
- {"version":3,"file":"pg.js","names":[],"sources":["../../src/up-migrations/pg.ts"],"sourcesContent":["import type { TablesRelationalConfig } from '~/_relations.ts';\nimport type { BatchItem } from '~/batch.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { NeonHttpDatabase } from '~/neon-http/driver.ts';\nimport type { NeonHttpSession } from '~/neon-http/session.ts';\nimport type { PgAsyncDatabase } from '~/pg-core/async/db.ts';\nimport type { PgAsyncSession, PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgQueryResultHKT } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { type SQL, sql } from '~/sql/sql.ts';\nimport type { XataHttpSession } from '~/xata-http/session.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n// postgres.js returns array of objects\n// pg-proxy returns arrays of objects\n// node-postgres returns { rows: array of objects }\nasync function execute<T extends any[]>(\n\tsession:\n\t\t| PgAsyncSession\n\t\t| NeonHttpSession<Record<string, unknown>, AnyRelations, TablesRelationalConfig>\n\t\t| XataHttpSession<Record<string, unknown>, AnyRelations, TablesRelationalConfig>,\n\tsql: SQL,\n): Promise<T> {\n\tconst result: { rows: T } | T = await session.execute(sql);\n\tif ('rows' in result) return result.rows;\n\treturn result;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tdb: PgAsyncDatabase<PgQueryResultHKT, any, any, any>,\n\t\tlocalMigrations: MigrationMeta[],\n\t\tmode: 'transaction' | 'execute' | 'batch',\n\t) => Promise<void>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: async (migrationsSchema, migrationsTable, db, localMigrations, mode) => {\n\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t// 1. Read all existing DB migrations\n\t\t// Sort them by ids asc (order how they were applied)\n\t\tconst dbRows = await execute<{ id: number; hash: string; created_at: string }[]>(\n\t\t\tdb.session,\n\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t);\n\n\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\tlocalMigrations.sort((a, b) =>\n\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t);\n\n\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\tfor (const lm of localMigrations) {\n\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t}\n\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\tbyHash.set(lm.hash, lm);\n\t\t}\n\n\t\t// \t3. Match each DB row to a local migration\n\t\t// \tPriority: millis -> hash\n\t\tconst toApply: { id: number; name: string }[] = [];\n\t\tlet unmatchedIds: number[] = [];\n\n\t\tfor (const dbRow of dbRows) {\n\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\tmatched = candidates[0];\n\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t} else {\n\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t}\n\n\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t}\n\n\t\t// 4. Check for unmatched\n\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\tif (unmatchedIds.length > 0) {\n\t\t\tthrow Error(\n\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t);\n\t\t}\n\n\t\t// 5. Create extra column and backfill names for matched migrations\n\t\tconst sqls: SQL[] = [\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`,\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\tsql.identifier('applied_at')\n\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t];\n\t\tfor (const { id, name } of toApply) {\n\t\t\tsqls.push(\n\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${name}, ${sql.identifier('applied_at')} = NULL WHERE ${\n\t\t\t\t\tsql.identifier('id')\n\t\t\t\t} = ${id}`,\n\t\t\t);\n\t\t}\n\n\t\t// check if http\n\t\t// execute -> proxy, http drivers\n\t\t// transaction -> other\n\t\tif (mode === 'transaction') {\n\t\t\tawait db.transaction(async (tx: PgAsyncTransaction<any, any, any>) => {\n\t\t\t\tfor (const sql of sqls) {\n\t\t\t\t\tawait tx.execute(sql);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (mode === 'batch') {\n\t\t\tconst database = db as NeonHttpDatabase;\n\n\t\t\tawait database.batch(\n\t\t\t\tsqls.map((s) => database.execute(s)) as unknown as [BatchItem<'pg'>, ...BatchItem<'pg'>[]],\n\t\t\t);\n\t\t} else {\n\t\t\tfor (const sql of sqls) {\n\t\t\t\tawait db.execute(sql);\n\t\t\t}\n\t\t}\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport async function upgradeIfNeeded(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tdb: PgAsyncDatabase<PgQueryResultHKT, any, any, any>,\n\tlocalMigrations: MigrationMeta[],\n\tmode: 'transaction' | 'execute' | 'batch' = 'transaction',\n): Promise<UpgradeResult> {\n\t// Check if the table exists at all\n\tconst result = await execute<{ '1': 1 }[]>(\n\t\tdb.session,\n\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t);\n\n\tif (result.length === 0) {\n\t\treturn { newDb: true };\n\t}\n\n\t// Table exists, check table shape\n\tconst rows = await execute<\n\t\t{ schema: string; table_name: string; column_name: string; type: string }[]\n\t>(\n\t\tdb.session,\n\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t);\n\n\tlet version = getVersion(rows.map((r) => r.column_name));\n\n\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\tconst upgradeFn = upgradeFunctions[v];\n\t\tif (!upgradeFn) {\n\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t}\n\t\tawait upgradeFn(migrationsSchema, migrationsTable, db, localMigrations, mode);\n\t}\n\n\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n}\n"],"mappings":";;;AAYA,MAAM,kCAAkC;AAQxC,SAAS,WAAW,SAAmB;AACtC,KAAI,QAAQ,SAAS,OAAO,CAAE,QAAO;AACrC,QAAO;;AAMR,eAAe,QACd,SAIA,KACa;CACb,MAAM,SAA0B,MAAM,QAAQ,QAAQ,IAAI;AAC1D,KAAI,UAAU,OAAQ,QAAO,OAAO;AACpC,QAAO;;;;;;AAOR,MAAM,mBASF,EAUH,GAAG,OAAO,kBAAkB,iBAAiB,IAAI,iBAAiB,SAAS;CAC1E,MAAM,QAAQ,GAAG,GAAG,IAAI,WAAW,iBAAiB,CAAC,GAAG,IAAI,WAAW,gBAAgB;CAIvF,MAAM,SAAS,MAAM,QACpB,GAAG,SACH,GAAG,oCAAoC,MAAM,kBAC7C;AAGD,iBAAgB,MAAM,GAAG,MACxB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,IAAI,cAAc,EAAE,QAAQ,GAAG,CAChH;CAED,MAAM,2BAAW,IAAI,KAA8B;CACnD,MAAM,yBAAS,IAAI,KAA4B;AAC/C,MAAK,MAAM,MAAM,iBAAiB;AACjC,MAAI,CAAC,SAAS,IAAI,GAAG,aAAa,CACjC,UAAS,IAAI,GAAG,cAAc,EAAE,CAAC;AAElC,WAAS,IAAI,GAAG,aAAa,CAAE,KAAK,GAAG;AACvC,SAAO,IAAI,GAAG,MAAM,GAAG;;CAKxB,MAAM,UAA0C,EAAE;CAClD,IAAI,eAAyB,EAAE;AAE/B,MAAK,MAAM,SAAS,QAAQ;EAC3B,MAAM,cAAc,OAAO,MAAM,WAAW;EAC5C,MAAM,SAAS,OAAO,YAAY,UAAU,GAAG,YAAY,SAAS,EAAE,GAAG,MAAM;EAC/E,MAAM,aAAa,SAAS,IAAI,OAAO;EAEvC,IAAI;AAEJ,MAAI,cAAc,WAAW,WAAW,EACvC,WAAU,WAAW;WACX,cAAc,WAAW,SAAS,EAC5C,WAAU,WAAW,MAAM,MAAM,EAAE,SAAS,MAAM,KAAK;MAEvD,WAAU,OAAO,IAAI,MAAM,KAAK;AAGjC,MAAI,QAAS,SAAQ,KAAK;GAAE,IAAI,MAAM;GAAI,MAAM,QAAQ;GAAM,CAAC;MAC1D,cAAa,KAAK,MAAM,GAAG;;AAQjC,KAAI,aAAa,SAAS,EACzB,OAAM,MACL,2DAA2D,aAAa,OAAO,oBAC9E,aAAa,KAAK,KAAK,CACvB,kKACD;CAIF,MAAM,OAAc,CACnB,GAAG,eAAe,MAAM,4BAA4B,IAAI,WAAW,OAAO,CAAC,QAC3E,GAAG,eAAe,MAAM,4BACvB,IAAI,WAAW,aAAa,CAC5B,yCACD;AACD,MAAK,MAAM,EAAE,IAAI,UAAU,QAC1B,MAAK,KACJ,GAAG,UAAU,MAAM,OAAO,IAAI,WAAW,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,WAAW,aAAa,CAAC,gBAC3F,IAAI,WAAW,KAAK,CACpB,KAAK,KACN;AAMF,KAAI,SAAS,cACZ,OAAM,GAAG,YAAY,OAAO,OAA0C;AACrE,OAAK,MAAM,OAAO,KACjB,OAAM,GAAG,QAAQ,IAAI;GAErB;UACQ,SAAS,SAAS;EAC5B,MAAM,WAAW;AAEjB,QAAM,SAAS,MACd,KAAK,KAAK,MAAM,SAAS,QAAQ,EAAE,CAAC,CACpC;OAED,MAAK,MAAM,OAAO,KACjB,OAAM,GAAG,QAAQ,IAAI;GAIxB;;;;;;;AAQD,eAAsB,gBACrB,kBACA,iBACA,IACA,iBACA,OAA4C,eACnB;AASzB,MAPe,MAAM,QACpB,GAAG,SACH,GAAG;0BACqB,iBAAiB;sBACrB,kBACpB,EAEU,WAAW,EACrB,QAAO,EAAE,OAAO,MAAM;CAyBvB,IAAI,UAAU,YArBD,MAAM,QAGlB,GAAG,SACH,GAAG;;;;;;;;;;;;qBAYgB,iBAAiB;qBACjB,gBAAgB;sBAEnC,EAE6B,KAAK,MAAM,EAAE,YAAY,CAAC;AAExD,MAAK,IAAI,IAAI,SAAS,IAAI,iCAAiC,KAAK;EAC/D,MAAM,YAAY,iBAAiB;AACnC,MAAI,CAAC,UACJ,OAAM,IAAI,MAAM,gDAAgD,EAAE,MAAM,IAAI,IAAI;AAEjF,QAAM,UAAU,kBAAkB,iBAAiB,IAAI,iBAAiB,KAAK;;AAG9E,QAAO;EAAE,aAAa;EAAS,gBAAgB;EAAiC"}
1
+ {"version":3,"file":"pg.js","names":[],"sources":["../../src/up-migrations/pg.ts"],"sourcesContent":["import type { BatchItem } from '~/batch.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { NeonHttpDatabase } from '~/neon-http/driver.ts';\nimport type { PgAsyncDatabase } from '~/pg-core/async/db.ts';\nimport type { PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgQueryResultHKT } from '~/pg-core/session.ts';\nimport { type SQL, sql } from '~/sql/sql.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tdb: PgAsyncDatabase<PgQueryResultHKT, any>,\n\t\tlocalMigrations: MigrationMeta[],\n\t\tmode: 'transaction' | 'execute' | 'batch',\n\t) => Promise<void>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: async (migrationsSchema, migrationsTable, db, localMigrations, mode) => {\n\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t// 1. Read all existing DB migrations\n\t\t// Sort them by ids asc (order how they were applied)\n\t\tconst dbRows = await db.session.objects<{ id: number; hash: string; created_at: string }>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t);\n\n\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\tlocalMigrations.sort((a, b) =>\n\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t);\n\n\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\tfor (const lm of localMigrations) {\n\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t}\n\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\tbyHash.set(lm.hash, lm);\n\t\t}\n\n\t\t// \t3. Match each DB row to a local migration\n\t\t// \tPriority: millis -> hash\n\t\tconst toApply: { id: number; name: string }[] = [];\n\t\tlet unmatchedIds: number[] = [];\n\n\t\tfor (const dbRow of dbRows) {\n\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\tmatched = candidates[0];\n\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t} else {\n\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t}\n\n\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t}\n\n\t\t// 4. Check for unmatched\n\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\tif (unmatchedIds.length > 0) {\n\t\t\tthrow Error(\n\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t);\n\t\t}\n\n\t\t// 5. Create extra column and backfill names for matched migrations\n\t\tconst sqls: SQL[] = [\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`,\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\tsql.identifier('applied_at')\n\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t];\n\t\tfor (const { id, name } of toApply) {\n\t\t\tsqls.push(\n\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${name}, ${sql.identifier('applied_at')} = NULL WHERE ${\n\t\t\t\t\tsql.identifier('id')\n\t\t\t\t} = ${id}`,\n\t\t\t);\n\t\t}\n\n\t\t// check if http\n\t\t// execute -> proxy, http drivers\n\t\t// transaction -> other\n\t\tif (mode === 'transaction') {\n\t\t\tawait db.transaction(async (tx: PgAsyncTransaction<any, any>) => {\n\t\t\t\tfor (const sql of sqls) {\n\t\t\t\t\tawait tx.execute(sql);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (mode === 'batch') {\n\t\t\tconst database = db as NeonHttpDatabase;\n\n\t\t\tawait database.batch(\n\t\t\t\tsqls.map((s) => database.execute(s)) as unknown as [BatchItem<'pg'>, ...BatchItem<'pg'>[]],\n\t\t\t);\n\t\t} else {\n\t\t\tfor (const sql of sqls) {\n\t\t\t\tawait db.execute(sql);\n\t\t\t}\n\t\t}\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport async function upgradeIfNeeded(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tdb: PgAsyncDatabase<PgQueryResultHKT, any>,\n\tlocalMigrations: MigrationMeta[],\n\tmode: 'transaction' | 'execute' | 'batch' = 'transaction',\n): Promise<UpgradeResult> {\n\t// Check if the table exists at all\n\tconst result = await db.session.objects<{ '1': 1 }>(\n\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t);\n\n\tif (result.length === 0) {\n\t\treturn { newDb: true };\n\t}\n\n\t// Table exists, check table shape\n\tconst rows = await db.session.objects<\n\t\t{ schema: string; table_name: string; column_name: string; type: string }\n\t>(\n\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t);\n\n\tlet version = getVersion(rows.map((r) => r.column_name));\n\n\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\tconst upgradeFn = upgradeFunctions[v];\n\t\tif (!upgradeFn) {\n\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t}\n\t\tawait upgradeFn(migrationsSchema, migrationsTable, db, localMigrations, mode);\n\t}\n\n\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { TablesRelationalConfig } from "../_relations.js";
2
1
  import { MigrationMeta } from "../migrator.js";
3
- import { SQLiteSession } from "../sqlite-core/session.js";
2
+ import { TablesRelationalConfig } from "../_relations.js";
4
3
  import { AnyRelations } from "../relations.js";
4
+ import { SQLiteSession } from "../sqlite-core/session.js";
5
5
  import { SQLiteD1Session } from "../d1/session.js";
6
6
  import { LibSQLSession } from "../libsql/session.js";
7
7
  import { SQLiteCloudSession } from "../sqlite-cloud/session.js";