drizzle-orm 0.43.1-b08434e → 0.43.1-e3d1c4f

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 (777) hide show
  1. package/aws-data-api/pg/driver.cjs +7 -6
  2. package/aws-data-api/pg/driver.cjs.map +1 -1
  3. package/aws-data-api/pg/driver.d.cts +4 -3
  4. package/aws-data-api/pg/driver.d.ts +4 -3
  5. package/aws-data-api/pg/driver.js +7 -6
  6. package/aws-data-api/pg/driver.js.map +1 -1
  7. package/aws-data-api/pg/session.cjs +26 -9
  8. package/aws-data-api/pg/session.cjs.map +1 -1
  9. package/aws-data-api/pg/session.d.cts +5 -4
  10. package/aws-data-api/pg/session.d.ts +5 -4
  11. package/aws-data-api/pg/session.js +26 -9
  12. package/aws-data-api/pg/session.js.map +1 -1
  13. package/better-sqlite3/driver.cjs.map +1 -1
  14. package/better-sqlite3/driver.d.cts +4 -3
  15. package/better-sqlite3/driver.d.ts +4 -3
  16. package/better-sqlite3/driver.js.map +1 -1
  17. package/better-sqlite3/session.cjs +5 -5
  18. package/better-sqlite3/session.cjs.map +1 -1
  19. package/better-sqlite3/session.d.cts +5 -5
  20. package/better-sqlite3/session.d.ts +5 -5
  21. package/better-sqlite3/session.js +5 -5
  22. package/better-sqlite3/session.js.map +1 -1
  23. package/bun-sql/driver.cjs +3 -2
  24. package/bun-sql/driver.cjs.map +1 -1
  25. package/bun-sql/driver.d.cts +4 -3
  26. package/bun-sql/driver.d.ts +4 -3
  27. package/bun-sql/driver.js +3 -2
  28. package/bun-sql/driver.js.map +1 -1
  29. package/bun-sql/session.cjs +20 -11
  30. package/bun-sql/session.cjs.map +1 -1
  31. package/bun-sql/session.d.cts +6 -5
  32. package/bun-sql/session.d.ts +6 -5
  33. package/bun-sql/session.js +20 -11
  34. package/bun-sql/session.js.map +1 -1
  35. package/bun-sqlite/driver.cjs.map +1 -1
  36. package/bun-sqlite/driver.d.cts +4 -3
  37. package/bun-sqlite/driver.d.ts +4 -3
  38. package/bun-sqlite/driver.js.map +1 -1
  39. package/bun-sqlite/session.cjs +5 -5
  40. package/bun-sqlite/session.cjs.map +1 -1
  41. package/bun-sqlite/session.d.cts +5 -5
  42. package/bun-sqlite/session.d.ts +5 -5
  43. package/bun-sqlite/session.js +5 -5
  44. package/bun-sqlite/session.js.map +1 -1
  45. package/column-builder.cjs.map +1 -1
  46. package/column-builder.d.cts +7 -2
  47. package/column-builder.d.ts +7 -2
  48. package/column-builder.js.map +1 -1
  49. package/column.cjs +2 -0
  50. package/column.cjs.map +1 -1
  51. package/column.d.cts +6 -0
  52. package/column.d.ts +6 -0
  53. package/column.js +2 -0
  54. package/column.js.map +1 -1
  55. package/d1/driver.cjs +3 -2
  56. package/d1/driver.cjs.map +1 -1
  57. package/d1/driver.d.cts +2 -1
  58. package/d1/driver.d.ts +2 -1
  59. package/d1/driver.js +3 -2
  60. package/d1/driver.js.map +1 -1
  61. package/d1/session.cjs +20 -11
  62. package/d1/session.cjs.map +1 -1
  63. package/d1/session.d.cts +8 -7
  64. package/d1/session.d.ts +8 -7
  65. package/d1/session.js +20 -11
  66. package/d1/session.js.map +1 -1
  67. package/durable-sqlite/driver.cjs.map +1 -1
  68. package/durable-sqlite/driver.d.cts +2 -1
  69. package/durable-sqlite/driver.d.ts +2 -1
  70. package/durable-sqlite/driver.js.map +1 -1
  71. package/durable-sqlite/session.cjs +5 -5
  72. package/durable-sqlite/session.cjs.map +1 -1
  73. package/durable-sqlite/session.d.cts +5 -5
  74. package/durable-sqlite/session.d.ts +5 -5
  75. package/durable-sqlite/session.js +5 -5
  76. package/durable-sqlite/session.js.map +1 -1
  77. package/expo-sqlite/driver.cjs.map +1 -1
  78. package/expo-sqlite/driver.d.cts +2 -1
  79. package/expo-sqlite/driver.d.ts +2 -1
  80. package/expo-sqlite/driver.js.map +1 -1
  81. package/expo-sqlite/session.cjs +5 -5
  82. package/expo-sqlite/session.cjs.map +1 -1
  83. package/expo-sqlite/session.d.cts +5 -5
  84. package/expo-sqlite/session.d.ts +5 -5
  85. package/expo-sqlite/session.js +5 -5
  86. package/expo-sqlite/session.js.map +1 -1
  87. package/extension-core/gel/index.cjs +33 -0
  88. package/extension-core/gel/index.cjs.map +1 -0
  89. package/extension-core/gel/index.d.cts +67 -0
  90. package/extension-core/gel/index.d.ts +67 -0
  91. package/extension-core/gel/index.js +9 -0
  92. package/extension-core/gel/index.js.map +1 -0
  93. package/extension-core/index.cjs +42 -0
  94. package/extension-core/index.cjs.map +1 -0
  95. package/extension-core/index.d.cts +9 -0
  96. package/extension-core/index.d.ts +9 -0
  97. package/extension-core/index.js +15 -0
  98. package/extension-core/index.js.map +1 -0
  99. package/extension-core/mysql/index.cjs +33 -0
  100. package/extension-core/mysql/index.cjs.map +1 -0
  101. package/extension-core/mysql/index.d.cts +69 -0
  102. package/extension-core/mysql/index.d.ts +69 -0
  103. package/extension-core/mysql/index.js +9 -0
  104. package/extension-core/mysql/index.js.map +1 -0
  105. package/extension-core/pg/index.cjs +33 -0
  106. package/extension-core/pg/index.cjs.map +1 -0
  107. package/extension-core/pg/index.d.cts +67 -0
  108. package/extension-core/pg/index.d.ts +67 -0
  109. package/extension-core/pg/index.js +9 -0
  110. package/extension-core/pg/index.js.map +1 -0
  111. package/extension-core/singlestore/index.cjs +33 -0
  112. package/extension-core/singlestore/index.cjs.map +1 -0
  113. package/extension-core/singlestore/index.d.cts +67 -0
  114. package/extension-core/singlestore/index.d.ts +67 -0
  115. package/extension-core/singlestore/index.js +9 -0
  116. package/extension-core/singlestore/index.js.map +1 -0
  117. package/extension-core/sqlite/index.cjs +33 -0
  118. package/extension-core/sqlite/index.cjs.map +1 -0
  119. package/extension-core/sqlite/index.d.cts +68 -0
  120. package/extension-core/sqlite/index.d.ts +68 -0
  121. package/extension-core/sqlite/index.js +9 -0
  122. package/extension-core/sqlite/index.js.map +1 -0
  123. package/extensions/hook/gel/index.cjs +47 -0
  124. package/extensions/hook/gel/index.cjs.map +1 -0
  125. package/extensions/hook/gel/index.d.cts +11 -0
  126. package/extensions/hook/gel/index.d.ts +11 -0
  127. package/extensions/hook/gel/index.js +22 -0
  128. package/extensions/hook/gel/index.js.map +1 -0
  129. package/extensions/hook/mysql/index.cjs +47 -0
  130. package/extensions/hook/mysql/index.cjs.map +1 -0
  131. package/extensions/hook/mysql/index.d.cts +11 -0
  132. package/extensions/hook/mysql/index.d.ts +11 -0
  133. package/extensions/hook/mysql/index.js +22 -0
  134. package/extensions/hook/mysql/index.js.map +1 -0
  135. package/extensions/hook/pg/index.cjs +47 -0
  136. package/extensions/hook/pg/index.cjs.map +1 -0
  137. package/extensions/hook/pg/index.d.cts +11 -0
  138. package/extensions/hook/pg/index.d.ts +11 -0
  139. package/extensions/hook/pg/index.js +22 -0
  140. package/extensions/hook/pg/index.js.map +1 -0
  141. package/extensions/hook/singlestore/index.cjs +47 -0
  142. package/extensions/hook/singlestore/index.cjs.map +1 -0
  143. package/extensions/hook/singlestore/index.d.cts +11 -0
  144. package/extensions/hook/singlestore/index.d.ts +11 -0
  145. package/extensions/hook/singlestore/index.js +22 -0
  146. package/extensions/hook/singlestore/index.js.map +1 -0
  147. package/extensions/hook/sqlite/index.cjs +47 -0
  148. package/extensions/hook/sqlite/index.cjs.map +1 -0
  149. package/extensions/hook/sqlite/index.d.cts +11 -0
  150. package/extensions/hook/sqlite/index.d.ts +11 -0
  151. package/extensions/hook/sqlite/index.js +22 -0
  152. package/extensions/hook/sqlite/index.js.map +1 -0
  153. package/extensions/s3-file/common.cjs +321 -0
  154. package/extensions/s3-file/common.cjs.map +1 -0
  155. package/extensions/s3-file/common.d.cts +88 -0
  156. package/extensions/s3-file/common.d.ts +88 -0
  157. package/extensions/s3-file/common.js +288 -0
  158. package/extensions/s3-file/common.js.map +1 -0
  159. package/extensions/s3-file/gel/column.cjs +124 -0
  160. package/extensions/s3-file/gel/column.cjs.map +1 -0
  161. package/extensions/s3-file/gel/column.d.cts +105 -0
  162. package/extensions/s3-file/gel/column.d.ts +105 -0
  163. package/extensions/s3-file/gel/column.js +103 -0
  164. package/extensions/s3-file/gel/column.js.map +1 -0
  165. package/extensions/s3-file/gel/extension.cjs +271 -0
  166. package/extensions/s3-file/gel/extension.cjs.map +1 -0
  167. package/extensions/s3-file/gel/extension.d.cts +18 -0
  168. package/extensions/s3-file/gel/extension.d.ts +18 -0
  169. package/extensions/s3-file/gel/extension.js +257 -0
  170. package/extensions/s3-file/gel/extension.js.map +1 -0
  171. package/extensions/s3-file/gel/index.cjs +25 -0
  172. package/extensions/s3-file/gel/index.cjs.map +1 -0
  173. package/extensions/s3-file/gel/index.d.cts +2 -0
  174. package/extensions/s3-file/gel/index.d.ts +2 -0
  175. package/extensions/s3-file/gel/index.js +3 -0
  176. package/extensions/s3-file/gel/index.js.map +1 -0
  177. package/extensions/s3-file/index.cjs +23 -0
  178. package/extensions/s3-file/index.cjs.map +1 -0
  179. package/extensions/s3-file/index.d.cts +1 -0
  180. package/extensions/s3-file/index.d.ts +1 -0
  181. package/extensions/s3-file/index.js +2 -0
  182. package/extensions/s3-file/index.js.map +1 -0
  183. package/extensions/s3-file/mysql/column.cjs +121 -0
  184. package/extensions/s3-file/mysql/column.cjs.map +1 -0
  185. package/extensions/s3-file/mysql/column.d.cts +63 -0
  186. package/extensions/s3-file/mysql/column.d.ts +63 -0
  187. package/extensions/s3-file/mysql/column.js +97 -0
  188. package/extensions/s3-file/mysql/column.js.map +1 -0
  189. package/extensions/s3-file/mysql/extension.cjs +250 -0
  190. package/extensions/s3-file/mysql/extension.cjs.map +1 -0
  191. package/extensions/s3-file/mysql/extension.d.cts +18 -0
  192. package/extensions/s3-file/mysql/extension.d.ts +18 -0
  193. package/extensions/s3-file/mysql/extension.js +236 -0
  194. package/extensions/s3-file/mysql/extension.js.map +1 -0
  195. package/extensions/s3-file/mysql/index.cjs +25 -0
  196. package/extensions/s3-file/mysql/index.cjs.map +1 -0
  197. package/extensions/s3-file/mysql/index.d.cts +2 -0
  198. package/extensions/s3-file/mysql/index.d.ts +2 -0
  199. package/extensions/s3-file/mysql/index.js +3 -0
  200. package/extensions/s3-file/mysql/index.js.map +1 -0
  201. package/extensions/s3-file/pg/column.cjs +124 -0
  202. package/extensions/s3-file/pg/column.cjs.map +1 -0
  203. package/extensions/s3-file/pg/column.d.cts +105 -0
  204. package/extensions/s3-file/pg/column.d.ts +105 -0
  205. package/extensions/s3-file/pg/column.js +103 -0
  206. package/extensions/s3-file/pg/column.js.map +1 -0
  207. package/extensions/s3-file/pg/extension.cjs +272 -0
  208. package/extensions/s3-file/pg/extension.cjs.map +1 -0
  209. package/extensions/s3-file/pg/extension.d.cts +18 -0
  210. package/extensions/s3-file/pg/extension.d.ts +18 -0
  211. package/extensions/s3-file/pg/extension.js +258 -0
  212. package/extensions/s3-file/pg/extension.js.map +1 -0
  213. package/extensions/s3-file/pg/index.cjs +25 -0
  214. package/extensions/s3-file/pg/index.cjs.map +1 -0
  215. package/extensions/s3-file/pg/index.d.cts +2 -0
  216. package/extensions/s3-file/pg/index.d.ts +2 -0
  217. package/extensions/s3-file/pg/index.js +3 -0
  218. package/extensions/s3-file/pg/index.js.map +1 -0
  219. package/extensions/s3-file/singlestore/column.cjs +121 -0
  220. package/extensions/s3-file/singlestore/column.cjs.map +1 -0
  221. package/extensions/s3-file/singlestore/column.d.cts +63 -0
  222. package/extensions/s3-file/singlestore/column.d.ts +63 -0
  223. package/extensions/s3-file/singlestore/column.js +97 -0
  224. package/extensions/s3-file/singlestore/column.js.map +1 -0
  225. package/extensions/s3-file/singlestore/extension.cjs +247 -0
  226. package/extensions/s3-file/singlestore/extension.cjs.map +1 -0
  227. package/extensions/s3-file/singlestore/extension.d.cts +18 -0
  228. package/extensions/s3-file/singlestore/extension.d.ts +18 -0
  229. package/extensions/s3-file/singlestore/extension.js +233 -0
  230. package/extensions/s3-file/singlestore/extension.js.map +1 -0
  231. package/extensions/s3-file/singlestore/index.cjs +25 -0
  232. package/extensions/s3-file/singlestore/index.cjs.map +1 -0
  233. package/extensions/s3-file/singlestore/index.d.cts +2 -0
  234. package/extensions/s3-file/singlestore/index.d.ts +2 -0
  235. package/extensions/s3-file/singlestore/index.js +3 -0
  236. package/extensions/s3-file/singlestore/index.js.map +1 -0
  237. package/extensions/s3-file/sqlite/column.cjs +121 -0
  238. package/extensions/s3-file/sqlite/column.cjs.map +1 -0
  239. package/extensions/s3-file/sqlite/column.d.cts +63 -0
  240. package/extensions/s3-file/sqlite/column.d.ts +63 -0
  241. package/extensions/s3-file/sqlite/column.js +97 -0
  242. package/extensions/s3-file/sqlite/column.js.map +1 -0
  243. package/extensions/s3-file/sqlite/extension.cjs +250 -0
  244. package/extensions/s3-file/sqlite/extension.cjs.map +1 -0
  245. package/extensions/s3-file/sqlite/extension.d.cts +18 -0
  246. package/extensions/s3-file/sqlite/extension.d.ts +18 -0
  247. package/extensions/s3-file/sqlite/extension.js +236 -0
  248. package/extensions/s3-file/sqlite/extension.js.map +1 -0
  249. package/extensions/s3-file/sqlite/index.cjs +25 -0
  250. package/extensions/s3-file/sqlite/index.cjs.map +1 -0
  251. package/extensions/s3-file/sqlite/index.d.cts +2 -0
  252. package/extensions/s3-file/sqlite/index.d.ts +2 -0
  253. package/extensions/s3-file/sqlite/index.js +3 -0
  254. package/extensions/s3-file/sqlite/index.js.map +1 -0
  255. package/gel/driver.cjs +6 -4
  256. package/gel/driver.cjs.map +1 -1
  257. package/gel/driver.d.cts +6 -4
  258. package/gel/driver.d.ts +6 -4
  259. package/gel/driver.js +6 -4
  260. package/gel/driver.js.map +1 -1
  261. package/gel/session.cjs +12 -9
  262. package/gel/session.cjs.map +1 -1
  263. package/gel/session.d.cts +5 -4
  264. package/gel/session.d.ts +5 -4
  265. package/gel/session.js +12 -9
  266. package/gel/session.js.map +1 -1
  267. package/gel-core/columns/common.cjs +8 -0
  268. package/gel-core/columns/common.cjs.map +1 -1
  269. package/gel-core/columns/common.d.cts +2 -0
  270. package/gel-core/columns/common.d.ts +2 -0
  271. package/gel-core/columns/common.js +8 -0
  272. package/gel-core/columns/common.js.map +1 -1
  273. package/gel-core/db.cjs +5 -3
  274. package/gel-core/db.cjs.map +1 -1
  275. package/gel-core/db.d.cts +3 -1
  276. package/gel-core/db.d.ts +3 -1
  277. package/gel-core/db.js +5 -3
  278. package/gel-core/db.js.map +1 -1
  279. package/gel-core/dialect.cjs +25 -19
  280. package/gel-core/dialect.cjs.map +1 -1
  281. package/gel-core/dialect.d.cts +7 -6
  282. package/gel-core/dialect.d.ts +7 -6
  283. package/gel-core/dialect.js +26 -20
  284. package/gel-core/dialect.js.map +1 -1
  285. package/gel-core/query-builders/delete.cjs +7 -2
  286. package/gel-core/query-builders/delete.cjs.map +1 -1
  287. package/gel-core/query-builders/delete.js +7 -2
  288. package/gel-core/query-builders/delete.js.map +1 -1
  289. package/gel-core/query-builders/insert.cjs +32 -6
  290. package/gel-core/query-builders/insert.cjs.map +1 -1
  291. package/gel-core/query-builders/insert.js +34 -8
  292. package/gel-core/query-builders/insert.js.map +1 -1
  293. package/gel-core/query-builders/query.cjs +12 -1
  294. package/gel-core/query-builders/query.cjs.map +1 -1
  295. package/gel-core/query-builders/query.js +12 -1
  296. package/gel-core/query-builders/query.js.map +1 -1
  297. package/gel-core/query-builders/select.cjs +9 -2
  298. package/gel-core/query-builders/select.cjs.map +1 -1
  299. package/gel-core/query-builders/select.js +9 -2
  300. package/gel-core/query-builders/select.js.map +1 -1
  301. package/gel-core/query-builders/update.cjs +8 -3
  302. package/gel-core/query-builders/update.cjs.map +1 -1
  303. package/gel-core/query-builders/update.js +8 -3
  304. package/gel-core/query-builders/update.js.map +1 -1
  305. package/gel-core/session.cjs +48 -4
  306. package/gel-core/session.cjs.map +1 -1
  307. package/gel-core/session.d.cts +11 -5
  308. package/gel-core/session.d.ts +11 -5
  309. package/gel-core/session.js +48 -4
  310. package/gel-core/session.js.map +1 -1
  311. package/libsql/driver-core.cjs +3 -2
  312. package/libsql/driver-core.cjs.map +1 -1
  313. package/libsql/driver-core.js +3 -2
  314. package/libsql/driver-core.js.map +1 -1
  315. package/libsql/driver.cjs +4 -1
  316. package/libsql/driver.cjs.map +1 -1
  317. package/libsql/driver.d.cts +4 -3
  318. package/libsql/driver.d.ts +4 -3
  319. package/libsql/driver.js +4 -1
  320. package/libsql/driver.js.map +1 -1
  321. package/libsql/http/index.cjs +4 -1
  322. package/libsql/http/index.cjs.map +1 -1
  323. package/libsql/http/index.d.cts +4 -3
  324. package/libsql/http/index.d.ts +4 -3
  325. package/libsql/http/index.js +4 -1
  326. package/libsql/http/index.js.map +1 -1
  327. package/libsql/node/index.cjs +4 -1
  328. package/libsql/node/index.cjs.map +1 -1
  329. package/libsql/node/index.d.cts +4 -3
  330. package/libsql/node/index.d.ts +4 -3
  331. package/libsql/node/index.js +4 -1
  332. package/libsql/node/index.js.map +1 -1
  333. package/libsql/session.cjs +29 -12
  334. package/libsql/session.cjs.map +1 -1
  335. package/libsql/session.d.cts +8 -7
  336. package/libsql/session.d.ts +8 -7
  337. package/libsql/session.js +29 -12
  338. package/libsql/session.js.map +1 -1
  339. package/libsql/sqlite3/index.cjs +4 -1
  340. package/libsql/sqlite3/index.cjs.map +1 -1
  341. package/libsql/sqlite3/index.d.cts +4 -3
  342. package/libsql/sqlite3/index.d.ts +4 -3
  343. package/libsql/sqlite3/index.js +4 -1
  344. package/libsql/sqlite3/index.js.map +1 -1
  345. package/libsql/wasm/index.cjs +4 -1
  346. package/libsql/wasm/index.cjs.map +1 -1
  347. package/libsql/wasm/index.d.cts +4 -3
  348. package/libsql/wasm/index.d.ts +4 -3
  349. package/libsql/wasm/index.js +4 -1
  350. package/libsql/wasm/index.js.map +1 -1
  351. package/libsql/web/index.cjs +4 -1
  352. package/libsql/web/index.cjs.map +1 -1
  353. package/libsql/web/index.d.cts +4 -3
  354. package/libsql/web/index.d.ts +4 -3
  355. package/libsql/web/index.js +4 -1
  356. package/libsql/web/index.js.map +1 -1
  357. package/libsql/ws/index.cjs +4 -1
  358. package/libsql/ws/index.cjs.map +1 -1
  359. package/libsql/ws/index.d.cts +4 -3
  360. package/libsql/ws/index.d.ts +4 -3
  361. package/libsql/ws/index.js +4 -1
  362. package/libsql/ws/index.js.map +1 -1
  363. package/mysql-core/db.cjs +5 -3
  364. package/mysql-core/db.cjs.map +1 -1
  365. package/mysql-core/db.d.cts +3 -1
  366. package/mysql-core/db.d.ts +3 -1
  367. package/mysql-core/db.js +5 -3
  368. package/mysql-core/db.js.map +1 -1
  369. package/mysql-core/dialect.cjs +30 -23
  370. package/mysql-core/dialect.cjs.map +1 -1
  371. package/mysql-core/dialect.d.cts +8 -7
  372. package/mysql-core/dialect.d.ts +8 -7
  373. package/mysql-core/dialect.js +31 -24
  374. package/mysql-core/dialect.js.map +1 -1
  375. package/mysql-core/query-builders/delete.cjs +8 -2
  376. package/mysql-core/query-builders/delete.cjs.map +1 -1
  377. package/mysql-core/query-builders/delete.js +8 -2
  378. package/mysql-core/query-builders/delete.js.map +1 -1
  379. package/mysql-core/query-builders/insert.cjs +29 -5
  380. package/mysql-core/query-builders/insert.cjs.map +1 -1
  381. package/mysql-core/query-builders/insert.js +31 -7
  382. package/mysql-core/query-builders/insert.js.map +1 -1
  383. package/mysql-core/query-builders/query.cjs +14 -2
  384. package/mysql-core/query-builders/query.cjs.map +1 -1
  385. package/mysql-core/query-builders/query.js +14 -2
  386. package/mysql-core/query-builders/query.js.map +1 -1
  387. package/mysql-core/query-builders/select.cjs +12 -4
  388. package/mysql-core/query-builders/select.cjs.map +1 -1
  389. package/mysql-core/query-builders/select.js +12 -4
  390. package/mysql-core/query-builders/select.js.map +1 -1
  391. package/mysql-core/query-builders/update.cjs +15 -3
  392. package/mysql-core/query-builders/update.cjs.map +1 -1
  393. package/mysql-core/query-builders/update.js +15 -3
  394. package/mysql-core/query-builders/update.js.map +1 -1
  395. package/mysql-core/session.cjs +45 -3
  396. package/mysql-core/session.cjs.map +1 -1
  397. package/mysql-core/session.d.cts +13 -4
  398. package/mysql-core/session.d.ts +13 -4
  399. package/mysql-core/session.js +45 -3
  400. package/mysql-core/session.js.map +1 -1
  401. package/mysql-proxy/driver.cjs +3 -2
  402. package/mysql-proxy/driver.cjs.map +1 -1
  403. package/mysql-proxy/driver.d.cts +2 -1
  404. package/mysql-proxy/driver.d.ts +2 -1
  405. package/mysql-proxy/driver.js +3 -2
  406. package/mysql-proxy/driver.js.map +1 -1
  407. package/mysql-proxy/session.cjs +8 -8
  408. package/mysql-proxy/session.cjs.map +1 -1
  409. package/mysql-proxy/session.d.cts +5 -6
  410. package/mysql-proxy/session.d.ts +5 -6
  411. package/mysql-proxy/session.js +8 -8
  412. package/mysql-proxy/session.js.map +1 -1
  413. package/mysql2/driver.cjs +6 -4
  414. package/mysql2/driver.cjs.map +1 -1
  415. package/mysql2/driver.d.cts +4 -2
  416. package/mysql2/driver.d.ts +4 -2
  417. package/mysql2/driver.js +6 -4
  418. package/mysql2/driver.js.map +1 -1
  419. package/mysql2/session.cjs +14 -10
  420. package/mysql2/session.cjs.map +1 -1
  421. package/mysql2/session.d.cts +5 -5
  422. package/mysql2/session.d.ts +5 -5
  423. package/mysql2/session.js +14 -10
  424. package/mysql2/session.js.map +1 -1
  425. package/neon-http/driver.cjs +5 -3
  426. package/neon-http/driver.cjs.map +1 -1
  427. package/neon-http/driver.d.cts +6 -4
  428. package/neon-http/driver.d.ts +6 -4
  429. package/neon-http/driver.js +5 -3
  430. package/neon-http/driver.js.map +1 -1
  431. package/neon-http/session.cjs +8 -6
  432. package/neon-http/session.cjs.map +1 -1
  433. package/neon-http/session.d.cts +5 -4
  434. package/neon-http/session.d.ts +5 -4
  435. package/neon-http/session.js +8 -6
  436. package/neon-http/session.js.map +1 -1
  437. package/neon-serverless/driver.cjs +6 -4
  438. package/neon-serverless/driver.cjs.map +1 -1
  439. package/neon-serverless/driver.d.cts +6 -4
  440. package/neon-serverless/driver.d.ts +6 -4
  441. package/neon-serverless/driver.js +6 -4
  442. package/neon-serverless/driver.js.map +1 -1
  443. package/neon-serverless/session.cjs +23 -9
  444. package/neon-serverless/session.cjs.map +1 -1
  445. package/neon-serverless/session.d.cts +5 -4
  446. package/neon-serverless/session.d.ts +5 -4
  447. package/neon-serverless/session.js +23 -9
  448. package/neon-serverless/session.js.map +1 -1
  449. package/node-postgres/driver.cjs +6 -4
  450. package/node-postgres/driver.cjs.map +1 -1
  451. package/node-postgres/driver.d.cts +6 -4
  452. package/node-postgres/driver.d.ts +6 -4
  453. package/node-postgres/driver.js +6 -4
  454. package/node-postgres/driver.js.map +1 -1
  455. package/node-postgres/session.cjs +18 -9
  456. package/node-postgres/session.cjs.map +1 -1
  457. package/node-postgres/session.d.cts +5 -4
  458. package/node-postgres/session.d.ts +5 -4
  459. package/node-postgres/session.js +18 -9
  460. package/node-postgres/session.js.map +1 -1
  461. package/op-sqlite/driver.cjs.map +1 -1
  462. package/op-sqlite/driver.d.cts +2 -1
  463. package/op-sqlite/driver.d.ts +2 -1
  464. package/op-sqlite/driver.js.map +1 -1
  465. package/op-sqlite/session.cjs +5 -5
  466. package/op-sqlite/session.cjs.map +1 -1
  467. package/op-sqlite/session.d.cts +5 -5
  468. package/op-sqlite/session.d.ts +5 -5
  469. package/op-sqlite/session.js +5 -5
  470. package/op-sqlite/session.js.map +1 -1
  471. package/package.json +347 -1
  472. package/pg-core/columns/common.cjs +2 -0
  473. package/pg-core/columns/common.cjs.map +1 -1
  474. package/pg-core/columns/common.js +2 -0
  475. package/pg-core/columns/common.js.map +1 -1
  476. package/pg-core/db.cjs +5 -3
  477. package/pg-core/db.cjs.map +1 -1
  478. package/pg-core/db.d.cts +3 -1
  479. package/pg-core/db.d.ts +3 -1
  480. package/pg-core/db.js +5 -3
  481. package/pg-core/db.js.map +1 -1
  482. package/pg-core/dialect.cjs +26 -19
  483. package/pg-core/dialect.cjs.map +1 -1
  484. package/pg-core/dialect.d.cts +7 -6
  485. package/pg-core/dialect.d.ts +7 -6
  486. package/pg-core/dialect.js +27 -20
  487. package/pg-core/dialect.js.map +1 -1
  488. package/pg-core/query-builders/delete.cjs +7 -2
  489. package/pg-core/query-builders/delete.cjs.map +1 -1
  490. package/pg-core/query-builders/delete.d.cts +1 -1
  491. package/pg-core/query-builders/delete.d.ts +1 -1
  492. package/pg-core/query-builders/delete.js +7 -2
  493. package/pg-core/query-builders/delete.js.map +1 -1
  494. package/pg-core/query-builders/insert.cjs +37 -6
  495. package/pg-core/query-builders/insert.cjs.map +1 -1
  496. package/pg-core/query-builders/insert.js +39 -8
  497. package/pg-core/query-builders/insert.js.map +1 -1
  498. package/pg-core/query-builders/query.cjs +12 -1
  499. package/pg-core/query-builders/query.cjs.map +1 -1
  500. package/pg-core/query-builders/query.js +12 -1
  501. package/pg-core/query-builders/query.js.map +1 -1
  502. package/pg-core/query-builders/select.cjs +11 -4
  503. package/pg-core/query-builders/select.cjs.map +1 -1
  504. package/pg-core/query-builders/select.js +11 -4
  505. package/pg-core/query-builders/select.js.map +1 -1
  506. package/pg-core/query-builders/update.cjs +8 -3
  507. package/pg-core/query-builders/update.cjs.map +1 -1
  508. package/pg-core/query-builders/update.d.cts +2 -2
  509. package/pg-core/query-builders/update.d.ts +2 -2
  510. package/pg-core/query-builders/update.js +9 -8
  511. package/pg-core/query-builders/update.js.map +1 -1
  512. package/pg-core/session.cjs +49 -4
  513. package/pg-core/session.cjs.map +1 -1
  514. package/pg-core/session.d.cts +11 -5
  515. package/pg-core/session.d.ts +11 -5
  516. package/pg-core/session.js +49 -4
  517. package/pg-core/session.js.map +1 -1
  518. package/pg-proxy/driver.cjs +3 -2
  519. package/pg-proxy/driver.cjs.map +1 -1
  520. package/pg-proxy/driver.d.cts +2 -1
  521. package/pg-proxy/driver.d.ts +2 -1
  522. package/pg-proxy/driver.js +3 -2
  523. package/pg-proxy/driver.js.map +1 -1
  524. package/pg-proxy/session.cjs +8 -6
  525. package/pg-proxy/session.cjs.map +1 -1
  526. package/pg-proxy/session.d.cts +5 -4
  527. package/pg-proxy/session.d.ts +5 -4
  528. package/pg-proxy/session.js +8 -6
  529. package/pg-proxy/session.js.map +1 -1
  530. package/pglite/driver.cjs +6 -4
  531. package/pglite/driver.cjs.map +1 -1
  532. package/pglite/driver.d.cts +6 -4
  533. package/pglite/driver.d.ts +6 -4
  534. package/pglite/driver.js +6 -4
  535. package/pglite/driver.js.map +1 -1
  536. package/pglite/session.cjs +19 -9
  537. package/pglite/session.cjs.map +1 -1
  538. package/pglite/session.d.cts +5 -4
  539. package/pglite/session.d.ts +5 -4
  540. package/pglite/session.js +19 -9
  541. package/pglite/session.js.map +1 -1
  542. package/planetscale-serverless/driver.cjs +3 -2
  543. package/planetscale-serverless/driver.cjs.map +1 -1
  544. package/planetscale-serverless/driver.d.cts +4 -3
  545. package/planetscale-serverless/driver.d.ts +4 -3
  546. package/planetscale-serverless/driver.js +3 -2
  547. package/planetscale-serverless/driver.js.map +1 -1
  548. package/planetscale-serverless/session.cjs +23 -13
  549. package/planetscale-serverless/session.cjs.map +1 -1
  550. package/planetscale-serverless/session.d.cts +6 -7
  551. package/planetscale-serverless/session.d.ts +6 -7
  552. package/planetscale-serverless/session.js +23 -13
  553. package/planetscale-serverless/session.js.map +1 -1
  554. package/postgres-js/driver.cjs +3 -2
  555. package/postgres-js/driver.cjs.map +1 -1
  556. package/postgres-js/driver.d.cts +4 -3
  557. package/postgres-js/driver.d.ts +4 -3
  558. package/postgres-js/driver.js +3 -2
  559. package/postgres-js/driver.js.map +1 -1
  560. package/postgres-js/session.cjs +27 -16
  561. package/postgres-js/session.cjs.map +1 -1
  562. package/postgres-js/session.d.cts +6 -5
  563. package/postgres-js/session.d.ts +6 -5
  564. package/postgres-js/session.js +27 -16
  565. package/postgres-js/session.js.map +1 -1
  566. package/prisma/mysql/driver.cjs +3 -3
  567. package/prisma/mysql/driver.cjs.map +1 -1
  568. package/prisma/mysql/driver.d.cts +3 -2
  569. package/prisma/mysql/driver.d.ts +3 -2
  570. package/prisma/mysql/driver.js +3 -3
  571. package/prisma/mysql/driver.js.map +1 -1
  572. package/prisma/mysql/session.cjs +10 -11
  573. package/prisma/mysql/session.cjs.map +1 -1
  574. package/prisma/mysql/session.d.cts +7 -6
  575. package/prisma/mysql/session.d.ts +7 -6
  576. package/prisma/mysql/session.js +10 -11
  577. package/prisma/mysql/session.js.map +1 -1
  578. package/prisma/pg/driver.cjs +3 -3
  579. package/prisma/pg/driver.cjs.map +1 -1
  580. package/prisma/pg/driver.d.cts +2 -1
  581. package/prisma/pg/driver.d.ts +2 -1
  582. package/prisma/pg/driver.js +3 -3
  583. package/prisma/pg/driver.js.map +1 -1
  584. package/prisma/pg/session.cjs +7 -7
  585. package/prisma/pg/session.cjs.map +1 -1
  586. package/prisma/pg/session.d.cts +6 -5
  587. package/prisma/pg/session.d.ts +6 -5
  588. package/prisma/pg/session.js +7 -7
  589. package/prisma/pg/session.js.map +1 -1
  590. package/prisma/sqlite/driver.cjs +7 -1
  591. package/prisma/sqlite/driver.cjs.map +1 -1
  592. package/prisma/sqlite/driver.d.cts +2 -1
  593. package/prisma/sqlite/driver.d.ts +2 -1
  594. package/prisma/sqlite/driver.js +7 -1
  595. package/prisma/sqlite/driver.js.map +1 -1
  596. package/prisma/sqlite/session.cjs +6 -6
  597. package/prisma/sqlite/session.cjs.map +1 -1
  598. package/prisma/sqlite/session.d.cts +6 -5
  599. package/prisma/sqlite/session.d.ts +6 -5
  600. package/prisma/sqlite/session.js +6 -6
  601. package/prisma/sqlite/session.js.map +1 -1
  602. package/singlestore/driver.cjs +28 -19
  603. package/singlestore/driver.cjs.map +1 -1
  604. package/singlestore/driver.d.cts +4 -2
  605. package/singlestore/driver.d.ts +4 -2
  606. package/singlestore/driver.js +28 -19
  607. package/singlestore/driver.js.map +1 -1
  608. package/singlestore/session.cjs +14 -10
  609. package/singlestore/session.cjs.map +1 -1
  610. package/singlestore/session.d.cts +5 -5
  611. package/singlestore/session.d.ts +5 -5
  612. package/singlestore/session.js +14 -10
  613. package/singlestore/session.js.map +1 -1
  614. package/singlestore-core/db.cjs +5 -3
  615. package/singlestore-core/db.cjs.map +1 -1
  616. package/singlestore-core/db.d.cts +3 -1
  617. package/singlestore-core/db.d.ts +3 -1
  618. package/singlestore-core/db.js +5 -3
  619. package/singlestore-core/db.js.map +1 -1
  620. package/singlestore-core/dialect.cjs +25 -18
  621. package/singlestore-core/dialect.cjs.map +1 -1
  622. package/singlestore-core/dialect.d.cts +7 -6
  623. package/singlestore-core/dialect.d.ts +7 -6
  624. package/singlestore-core/dialect.js +26 -19
  625. package/singlestore-core/dialect.js.map +1 -1
  626. package/singlestore-core/query-builders/delete.cjs +8 -2
  627. package/singlestore-core/query-builders/delete.cjs.map +1 -1
  628. package/singlestore-core/query-builders/delete.js +8 -2
  629. package/singlestore-core/query-builders/delete.js.map +1 -1
  630. package/singlestore-core/query-builders/insert.cjs +29 -5
  631. package/singlestore-core/query-builders/insert.cjs.map +1 -1
  632. package/singlestore-core/query-builders/insert.js +31 -7
  633. package/singlestore-core/query-builders/insert.js.map +1 -1
  634. package/singlestore-core/query-builders/query.cjs +12 -1
  635. package/singlestore-core/query-builders/query.cjs.map +1 -1
  636. package/singlestore-core/query-builders/query.js +12 -1
  637. package/singlestore-core/query-builders/query.js.map +1 -1
  638. package/singlestore-core/query-builders/select.cjs +12 -4
  639. package/singlestore-core/query-builders/select.cjs.map +1 -1
  640. package/singlestore-core/query-builders/select.js +12 -4
  641. package/singlestore-core/query-builders/select.js.map +1 -1
  642. package/singlestore-core/query-builders/update.cjs +9 -3
  643. package/singlestore-core/query-builders/update.cjs.map +1 -1
  644. package/singlestore-core/query-builders/update.js +9 -3
  645. package/singlestore-core/query-builders/update.js.map +1 -1
  646. package/singlestore-core/session.cjs +45 -3
  647. package/singlestore-core/session.cjs.map +1 -1
  648. package/singlestore-core/session.d.cts +13 -4
  649. package/singlestore-core/session.d.ts +13 -4
  650. package/singlestore-core/session.js +45 -3
  651. package/singlestore-core/session.js.map +1 -1
  652. package/singlestore-proxy/driver.cjs +3 -2
  653. package/singlestore-proxy/driver.cjs.map +1 -1
  654. package/singlestore-proxy/driver.d.cts +2 -1
  655. package/singlestore-proxy/driver.d.ts +2 -1
  656. package/singlestore-proxy/driver.js +3 -2
  657. package/singlestore-proxy/driver.js.map +1 -1
  658. package/singlestore-proxy/session.cjs +8 -8
  659. package/singlestore-proxy/session.cjs.map +1 -1
  660. package/singlestore-proxy/session.d.cts +5 -6
  661. package/singlestore-proxy/session.d.ts +5 -6
  662. package/singlestore-proxy/session.js +8 -8
  663. package/singlestore-proxy/session.js.map +1 -1
  664. package/sql/sql.cjs +24 -2
  665. package/sql/sql.cjs.map +1 -1
  666. package/sql/sql.d.cts +12 -0
  667. package/sql/sql.d.ts +12 -0
  668. package/sql/sql.js +23 -2
  669. package/sql/sql.js.map +1 -1
  670. package/sql-js/driver.cjs.map +1 -1
  671. package/sql-js/driver.d.cts +2 -1
  672. package/sql-js/driver.d.ts +2 -1
  673. package/sql-js/driver.js.map +1 -1
  674. package/sql-js/session.cjs +4 -4
  675. package/sql-js/session.cjs.map +1 -1
  676. package/sql-js/session.d.cts +4 -4
  677. package/sql-js/session.d.ts +4 -4
  678. package/sql-js/session.js +4 -4
  679. package/sql-js/session.js.map +1 -1
  680. package/sqlite-core/db.cjs +5 -3
  681. package/sqlite-core/db.cjs.map +1 -1
  682. package/sqlite-core/db.d.cts +3 -1
  683. package/sqlite-core/db.d.ts +3 -1
  684. package/sqlite-core/db.js +5 -3
  685. package/sqlite-core/db.js.map +1 -1
  686. package/sqlite-core/dialect.cjs +30 -19
  687. package/sqlite-core/dialect.cjs.map +1 -1
  688. package/sqlite-core/dialect.d.cts +7 -6
  689. package/sqlite-core/dialect.d.ts +7 -6
  690. package/sqlite-core/dialect.js +31 -20
  691. package/sqlite-core/dialect.js.map +1 -1
  692. package/sqlite-core/query-builders/delete.cjs +8 -2
  693. package/sqlite-core/query-builders/delete.cjs.map +1 -1
  694. package/sqlite-core/query-builders/delete.js +8 -2
  695. package/sqlite-core/query-builders/delete.js.map +1 -1
  696. package/sqlite-core/query-builders/insert.cjs +28 -5
  697. package/sqlite-core/query-builders/insert.cjs.map +1 -1
  698. package/sqlite-core/query-builders/insert.js +35 -7
  699. package/sqlite-core/query-builders/insert.js.map +1 -1
  700. package/sqlite-core/query-builders/query.cjs +12 -1
  701. package/sqlite-core/query-builders/query.cjs.map +1 -1
  702. package/sqlite-core/query-builders/query.js +12 -1
  703. package/sqlite-core/query-builders/query.js.map +1 -1
  704. package/sqlite-core/query-builders/select.cjs +15 -6
  705. package/sqlite-core/query-builders/select.cjs.map +1 -1
  706. package/sqlite-core/query-builders/select.js +15 -6
  707. package/sqlite-core/query-builders/select.js.map +1 -1
  708. package/sqlite-core/query-builders/update.cjs +9 -3
  709. package/sqlite-core/query-builders/update.cjs.map +1 -1
  710. package/sqlite-core/query-builders/update.js +9 -3
  711. package/sqlite-core/query-builders/update.js.map +1 -1
  712. package/sqlite-core/session.cjs +80 -6
  713. package/sqlite-core/session.cjs.map +1 -1
  714. package/sqlite-core/session.d.cts +19 -9
  715. package/sqlite-core/session.d.ts +19 -9
  716. package/sqlite-core/session.js +80 -6
  717. package/sqlite-core/session.js.map +1 -1
  718. package/sqlite-proxy/driver.cjs +4 -3
  719. package/sqlite-proxy/driver.cjs.map +1 -1
  720. package/sqlite-proxy/driver.d.cts +3 -2
  721. package/sqlite-proxy/driver.d.ts +3 -2
  722. package/sqlite-proxy/driver.js +4 -3
  723. package/sqlite-proxy/driver.js.map +1 -1
  724. package/sqlite-proxy/session.cjs +20 -11
  725. package/sqlite-proxy/session.cjs.map +1 -1
  726. package/sqlite-proxy/session.d.cts +8 -7
  727. package/sqlite-proxy/session.d.ts +8 -7
  728. package/sqlite-proxy/session.js +20 -11
  729. package/sqlite-proxy/session.js.map +1 -1
  730. package/tidb-serverless/driver.cjs +9 -2
  731. package/tidb-serverless/driver.cjs.map +1 -1
  732. package/tidb-serverless/driver.d.cts +4 -3
  733. package/tidb-serverless/driver.d.ts +4 -3
  734. package/tidb-serverless/driver.js +9 -2
  735. package/tidb-serverless/driver.js.map +1 -1
  736. package/tidb-serverless/session.cjs +23 -13
  737. package/tidb-serverless/session.cjs.map +1 -1
  738. package/tidb-serverless/session.d.cts +6 -7
  739. package/tidb-serverless/session.d.ts +6 -7
  740. package/tidb-serverless/session.js +23 -13
  741. package/tidb-serverless/session.js.map +1 -1
  742. package/tracing.cjs.map +1 -1
  743. package/tracing.js.map +1 -1
  744. package/utils.cjs +34 -2
  745. package/utils.cjs.map +1 -1
  746. package/utils.d.cts +5 -1
  747. package/utils.d.ts +5 -1
  748. package/utils.js +35 -4
  749. package/utils.js.map +1 -1
  750. package/vercel-postgres/driver.cjs +10 -5
  751. package/vercel-postgres/driver.cjs.map +1 -1
  752. package/vercel-postgres/driver.d.cts +6 -4
  753. package/vercel-postgres/driver.d.ts +6 -4
  754. package/vercel-postgres/driver.js +10 -5
  755. package/vercel-postgres/driver.js.map +1 -1
  756. package/vercel-postgres/session.cjs +18 -9
  757. package/vercel-postgres/session.cjs.map +1 -1
  758. package/vercel-postgres/session.d.cts +5 -4
  759. package/vercel-postgres/session.d.ts +5 -4
  760. package/vercel-postgres/session.js +18 -9
  761. package/vercel-postgres/session.js.map +1 -1
  762. package/version.cjs +1 -1
  763. package/version.d.cts +1 -1
  764. package/version.d.ts +1 -1
  765. package/version.js +1 -1
  766. package/xata-http/driver.cjs +7 -4
  767. package/xata-http/driver.cjs.map +1 -1
  768. package/xata-http/driver.d.cts +4 -2
  769. package/xata-http/driver.d.ts +4 -2
  770. package/xata-http/driver.js +7 -4
  771. package/xata-http/driver.js.map +1 -1
  772. package/xata-http/session.cjs +8 -6
  773. package/xata-http/session.cjs.map +1 -1
  774. package/xata-http/session.d.cts +5 -4
  775. package/xata-http/session.d.ts +5 -4
  776. package/xata-http/session.js +8 -6
  777. package/xata-http/session.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mysql2/session.ts"],"sourcesContent":["import type { Connection as CallbackConnection } from 'mysql2';\nimport type {\n\tConnection,\n\tFieldPacket,\n\tOkPacket,\n\tPool,\n\tPoolConnection,\n\tQueryOptions,\n\tResultSetHeader,\n\tRowDataPacket,\n} from 'mysql2/promise';\nimport { once } from 'node:events';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { SelectedFieldsOrdered } from '~/mysql-core/query-builders/select.types.ts';\nimport {\n\ttype Mode,\n\tMySqlPreparedQuery,\n\ttype MySqlPreparedQueryConfig,\n\ttype MySqlPreparedQueryHKT,\n\ttype MySqlQueryResultHKT,\n\tMySqlSession,\n\tMySqlTransaction,\n\ttype MySqlTransactionConfig,\n\ttype PreparedQueryKind,\n} from '~/mysql-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, sql } from '~/sql/sql.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport type MySql2Client = Pool | Connection;\n\nexport type MySqlRawQueryResult = [ResultSetHeader, FieldPacket[]];\nexport type MySqlQueryResultType = RowDataPacket[][] | RowDataPacket[] | OkPacket | OkPacket[] | ResultSetHeader;\nexport type MySqlQueryResult<\n\tT = any,\n> = [T extends ResultSetHeader ? T : T[], FieldPacket[]];\n\nexport class MySql2PreparedQuery<T extends MySqlPreparedQueryConfig> extends MySqlPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'MySql2PreparedQuery';\n\n\tprivate rawQuery: QueryOptions;\n\tprivate query: QueryOptions;\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\t// Keys that were used in $default and the value that was generated for them\n\t\tprivate generatedIds?: Record<string, unknown>[],\n\t\t// Keys that should be returned, it has the column with all properries + key from object\n\t\tprivate returningIds?: SelectedFieldsOrdered,\n\t) {\n\t\tsuper();\n\t\tthis.rawQuery = {\n\t\t\tsql: queryString,\n\t\t\t// rowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t\tthis.query = {\n\t\t\tsql: queryString,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQuery.sql, params);\n\n\t\tconst { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } =\n\t\t\tthis;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst res = await client.query<any>(rawQuery, params);\n\t\t\tconst insertId = res[0].insertId;\n\t\t\tconst affectedRows = res[0].affectedRows;\n\t\t\t// for each row, I need to check keys from\n\t\t\tif (returningIds) {\n\t\t\t\tconst returningResponse = [];\n\t\t\t\tlet j = 0;\n\t\t\t\tfor (let i = insertId; i < insertId + affectedRows; i++) {\n\t\t\t\t\tfor (const column of returningIds) {\n\t\t\t\t\t\tconst key = returningIds[0]!.path[0]!;\n\t\t\t\t\t\tif (is(column.field, Column)) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tif (column.field.primary && column.field.autoIncrement) {\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (column.field.defaultFn && generatedIds) {\n\t\t\t\t\t\t\t\t// generatedIds[rowIdx][key]\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: generatedIds[j]![key] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tj++;\n\t\t\t\t}\n\n\t\t\t\treturn returningResponse;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tconst result = await client.query<any[]>(query, params);\n\t\tconst rows = result[0];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tasync *iterator(\n\t\tplaceholderValues: Record<string, unknown> = {},\n\t): AsyncGenerator<T['execute'] extends any[] ? T['execute'][number] : T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tconst conn = ((isPool(this.client) ? await this.client.getConnection() : this.client) as {} as {\n\t\t\tconnection: CallbackConnection;\n\t\t}).connection;\n\n\t\tconst { fields, query, rawQuery, joinsNotNullableMap, client, customResultMapper } = this;\n\t\tconst hasRowsMapper = Boolean(fields || customResultMapper);\n\t\tconst driverQuery = hasRowsMapper ? conn.query(query, params) : conn.query(rawQuery, params);\n\n\t\tconst stream = driverQuery.stream();\n\n\t\tfunction dataListener() {\n\t\t\tstream.pause();\n\t\t}\n\n\t\tstream.on('data', dataListener);\n\n\t\ttry {\n\t\t\tconst onEnd = once(stream, 'end');\n\t\t\tconst onError = once(stream, 'error');\n\n\t\t\twhile (true) {\n\t\t\t\tstream.resume();\n\t\t\t\tconst row = await Promise.race([onEnd, onError, new Promise((resolve) => stream.once('data', resolve))]);\n\t\t\t\tif (row === undefined || (Array.isArray(row) && row.length === 0)) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (row instanceof Error) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\tthrow row;\n\t\t\t\t} else {\n\t\t\t\t\tif (hasRowsMapper) {\n\t\t\t\t\t\tif (customResultMapper) {\n\t\t\t\t\t\t\tconst mappedRow = customResultMapper([row as unknown[]]);\n\t\t\t\t\t\t\tyield (Array.isArray(mappedRow) ? mappedRow[0] : mappedRow);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyield mapResultRow(fields!, row as unknown[], joinsNotNullableMap);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyield row as T['execute'];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tstream.off('data', dataListener);\n\t\t\tif (isPool(client)) {\n\t\t\t\tconn.end();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface MySql2SessionOptions {\n\tlogger?: Logger;\n\tmode: Mode;\n}\n\nexport class MySql2Session<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlSession<MySqlQueryResultHKT, MySql2PreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'MySql2Session';\n\n\tprivate logger: Logger;\n\tprivate mode: Mode;\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tdialect: MySqlDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: MySql2SessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.mode = options.mode;\n\t}\n\n\tprepareQuery<T extends MySqlPreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\tgeneratedIds?: Record<string, unknown>[],\n\t\treturningIds?: SelectedFieldsOrdered,\n\t): PreparedQueryKind<MySql2PreparedQueryHKT, T> {\n\t\t// Add returningId fields\n\t\t// Each driver gets them from response from database\n\t\treturn new MySql2PreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t) as PreparedQueryKind<MySql2PreparedQueryHKT, T>;\n\t}\n\n\t/**\n\t * @internal\n\t * What is its purpose?\n\t */\n\tasync query(query: string, params: unknown[]): Promise<MySqlQueryResult> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.client.query({\n\t\t\tsql: query,\n\t\t\tvalues: params,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t});\n\t\treturn result;\n\t}\n\n\toverride all<T = unknown>(query: SQL): Promise<T[]> {\n\t\tconst querySql = this.dialect.sqlToQuery(query);\n\t\tthis.logger.logQuery(querySql.sql, querySql.params);\n\t\treturn this.client.execute(querySql.sql, querySql.params).then((result) => result[0]) as Promise<T[]>;\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: MySql2Transaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: MySqlTransactionConfig,\n\t): Promise<T> {\n\t\tconst session = isPool(this.client)\n\t\t\t? new MySql2Session(\n\t\t\t\tawait this.client.getConnection(),\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t)\n\t\t\t: this;\n\t\tconst tx = new MySql2Transaction<TFullSchema, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tsession as MySqlSession<any, any, any, any>,\n\t\t\tthis.schema,\n\t\t\t0,\n\t\t\tthis.mode,\n\t\t);\n\t\tif (config) {\n\t\t\tconst setTransactionConfigSql = this.getSetTransactionSQL(config);\n\t\t\tif (setTransactionConfigSql) {\n\t\t\t\tawait tx.execute(setTransactionConfigSql);\n\t\t\t}\n\t\t\tconst startTransactionSql = this.getStartTransactionSQL(config);\n\t\t\tawait (startTransactionSql ? tx.execute(startTransactionSql) : tx.execute(sql`begin`));\n\t\t} else {\n\t\t\tawait tx.execute(sql`begin`);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql`rollback`);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tif (isPool(this.client)) {\n\t\t\t\t(session.client as PoolConnection).release();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class MySql2Transaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlTransaction<MySql2QueryResultHKT, MySql2PreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'MySql2Transaction';\n\n\toverride async transaction<T>(transaction: (tx: MySql2Transaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new MySql2Transaction<TFullSchema, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t\tthis.mode,\n\t\t);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nfunction isPool(client: MySql2Client): client is Pool {\n\treturn 'getConnection' in client;\n}\n\nexport interface MySql2QueryResultHKT extends MySqlQueryResultHKT {\n\ttype: MySqlRawQueryResult;\n}\n\nexport interface MySql2PreparedQueryHKT extends MySqlPreparedQueryHKT {\n\ttype: MySql2PreparedQuery<Assume<this['config'], MySqlPreparedQueryConfig>>;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/mysql2/session.ts"],"sourcesContent":["import type { Connection as CallbackConnection } from 'mysql2';\nimport type {\n\tConnection,\n\tFieldPacket,\n\tOkPacket,\n\tPool,\n\tPoolConnection,\n\tQueryOptions,\n\tResultSetHeader,\n\tRowDataPacket,\n} from 'mysql2/promise';\nimport { once } from 'node:events';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { BlankMySqlHookContext, DrizzleMySqlExtension } from '~/extension-core/mysql/index.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { SelectedFieldsOrdered } from '~/mysql-core/query-builders/select.types.ts';\nimport {\n\ttype Mode,\n\tMySqlPreparedQuery,\n\ttype MySqlPreparedQueryConfig,\n\ttype MySqlPreparedQueryHKT,\n\ttype MySqlQueryResultHKT,\n\tMySqlSession,\n\tMySqlTransaction,\n\ttype MySqlTransactionConfig,\n\ttype PreparedQueryKind,\n} from '~/mysql-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, sql } from '~/sql/sql.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport type MySql2Client = Pool | Connection;\n\nexport type MySqlRawQueryResult = [ResultSetHeader, FieldPacket[]];\nexport type MySqlQueryResultType = RowDataPacket[][] | RowDataPacket[] | OkPacket | OkPacket[] | ResultSetHeader;\nexport type MySqlQueryResult<\n\tT = any,\n> = [T extends ResultSetHeader ? T : T[], FieldPacket[]];\n\nexport class MySql2PreparedQuery<T extends MySqlPreparedQueryConfig> extends MySqlPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'MySql2PreparedQuery';\n\n\tprivate rawQuery: QueryOptions;\n\tprivate query: QueryOptions;\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tqueryString: string,\n\t\tparams: unknown[],\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\textensions?: DrizzleMySqlExtension[],\n\t\thookContext?: BlankMySqlHookContext,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\t// Keys that were used in $default and the value that was generated for them\n\t\tprivate generatedIds?: Record<string, unknown>[],\n\t\t// Keys that should be returned, it has the column with all properries + key from object\n\t\tprivate returningIds?: SelectedFieldsOrdered,\n\t) {\n\t\tsuper(queryString, params, extensions, hookContext);\n\t\tthis.rawQuery = {\n\t\t\tsql: queryString,\n\t\t\t// rowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t\tthis.query = {\n\t\t\tsql: queryString,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t}\n\n\tasync _execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQuery.sql, params);\n\n\t\tconst { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } =\n\t\t\tthis;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst res = await client.query<any>(rawQuery, params);\n\t\t\tconst insertId = res[0].insertId;\n\t\t\tconst affectedRows = res[0].affectedRows;\n\t\t\t// for each row, I need to check keys from\n\t\t\tif (returningIds) {\n\t\t\t\tconst returningResponse = [];\n\t\t\t\tlet j = 0;\n\t\t\t\tfor (let i = insertId; i < insertId + affectedRows; i++) {\n\t\t\t\t\tfor (const column of returningIds) {\n\t\t\t\t\t\tconst key = returningIds[0]!.path[0]!;\n\t\t\t\t\t\tif (is(column.field, Column)) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tif (column.field.primary && column.field.autoIncrement) {\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (column.field.defaultFn && generatedIds) {\n\t\t\t\t\t\t\t\t// generatedIds[rowIdx][key]\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: generatedIds[j]![key] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tj++;\n\t\t\t\t}\n\n\t\t\t\treturn returningResponse;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tconst result = await client.query<any[]>(query, params);\n\t\tconst rows = result[0];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tasync *iterator(\n\t\tplaceholderValues: Record<string, unknown> = {},\n\t): AsyncGenerator<T['execute'] extends any[] ? T['execute'][number] : T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tconst conn = ((isPool(this.client) ? await this.client.getConnection() : this.client) as {} as {\n\t\t\tconnection: CallbackConnection;\n\t\t}).connection;\n\n\t\tconst { fields, query, rawQuery, joinsNotNullableMap, client, customResultMapper } = this;\n\t\tconst hasRowsMapper = Boolean(fields || customResultMapper);\n\t\tconst driverQuery = hasRowsMapper ? conn.query(query, params) : conn.query(rawQuery, params);\n\n\t\tconst stream = driverQuery.stream();\n\n\t\tfunction dataListener() {\n\t\t\tstream.pause();\n\t\t}\n\n\t\tstream.on('data', dataListener);\n\n\t\ttry {\n\t\t\tconst onEnd = once(stream, 'end');\n\t\t\tconst onError = once(stream, 'error');\n\n\t\t\twhile (true) {\n\t\t\t\tstream.resume();\n\t\t\t\tconst row = await Promise.race([onEnd, onError, new Promise((resolve) => stream.once('data', resolve))]);\n\t\t\t\tif (row === undefined || (Array.isArray(row) && row.length === 0)) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (row instanceof Error) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\tthrow row;\n\t\t\t\t} else {\n\t\t\t\t\tif (hasRowsMapper) {\n\t\t\t\t\t\tif (customResultMapper) {\n\t\t\t\t\t\t\tconst mappedRow = customResultMapper([row as unknown[]]);\n\t\t\t\t\t\t\tyield (Array.isArray(mappedRow) ? mappedRow[0] : mappedRow);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyield mapResultRow(fields!, row as unknown[], joinsNotNullableMap);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyield row as T['execute'];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tstream.off('data', dataListener);\n\t\t\tif (isPool(client)) {\n\t\t\t\tconn.end();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface MySql2SessionOptions {\n\tlogger?: Logger;\n\tmode: Mode;\n}\n\nexport class MySql2Session<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlSession<MySqlQueryResultHKT, MySql2PreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'MySql2Session';\n\n\tprivate logger: Logger;\n\tprivate mode: Mode;\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tdialect: MySqlDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: MySql2SessionOptions,\n\t\textensions?: DrizzleMySqlExtension[],\n\t) {\n\t\tsuper(dialect, extensions);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.mode = options.mode;\n\t}\n\n\tprepareQuery<T extends MySqlPreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\thookContext: BlankMySqlHookContext,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\tgeneratedIds?: Record<string, unknown>[],\n\t\treturningIds?: SelectedFieldsOrdered,\n\t): PreparedQueryKind<MySql2PreparedQueryHKT, T> {\n\t\t// Add returningId fields\n\t\t// Each driver gets them from response from database\n\t\treturn new MySql2PreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tthis.extensions,\n\t\t\thookContext,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t) as PreparedQueryKind<MySql2PreparedQueryHKT, T>;\n\t}\n\n\t/**\n\t * @internal\n\t * What is its purpose?\n\t */\n\tasync query(query: string, params: unknown[]): Promise<MySqlQueryResult> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.client.query({\n\t\t\tsql: query,\n\t\t\tvalues: params,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t});\n\t\treturn result;\n\t}\n\n\toverride all<T = unknown>(query: SQL): Promise<T[]> {\n\t\tconst querySql = this.dialect.sqlToQuery(query);\n\t\tthis.logger.logQuery(querySql.sql, querySql.params);\n\t\treturn this.client.execute(querySql.sql, querySql.params).then((result) => result[0]) as Promise<T[]>;\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: MySql2Transaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: MySqlTransactionConfig,\n\t): Promise<T> {\n\t\tconst session = isPool(this.client)\n\t\t\t? new MySql2Session(\n\t\t\t\tawait this.client.getConnection(),\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t\tthis.extensions,\n\t\t\t)\n\t\t\t: this;\n\t\tconst tx = new MySql2Transaction<TFullSchema, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tsession as MySqlSession<any, any, any, any>,\n\t\t\tthis.schema,\n\t\t\t0,\n\t\t\tthis.mode,\n\t\t\tthis.extensions,\n\t\t);\n\t\tif (config) {\n\t\t\tconst setTransactionConfigSql = this.getSetTransactionSQL(config);\n\t\t\tif (setTransactionConfigSql) {\n\t\t\t\tawait tx.execute(setTransactionConfigSql);\n\t\t\t}\n\t\t\tconst startTransactionSql = this.getStartTransactionSQL(config);\n\t\t\tawait (startTransactionSql ? tx.execute(startTransactionSql) : tx.execute(sql`begin`));\n\t\t} else {\n\t\t\tawait tx.execute(sql`begin`);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql`rollback`);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tif (isPool(this.client)) {\n\t\t\t\t(session.client as PoolConnection).release();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class MySql2Transaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlTransaction<MySql2QueryResultHKT, MySql2PreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'MySql2Transaction';\n\n\toverride async transaction<T>(transaction: (tx: MySql2Transaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new MySql2Transaction<TFullSchema, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t\tthis.mode,\n\t\t\tthis._.extensions,\n\t\t);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nfunction isPool(client: MySql2Client): client is Pool {\n\treturn 'getConnection' in client;\n}\n\nexport interface MySql2QueryResultHKT extends MySqlQueryResultHKT {\n\ttype: MySqlRawQueryResult;\n}\n\nexport interface MySql2PreparedQueryHKT extends MySqlPreparedQueryHKT {\n\ttype: MySql2PreparedQuery<Assume<this['config'], MySqlPreparedQueryConfig>>;\n}\n"],"mappings":"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","names":[]}
@@ -1,5 +1,6 @@
1
1
  import type { Connection, FieldPacket, OkPacket, Pool, ResultSetHeader, RowDataPacket } from 'mysql2/promise';
2
2
  import { entityKind } from "../entity.cjs";
3
+ import type { BlankMySqlHookContext, DrizzleMySqlExtension } from "../extension-core/mysql/index.cjs";
3
4
  import type { Logger } from "../logger.cjs";
4
5
  import type { MySqlDialect } from "../mysql-core/dialect.cjs";
5
6
  import type { SelectedFieldsOrdered } from "../mysql-core/query-builders/select.types.cjs";
@@ -13,7 +14,6 @@ export type MySqlQueryResultType = RowDataPacket[][] | RowDataPacket[] | OkPacke
13
14
  export type MySqlQueryResult<T = any> = [T extends ResultSetHeader ? T : T[], FieldPacket[]];
14
15
  export declare class MySql2PreparedQuery<T extends MySqlPreparedQueryConfig> extends MySqlPreparedQuery<T> {
15
16
  private client;
16
- private params;
17
17
  private logger;
18
18
  private fields;
19
19
  private customResultMapper?;
@@ -22,8 +22,8 @@ export declare class MySql2PreparedQuery<T extends MySqlPreparedQueryConfig> ext
22
22
  static readonly [entityKind]: string;
23
23
  private rawQuery;
24
24
  private query;
25
- constructor(client: MySql2Client, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered | undefined, customResultMapper?: ((rows: unknown[][]) => T["execute"]) | undefined, generatedIds?: Record<string, unknown>[] | undefined, returningIds?: SelectedFieldsOrdered | undefined);
26
- execute(placeholderValues?: Record<string, unknown>): Promise<T['execute']>;
25
+ constructor(client: MySql2Client, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered | undefined, extensions?: DrizzleMySqlExtension[], hookContext?: BlankMySqlHookContext, customResultMapper?: ((rows: unknown[][]) => T["execute"]) | undefined, generatedIds?: Record<string, unknown>[] | undefined, returningIds?: SelectedFieldsOrdered | undefined);
26
+ _execute(placeholderValues?: Record<string, unknown>): Promise<T['execute']>;
27
27
  iterator(placeholderValues?: Record<string, unknown>): AsyncGenerator<T['execute'] extends any[] ? T['execute'][number] : T['execute']>;
28
28
  }
29
29
  export interface MySql2SessionOptions {
@@ -37,8 +37,8 @@ export declare class MySql2Session<TFullSchema extends Record<string, unknown>,
37
37
  static readonly [entityKind]: string;
38
38
  private logger;
39
39
  private mode;
40
- constructor(client: MySql2Client, dialect: MySqlDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options: MySql2SessionOptions);
41
- prepareQuery<T extends MySqlPreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, customResultMapper?: (rows: unknown[][]) => T['execute'], generatedIds?: Record<string, unknown>[], returningIds?: SelectedFieldsOrdered): PreparedQueryKind<MySql2PreparedQueryHKT, T>;
40
+ constructor(client: MySql2Client, dialect: MySqlDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options: MySql2SessionOptions, extensions?: DrizzleMySqlExtension[]);
41
+ prepareQuery<T extends MySqlPreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, hookContext: BlankMySqlHookContext, customResultMapper?: (rows: unknown[][]) => T['execute'], generatedIds?: Record<string, unknown>[], returningIds?: SelectedFieldsOrdered): PreparedQueryKind<MySql2PreparedQueryHKT, T>;
42
42
  all<T = unknown>(query: SQL): Promise<T[]>;
43
43
  transaction<T>(transaction: (tx: MySql2Transaction<TFullSchema, TSchema>) => Promise<T>, config?: MySqlTransactionConfig): Promise<T>;
44
44
  }
@@ -1,5 +1,6 @@
1
1
  import type { Connection, FieldPacket, OkPacket, Pool, ResultSetHeader, RowDataPacket } from 'mysql2/promise';
2
2
  import { entityKind } from "../entity.js";
3
+ import type { BlankMySqlHookContext, DrizzleMySqlExtension } from "../extension-core/mysql/index.js";
3
4
  import type { Logger } from "../logger.js";
4
5
  import type { MySqlDialect } from "../mysql-core/dialect.js";
5
6
  import type { SelectedFieldsOrdered } from "../mysql-core/query-builders/select.types.js";
@@ -13,7 +14,6 @@ export type MySqlQueryResultType = RowDataPacket[][] | RowDataPacket[] | OkPacke
13
14
  export type MySqlQueryResult<T = any> = [T extends ResultSetHeader ? T : T[], FieldPacket[]];
14
15
  export declare class MySql2PreparedQuery<T extends MySqlPreparedQueryConfig> extends MySqlPreparedQuery<T> {
15
16
  private client;
16
- private params;
17
17
  private logger;
18
18
  private fields;
19
19
  private customResultMapper?;
@@ -22,8 +22,8 @@ export declare class MySql2PreparedQuery<T extends MySqlPreparedQueryConfig> ext
22
22
  static readonly [entityKind]: string;
23
23
  private rawQuery;
24
24
  private query;
25
- constructor(client: MySql2Client, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered | undefined, customResultMapper?: ((rows: unknown[][]) => T["execute"]) | undefined, generatedIds?: Record<string, unknown>[] | undefined, returningIds?: SelectedFieldsOrdered | undefined);
26
- execute(placeholderValues?: Record<string, unknown>): Promise<T['execute']>;
25
+ constructor(client: MySql2Client, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered | undefined, extensions?: DrizzleMySqlExtension[], hookContext?: BlankMySqlHookContext, customResultMapper?: ((rows: unknown[][]) => T["execute"]) | undefined, generatedIds?: Record<string, unknown>[] | undefined, returningIds?: SelectedFieldsOrdered | undefined);
26
+ _execute(placeholderValues?: Record<string, unknown>): Promise<T['execute']>;
27
27
  iterator(placeholderValues?: Record<string, unknown>): AsyncGenerator<T['execute'] extends any[] ? T['execute'][number] : T['execute']>;
28
28
  }
29
29
  export interface MySql2SessionOptions {
@@ -37,8 +37,8 @@ export declare class MySql2Session<TFullSchema extends Record<string, unknown>,
37
37
  static readonly [entityKind]: string;
38
38
  private logger;
39
39
  private mode;
40
- constructor(client: MySql2Client, dialect: MySqlDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options: MySql2SessionOptions);
41
- prepareQuery<T extends MySqlPreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, customResultMapper?: (rows: unknown[][]) => T['execute'], generatedIds?: Record<string, unknown>[], returningIds?: SelectedFieldsOrdered): PreparedQueryKind<MySql2PreparedQueryHKT, T>;
40
+ constructor(client: MySql2Client, dialect: MySqlDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options: MySql2SessionOptions, extensions?: DrizzleMySqlExtension[]);
41
+ prepareQuery<T extends MySqlPreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, hookContext: BlankMySqlHookContext, customResultMapper?: (rows: unknown[][]) => T['execute'], generatedIds?: Record<string, unknown>[], returningIds?: SelectedFieldsOrdered): PreparedQueryKind<MySql2PreparedQueryHKT, T>;
42
42
  all<T = unknown>(query: SQL): Promise<T[]>;
43
43
  transaction<T>(transaction: (tx: MySql2Transaction<TFullSchema, TSchema>) => Promise<T>, config?: MySqlTransactionConfig): Promise<T>;
44
44
  }
package/mysql2/session.js CHANGED
@@ -10,10 +10,9 @@ import {
10
10
  import { fillPlaceholders, sql } from "../sql/sql.js";
11
11
  import { mapResultRow } from "../utils.js";
12
12
  class MySql2PreparedQuery extends MySqlPreparedQuery {
13
- constructor(client, queryString, params, logger, fields, customResultMapper, generatedIds, returningIds) {
14
- super();
13
+ constructor(client, queryString, params, logger, fields, extensions, hookContext, customResultMapper, generatedIds, returningIds) {
14
+ super(queryString, params, extensions, hookContext);
15
15
  this.client = client;
16
- this.params = params;
17
16
  this.logger = logger;
18
17
  this.fields = fields;
19
18
  this.customResultMapper = customResultMapper;
@@ -43,7 +42,7 @@ class MySql2PreparedQuery extends MySqlPreparedQuery {
43
42
  static [entityKind] = "MySql2PreparedQuery";
44
43
  rawQuery;
45
44
  query;
46
- async execute(placeholderValues = {}) {
45
+ async _execute(placeholderValues = {}) {
47
46
  const params = fillPlaceholders(this.params, placeholderValues);
48
47
  this.logger.logQuery(this.rawQuery.sql, params);
49
48
  const { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } = this;
@@ -122,8 +121,8 @@ class MySql2PreparedQuery extends MySqlPreparedQuery {
122
121
  }
123
122
  }
124
123
  class MySql2Session extends MySqlSession {
125
- constructor(client, dialect, schema, options) {
126
- super(dialect);
124
+ constructor(client, dialect, schema, options, extensions) {
125
+ super(dialect, extensions);
127
126
  this.client = client;
128
127
  this.schema = schema;
129
128
  this.options = options;
@@ -133,13 +132,15 @@ class MySql2Session extends MySqlSession {
133
132
  static [entityKind] = "MySql2Session";
134
133
  logger;
135
134
  mode;
136
- prepareQuery(query, fields, customResultMapper, generatedIds, returningIds) {
135
+ prepareQuery(query, fields, hookContext, customResultMapper, generatedIds, returningIds) {
137
136
  return new MySql2PreparedQuery(
138
137
  this.client,
139
138
  query.sql,
140
139
  query.params,
141
140
  this.logger,
142
141
  fields,
142
+ this.extensions,
143
+ hookContext,
143
144
  customResultMapper,
144
145
  generatedIds,
145
146
  returningIds
@@ -174,14 +175,16 @@ class MySql2Session extends MySqlSession {
174
175
  await this.client.getConnection(),
175
176
  this.dialect,
176
177
  this.schema,
177
- this.options
178
+ this.options,
179
+ this.extensions
178
180
  ) : this;
179
181
  const tx = new MySql2Transaction(
180
182
  this.dialect,
181
183
  session,
182
184
  this.schema,
183
185
  0,
184
- this.mode
186
+ this.mode,
187
+ this.extensions
185
188
  );
186
189
  if (config) {
187
190
  const setTransactionConfigSql = this.getSetTransactionSQL(config);
@@ -216,7 +219,8 @@ class MySql2Transaction extends MySqlTransaction {
216
219
  this.session,
217
220
  this.schema,
218
221
  this.nestedIndex + 1,
219
- this.mode
222
+ this.mode,
223
+ this._.extensions
220
224
  );
221
225
  await tx.execute(sql.raw(`savepoint ${savepointName}`));
222
226
  try {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mysql2/session.ts"],"sourcesContent":["import type { Connection as CallbackConnection } from 'mysql2';\nimport type {\n\tConnection,\n\tFieldPacket,\n\tOkPacket,\n\tPool,\n\tPoolConnection,\n\tQueryOptions,\n\tResultSetHeader,\n\tRowDataPacket,\n} from 'mysql2/promise';\nimport { once } from 'node:events';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { SelectedFieldsOrdered } from '~/mysql-core/query-builders/select.types.ts';\nimport {\n\ttype Mode,\n\tMySqlPreparedQuery,\n\ttype MySqlPreparedQueryConfig,\n\ttype MySqlPreparedQueryHKT,\n\ttype MySqlQueryResultHKT,\n\tMySqlSession,\n\tMySqlTransaction,\n\ttype MySqlTransactionConfig,\n\ttype PreparedQueryKind,\n} from '~/mysql-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, sql } from '~/sql/sql.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport type MySql2Client = Pool | Connection;\n\nexport type MySqlRawQueryResult = [ResultSetHeader, FieldPacket[]];\nexport type MySqlQueryResultType = RowDataPacket[][] | RowDataPacket[] | OkPacket | OkPacket[] | ResultSetHeader;\nexport type MySqlQueryResult<\n\tT = any,\n> = [T extends ResultSetHeader ? T : T[], FieldPacket[]];\n\nexport class MySql2PreparedQuery<T extends MySqlPreparedQueryConfig> extends MySqlPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'MySql2PreparedQuery';\n\n\tprivate rawQuery: QueryOptions;\n\tprivate query: QueryOptions;\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\t// Keys that were used in $default and the value that was generated for them\n\t\tprivate generatedIds?: Record<string, unknown>[],\n\t\t// Keys that should be returned, it has the column with all properries + key from object\n\t\tprivate returningIds?: SelectedFieldsOrdered,\n\t) {\n\t\tsuper();\n\t\tthis.rawQuery = {\n\t\t\tsql: queryString,\n\t\t\t// rowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t\tthis.query = {\n\t\t\tsql: queryString,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQuery.sql, params);\n\n\t\tconst { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } =\n\t\t\tthis;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst res = await client.query<any>(rawQuery, params);\n\t\t\tconst insertId = res[0].insertId;\n\t\t\tconst affectedRows = res[0].affectedRows;\n\t\t\t// for each row, I need to check keys from\n\t\t\tif (returningIds) {\n\t\t\t\tconst returningResponse = [];\n\t\t\t\tlet j = 0;\n\t\t\t\tfor (let i = insertId; i < insertId + affectedRows; i++) {\n\t\t\t\t\tfor (const column of returningIds) {\n\t\t\t\t\t\tconst key = returningIds[0]!.path[0]!;\n\t\t\t\t\t\tif (is(column.field, Column)) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tif (column.field.primary && column.field.autoIncrement) {\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (column.field.defaultFn && generatedIds) {\n\t\t\t\t\t\t\t\t// generatedIds[rowIdx][key]\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: generatedIds[j]![key] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tj++;\n\t\t\t\t}\n\n\t\t\t\treturn returningResponse;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tconst result = await client.query<any[]>(query, params);\n\t\tconst rows = result[0];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tasync *iterator(\n\t\tplaceholderValues: Record<string, unknown> = {},\n\t): AsyncGenerator<T['execute'] extends any[] ? T['execute'][number] : T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tconst conn = ((isPool(this.client) ? await this.client.getConnection() : this.client) as {} as {\n\t\t\tconnection: CallbackConnection;\n\t\t}).connection;\n\n\t\tconst { fields, query, rawQuery, joinsNotNullableMap, client, customResultMapper } = this;\n\t\tconst hasRowsMapper = Boolean(fields || customResultMapper);\n\t\tconst driverQuery = hasRowsMapper ? conn.query(query, params) : conn.query(rawQuery, params);\n\n\t\tconst stream = driverQuery.stream();\n\n\t\tfunction dataListener() {\n\t\t\tstream.pause();\n\t\t}\n\n\t\tstream.on('data', dataListener);\n\n\t\ttry {\n\t\t\tconst onEnd = once(stream, 'end');\n\t\t\tconst onError = once(stream, 'error');\n\n\t\t\twhile (true) {\n\t\t\t\tstream.resume();\n\t\t\t\tconst row = await Promise.race([onEnd, onError, new Promise((resolve) => stream.once('data', resolve))]);\n\t\t\t\tif (row === undefined || (Array.isArray(row) && row.length === 0)) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (row instanceof Error) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\tthrow row;\n\t\t\t\t} else {\n\t\t\t\t\tif (hasRowsMapper) {\n\t\t\t\t\t\tif (customResultMapper) {\n\t\t\t\t\t\t\tconst mappedRow = customResultMapper([row as unknown[]]);\n\t\t\t\t\t\t\tyield (Array.isArray(mappedRow) ? mappedRow[0] : mappedRow);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyield mapResultRow(fields!, row as unknown[], joinsNotNullableMap);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyield row as T['execute'];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tstream.off('data', dataListener);\n\t\t\tif (isPool(client)) {\n\t\t\t\tconn.end();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface MySql2SessionOptions {\n\tlogger?: Logger;\n\tmode: Mode;\n}\n\nexport class MySql2Session<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlSession<MySqlQueryResultHKT, MySql2PreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'MySql2Session';\n\n\tprivate logger: Logger;\n\tprivate mode: Mode;\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tdialect: MySqlDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: MySql2SessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.mode = options.mode;\n\t}\n\n\tprepareQuery<T extends MySqlPreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\tgeneratedIds?: Record<string, unknown>[],\n\t\treturningIds?: SelectedFieldsOrdered,\n\t): PreparedQueryKind<MySql2PreparedQueryHKT, T> {\n\t\t// Add returningId fields\n\t\t// Each driver gets them from response from database\n\t\treturn new MySql2PreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t) as PreparedQueryKind<MySql2PreparedQueryHKT, T>;\n\t}\n\n\t/**\n\t * @internal\n\t * What is its purpose?\n\t */\n\tasync query(query: string, params: unknown[]): Promise<MySqlQueryResult> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.client.query({\n\t\t\tsql: query,\n\t\t\tvalues: params,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t});\n\t\treturn result;\n\t}\n\n\toverride all<T = unknown>(query: SQL): Promise<T[]> {\n\t\tconst querySql = this.dialect.sqlToQuery(query);\n\t\tthis.logger.logQuery(querySql.sql, querySql.params);\n\t\treturn this.client.execute(querySql.sql, querySql.params).then((result) => result[0]) as Promise<T[]>;\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: MySql2Transaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: MySqlTransactionConfig,\n\t): Promise<T> {\n\t\tconst session = isPool(this.client)\n\t\t\t? new MySql2Session(\n\t\t\t\tawait this.client.getConnection(),\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t)\n\t\t\t: this;\n\t\tconst tx = new MySql2Transaction<TFullSchema, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tsession as MySqlSession<any, any, any, any>,\n\t\t\tthis.schema,\n\t\t\t0,\n\t\t\tthis.mode,\n\t\t);\n\t\tif (config) {\n\t\t\tconst setTransactionConfigSql = this.getSetTransactionSQL(config);\n\t\t\tif (setTransactionConfigSql) {\n\t\t\t\tawait tx.execute(setTransactionConfigSql);\n\t\t\t}\n\t\t\tconst startTransactionSql = this.getStartTransactionSQL(config);\n\t\t\tawait (startTransactionSql ? tx.execute(startTransactionSql) : tx.execute(sql`begin`));\n\t\t} else {\n\t\t\tawait tx.execute(sql`begin`);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql`rollback`);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tif (isPool(this.client)) {\n\t\t\t\t(session.client as PoolConnection).release();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class MySql2Transaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlTransaction<MySql2QueryResultHKT, MySql2PreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'MySql2Transaction';\n\n\toverride async transaction<T>(transaction: (tx: MySql2Transaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new MySql2Transaction<TFullSchema, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t\tthis.mode,\n\t\t);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nfunction isPool(client: MySql2Client): client is Pool {\n\treturn 'getConnection' in client;\n}\n\nexport interface MySql2QueryResultHKT extends MySqlQueryResultHKT {\n\ttype: MySqlRawQueryResult;\n}\n\nexport interface MySql2PreparedQueryHKT extends MySqlPreparedQueryHKT {\n\ttype: MySql2PreparedQuery<Assume<this['config'], MySqlPreparedQueryConfig>>;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/mysql2/session.ts"],"sourcesContent":["import type { Connection as CallbackConnection } from 'mysql2';\nimport type {\n\tConnection,\n\tFieldPacket,\n\tOkPacket,\n\tPool,\n\tPoolConnection,\n\tQueryOptions,\n\tResultSetHeader,\n\tRowDataPacket,\n} from 'mysql2/promise';\nimport { once } from 'node:events';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { BlankMySqlHookContext, DrizzleMySqlExtension } from '~/extension-core/mysql/index.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { SelectedFieldsOrdered } from '~/mysql-core/query-builders/select.types.ts';\nimport {\n\ttype Mode,\n\tMySqlPreparedQuery,\n\ttype MySqlPreparedQueryConfig,\n\ttype MySqlPreparedQueryHKT,\n\ttype MySqlQueryResultHKT,\n\tMySqlSession,\n\tMySqlTransaction,\n\ttype MySqlTransactionConfig,\n\ttype PreparedQueryKind,\n} from '~/mysql-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, sql } from '~/sql/sql.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport type MySql2Client = Pool | Connection;\n\nexport type MySqlRawQueryResult = [ResultSetHeader, FieldPacket[]];\nexport type MySqlQueryResultType = RowDataPacket[][] | RowDataPacket[] | OkPacket | OkPacket[] | ResultSetHeader;\nexport type MySqlQueryResult<\n\tT = any,\n> = [T extends ResultSetHeader ? T : T[], FieldPacket[]];\n\nexport class MySql2PreparedQuery<T extends MySqlPreparedQueryConfig> extends MySqlPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'MySql2PreparedQuery';\n\n\tprivate rawQuery: QueryOptions;\n\tprivate query: QueryOptions;\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tqueryString: string,\n\t\tparams: unknown[],\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\textensions?: DrizzleMySqlExtension[],\n\t\thookContext?: BlankMySqlHookContext,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\t// Keys that were used in $default and the value that was generated for them\n\t\tprivate generatedIds?: Record<string, unknown>[],\n\t\t// Keys that should be returned, it has the column with all properries + key from object\n\t\tprivate returningIds?: SelectedFieldsOrdered,\n\t) {\n\t\tsuper(queryString, params, extensions, hookContext);\n\t\tthis.rawQuery = {\n\t\t\tsql: queryString,\n\t\t\t// rowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t\tthis.query = {\n\t\t\tsql: queryString,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t}\n\n\tasync _execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQuery.sql, params);\n\n\t\tconst { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } =\n\t\t\tthis;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst res = await client.query<any>(rawQuery, params);\n\t\t\tconst insertId = res[0].insertId;\n\t\t\tconst affectedRows = res[0].affectedRows;\n\t\t\t// for each row, I need to check keys from\n\t\t\tif (returningIds) {\n\t\t\t\tconst returningResponse = [];\n\t\t\t\tlet j = 0;\n\t\t\t\tfor (let i = insertId; i < insertId + affectedRows; i++) {\n\t\t\t\t\tfor (const column of returningIds) {\n\t\t\t\t\t\tconst key = returningIds[0]!.path[0]!;\n\t\t\t\t\t\tif (is(column.field, Column)) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tif (column.field.primary && column.field.autoIncrement) {\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (column.field.defaultFn && generatedIds) {\n\t\t\t\t\t\t\t\t// generatedIds[rowIdx][key]\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: generatedIds[j]![key] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tj++;\n\t\t\t\t}\n\n\t\t\t\treturn returningResponse;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tconst result = await client.query<any[]>(query, params);\n\t\tconst rows = result[0];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tasync *iterator(\n\t\tplaceholderValues: Record<string, unknown> = {},\n\t): AsyncGenerator<T['execute'] extends any[] ? T['execute'][number] : T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tconst conn = ((isPool(this.client) ? await this.client.getConnection() : this.client) as {} as {\n\t\t\tconnection: CallbackConnection;\n\t\t}).connection;\n\n\t\tconst { fields, query, rawQuery, joinsNotNullableMap, client, customResultMapper } = this;\n\t\tconst hasRowsMapper = Boolean(fields || customResultMapper);\n\t\tconst driverQuery = hasRowsMapper ? conn.query(query, params) : conn.query(rawQuery, params);\n\n\t\tconst stream = driverQuery.stream();\n\n\t\tfunction dataListener() {\n\t\t\tstream.pause();\n\t\t}\n\n\t\tstream.on('data', dataListener);\n\n\t\ttry {\n\t\t\tconst onEnd = once(stream, 'end');\n\t\t\tconst onError = once(stream, 'error');\n\n\t\t\twhile (true) {\n\t\t\t\tstream.resume();\n\t\t\t\tconst row = await Promise.race([onEnd, onError, new Promise((resolve) => stream.once('data', resolve))]);\n\t\t\t\tif (row === undefined || (Array.isArray(row) && row.length === 0)) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (row instanceof Error) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\tthrow row;\n\t\t\t\t} else {\n\t\t\t\t\tif (hasRowsMapper) {\n\t\t\t\t\t\tif (customResultMapper) {\n\t\t\t\t\t\t\tconst mappedRow = customResultMapper([row as unknown[]]);\n\t\t\t\t\t\t\tyield (Array.isArray(mappedRow) ? mappedRow[0] : mappedRow);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyield mapResultRow(fields!, row as unknown[], joinsNotNullableMap);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyield row as T['execute'];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tstream.off('data', dataListener);\n\t\t\tif (isPool(client)) {\n\t\t\t\tconn.end();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface MySql2SessionOptions {\n\tlogger?: Logger;\n\tmode: Mode;\n}\n\nexport class MySql2Session<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlSession<MySqlQueryResultHKT, MySql2PreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'MySql2Session';\n\n\tprivate logger: Logger;\n\tprivate mode: Mode;\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tdialect: MySqlDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: MySql2SessionOptions,\n\t\textensions?: DrizzleMySqlExtension[],\n\t) {\n\t\tsuper(dialect, extensions);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.mode = options.mode;\n\t}\n\n\tprepareQuery<T extends MySqlPreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\thookContext: BlankMySqlHookContext,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\tgeneratedIds?: Record<string, unknown>[],\n\t\treturningIds?: SelectedFieldsOrdered,\n\t): PreparedQueryKind<MySql2PreparedQueryHKT, T> {\n\t\t// Add returningId fields\n\t\t// Each driver gets them from response from database\n\t\treturn new MySql2PreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tthis.extensions,\n\t\t\thookContext,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t) as PreparedQueryKind<MySql2PreparedQueryHKT, T>;\n\t}\n\n\t/**\n\t * @internal\n\t * What is its purpose?\n\t */\n\tasync query(query: string, params: unknown[]): Promise<MySqlQueryResult> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.client.query({\n\t\t\tsql: query,\n\t\t\tvalues: params,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t});\n\t\treturn result;\n\t}\n\n\toverride all<T = unknown>(query: SQL): Promise<T[]> {\n\t\tconst querySql = this.dialect.sqlToQuery(query);\n\t\tthis.logger.logQuery(querySql.sql, querySql.params);\n\t\treturn this.client.execute(querySql.sql, querySql.params).then((result) => result[0]) as Promise<T[]>;\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: MySql2Transaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: MySqlTransactionConfig,\n\t): Promise<T> {\n\t\tconst session = isPool(this.client)\n\t\t\t? new MySql2Session(\n\t\t\t\tawait this.client.getConnection(),\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t\tthis.extensions,\n\t\t\t)\n\t\t\t: this;\n\t\tconst tx = new MySql2Transaction<TFullSchema, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tsession as MySqlSession<any, any, any, any>,\n\t\t\tthis.schema,\n\t\t\t0,\n\t\t\tthis.mode,\n\t\t\tthis.extensions,\n\t\t);\n\t\tif (config) {\n\t\t\tconst setTransactionConfigSql = this.getSetTransactionSQL(config);\n\t\t\tif (setTransactionConfigSql) {\n\t\t\t\tawait tx.execute(setTransactionConfigSql);\n\t\t\t}\n\t\t\tconst startTransactionSql = this.getStartTransactionSQL(config);\n\t\t\tawait (startTransactionSql ? tx.execute(startTransactionSql) : tx.execute(sql`begin`));\n\t\t} else {\n\t\t\tawait tx.execute(sql`begin`);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql`rollback`);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tif (isPool(this.client)) {\n\t\t\t\t(session.client as PoolConnection).release();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class MySql2Transaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlTransaction<MySql2QueryResultHKT, MySql2PreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'MySql2Transaction';\n\n\toverride async transaction<T>(transaction: (tx: MySql2Transaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new MySql2Transaction<TFullSchema, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t\tthis.mode,\n\t\t\tthis._.extensions,\n\t\t);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nfunction isPool(client: MySql2Client): client is Pool {\n\treturn 'getConnection' in client;\n}\n\nexport interface MySql2QueryResultHKT extends MySqlQueryResultHKT {\n\ttype: MySqlRawQueryResult;\n}\n\nexport interface MySql2PreparedQueryHKT extends MySqlPreparedQueryHKT {\n\ttype: MySql2PreparedQuery<Assume<this['config'], MySqlPreparedQueryConfig>>;\n}\n"],"mappings":"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","names":[]}
@@ -32,15 +32,16 @@ var import_relations = require("../relations.cjs");
32
32
  var import_utils = require("../utils.cjs");
33
33
  var import_session = require("./session.cjs");
34
34
  class NeonHttpDriver {
35
- constructor(client, dialect, options = {}) {
35
+ constructor(client, dialect, options = {}, extensions) {
36
36
  this.client = client;
37
37
  this.dialect = dialect;
38
38
  this.options = options;
39
+ this.extensions = extensions;
39
40
  this.initMappers();
40
41
  }
41
42
  static [import_entity.entityKind] = "NeonHttpDriver";
42
43
  createSession(schema) {
43
- return new import_session.NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });
44
+ return new import_session.NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger }, this.extensions);
44
45
  }
45
46
  initMappers() {
46
47
  import_serverless.types.setTypeParser(import_serverless.types.builtins.TIMESTAMPTZ, (val) => val);
@@ -111,7 +112,8 @@ function construct(client, config = {}) {
111
112
  tableNamesMap: tablesConfig.tableNamesMap
112
113
  };
113
114
  }
114
- const driver = new NeonHttpDriver(client, dialect, { logger });
115
+ const extensions = config.extensions;
116
+ const driver = new NeonHttpDriver(client, dialect, { logger }, extensions);
115
117
  const session = driver.createSession(schema);
116
118
  const db = new NeonHttpDatabase(
117
119
  dialect,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t\ttypes.setTypeParser(1231, (val) => val);\n\t\ttypes.setTypeParser(1115, (val) => val);\n\t\ttypes.setTypeParser(1185, (val) => val);\n\t\ttypes.setTypeParser(1187, (val) => val);\n\t\ttypes.setTypeParser(1182, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new NeonHttpDriver(client, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NeonHttpDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"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","names":["target","res","instance","drizzle"]}
1
+ {"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { DrizzlePgExtension } from '~/extension-core/pg/index.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t\tprivate extensions?: DrizzlePgExtension[],\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger }, this.extensions);\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t\ttypes.setTypeParser(1231, (val) => val);\n\t\ttypes.setTypeParser(1115, (val) => val);\n\t\ttypes.setTypeParser(1185, (val) => val);\n\t\ttypes.setTypeParser(1187, (val) => val);\n\t\ttypes.setTypeParser(1182, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema, DrizzlePgExtension> = {},\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst extensions = config.extensions;\n\tconst driver = new NeonHttpDriver(client, dialect, { logger }, extensions);\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema, DrizzlePgExtension>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema, DrizzlePgExtension>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema, DrizzlePgExtension>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema, DrizzlePgExtension> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema, DrizzlePgExtension>,\n\t): NeonHttpDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"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","names":["target","res","instance","drizzle"]}
@@ -1,6 +1,7 @@
1
1
  import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';
2
2
  import type { BatchItem, BatchResponse } from "../batch.cjs";
3
3
  import { entityKind } from "../entity.cjs";
4
+ import type { DrizzlePgExtension } from "../extension-core/pg/index.cjs";
4
5
  import type { Logger } from "../logger.cjs";
5
6
  import { PgDatabase } from "../pg-core/db.cjs";
6
7
  import { PgDialect } from "../pg-core/dialect.cjs";
@@ -14,8 +15,9 @@ export declare class NeonHttpDriver {
14
15
  private client;
15
16
  private dialect;
16
17
  private options;
18
+ private extensions?;
17
19
  static readonly [entityKind]: string;
18
- constructor(client: NeonHttpClient, dialect: PgDialect, options?: NeonDriverOptions);
20
+ constructor(client: NeonHttpClient, dialect: PgDialect, options?: NeonDriverOptions, extensions?: DrizzlePgExtension[] | undefined);
19
21
  createSession(schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig>;
20
22
  initMappers(): void;
21
23
  }
@@ -28,9 +30,9 @@ export declare function drizzle<TSchema extends Record<string, unknown> = Record
28
30
  TClient | string
29
31
  ] | [
30
32
  TClient | string,
31
- DrizzleConfig<TSchema>
33
+ DrizzleConfig<TSchema, DrizzlePgExtension>
32
34
  ] | [
33
- (DrizzleConfig<TSchema> & ({
35
+ (DrizzleConfig<TSchema, DrizzlePgExtension> & ({
34
36
  connection: string | ({
35
37
  connectionString: string;
36
38
  } & HTTPTransactionOptions<boolean, boolean>);
@@ -41,7 +43,7 @@ export declare function drizzle<TSchema extends Record<string, unknown> = Record
41
43
  $client: TClient;
42
44
  };
43
45
  export declare namespace drizzle {
44
- function mock<TSchema extends Record<string, unknown> = Record<string, never>>(config?: DrizzleConfig<TSchema>): NeonHttpDatabase<TSchema> & {
46
+ function mock<TSchema extends Record<string, unknown> = Record<string, never>>(config?: DrizzleConfig<TSchema, DrizzlePgExtension>): NeonHttpDatabase<TSchema> & {
45
47
  $client: '$client is not available on drizzle.mock()';
46
48
  };
47
49
  }
@@ -1,6 +1,7 @@
1
1
  import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';
2
2
  import type { BatchItem, BatchResponse } from "../batch.js";
3
3
  import { entityKind } from "../entity.js";
4
+ import type { DrizzlePgExtension } from "../extension-core/pg/index.js";
4
5
  import type { Logger } from "../logger.js";
5
6
  import { PgDatabase } from "../pg-core/db.js";
6
7
  import { PgDialect } from "../pg-core/dialect.js";
@@ -14,8 +15,9 @@ export declare class NeonHttpDriver {
14
15
  private client;
15
16
  private dialect;
16
17
  private options;
18
+ private extensions?;
17
19
  static readonly [entityKind]: string;
18
- constructor(client: NeonHttpClient, dialect: PgDialect, options?: NeonDriverOptions);
20
+ constructor(client: NeonHttpClient, dialect: PgDialect, options?: NeonDriverOptions, extensions?: DrizzlePgExtension[] | undefined);
19
21
  createSession(schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig>;
20
22
  initMappers(): void;
21
23
  }
@@ -28,9 +30,9 @@ export declare function drizzle<TSchema extends Record<string, unknown> = Record
28
30
  TClient | string
29
31
  ] | [
30
32
  TClient | string,
31
- DrizzleConfig<TSchema>
33
+ DrizzleConfig<TSchema, DrizzlePgExtension>
32
34
  ] | [
33
- (DrizzleConfig<TSchema> & ({
35
+ (DrizzleConfig<TSchema, DrizzlePgExtension> & ({
34
36
  connection: string | ({
35
37
  connectionString: string;
36
38
  } & HTTPTransactionOptions<boolean, boolean>);
@@ -41,7 +43,7 @@ export declare function drizzle<TSchema extends Record<string, unknown> = Record
41
43
  $client: TClient;
42
44
  };
43
45
  export declare namespace drizzle {
44
- function mock<TSchema extends Record<string, unknown> = Record<string, never>>(config?: DrizzleConfig<TSchema>): NeonHttpDatabase<TSchema> & {
46
+ function mock<TSchema extends Record<string, unknown> = Record<string, never>>(config?: DrizzleConfig<TSchema, DrizzlePgExtension>): NeonHttpDatabase<TSchema> & {
45
47
  $client: '$client is not available on drizzle.mock()';
46
48
  };
47
49
  }
@@ -7,15 +7,16 @@ import { createTableRelationsHelpers, extractTablesRelationalConfig } from "../r
7
7
  import { isConfig } from "../utils.js";
8
8
  import { NeonHttpSession } from "./session.js";
9
9
  class NeonHttpDriver {
10
- constructor(client, dialect, options = {}) {
10
+ constructor(client, dialect, options = {}, extensions) {
11
11
  this.client = client;
12
12
  this.dialect = dialect;
13
13
  this.options = options;
14
+ this.extensions = extensions;
14
15
  this.initMappers();
15
16
  }
16
17
  static [entityKind] = "NeonHttpDriver";
17
18
  createSession(schema) {
18
- return new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });
19
+ return new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger }, this.extensions);
19
20
  }
20
21
  initMappers() {
21
22
  types.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);
@@ -86,7 +87,8 @@ function construct(client, config = {}) {
86
87
  tableNamesMap: tablesConfig.tableNamesMap
87
88
  };
88
89
  }
89
- const driver = new NeonHttpDriver(client, dialect, { logger });
90
+ const extensions = config.extensions;
91
+ const driver = new NeonHttpDriver(client, dialect, { logger }, extensions);
90
92
  const session = driver.createSession(schema);
91
93
  const db = new NeonHttpDatabase(
92
94
  dialect,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t\ttypes.setTypeParser(1231, (val) => val);\n\t\ttypes.setTypeParser(1115, (val) => val);\n\t\ttypes.setTypeParser(1185, (val) => val);\n\t\ttypes.setTypeParser(1187, (val) => val);\n\t\ttypes.setTypeParser(1182, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new NeonHttpDriver(client, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NeonHttpDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"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","names":["target","res","instance","drizzle"]}
1
+ {"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { DrizzlePgExtension } from '~/extension-core/pg/index.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t\tprivate extensions?: DrizzlePgExtension[],\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger }, this.extensions);\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t\ttypes.setTypeParser(1231, (val) => val);\n\t\ttypes.setTypeParser(1115, (val) => val);\n\t\ttypes.setTypeParser(1185, (val) => val);\n\t\ttypes.setTypeParser(1187, (val) => val);\n\t\ttypes.setTypeParser(1182, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema, DrizzlePgExtension> = {},\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst extensions = config.extensions;\n\tconst driver = new NeonHttpDriver(client, dialect, { logger }, extensions);\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema, DrizzlePgExtension>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema, DrizzlePgExtension>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema, DrizzlePgExtension>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema, DrizzlePgExtension> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema, DrizzlePgExtension>,\n\t): NeonHttpDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"AACA,SAAS,MAAM,aAAa;AAE5B,SAAS,kBAAkB;AAG3B,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAC1B,SAAS,6BAA6B,qCAAqC;AAE3E,SAA6B,gBAAgB;AAC7C,SAA2D,uBAAuB;AAM3E,MAAM,eAAe;AAAA,EAG3B,YACS,QACA,SACA,UAA6B,CAAC,GAC9B,YACP;AAJO;AACA;AACA;AACA;AAER,SAAK,YAAY;AAAA,EAClB;AAAA,EATA,QAAiB,UAAU,IAAY;AAAA,EAWvC,cACC,QACmE;AACnE,WAAO,IAAI,gBAAgB,KAAK,QAAQ,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,QAAQ,OAAO,GAAG,KAAK,UAAU;AAAA,EAC/G;AAAA,EAEA,cAAc;AACb,UAAM,cAAc,MAAM,SAAS,aAAa,CAAC,QAAQ,GAAG;AAC5D,UAAM,cAAc,MAAM,SAAS,WAAW,CAAC,QAAQ,GAAG;AAC1D,UAAM,cAAc,MAAM,SAAS,MAAM,CAAC,QAAQ,GAAG;AACrD,UAAM,cAAc,MAAM,SAAS,UAAU,CAAC,QAAQ,GAAG;AACzD,UAAM,cAAc,MAAM,CAAC,QAAQ,GAAG;AACtC,UAAM,cAAc,MAAM,CAAC,QAAQ,GAAG;AACtC,UAAM,cAAc,MAAM,CAAC,QAAQ,GAAG;AACtC,UAAM,cAAc,MAAM,CAAC,QAAQ,GAAG;AACtC,UAAM,cAAc,MAAM,CAAC,QAAQ,GAAG;AAAA,EACvC;AACD;AAEA,SAAS,KACR,QACA,OACA,IACA,MACC;AACD,SAAO,IAAI,MAAM,QAAQ;AAAA,IACxB,IAAIA,SAAQ,GAAG;AACd,YAAM,UAAUA,QAAO,CAAmB;AAC1C,UAAI,OAAO,YAAY,eAAe,OAAO,YAAY,YAAY,YAAY;AAAO,eAAO;AAE/F,UAAI;AAAM,eAAO,KAAK,SAAS,OAAO,EAAE;AACxC,UAAI,MAAM;AAAS,eAAO,KAAK,SAAS,OAAO,IAAI,IAAI;AAEvD,aAAO,IAAI,MAAM,SAAgB;AAAA,QAChC,MAAMA,SAAQ,SAAS,UAAU;AAChC,gBAAM,MAAMA,QAAO,KAAK,SAAS,GAAG,QAAQ;AAC5C,cAAI,OAAO,QAAQ,YAAY,QAAQ,QAAQ,cAAc,OAAO,OAAO,IAAI,aAAa,YAAY;AACvG,gBAAI,SAAS,KAAK;AAAA,UACnB;AACA,iBAAO,GAAGA,SAAQ,GAAG,GAAG;AAAA,QACzB;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD,CAAC;AACF;AAEO,MAAM,yBAEH,WAA4C;AAAA,EACrD,QAA0B,UAAU,IAAY;AAAA,EAEhD,UACC,OAiBC;AACD,SAAK,YAAY;AAEjB,WAAO,KAAK,MAAM,OAAO,CAAC,QAAQ,GAAG,QAAQ;AAC5C,UAAI,MAAM,QAAQ;AACjB,eAAO,KAAK,KAAK,OAAO,CAAC,GAAG,IAAIC,SAAQA,IAAG;AAAA,MAC5C;AACA,aAAO;AAAA,IACR,CAAC;AAAA,EACF;AAAA,EAKA,MAAM,MACL,OAC4B;AAC5B,WAAO,KAAK,QAAQ,MAAM,KAAK;AAAA,EAChC;AACD;AAEA,SAAS,UAIR,QACA,SAAqD,CAAC,GAGrD;AACD,QAAM,UAAU,IAAI,UAAU,EAAE,QAAQ,OAAO,OAAO,CAAC;AACvD,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,eAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,aAAa,OAAO;AAC1B,QAAM,SAAS,IAAI,eAAe,QAAQ,SAAS,EAAE,OAAO,GAAG,UAAU;AACzE,QAAM,UAAU,OAAO,cAAc,MAAM;AAE3C,QAAM,KAAK,IAAI;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACA,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;AAEO,SAAS,WAIZ,QAiBF;AACD,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,WAAW,KAAK,OAAO,CAAC,CAAW;AACzC,WAAO,UAAU,UAAU,OAAO,CAAC,CAAC;AAAA,EACrC;AAEA,MAAI,SAAS,OAAO,CAAC,CAAC,GAAG;AACxB,UAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAWzD,QAAI;AAAQ,aAAO,UAAU,QAAQ,aAAa;AAElD,QAAI,OAAO,eAAe,UAAU;AACnC,YAAM,EAAE,kBAAkB,GAAG,QAAQ,IAAI;AAEzC,YAAMC,YAAW,KAAK,kBAAkB,OAAO;AAE/C,aAAO,UAAUA,WAAU,aAAa;AAAA,IACzC;AAEA,UAAM,WAAW,KAAK,UAAW;AAEjC,WAAO,UAAU,UAAU,aAAa;AAAA,EACzC;AAEA,SAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAA2D;AAC3G;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KACf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AANO,EAAAA,SAAS;AAAA,GADA;","names":["target","res","instance","drizzle"]}
@@ -38,8 +38,8 @@ const queryConfig = {
38
38
  fullResults: true
39
39
  };
40
40
  class NeonHttpPreparedQuery extends import_session.PgPreparedQuery {
41
- constructor(client, query, logger, fields, _isResponseInArrayMode, customResultMapper) {
42
- super(query);
41
+ constructor(client, query, logger, fields, _isResponseInArrayMode, extensions, hookContext, customResultMapper) {
42
+ super(query, extensions, hookContext);
43
43
  this.client = client;
44
44
  this.logger = logger;
45
45
  this.fields = fields;
@@ -50,7 +50,7 @@ class NeonHttpPreparedQuery extends import_session.PgPreparedQuery {
50
50
  static [import_entity.entityKind] = "NeonHttpPreparedQuery";
51
51
  clientQuery;
52
52
  /** @internal */
53
- async execute(placeholderValues = {}, token = this.authToken) {
53
+ async _execute(placeholderValues = {}, token = this.authToken) {
54
54
  const params = (0, import_sql.fillPlaceholders)(this.query.params, placeholderValues);
55
55
  this.logger.logQuery(this.query.sql, params);
56
56
  const { fields, clientQuery, query, customResultMapper } = this;
@@ -108,8 +108,8 @@ class NeonHttpPreparedQuery extends import_session.PgPreparedQuery {
108
108
  }
109
109
  }
110
110
  class NeonHttpSession extends import_session.PgSession {
111
- constructor(client, dialect, schema, options = {}) {
112
- super(dialect);
111
+ constructor(client, dialect, schema, options = {}, extensions) {
112
+ super(dialect, extensions);
113
113
  this.client = client;
114
114
  this.schema = schema;
115
115
  this.options = options;
@@ -119,13 +119,15 @@ class NeonHttpSession extends import_session.PgSession {
119
119
  static [import_entity.entityKind] = "NeonHttpSession";
120
120
  clientQuery;
121
121
  logger;
122
- prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper) {
122
+ prepareQuery(query, fields, name, isResponseInArrayMode, hookContext, customResultMapper) {
123
123
  return new NeonHttpPreparedQuery(
124
124
  this.client,
125
125
  query,
126
126
  this.logger,
127
127
  fields,
128
128
  isResponseInArrayMode,
129
+ this.extensions,
130
+ hookContext,
129
131
  customResultMapper
130
132
  );
131
133
  }