drizzle-orm 1.0.0-beta.21 → 1.0.0-beta.21-4fa69ab

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 (1591) hide show
  1. package/_relations.cjs.map +1 -1
  2. package/_relations.d.cts +2 -13
  3. package/_relations.d.ts +2 -13
  4. package/_relations.js.map +1 -1
  5. package/aws-data-api/common/index.cjs +2 -0
  6. package/aws-data-api/common/index.cjs.map +1 -1
  7. package/aws-data-api/common/index.js +2 -0
  8. package/aws-data-api/common/index.js.map +1 -1
  9. package/aws-data-api/pg/driver.cjs +93 -20
  10. package/aws-data-api/pg/driver.cjs.map +1 -1
  11. package/aws-data-api/pg/driver.d.cts +17 -13
  12. package/aws-data-api/pg/driver.d.ts +16 -12
  13. package/aws-data-api/pg/driver.js +93 -20
  14. package/aws-data-api/pg/driver.js.map +1 -1
  15. package/aws-data-api/pg/index.cjs +1 -1
  16. package/aws-data-api/pg/index.d.cts +3 -3
  17. package/aws-data-api/pg/index.d.ts +3 -3
  18. package/aws-data-api/pg/index.js +3 -3
  19. package/aws-data-api/pg/migrator.cjs.map +1 -1
  20. package/aws-data-api/pg/migrator.d.cts +1 -1
  21. package/aws-data-api/pg/migrator.d.ts +1 -1
  22. package/aws-data-api/pg/migrator.js.map +1 -1
  23. package/aws-data-api/pg/session.cjs +44 -113
  24. package/aws-data-api/pg/session.cjs.map +1 -1
  25. package/aws-data-api/pg/session.d.cts +12 -42
  26. package/aws-data-api/pg/session.d.ts +12 -42
  27. package/aws-data-api/pg/session.js +46 -114
  28. package/aws-data-api/pg/session.js.map +1 -1
  29. package/better-sqlite3/driver.cjs +5 -2
  30. package/better-sqlite3/driver.cjs.map +1 -1
  31. package/better-sqlite3/driver.d.ts +1 -1
  32. package/better-sqlite3/driver.js +5 -2
  33. package/better-sqlite3/driver.js.map +1 -1
  34. package/better-sqlite3/session.cjs +15 -14
  35. package/better-sqlite3/session.cjs.map +1 -1
  36. package/better-sqlite3/session.d.cts +10 -6
  37. package/better-sqlite3/session.d.ts +10 -6
  38. package/better-sqlite3/session.js +16 -15
  39. package/better-sqlite3/session.js.map +1 -1
  40. package/bun-sql/driver.cjs.map +1 -1
  41. package/bun-sql/driver.d.cts +7 -6
  42. package/bun-sql/driver.d.ts +7 -6
  43. package/bun-sql/driver.js.map +1 -1
  44. package/bun-sql/index.cjs +0 -1
  45. package/bun-sql/index.d.cts +2 -2
  46. package/bun-sql/index.d.ts +2 -2
  47. package/bun-sql/index.js +2 -2
  48. package/bun-sql/migrator.cjs.map +1 -1
  49. package/bun-sql/migrator.d.cts +2 -2
  50. package/bun-sql/migrator.d.ts +2 -2
  51. package/bun-sql/migrator.js.map +1 -1
  52. package/bun-sql/mysql/driver.cjs +4 -3
  53. package/bun-sql/mysql/driver.cjs.map +1 -1
  54. package/bun-sql/mysql/driver.js +3 -2
  55. package/bun-sql/mysql/driver.js.map +1 -1
  56. package/bun-sql/mysql/session.cjs +36 -23
  57. package/bun-sql/mysql/session.cjs.map +1 -1
  58. package/bun-sql/mysql/session.d.cts +10 -4
  59. package/bun-sql/mysql/session.d.ts +11 -5
  60. package/bun-sql/mysql/session.js +37 -24
  61. package/bun-sql/mysql/session.js.map +1 -1
  62. package/bun-sql/postgres/driver.cjs +143 -19
  63. package/bun-sql/postgres/driver.cjs.map +1 -1
  64. package/bun-sql/postgres/driver.d.cts +10 -6
  65. package/bun-sql/postgres/driver.d.ts +10 -6
  66. package/bun-sql/postgres/driver.js +143 -19
  67. package/bun-sql/postgres/driver.js.map +1 -1
  68. package/bun-sql/postgres/index.cjs +1 -1
  69. package/bun-sql/postgres/index.d.cts +3 -3
  70. package/bun-sql/postgres/index.d.ts +3 -3
  71. package/bun-sql/postgres/index.js +3 -3
  72. package/bun-sql/postgres/migrator.cjs.map +1 -1
  73. package/bun-sql/postgres/migrator.d.cts +1 -1
  74. package/bun-sql/postgres/migrator.d.ts +1 -1
  75. package/bun-sql/postgres/migrator.js.map +1 -1
  76. package/bun-sql/postgres/session.cjs +16 -111
  77. package/bun-sql/postgres/session.cjs.map +1 -1
  78. package/bun-sql/postgres/session.d.cts +11 -33
  79. package/bun-sql/postgres/session.d.ts +10 -32
  80. package/bun-sql/postgres/session.js +17 -111
  81. package/bun-sql/postgres/session.js.map +1 -1
  82. package/bun-sql/session.cjs +0 -1
  83. package/bun-sql/session.d.cts +2 -2
  84. package/bun-sql/session.d.ts +2 -2
  85. package/bun-sql/session.js +2 -2
  86. package/bun-sql/sqlite/driver.cjs +4 -3
  87. package/bun-sql/sqlite/driver.cjs.map +1 -1
  88. package/bun-sql/sqlite/driver.d.ts +1 -1
  89. package/bun-sql/sqlite/driver.js +3 -2
  90. package/bun-sql/sqlite/driver.js.map +1 -1
  91. package/bun-sql/sqlite/session.cjs +17 -16
  92. package/bun-sql/sqlite/session.cjs.map +1 -1
  93. package/bun-sql/sqlite/session.d.cts +9 -6
  94. package/bun-sql/sqlite/session.d.ts +9 -6
  95. package/bun-sql/sqlite/session.js +18 -17
  96. package/bun-sql/sqlite/session.js.map +1 -1
  97. package/bun-sqlite/driver.cjs +5 -2
  98. package/bun-sqlite/driver.cjs.map +1 -1
  99. package/bun-sqlite/driver.d.ts +1 -1
  100. package/bun-sqlite/driver.js +5 -2
  101. package/bun-sqlite/driver.js.map +1 -1
  102. package/bun-sqlite/session.cjs +15 -14
  103. package/bun-sqlite/session.cjs.map +1 -1
  104. package/bun-sqlite/session.d.cts +10 -6
  105. package/bun-sqlite/session.d.ts +10 -6
  106. package/bun-sqlite/session.js +16 -15
  107. package/bun-sqlite/session.js.map +1 -1
  108. package/cache/core/cache-effect.d.cts +1 -1
  109. package/cache/core/cache-effect.d.ts +1 -1
  110. package/cache/upstash/cache.d.cts +1 -1
  111. package/cache/upstash/cache.d.ts +1 -1
  112. package/cockroach/driver.cjs +9 -3
  113. package/cockroach/driver.cjs.map +1 -1
  114. package/cockroach/driver.d.cts +1 -0
  115. package/cockroach/driver.d.ts +2 -1
  116. package/cockroach/driver.js +9 -3
  117. package/cockroach/driver.js.map +1 -1
  118. package/cockroach/session.cjs +7 -9
  119. package/cockroach/session.cjs.map +1 -1
  120. package/cockroach/session.d.cts +5 -3
  121. package/cockroach/session.d.ts +6 -4
  122. package/cockroach/session.js +8 -10
  123. package/cockroach/session.js.map +1 -1
  124. package/cockroach-core/columns/bigint.cjs +4 -4
  125. package/cockroach-core/columns/bigint.cjs.map +1 -1
  126. package/cockroach-core/columns/bigint.d.cts +2 -2
  127. package/cockroach-core/columns/bigint.d.ts +2 -2
  128. package/cockroach-core/columns/bigint.js +4 -4
  129. package/cockroach-core/columns/bigint.js.map +1 -1
  130. package/cockroach-core/columns/common.cjs +4 -4
  131. package/cockroach-core/columns/common.cjs.map +1 -1
  132. package/cockroach-core/columns/common.d.cts +2 -2
  133. package/cockroach-core/columns/common.d.ts +2 -2
  134. package/cockroach-core/columns/common.js +4 -4
  135. package/cockroach-core/columns/common.js.map +1 -1
  136. package/cockroach-core/columns/custom.cjs +4 -4
  137. package/cockroach-core/columns/custom.cjs.map +1 -1
  138. package/cockroach-core/columns/custom.d.cts +2 -2
  139. package/cockroach-core/columns/custom.d.ts +2 -2
  140. package/cockroach-core/columns/custom.js +4 -4
  141. package/cockroach-core/columns/custom.js.map +1 -1
  142. package/cockroach-core/columns/date.cjs +6 -6
  143. package/cockroach-core/columns/date.cjs.map +1 -1
  144. package/cockroach-core/columns/date.d.cts +3 -3
  145. package/cockroach-core/columns/date.d.ts +3 -3
  146. package/cockroach-core/columns/date.js +6 -6
  147. package/cockroach-core/columns/date.js.map +1 -1
  148. package/cockroach-core/columns/decimal.cjs +4 -4
  149. package/cockroach-core/columns/decimal.cjs.map +1 -1
  150. package/cockroach-core/columns/decimal.d.cts +2 -2
  151. package/cockroach-core/columns/decimal.d.ts +2 -2
  152. package/cockroach-core/columns/decimal.js +4 -4
  153. package/cockroach-core/columns/decimal.js.map +1 -1
  154. package/cockroach-core/columns/float.cjs +2 -2
  155. package/cockroach-core/columns/float.cjs.map +1 -1
  156. package/cockroach-core/columns/float.d.cts +1 -1
  157. package/cockroach-core/columns/float.d.ts +1 -1
  158. package/cockroach-core/columns/float.js +2 -2
  159. package/cockroach-core/columns/float.js.map +1 -1
  160. package/cockroach-core/columns/geometry.cjs +8 -8
  161. package/cockroach-core/columns/geometry.cjs.map +1 -1
  162. package/cockroach-core/columns/geometry.d.cts +5 -5
  163. package/cockroach-core/columns/geometry.d.ts +5 -5
  164. package/cockroach-core/columns/geometry.js +8 -8
  165. package/cockroach-core/columns/geometry.js.map +1 -1
  166. package/cockroach-core/columns/integer.cjs +2 -2
  167. package/cockroach-core/columns/integer.cjs.map +1 -1
  168. package/cockroach-core/columns/integer.d.cts +1 -1
  169. package/cockroach-core/columns/integer.d.ts +1 -1
  170. package/cockroach-core/columns/integer.js +2 -2
  171. package/cockroach-core/columns/integer.js.map +1 -1
  172. package/cockroach-core/columns/jsonb.cjs +4 -4
  173. package/cockroach-core/columns/jsonb.cjs.map +1 -1
  174. package/cockroach-core/columns/jsonb.d.cts +2 -2
  175. package/cockroach-core/columns/jsonb.d.ts +2 -2
  176. package/cockroach-core/columns/jsonb.js +4 -4
  177. package/cockroach-core/columns/jsonb.js.map +1 -1
  178. package/cockroach-core/columns/vector.cjs +4 -4
  179. package/cockroach-core/columns/vector.cjs.map +1 -1
  180. package/cockroach-core/columns/vector.d.cts +2 -2
  181. package/cockroach-core/columns/vector.d.ts +2 -2
  182. package/cockroach-core/columns/vector.js +4 -4
  183. package/cockroach-core/columns/vector.js.map +1 -1
  184. package/cockroach-core/db.cjs +1 -1
  185. package/cockroach-core/db.cjs.map +1 -1
  186. package/cockroach-core/db.js +1 -1
  187. package/cockroach-core/db.js.map +1 -1
  188. package/cockroach-core/dialect.cjs +1 -1
  189. package/cockroach-core/dialect.d.ts +1 -1
  190. package/cockroach-core/dialect.js +1 -1
  191. package/cockroach-core/query-builders/delete.cjs +6 -2
  192. package/cockroach-core/query-builders/delete.cjs.map +1 -1
  193. package/cockroach-core/query-builders/delete.d.cts +1 -1
  194. package/cockroach-core/query-builders/delete.d.ts +1 -1
  195. package/cockroach-core/query-builders/delete.js +6 -2
  196. package/cockroach-core/query-builders/delete.js.map +1 -1
  197. package/cockroach-core/query-builders/insert.cjs +6 -2
  198. package/cockroach-core/query-builders/insert.cjs.map +1 -1
  199. package/cockroach-core/query-builders/insert.js +6 -2
  200. package/cockroach-core/query-builders/insert.js.map +1 -1
  201. package/cockroach-core/query-builders/query.cjs +2 -2
  202. package/cockroach-core/query-builders/query.cjs.map +1 -1
  203. package/cockroach-core/query-builders/query.js +2 -2
  204. package/cockroach-core/query-builders/query.js.map +1 -1
  205. package/cockroach-core/query-builders/raw.cjs +0 -4
  206. package/cockroach-core/query-builders/raw.cjs.map +1 -1
  207. package/cockroach-core/query-builders/raw.js +0 -4
  208. package/cockroach-core/query-builders/raw.js.map +1 -1
  209. package/cockroach-core/query-builders/refresh-materialized-view.cjs +2 -2
  210. package/cockroach-core/query-builders/refresh-materialized-view.cjs.map +1 -1
  211. package/cockroach-core/query-builders/refresh-materialized-view.js +2 -2
  212. package/cockroach-core/query-builders/refresh-materialized-view.js.map +1 -1
  213. package/cockroach-core/query-builders/select.cjs +6 -2
  214. package/cockroach-core/query-builders/select.cjs.map +1 -1
  215. package/cockroach-core/query-builders/select.js +6 -2
  216. package/cockroach-core/query-builders/select.js.map +1 -1
  217. package/cockroach-core/query-builders/update.cjs +6 -2
  218. package/cockroach-core/query-builders/update.cjs.map +1 -1
  219. package/cockroach-core/query-builders/update.js +6 -2
  220. package/cockroach-core/query-builders/update.js.map +1 -1
  221. package/cockroach-core/session.cjs +2 -2
  222. package/cockroach-core/session.cjs.map +1 -1
  223. package/cockroach-core/session.d.cts +1 -1
  224. package/cockroach-core/session.d.ts +1 -1
  225. package/cockroach-core/session.js +2 -2
  226. package/cockroach-core/session.js.map +1 -1
  227. package/cockroach-core/table.cjs +1 -1
  228. package/cockroach-core/table.cjs.map +1 -1
  229. package/cockroach-core/table.js +1 -1
  230. package/cockroach-core/table.js.map +1 -1
  231. package/codecs.cjs +77 -0
  232. package/codecs.cjs.map +1 -0
  233. package/codecs.d.cts +68 -0
  234. package/codecs.d.ts +68 -0
  235. package/codecs.js +74 -0
  236. package/codecs.js.map +1 -0
  237. package/column.cjs +10 -5
  238. package/column.cjs.map +1 -1
  239. package/column.d.cts +3 -3
  240. package/column.d.ts +3 -3
  241. package/column.js +10 -5
  242. package/column.js.map +1 -1
  243. package/d1/driver.cjs +3 -2
  244. package/d1/driver.cjs.map +1 -1
  245. package/d1/driver.d.ts +1 -1
  246. package/d1/driver.js +3 -2
  247. package/d1/driver.js.map +1 -1
  248. package/d1/session.cjs +16 -14
  249. package/d1/session.cjs.map +1 -1
  250. package/d1/session.d.cts +9 -6
  251. package/d1/session.d.ts +9 -6
  252. package/d1/session.js +17 -15
  253. package/d1/session.js.map +1 -1
  254. package/durable-sqlite/driver.cjs +5 -2
  255. package/durable-sqlite/driver.cjs.map +1 -1
  256. package/durable-sqlite/driver.d.ts +1 -1
  257. package/durable-sqlite/driver.js +5 -2
  258. package/durable-sqlite/driver.js.map +1 -1
  259. package/durable-sqlite/session.cjs +15 -14
  260. package/durable-sqlite/session.cjs.map +1 -1
  261. package/durable-sqlite/session.d.cts +10 -6
  262. package/durable-sqlite/session.d.ts +10 -6
  263. package/durable-sqlite/session.js +16 -15
  264. package/durable-sqlite/session.js.map +1 -1
  265. package/effect-postgres/driver.cjs +99 -13
  266. package/effect-postgres/driver.cjs.map +1 -1
  267. package/effect-postgres/driver.d.cts +12 -8
  268. package/effect-postgres/driver.d.ts +12 -8
  269. package/effect-postgres/driver.js +99 -13
  270. package/effect-postgres/driver.js.map +1 -1
  271. package/effect-postgres/index.cjs +1 -1
  272. package/effect-postgres/index.d.cts +3 -3
  273. package/effect-postgres/index.d.ts +3 -3
  274. package/effect-postgres/index.js +3 -3
  275. package/effect-postgres/migrator.cjs.map +1 -1
  276. package/effect-postgres/migrator.d.cts +1 -1
  277. package/effect-postgres/migrator.d.ts +1 -1
  278. package/effect-postgres/migrator.js.map +1 -1
  279. package/effect-postgres/session.cjs +12 -71
  280. package/effect-postgres/session.cjs.map +1 -1
  281. package/effect-postgres/session.d.cts +14 -31
  282. package/effect-postgres/session.d.ts +16 -33
  283. package/effect-postgres/session.js +13 -71
  284. package/effect-postgres/session.js.map +1 -1
  285. package/expo-sqlite/driver.cjs +5 -2
  286. package/expo-sqlite/driver.cjs.map +1 -1
  287. package/expo-sqlite/driver.d.ts +1 -1
  288. package/expo-sqlite/driver.js +5 -2
  289. package/expo-sqlite/driver.js.map +1 -1
  290. package/expo-sqlite/session.cjs +15 -14
  291. package/expo-sqlite/session.cjs.map +1 -1
  292. package/expo-sqlite/session.d.cts +10 -6
  293. package/expo-sqlite/session.d.ts +10 -6
  294. package/expo-sqlite/session.js +16 -15
  295. package/expo-sqlite/session.js.map +1 -1
  296. package/gel/driver.cjs +4 -2
  297. package/gel/driver.cjs.map +1 -1
  298. package/gel/driver.d.cts +1 -0
  299. package/gel/driver.d.ts +2 -1
  300. package/gel/driver.js +4 -2
  301. package/gel/driver.js.map +1 -1
  302. package/gel/session.cjs +12 -12
  303. package/gel/session.cjs.map +1 -1
  304. package/gel/session.d.cts +8 -5
  305. package/gel/session.d.ts +9 -6
  306. package/gel/session.js +13 -13
  307. package/gel/session.js.map +1 -1
  308. package/gel-core/columns/bigintT.cjs +2 -2
  309. package/gel-core/columns/bigintT.cjs.map +1 -1
  310. package/gel-core/columns/bigintT.d.cts +1 -1
  311. package/gel-core/columns/bigintT.d.ts +1 -1
  312. package/gel-core/columns/bigintT.js +2 -2
  313. package/gel-core/columns/bigintT.js.map +1 -1
  314. package/gel-core/columns/common.cjs +2 -2
  315. package/gel-core/columns/common.cjs.map +1 -1
  316. package/gel-core/columns/common.d.cts +1 -1
  317. package/gel-core/columns/common.d.ts +1 -1
  318. package/gel-core/columns/common.js +2 -2
  319. package/gel-core/columns/common.js.map +1 -1
  320. package/gel-core/columns/custom.cjs +4 -4
  321. package/gel-core/columns/custom.cjs.map +1 -1
  322. package/gel-core/columns/custom.d.cts +2 -2
  323. package/gel-core/columns/custom.d.ts +2 -2
  324. package/gel-core/columns/custom.js +4 -4
  325. package/gel-core/columns/custom.js.map +1 -1
  326. package/gel-core/columns/double-precision.cjs +2 -2
  327. package/gel-core/columns/double-precision.cjs.map +1 -1
  328. package/gel-core/columns/double-precision.d.cts +1 -1
  329. package/gel-core/columns/double-precision.d.ts +1 -1
  330. package/gel-core/columns/double-precision.js +2 -2
  331. package/gel-core/columns/double-precision.js.map +1 -1
  332. package/gel-core/columns/timestamptz.cjs +2 -2
  333. package/gel-core/columns/timestamptz.cjs.map +1 -1
  334. package/gel-core/columns/timestamptz.d.cts +1 -1
  335. package/gel-core/columns/timestamptz.d.ts +1 -1
  336. package/gel-core/columns/timestamptz.js +2 -2
  337. package/gel-core/columns/timestamptz.js.map +1 -1
  338. package/gel-core/db.cjs +1 -1
  339. package/gel-core/db.cjs.map +1 -1
  340. package/gel-core/db.d.ts +1 -1
  341. package/gel-core/db.js +1 -1
  342. package/gel-core/db.js.map +1 -1
  343. package/gel-core/query-builders/_query.cjs +2 -2
  344. package/gel-core/query-builders/_query.cjs.map +1 -1
  345. package/gel-core/query-builders/_query.js +2 -2
  346. package/gel-core/query-builders/_query.js.map +1 -1
  347. package/gel-core/query-builders/delete.cjs +2 -2
  348. package/gel-core/query-builders/delete.cjs.map +1 -1
  349. package/gel-core/query-builders/delete.js +2 -2
  350. package/gel-core/query-builders/delete.js.map +1 -1
  351. package/gel-core/query-builders/insert.cjs +2 -2
  352. package/gel-core/query-builders/insert.cjs.map +1 -1
  353. package/gel-core/query-builders/insert.js +2 -2
  354. package/gel-core/query-builders/insert.js.map +1 -1
  355. package/gel-core/query-builders/query.cjs +13 -5
  356. package/gel-core/query-builders/query.cjs.map +1 -1
  357. package/gel-core/query-builders/query.d.ts +1 -1
  358. package/gel-core/query-builders/query.js +14 -6
  359. package/gel-core/query-builders/query.js.map +1 -1
  360. package/gel-core/query-builders/raw.cjs +0 -4
  361. package/gel-core/query-builders/raw.cjs.map +1 -1
  362. package/gel-core/query-builders/raw.js +0 -4
  363. package/gel-core/query-builders/raw.js.map +1 -1
  364. package/gel-core/query-builders/refresh-materialized-view.cjs +2 -2
  365. package/gel-core/query-builders/refresh-materialized-view.cjs.map +1 -1
  366. package/gel-core/query-builders/refresh-materialized-view.js +2 -2
  367. package/gel-core/query-builders/refresh-materialized-view.js.map +1 -1
  368. package/gel-core/query-builders/select.cjs +6 -2
  369. package/gel-core/query-builders/select.cjs.map +1 -1
  370. package/gel-core/query-builders/select.js +6 -2
  371. package/gel-core/query-builders/select.js.map +1 -1
  372. package/gel-core/query-builders/update.cjs +2 -2
  373. package/gel-core/query-builders/update.cjs.map +1 -1
  374. package/gel-core/query-builders/update.js +2 -2
  375. package/gel-core/query-builders/update.js.map +1 -1
  376. package/gel-core/session.cjs +2 -2
  377. package/gel-core/session.cjs.map +1 -1
  378. package/gel-core/session.d.cts +3 -3
  379. package/gel-core/session.d.ts +3 -3
  380. package/gel-core/session.js +2 -2
  381. package/gel-core/session.js.map +1 -1
  382. package/gel-core/table.cjs +1 -1
  383. package/gel-core/table.cjs.map +1 -1
  384. package/gel-core/table.js +1 -1
  385. package/gel-core/table.js.map +1 -1
  386. package/index.cjs +6 -0
  387. package/index.d.cts +6 -6
  388. package/index.d.ts +6 -6
  389. package/index.js +4 -4
  390. package/libsql/driver-core.cjs +3 -2
  391. package/libsql/driver-core.cjs.map +1 -1
  392. package/libsql/driver-core.d.ts +1 -1
  393. package/libsql/driver-core.js +3 -2
  394. package/libsql/driver-core.js.map +1 -1
  395. package/libsql/session.cjs +13 -14
  396. package/libsql/session.cjs.map +1 -1
  397. package/libsql/session.d.cts +9 -6
  398. package/libsql/session.d.ts +9 -6
  399. package/libsql/session.js +14 -15
  400. package/libsql/session.js.map +1 -1
  401. package/mssql-core/columns/bigint.cjs +2 -2
  402. package/mssql-core/columns/bigint.cjs.map +1 -1
  403. package/mssql-core/columns/bigint.d.cts +1 -1
  404. package/mssql-core/columns/bigint.d.ts +1 -1
  405. package/mssql-core/columns/bigint.js +2 -2
  406. package/mssql-core/columns/bigint.js.map +1 -1
  407. package/mssql-core/columns/custom.cjs +4 -4
  408. package/mssql-core/columns/custom.cjs.map +1 -1
  409. package/mssql-core/columns/custom.d.cts +2 -2
  410. package/mssql-core/columns/custom.d.ts +2 -2
  411. package/mssql-core/columns/custom.js +4 -4
  412. package/mssql-core/columns/custom.js.map +1 -1
  413. package/mssql-core/columns/date.cjs +4 -4
  414. package/mssql-core/columns/date.cjs.map +1 -1
  415. package/mssql-core/columns/date.d.cts +2 -2
  416. package/mssql-core/columns/date.d.ts +2 -2
  417. package/mssql-core/columns/date.js +4 -4
  418. package/mssql-core/columns/date.js.map +1 -1
  419. package/mssql-core/columns/datetime.cjs +2 -2
  420. package/mssql-core/columns/datetime.cjs.map +1 -1
  421. package/mssql-core/columns/datetime.d.cts +1 -1
  422. package/mssql-core/columns/datetime.d.ts +1 -1
  423. package/mssql-core/columns/datetime.js +2 -2
  424. package/mssql-core/columns/datetime.js.map +1 -1
  425. package/mssql-core/columns/datetime2.cjs +2 -2
  426. package/mssql-core/columns/datetime2.cjs.map +1 -1
  427. package/mssql-core/columns/datetime2.d.cts +1 -1
  428. package/mssql-core/columns/datetime2.d.ts +1 -1
  429. package/mssql-core/columns/datetime2.js +2 -2
  430. package/mssql-core/columns/datetime2.js.map +1 -1
  431. package/mssql-core/columns/datetimeoffset.cjs +2 -2
  432. package/mssql-core/columns/datetimeoffset.cjs.map +1 -1
  433. package/mssql-core/columns/datetimeoffset.d.cts +1 -1
  434. package/mssql-core/columns/datetimeoffset.d.ts +1 -1
  435. package/mssql-core/columns/datetimeoffset.js +2 -2
  436. package/mssql-core/columns/datetimeoffset.js.map +1 -1
  437. package/mssql-core/columns/decimal.cjs +4 -4
  438. package/mssql-core/columns/decimal.cjs.map +1 -1
  439. package/mssql-core/columns/decimal.d.cts +2 -2
  440. package/mssql-core/columns/decimal.d.ts +2 -2
  441. package/mssql-core/columns/decimal.js +4 -4
  442. package/mssql-core/columns/decimal.js.map +1 -1
  443. package/mssql-core/columns/numeric.cjs +4 -4
  444. package/mssql-core/columns/numeric.cjs.map +1 -1
  445. package/mssql-core/columns/numeric.d.cts +2 -2
  446. package/mssql-core/columns/numeric.d.ts +2 -2
  447. package/mssql-core/columns/numeric.js +4 -4
  448. package/mssql-core/columns/numeric.js.map +1 -1
  449. package/mssql-core/columns/smallint.cjs +2 -2
  450. package/mssql-core/columns/smallint.cjs.map +1 -1
  451. package/mssql-core/columns/smallint.d.cts +1 -1
  452. package/mssql-core/columns/smallint.d.ts +1 -1
  453. package/mssql-core/columns/smallint.js +2 -2
  454. package/mssql-core/columns/smallint.js.map +1 -1
  455. package/mssql-core/columns/time.cjs +2 -2
  456. package/mssql-core/columns/time.cjs.map +1 -1
  457. package/mssql-core/columns/time.d.cts +1 -1
  458. package/mssql-core/columns/time.d.ts +1 -1
  459. package/mssql-core/columns/time.js +2 -2
  460. package/mssql-core/columns/time.js.map +1 -1
  461. package/mssql-core/columns/tinyint.cjs +2 -2
  462. package/mssql-core/columns/tinyint.cjs.map +1 -1
  463. package/mssql-core/columns/tinyint.d.cts +1 -1
  464. package/mssql-core/columns/tinyint.d.ts +1 -1
  465. package/mssql-core/columns/tinyint.js +2 -2
  466. package/mssql-core/columns/tinyint.js.map +1 -1
  467. package/mssql-core/columns/varchar.cjs +4 -4
  468. package/mssql-core/columns/varchar.cjs.map +1 -1
  469. package/mssql-core/columns/varchar.d.cts +2 -2
  470. package/mssql-core/columns/varchar.d.ts +2 -2
  471. package/mssql-core/columns/varchar.js +4 -4
  472. package/mssql-core/columns/varchar.js.map +1 -1
  473. package/mssql-core/dialect.cjs +1 -1
  474. package/mssql-core/dialect.d.ts +1 -1
  475. package/mssql-core/dialect.js +1 -1
  476. package/mssql-core/query-builders/select.cjs +4 -0
  477. package/mssql-core/query-builders/select.cjs.map +1 -1
  478. package/mssql-core/query-builders/select.js +4 -0
  479. package/mssql-core/query-builders/select.js.map +1 -1
  480. package/mssql-core/query-builders/update.d.ts +1 -1
  481. package/mssql-core/table.cjs +1 -1
  482. package/mssql-core/table.cjs.map +1 -1
  483. package/mssql-core/table.js +1 -1
  484. package/mssql-core/table.js.map +1 -1
  485. package/mysql-core/columns/bigint.cjs +8 -8
  486. package/mysql-core/columns/bigint.cjs.map +1 -1
  487. package/mysql-core/columns/bigint.d.cts +4 -4
  488. package/mysql-core/columns/bigint.d.ts +4 -4
  489. package/mysql-core/columns/bigint.js +8 -8
  490. package/mysql-core/columns/bigint.js.map +1 -1
  491. package/mysql-core/columns/binary.cjs +2 -2
  492. package/mysql-core/columns/binary.cjs.map +1 -1
  493. package/mysql-core/columns/binary.d.cts +1 -1
  494. package/mysql-core/columns/binary.d.ts +1 -1
  495. package/mysql-core/columns/binary.js +2 -2
  496. package/mysql-core/columns/binary.js.map +1 -1
  497. package/mysql-core/columns/blob.cjs +4 -4
  498. package/mysql-core/columns/blob.cjs.map +1 -1
  499. package/mysql-core/columns/blob.d.cts +2 -2
  500. package/mysql-core/columns/blob.d.ts +2 -2
  501. package/mysql-core/columns/blob.js +4 -4
  502. package/mysql-core/columns/blob.js.map +1 -1
  503. package/mysql-core/columns/boolean.cjs +2 -2
  504. package/mysql-core/columns/boolean.cjs.map +1 -1
  505. package/mysql-core/columns/boolean.d.cts +1 -1
  506. package/mysql-core/columns/boolean.d.ts +1 -1
  507. package/mysql-core/columns/boolean.js +2 -2
  508. package/mysql-core/columns/boolean.js.map +1 -1
  509. package/mysql-core/columns/custom.cjs +4 -4
  510. package/mysql-core/columns/custom.cjs.map +1 -1
  511. package/mysql-core/columns/custom.d.cts +2 -2
  512. package/mysql-core/columns/custom.d.ts +2 -2
  513. package/mysql-core/columns/custom.js +4 -4
  514. package/mysql-core/columns/custom.js.map +1 -1
  515. package/mysql-core/columns/date.cjs +4 -4
  516. package/mysql-core/columns/date.cjs.map +1 -1
  517. package/mysql-core/columns/date.d.cts +2 -2
  518. package/mysql-core/columns/date.d.ts +2 -2
  519. package/mysql-core/columns/date.js +4 -4
  520. package/mysql-core/columns/date.js.map +1 -1
  521. package/mysql-core/columns/datetime.cjs +8 -8
  522. package/mysql-core/columns/datetime.cjs.map +1 -1
  523. package/mysql-core/columns/datetime.d.cts +4 -4
  524. package/mysql-core/columns/datetime.d.ts +4 -4
  525. package/mysql-core/columns/datetime.js +8 -8
  526. package/mysql-core/columns/datetime.js.map +1 -1
  527. package/mysql-core/columns/decimal.cjs +4 -4
  528. package/mysql-core/columns/decimal.cjs.map +1 -1
  529. package/mysql-core/columns/decimal.d.cts +2 -2
  530. package/mysql-core/columns/decimal.d.ts +2 -2
  531. package/mysql-core/columns/decimal.js +4 -4
  532. package/mysql-core/columns/decimal.js.map +1 -1
  533. package/mysql-core/columns/float.cjs +2 -2
  534. package/mysql-core/columns/float.cjs.map +1 -1
  535. package/mysql-core/columns/float.d.cts +1 -1
  536. package/mysql-core/columns/float.d.ts +1 -1
  537. package/mysql-core/columns/float.js +2 -2
  538. package/mysql-core/columns/float.js.map +1 -1
  539. package/mysql-core/columns/int.cjs +2 -2
  540. package/mysql-core/columns/int.cjs.map +1 -1
  541. package/mysql-core/columns/int.d.cts +1 -1
  542. package/mysql-core/columns/int.d.ts +1 -1
  543. package/mysql-core/columns/int.js +2 -2
  544. package/mysql-core/columns/int.js.map +1 -1
  545. package/mysql-core/columns/json.cjs +2 -2
  546. package/mysql-core/columns/json.cjs.map +1 -1
  547. package/mysql-core/columns/json.d.cts +1 -1
  548. package/mysql-core/columns/json.d.ts +1 -1
  549. package/mysql-core/columns/json.js +2 -2
  550. package/mysql-core/columns/json.js.map +1 -1
  551. package/mysql-core/columns/mediumint.cjs +2 -2
  552. package/mysql-core/columns/mediumint.cjs.map +1 -1
  553. package/mysql-core/columns/mediumint.d.cts +1 -1
  554. package/mysql-core/columns/mediumint.d.ts +1 -1
  555. package/mysql-core/columns/mediumint.js +2 -2
  556. package/mysql-core/columns/mediumint.js.map +1 -1
  557. package/mysql-core/columns/serial.cjs +2 -2
  558. package/mysql-core/columns/serial.cjs.map +1 -1
  559. package/mysql-core/columns/serial.d.cts +1 -1
  560. package/mysql-core/columns/serial.d.ts +1 -1
  561. package/mysql-core/columns/serial.js +2 -2
  562. package/mysql-core/columns/serial.js.map +1 -1
  563. package/mysql-core/columns/smallint.cjs +2 -2
  564. package/mysql-core/columns/smallint.cjs.map +1 -1
  565. package/mysql-core/columns/smallint.d.cts +1 -1
  566. package/mysql-core/columns/smallint.d.ts +1 -1
  567. package/mysql-core/columns/smallint.js +2 -2
  568. package/mysql-core/columns/smallint.js.map +1 -1
  569. package/mysql-core/columns/time.cjs +2 -2
  570. package/mysql-core/columns/time.cjs.map +1 -1
  571. package/mysql-core/columns/time.d.cts +1 -1
  572. package/mysql-core/columns/time.d.ts +1 -1
  573. package/mysql-core/columns/time.js +2 -2
  574. package/mysql-core/columns/time.js.map +1 -1
  575. package/mysql-core/columns/timestamp.cjs +8 -8
  576. package/mysql-core/columns/timestamp.cjs.map +1 -1
  577. package/mysql-core/columns/timestamp.d.cts +4 -4
  578. package/mysql-core/columns/timestamp.d.ts +4 -4
  579. package/mysql-core/columns/timestamp.js +8 -8
  580. package/mysql-core/columns/timestamp.js.map +1 -1
  581. package/mysql-core/columns/tinyint.cjs +2 -2
  582. package/mysql-core/columns/tinyint.cjs.map +1 -1
  583. package/mysql-core/columns/tinyint.d.cts +1 -1
  584. package/mysql-core/columns/tinyint.d.ts +1 -1
  585. package/mysql-core/columns/tinyint.js +2 -2
  586. package/mysql-core/columns/tinyint.js.map +1 -1
  587. package/mysql-core/columns/varbinary.cjs +2 -2
  588. package/mysql-core/columns/varbinary.cjs.map +1 -1
  589. package/mysql-core/columns/varbinary.d.cts +1 -1
  590. package/mysql-core/columns/varbinary.d.ts +1 -1
  591. package/mysql-core/columns/varbinary.js +2 -2
  592. package/mysql-core/columns/varbinary.js.map +1 -1
  593. package/mysql-core/columns/year.cjs +2 -2
  594. package/mysql-core/columns/year.cjs.map +1 -1
  595. package/mysql-core/columns/year.d.cts +1 -1
  596. package/mysql-core/columns/year.d.ts +1 -1
  597. package/mysql-core/columns/year.js +2 -2
  598. package/mysql-core/columns/year.js.map +1 -1
  599. package/mysql-core/db.d.ts +1 -1
  600. package/mysql-core/dialect.cjs +1 -1
  601. package/mysql-core/dialect.d.ts +1 -1
  602. package/mysql-core/dialect.js +1 -1
  603. package/mysql-core/query-builders/query.cjs +13 -5
  604. package/mysql-core/query-builders/query.cjs.map +1 -1
  605. package/mysql-core/query-builders/query.d.ts +1 -1
  606. package/mysql-core/query-builders/query.js +13 -5
  607. package/mysql-core/query-builders/query.js.map +1 -1
  608. package/mysql-core/query-builders/select.cjs +4 -0
  609. package/mysql-core/query-builders/select.cjs.map +1 -1
  610. package/mysql-core/query-builders/select.js +4 -0
  611. package/mysql-core/query-builders/select.js.map +1 -1
  612. package/mysql-core/session.cjs +1 -2
  613. package/mysql-core/session.cjs.map +1 -1
  614. package/mysql-core/session.d.cts +3 -4
  615. package/mysql-core/session.d.ts +3 -4
  616. package/mysql-core/session.js +1 -2
  617. package/mysql-core/session.js.map +1 -1
  618. package/mysql-core/table.cjs +1 -1
  619. package/mysql-core/table.cjs.map +1 -1
  620. package/mysql-core/table.js +1 -1
  621. package/mysql-core/table.js.map +1 -1
  622. package/mysql-proxy/driver.cjs +5 -2
  623. package/mysql-proxy/driver.cjs.map +1 -1
  624. package/mysql-proxy/driver.js +5 -2
  625. package/mysql-proxy/driver.js.map +1 -1
  626. package/mysql-proxy/session.cjs +25 -18
  627. package/mysql-proxy/session.cjs.map +1 -1
  628. package/mysql-proxy/session.d.cts +11 -4
  629. package/mysql-proxy/session.d.ts +12 -5
  630. package/mysql-proxy/session.js +26 -19
  631. package/mysql-proxy/session.js.map +1 -1
  632. package/mysql2/driver.cjs +3 -2
  633. package/mysql2/driver.cjs.map +1 -1
  634. package/mysql2/driver.d.cts +1 -0
  635. package/mysql2/driver.d.ts +3 -2
  636. package/mysql2/driver.js +3 -2
  637. package/mysql2/driver.js.map +1 -1
  638. package/mysql2/session.cjs +48 -38
  639. package/mysql2/session.cjs.map +1 -1
  640. package/mysql2/session.d.cts +11 -4
  641. package/mysql2/session.d.ts +12 -5
  642. package/mysql2/session.js +49 -39
  643. package/mysql2/session.js.map +1 -1
  644. package/neon-http/driver.cjs +34 -65
  645. package/neon-http/driver.cjs.map +1 -1
  646. package/neon-http/driver.d.cts +15 -19
  647. package/neon-http/driver.d.ts +16 -20
  648. package/neon-http/driver.js +34 -64
  649. package/neon-http/driver.js.map +1 -1
  650. package/neon-http/index.cjs +2 -4
  651. package/neon-http/index.d.cts +3 -3
  652. package/neon-http/index.d.ts +3 -3
  653. package/neon-http/index.js +3 -3
  654. package/neon-http/migrator.cjs +1 -1
  655. package/neon-http/migrator.cjs.map +1 -1
  656. package/neon-http/migrator.d.cts +1 -1
  657. package/neon-http/migrator.d.ts +1 -1
  658. package/neon-http/migrator.js +1 -1
  659. package/neon-http/migrator.js.map +1 -1
  660. package/neon-http/session.cjs +27 -116
  661. package/neon-http/session.cjs.map +1 -1
  662. package/neon-http/session.d.cts +10 -38
  663. package/neon-http/session.d.ts +10 -38
  664. package/neon-http/session.js +29 -116
  665. package/neon-http/session.js.map +1 -1
  666. package/neon-serverless/driver.cjs +14 -32
  667. package/neon-serverless/driver.cjs.map +1 -1
  668. package/neon-serverless/driver.d.cts +12 -17
  669. package/neon-serverless/driver.d.ts +13 -18
  670. package/neon-serverless/driver.js +14 -31
  671. package/neon-serverless/driver.js.map +1 -1
  672. package/neon-serverless/index.cjs +2 -3
  673. package/neon-serverless/index.d.cts +3 -3
  674. package/neon-serverless/index.d.ts +3 -3
  675. package/neon-serverless/index.js +3 -3
  676. package/neon-serverless/migrator.cjs.map +1 -1
  677. package/neon-serverless/migrator.d.cts +1 -1
  678. package/neon-serverless/migrator.d.ts +1 -1
  679. package/neon-serverless/migrator.js.map +1 -1
  680. package/neon-serverless/session.cjs +32 -108
  681. package/neon-serverless/session.cjs.map +1 -1
  682. package/neon-serverless/session.d.cts +9 -32
  683. package/neon-serverless/session.d.ts +9 -32
  684. package/neon-serverless/session.js +34 -109
  685. package/neon-serverless/session.js.map +1 -1
  686. package/netlify-db/driver.cjs +36 -43
  687. package/netlify-db/driver.cjs.map +1 -1
  688. package/netlify-db/driver.d.cts +29 -29
  689. package/netlify-db/driver.d.ts +31 -31
  690. package/netlify-db/driver.js +35 -42
  691. package/netlify-db/driver.js.map +1 -1
  692. package/netlify-db/index.cjs +3 -2
  693. package/netlify-db/index.d.cts +3 -3
  694. package/netlify-db/index.d.ts +3 -3
  695. package/netlify-db/index.js +2 -2
  696. package/netlify-db/migrator.cjs.map +1 -1
  697. package/netlify-db/migrator.d.cts +1 -1
  698. package/netlify-db/migrator.d.ts +1 -1
  699. package/netlify-db/migrator.js.map +1 -1
  700. package/netlify-db/session.cjs +61 -39
  701. package/netlify-db/session.cjs.map +1 -1
  702. package/netlify-db/session.d.cts +22 -23
  703. package/netlify-db/session.d.ts +23 -24
  704. package/netlify-db/session.js +63 -41
  705. package/netlify-db/session.js.map +1 -1
  706. package/node-mssql/driver.cjs +9 -3
  707. package/node-mssql/driver.cjs.map +1 -1
  708. package/node-mssql/driver.d.cts +1 -0
  709. package/node-mssql/driver.d.ts +2 -1
  710. package/node-mssql/driver.js +9 -3
  711. package/node-mssql/driver.js.map +1 -1
  712. package/node-mssql/session.cjs +6 -4
  713. package/node-mssql/session.cjs.map +1 -1
  714. package/node-mssql/session.d.cts +4 -1
  715. package/node-mssql/session.d.ts +5 -2
  716. package/node-mssql/session.js +7 -5
  717. package/node-mssql/session.js.map +1 -1
  718. package/node-postgres/driver.cjs +15 -18
  719. package/node-postgres/driver.cjs.map +1 -1
  720. package/node-postgres/driver.d.cts +11 -6
  721. package/node-postgres/driver.d.ts +12 -7
  722. package/node-postgres/driver.js +15 -18
  723. package/node-postgres/driver.js.map +1 -1
  724. package/node-postgres/index.cjs +2 -2
  725. package/node-postgres/index.d.cts +3 -3
  726. package/node-postgres/index.d.ts +3 -3
  727. package/node-postgres/index.js +3 -3
  728. package/node-postgres/migrator.cjs.map +1 -1
  729. package/node-postgres/migrator.d.cts +1 -1
  730. package/node-postgres/migrator.d.ts +1 -1
  731. package/node-postgres/migrator.js.map +1 -1
  732. package/node-postgres/session.cjs +32 -125
  733. package/node-postgres/session.cjs.map +1 -1
  734. package/node-postgres/session.d.cts +10 -30
  735. package/node-postgres/session.d.ts +9 -29
  736. package/node-postgres/session.js +34 -126
  737. package/node-postgres/session.js.map +1 -1
  738. package/node-sqlite/driver.cjs +1 -1
  739. package/node-sqlite/driver.d.ts +1 -1
  740. package/node-sqlite/driver.js +1 -1
  741. package/node-sqlite/session.cjs +4 -9
  742. package/node-sqlite/session.cjs.map +1 -1
  743. package/node-sqlite/session.d.cts +3 -4
  744. package/node-sqlite/session.d.ts +4 -5
  745. package/node-sqlite/session.js +4 -9
  746. package/node-sqlite/session.js.map +1 -1
  747. package/op-sqlite/driver.cjs +3 -2
  748. package/op-sqlite/driver.cjs.map +1 -1
  749. package/op-sqlite/driver.d.ts +1 -1
  750. package/op-sqlite/driver.js +3 -2
  751. package/op-sqlite/driver.js.map +1 -1
  752. package/op-sqlite/session.cjs +17 -15
  753. package/op-sqlite/session.cjs.map +1 -1
  754. package/op-sqlite/session.d.cts +10 -6
  755. package/op-sqlite/session.d.ts +10 -6
  756. package/op-sqlite/session.js +18 -16
  757. package/op-sqlite/session.js.map +1 -1
  758. package/operations.d.cts +3 -0
  759. package/operations.d.ts +3 -0
  760. package/package.json +43 -31
  761. package/pg-core/{utils/array.cjs → array.cjs} +1 -1
  762. package/pg-core/array.cjs.map +1 -0
  763. package/pg-core/{utils/array.d.cts → array.d.cts} +1 -1
  764. package/pg-core/{utils/array.d.ts → array.d.ts} +1 -1
  765. package/pg-core/{utils/array.js → array.js} +1 -1
  766. package/pg-core/array.js.map +1 -0
  767. package/pg-core/async/count.cjs +2 -9
  768. package/pg-core/async/count.cjs.map +1 -1
  769. package/pg-core/async/count.js +2 -9
  770. package/pg-core/async/count.js.map +1 -1
  771. package/pg-core/async/db.cjs +8 -28
  772. package/pg-core/async/db.cjs.map +1 -1
  773. package/pg-core/async/db.d.cts +5 -13
  774. package/pg-core/async/db.d.ts +6 -14
  775. package/pg-core/async/db.js +8 -28
  776. package/pg-core/async/db.js.map +1 -1
  777. package/pg-core/async/delete.cjs +7 -12
  778. package/pg-core/async/delete.cjs.map +1 -1
  779. package/pg-core/async/delete.js +7 -12
  780. package/pg-core/async/delete.js.map +1 -1
  781. package/pg-core/async/insert.cjs +7 -12
  782. package/pg-core/async/insert.cjs.map +1 -1
  783. package/pg-core/async/insert.js +7 -12
  784. package/pg-core/async/insert.js.map +1 -1
  785. package/pg-core/async/query.cjs +8 -14
  786. package/pg-core/async/query.cjs.map +1 -1
  787. package/pg-core/async/query.js +8 -14
  788. package/pg-core/async/query.js.map +1 -1
  789. package/pg-core/async/refresh-materialized-view.cjs +1 -9
  790. package/pg-core/async/refresh-materialized-view.cjs.map +1 -1
  791. package/pg-core/async/refresh-materialized-view.js +1 -9
  792. package/pg-core/async/refresh-materialized-view.js.map +1 -1
  793. package/pg-core/async/select.cjs +4 -13
  794. package/pg-core/async/select.cjs.map +1 -1
  795. package/pg-core/async/select.js +4 -13
  796. package/pg-core/async/select.js.map +1 -1
  797. package/pg-core/async/session.cjs +44 -20
  798. package/pg-core/async/session.cjs.map +1 -1
  799. package/pg-core/async/session.d.cts +25 -31
  800. package/pg-core/async/session.d.ts +26 -32
  801. package/pg-core/async/session.js +45 -21
  802. package/pg-core/async/session.js.map +1 -1
  803. package/pg-core/async/update.cjs +11 -15
  804. package/pg-core/async/update.cjs.map +1 -1
  805. package/pg-core/async/update.js +11 -15
  806. package/pg-core/async/update.js.map +1 -1
  807. package/pg-core/codecs.cjs +156 -0
  808. package/pg-core/codecs.cjs.map +1 -0
  809. package/pg-core/codecs.d.cts +27 -0
  810. package/pg-core/codecs.d.ts +27 -0
  811. package/pg-core/codecs.js +148 -0
  812. package/pg-core/codecs.js.map +1 -0
  813. package/pg-core/columns/bigint.cjs +10 -9
  814. package/pg-core/columns/bigint.cjs.map +1 -1
  815. package/pg-core/columns/bigint.d.cts +2 -3
  816. package/pg-core/columns/bigint.d.ts +2 -3
  817. package/pg-core/columns/bigint.js +10 -9
  818. package/pg-core/columns/bigint.js.map +1 -1
  819. package/pg-core/columns/bigserial.cjs +6 -6
  820. package/pg-core/columns/bigserial.cjs.map +1 -1
  821. package/pg-core/columns/bigserial.d.cts +1 -2
  822. package/pg-core/columns/bigserial.d.ts +1 -2
  823. package/pg-core/columns/bigserial.js +6 -6
  824. package/pg-core/columns/bigserial.js.map +1 -1
  825. package/pg-core/columns/boolean.cjs +2 -0
  826. package/pg-core/columns/boolean.cjs.map +1 -1
  827. package/pg-core/columns/boolean.js +2 -0
  828. package/pg-core/columns/boolean.js.map +1 -1
  829. package/pg-core/columns/bytea.cjs +2 -8
  830. package/pg-core/columns/bytea.cjs.map +1 -1
  831. package/pg-core/columns/bytea.d.cts +0 -1
  832. package/pg-core/columns/bytea.d.ts +0 -1
  833. package/pg-core/columns/bytea.js +2 -8
  834. package/pg-core/columns/bytea.js.map +1 -1
  835. package/pg-core/columns/char.cjs +2 -0
  836. package/pg-core/columns/char.cjs.map +1 -1
  837. package/pg-core/columns/char.js +2 -0
  838. package/pg-core/columns/char.js.map +1 -1
  839. package/pg-core/columns/cidr.cjs +2 -0
  840. package/pg-core/columns/cidr.cjs.map +1 -1
  841. package/pg-core/columns/cidr.js +2 -0
  842. package/pg-core/columns/cidr.js.map +1 -1
  843. package/pg-core/columns/common.cjs +10 -8
  844. package/pg-core/columns/common.cjs.map +1 -1
  845. package/pg-core/columns/common.d.cts +34 -39
  846. package/pg-core/columns/common.d.ts +34 -39
  847. package/pg-core/columns/common.js +10 -8
  848. package/pg-core/columns/common.js.map +1 -1
  849. package/pg-core/columns/custom.cjs +16 -46
  850. package/pg-core/columns/custom.cjs.map +1 -1
  851. package/pg-core/columns/custom.d.cts +17 -8
  852. package/pg-core/columns/custom.d.ts +17 -8
  853. package/pg-core/columns/custom.js +16 -46
  854. package/pg-core/columns/custom.js.map +1 -1
  855. package/pg-core/columns/date.cjs +11 -12
  856. package/pg-core/columns/date.cjs.map +1 -1
  857. package/pg-core/columns/date.d.cts +3 -4
  858. package/pg-core/columns/date.d.ts +3 -4
  859. package/pg-core/columns/date.js +11 -12
  860. package/pg-core/columns/date.js.map +1 -1
  861. package/pg-core/columns/double-precision.cjs +2 -4
  862. package/pg-core/columns/double-precision.cjs.map +1 -1
  863. package/pg-core/columns/double-precision.d.cts +0 -1
  864. package/pg-core/columns/double-precision.d.ts +0 -1
  865. package/pg-core/columns/double-precision.js +2 -4
  866. package/pg-core/columns/double-precision.js.map +1 -1
  867. package/pg-core/columns/enum.cjs +4 -0
  868. package/pg-core/columns/enum.cjs.map +1 -1
  869. package/pg-core/columns/enum.js +4 -0
  870. package/pg-core/columns/enum.js.map +1 -1
  871. package/pg-core/columns/index.d.cts +2 -2
  872. package/pg-core/columns/index.d.ts +2 -2
  873. package/pg-core/columns/inet.cjs +2 -0
  874. package/pg-core/columns/inet.cjs.map +1 -1
  875. package/pg-core/columns/inet.js +2 -0
  876. package/pg-core/columns/inet.js.map +1 -1
  877. package/pg-core/columns/integer.cjs +2 -4
  878. package/pg-core/columns/integer.cjs.map +1 -1
  879. package/pg-core/columns/integer.d.cts +0 -1
  880. package/pg-core/columns/integer.d.ts +0 -1
  881. package/pg-core/columns/integer.js +2 -4
  882. package/pg-core/columns/integer.js.map +1 -1
  883. package/pg-core/columns/interval.cjs +2 -0
  884. package/pg-core/columns/interval.cjs.map +1 -1
  885. package/pg-core/columns/interval.js +2 -0
  886. package/pg-core/columns/interval.js.map +1 -1
  887. package/pg-core/columns/json.cjs +2 -11
  888. package/pg-core/columns/json.cjs.map +1 -1
  889. package/pg-core/columns/json.d.cts +0 -2
  890. package/pg-core/columns/json.d.ts +0 -2
  891. package/pg-core/columns/json.js +2 -11
  892. package/pg-core/columns/json.js.map +1 -1
  893. package/pg-core/columns/jsonb.cjs +2 -11
  894. package/pg-core/columns/jsonb.cjs.map +1 -1
  895. package/pg-core/columns/jsonb.d.cts +0 -2
  896. package/pg-core/columns/jsonb.d.ts +0 -2
  897. package/pg-core/columns/jsonb.js +2 -11
  898. package/pg-core/columns/jsonb.js.map +1 -1
  899. package/pg-core/columns/line.cjs +12 -8
  900. package/pg-core/columns/line.cjs.map +1 -1
  901. package/pg-core/columns/line.d.cts +5 -5
  902. package/pg-core/columns/line.d.ts +5 -5
  903. package/pg-core/columns/line.js +12 -8
  904. package/pg-core/columns/line.js.map +1 -1
  905. package/pg-core/columns/macaddr.cjs +2 -0
  906. package/pg-core/columns/macaddr.cjs.map +1 -1
  907. package/pg-core/columns/macaddr.js +2 -0
  908. package/pg-core/columns/macaddr.js.map +1 -1
  909. package/pg-core/columns/macaddr8.cjs +2 -0
  910. package/pg-core/columns/macaddr8.cjs.map +1 -1
  911. package/pg-core/columns/macaddr8.js +2 -0
  912. package/pg-core/columns/macaddr8.js.map +1 -1
  913. package/pg-core/columns/numeric.cjs +12 -15
  914. package/pg-core/columns/numeric.cjs.map +1 -1
  915. package/pg-core/columns/numeric.d.cts +4 -5
  916. package/pg-core/columns/numeric.d.ts +4 -5
  917. package/pg-core/columns/numeric.js +12 -15
  918. package/pg-core/columns/numeric.js.map +1 -1
  919. package/pg-core/columns/point.cjs +19 -21
  920. package/pg-core/columns/point.cjs.map +1 -1
  921. package/pg-core/columns/point.d.cts +5 -11
  922. package/pg-core/columns/point.d.ts +5 -11
  923. package/pg-core/columns/point.js +19 -21
  924. package/pg-core/columns/point.js.map +1 -1
  925. package/pg-core/columns/postgis_extension/geometry.cjs +12 -9
  926. package/pg-core/columns/postgis_extension/geometry.cjs.map +1 -1
  927. package/pg-core/columns/postgis_extension/geometry.d.cts +5 -5
  928. package/pg-core/columns/postgis_extension/geometry.d.ts +5 -5
  929. package/pg-core/columns/postgis_extension/geometry.js +12 -9
  930. package/pg-core/columns/postgis_extension/geometry.js.map +1 -1
  931. package/pg-core/columns/real.cjs +2 -4
  932. package/pg-core/columns/real.cjs.map +1 -1
  933. package/pg-core/columns/real.d.cts +0 -1
  934. package/pg-core/columns/real.d.ts +0 -1
  935. package/pg-core/columns/real.js +2 -4
  936. package/pg-core/columns/real.js.map +1 -1
  937. package/pg-core/columns/serial.cjs +2 -0
  938. package/pg-core/columns/serial.cjs.map +1 -1
  939. package/pg-core/columns/serial.js +2 -0
  940. package/pg-core/columns/serial.js.map +1 -1
  941. package/pg-core/columns/smallint.cjs +2 -4
  942. package/pg-core/columns/smallint.cjs.map +1 -1
  943. package/pg-core/columns/smallint.d.cts +0 -1
  944. package/pg-core/columns/smallint.d.ts +0 -1
  945. package/pg-core/columns/smallint.js +2 -4
  946. package/pg-core/columns/smallint.js.map +1 -1
  947. package/pg-core/columns/smallserial.cjs +2 -0
  948. package/pg-core/columns/smallserial.cjs.map +1 -1
  949. package/pg-core/columns/smallserial.js +2 -0
  950. package/pg-core/columns/smallserial.js.map +1 -1
  951. package/pg-core/columns/text.cjs +2 -0
  952. package/pg-core/columns/text.cjs.map +1 -1
  953. package/pg-core/columns/text.js +2 -0
  954. package/pg-core/columns/text.js.map +1 -1
  955. package/pg-core/columns/time.cjs +2 -0
  956. package/pg-core/columns/time.cjs.map +1 -1
  957. package/pg-core/columns/time.js +2 -0
  958. package/pg-core/columns/time.js.map +1 -1
  959. package/pg-core/columns/timestamp.cjs +13 -14
  960. package/pg-core/columns/timestamp.cjs.map +1 -1
  961. package/pg-core/columns/timestamp.d.cts +3 -4
  962. package/pg-core/columns/timestamp.d.ts +3 -4
  963. package/pg-core/columns/timestamp.js +13 -14
  964. package/pg-core/columns/timestamp.js.map +1 -1
  965. package/pg-core/columns/uuid.cjs +2 -0
  966. package/pg-core/columns/uuid.cjs.map +1 -1
  967. package/pg-core/columns/uuid.js +2 -0
  968. package/pg-core/columns/uuid.js.map +1 -1
  969. package/pg-core/columns/varchar.cjs +2 -0
  970. package/pg-core/columns/varchar.cjs.map +1 -1
  971. package/pg-core/columns/varchar.js +2 -0
  972. package/pg-core/columns/varchar.js.map +1 -1
  973. package/pg-core/columns/vector_extension/bit.cjs +2 -0
  974. package/pg-core/columns/vector_extension/bit.cjs.map +1 -1
  975. package/pg-core/columns/vector_extension/bit.js +2 -0
  976. package/pg-core/columns/vector_extension/bit.js.map +1 -1
  977. package/pg-core/columns/vector_extension/halfvec.cjs +6 -4
  978. package/pg-core/columns/vector_extension/halfvec.cjs.map +1 -1
  979. package/pg-core/columns/vector_extension/halfvec.d.cts +2 -2
  980. package/pg-core/columns/vector_extension/halfvec.d.ts +2 -2
  981. package/pg-core/columns/vector_extension/halfvec.js +6 -4
  982. package/pg-core/columns/vector_extension/halfvec.js.map +1 -1
  983. package/pg-core/columns/vector_extension/sparsevec.cjs +2 -0
  984. package/pg-core/columns/vector_extension/sparsevec.cjs.map +1 -1
  985. package/pg-core/columns/vector_extension/sparsevec.js +2 -0
  986. package/pg-core/columns/vector_extension/sparsevec.js.map +1 -1
  987. package/pg-core/columns/vector_extension/vector.cjs +6 -4
  988. package/pg-core/columns/vector_extension/vector.cjs.map +1 -1
  989. package/pg-core/columns/vector_extension/vector.d.cts +2 -2
  990. package/pg-core/columns/vector_extension/vector.d.ts +2 -2
  991. package/pg-core/columns/vector_extension/vector.js +6 -4
  992. package/pg-core/columns/vector_extension/vector.js.map +1 -1
  993. package/pg-core/dialect.cjs +73 -226
  994. package/pg-core/dialect.cjs.map +1 -1
  995. package/pg-core/dialect.d.cts +27 -34
  996. package/pg-core/dialect.d.ts +27 -34
  997. package/pg-core/dialect.js +78 -230
  998. package/pg-core/dialect.js.map +1 -1
  999. package/pg-core/effect/count.cjs +1 -1
  1000. package/pg-core/effect/count.cjs.map +1 -1
  1001. package/pg-core/effect/count.d.cts +2 -2
  1002. package/pg-core/effect/count.d.ts +2 -2
  1003. package/pg-core/effect/count.js +1 -1
  1004. package/pg-core/effect/count.js.map +1 -1
  1005. package/pg-core/effect/db.cjs +9 -18
  1006. package/pg-core/effect/db.cjs.map +1 -1
  1007. package/pg-core/effect/db.d.cts +7 -11
  1008. package/pg-core/effect/db.d.ts +6 -10
  1009. package/pg-core/effect/db.js +9 -18
  1010. package/pg-core/effect/db.js.map +1 -1
  1011. package/pg-core/effect/delete.cjs +7 -5
  1012. package/pg-core/effect/delete.cjs.map +1 -1
  1013. package/pg-core/effect/delete.d.cts +1 -1
  1014. package/pg-core/effect/delete.d.ts +1 -1
  1015. package/pg-core/effect/delete.js +7 -5
  1016. package/pg-core/effect/delete.js.map +1 -1
  1017. package/pg-core/effect/insert.cjs +7 -5
  1018. package/pg-core/effect/insert.cjs.map +1 -1
  1019. package/pg-core/effect/insert.d.cts +1 -1
  1020. package/pg-core/effect/insert.d.ts +1 -1
  1021. package/pg-core/effect/insert.js +7 -5
  1022. package/pg-core/effect/insert.js.map +1 -1
  1023. package/pg-core/effect/query.cjs +7 -6
  1024. package/pg-core/effect/query.cjs.map +1 -1
  1025. package/pg-core/effect/query.d.cts +1 -1
  1026. package/pg-core/effect/query.d.ts +1 -1
  1027. package/pg-core/effect/query.js +7 -6
  1028. package/pg-core/effect/query.js.map +1 -1
  1029. package/pg-core/effect/refresh-materialized-view.cjs +1 -2
  1030. package/pg-core/effect/refresh-materialized-view.cjs.map +1 -1
  1031. package/pg-core/effect/refresh-materialized-view.d.cts +1 -1
  1032. package/pg-core/effect/refresh-materialized-view.d.ts +1 -1
  1033. package/pg-core/effect/refresh-materialized-view.js +1 -2
  1034. package/pg-core/effect/refresh-materialized-view.js.map +1 -1
  1035. package/pg-core/effect/select.cjs +3 -5
  1036. package/pg-core/effect/select.cjs.map +1 -1
  1037. package/pg-core/effect/select.d.cts +1 -1
  1038. package/pg-core/effect/select.d.ts +1 -1
  1039. package/pg-core/effect/select.js +3 -5
  1040. package/pg-core/effect/select.js.map +1 -1
  1041. package/pg-core/effect/session.cjs +28 -17
  1042. package/pg-core/effect/session.cjs.map +1 -1
  1043. package/pg-core/effect/session.d.cts +24 -28
  1044. package/pg-core/effect/session.d.ts +25 -29
  1045. package/pg-core/effect/session.js +29 -18
  1046. package/pg-core/effect/session.js.map +1 -1
  1047. package/pg-core/effect/update.cjs +8 -8
  1048. package/pg-core/effect/update.cjs.map +1 -1
  1049. package/pg-core/effect/update.d.cts +1 -1
  1050. package/pg-core/effect/update.d.ts +1 -1
  1051. package/pg-core/effect/update.js +8 -8
  1052. package/pg-core/effect/update.js.map +1 -1
  1053. package/pg-core/index.cjs +4 -4
  1054. package/pg-core/index.d.cts +4 -4
  1055. package/pg-core/index.d.ts +4 -4
  1056. package/pg-core/index.js +1 -1
  1057. package/pg-core/query-builders/delete.cjs +6 -2
  1058. package/pg-core/query-builders/delete.cjs.map +1 -1
  1059. package/pg-core/query-builders/delete.d.cts +2 -0
  1060. package/pg-core/query-builders/delete.d.ts +2 -0
  1061. package/pg-core/query-builders/delete.js +6 -2
  1062. package/pg-core/query-builders/delete.js.map +1 -1
  1063. package/pg-core/query-builders/insert.cjs +7 -2
  1064. package/pg-core/query-builders/insert.cjs.map +1 -1
  1065. package/pg-core/query-builders/insert.d.cts +2 -0
  1066. package/pg-core/query-builders/insert.d.ts +2 -0
  1067. package/pg-core/query-builders/insert.js +7 -2
  1068. package/pg-core/query-builders/insert.js.map +1 -1
  1069. package/pg-core/query-builders/query-builder.cjs +2 -1
  1070. package/pg-core/query-builders/query-builder.cjs.map +1 -1
  1071. package/pg-core/query-builders/query-builder.js +2 -1
  1072. package/pg-core/query-builders/query-builder.js.map +1 -1
  1073. package/pg-core/query-builders/query.cjs +0 -1
  1074. package/pg-core/query-builders/query.cjs.map +1 -1
  1075. package/pg-core/query-builders/query.d.cts +2 -1
  1076. package/pg-core/query-builders/query.d.ts +2 -1
  1077. package/pg-core/query-builders/query.js +0 -1
  1078. package/pg-core/query-builders/query.js.map +1 -1
  1079. package/pg-core/query-builders/raw.cjs +0 -4
  1080. package/pg-core/query-builders/raw.cjs.map +1 -1
  1081. package/pg-core/query-builders/raw.js +0 -4
  1082. package/pg-core/query-builders/raw.js.map +1 -1
  1083. package/pg-core/query-builders/select.cjs +6 -2
  1084. package/pg-core/query-builders/select.cjs.map +1 -1
  1085. package/pg-core/query-builders/select.d.cts +1 -0
  1086. package/pg-core/query-builders/select.d.ts +1 -0
  1087. package/pg-core/query-builders/select.js +6 -2
  1088. package/pg-core/query-builders/select.js.map +1 -1
  1089. package/pg-core/query-builders/select.types.d.cts +1 -0
  1090. package/pg-core/query-builders/select.types.d.ts +1 -0
  1091. package/pg-core/query-builders/update.cjs +6 -2
  1092. package/pg-core/query-builders/update.cjs.map +1 -1
  1093. package/pg-core/query-builders/update.d.cts +2 -0
  1094. package/pg-core/query-builders/update.d.ts +2 -0
  1095. package/pg-core/query-builders/update.js +6 -2
  1096. package/pg-core/query-builders/update.js.map +1 -1
  1097. package/pg-core/session.cjs +3 -5
  1098. package/pg-core/session.cjs.map +1 -1
  1099. package/pg-core/session.d.cts +4 -7
  1100. package/pg-core/session.d.ts +4 -7
  1101. package/pg-core/session.js +3 -5
  1102. package/pg-core/session.js.map +1 -1
  1103. package/pg-core/table.cjs +1 -1
  1104. package/pg-core/table.cjs.map +1 -1
  1105. package/pg-core/table.js +1 -1
  1106. package/pg-core/table.js.map +1 -1
  1107. package/pg-core/utils.cjs.map +1 -1
  1108. package/pg-core/utils.d.cts +7 -1
  1109. package/pg-core/utils.d.ts +7 -1
  1110. package/pg-core/utils.js.map +1 -1
  1111. package/pg-core/view.cjs +2 -2
  1112. package/pg-core/view.cjs.map +1 -1
  1113. package/pg-core/view.js +2 -2
  1114. package/pg-core/view.js.map +1 -1
  1115. package/pg-proxy/driver.cjs +10 -15
  1116. package/pg-proxy/driver.cjs.map +1 -1
  1117. package/pg-proxy/driver.d.cts +6 -3
  1118. package/pg-proxy/driver.d.ts +6 -3
  1119. package/pg-proxy/driver.js +10 -14
  1120. package/pg-proxy/driver.js.map +1 -1
  1121. package/pg-proxy/index.cjs +0 -2
  1122. package/pg-proxy/index.d.cts +2 -2
  1123. package/pg-proxy/index.d.ts +2 -2
  1124. package/pg-proxy/index.js +2 -2
  1125. package/pg-proxy/migrator.cjs.map +1 -1
  1126. package/pg-proxy/migrator.d.cts +1 -1
  1127. package/pg-proxy/migrator.d.ts +1 -1
  1128. package/pg-proxy/migrator.js.map +1 -1
  1129. package/pg-proxy/session.cjs +8 -84
  1130. package/pg-proxy/session.cjs.map +1 -1
  1131. package/pg-proxy/session.d.cts +9 -32
  1132. package/pg-proxy/session.d.ts +9 -32
  1133. package/pg-proxy/session.js +10 -84
  1134. package/pg-proxy/session.js.map +1 -1
  1135. package/pglite/driver.cjs +71 -33
  1136. package/pglite/driver.cjs.map +1 -1
  1137. package/pglite/driver.d.cts +12 -17
  1138. package/pglite/driver.d.ts +13 -18
  1139. package/pglite/driver.js +71 -32
  1140. package/pglite/driver.js.map +1 -1
  1141. package/pglite/index.cjs +2 -3
  1142. package/pglite/index.d.cts +3 -3
  1143. package/pglite/index.d.ts +3 -3
  1144. package/pglite/index.js +3 -3
  1145. package/pglite/migrator.cjs.map +1 -1
  1146. package/pglite/migrator.d.cts +1 -1
  1147. package/pglite/migrator.d.ts +1 -1
  1148. package/pglite/migrator.js.map +1 -1
  1149. package/pglite/session.cjs +24 -85
  1150. package/pglite/session.cjs.map +1 -1
  1151. package/pglite/session.d.cts +9 -30
  1152. package/pglite/session.d.ts +9 -30
  1153. package/pglite/session.js +26 -86
  1154. package/pglite/session.js.map +1 -1
  1155. package/planetscale-serverless/driver.cjs +3 -2
  1156. package/planetscale-serverless/driver.cjs.map +1 -1
  1157. package/planetscale-serverless/driver.d.cts +1 -0
  1158. package/planetscale-serverless/driver.d.ts +1 -0
  1159. package/planetscale-serverless/driver.js +3 -2
  1160. package/planetscale-serverless/driver.js.map +1 -1
  1161. package/planetscale-serverless/session.cjs +26 -19
  1162. package/planetscale-serverless/session.cjs.map +1 -1
  1163. package/planetscale-serverless/session.d.cts +12 -6
  1164. package/planetscale-serverless/session.d.ts +13 -7
  1165. package/planetscale-serverless/session.js +27 -20
  1166. package/planetscale-serverless/session.js.map +1 -1
  1167. package/postgres-js/driver.cjs +124 -19
  1168. package/postgres-js/driver.cjs.map +1 -1
  1169. package/postgres-js/driver.d.cts +10 -6
  1170. package/postgres-js/driver.d.ts +10 -6
  1171. package/postgres-js/driver.js +124 -19
  1172. package/postgres-js/driver.js.map +1 -1
  1173. package/postgres-js/index.cjs +2 -2
  1174. package/postgres-js/index.d.cts +3 -3
  1175. package/postgres-js/index.d.ts +3 -3
  1176. package/postgres-js/index.js +3 -3
  1177. package/postgres-js/migrator.cjs.map +1 -1
  1178. package/postgres-js/migrator.d.cts +1 -1
  1179. package/postgres-js/migrator.d.ts +1 -1
  1180. package/postgres-js/migrator.js.map +1 -1
  1181. package/postgres-js/session.cjs +16 -111
  1182. package/postgres-js/session.cjs.map +1 -1
  1183. package/postgres-js/session.d.cts +10 -31
  1184. package/postgres-js/session.d.ts +9 -30
  1185. package/postgres-js/session.js +17 -111
  1186. package/postgres-js/session.js.map +1 -1
  1187. package/prisma/mysql/session.cjs +2 -1
  1188. package/prisma/mysql/session.cjs.map +1 -1
  1189. package/prisma/mysql/session.d.cts +1 -0
  1190. package/prisma/mysql/session.d.ts +2 -1
  1191. package/prisma/mysql/session.js +2 -1
  1192. package/prisma/mysql/session.js.map +1 -1
  1193. package/prisma/pg/driver.cjs +9 -3
  1194. package/prisma/pg/driver.cjs.map +1 -1
  1195. package/prisma/pg/driver.d.cts +7 -3
  1196. package/prisma/pg/driver.d.ts +7 -3
  1197. package/prisma/pg/driver.js +9 -4
  1198. package/prisma/pg/driver.js.map +1 -1
  1199. package/prisma/pg/index.cjs +2 -2
  1200. package/prisma/pg/index.d.cts +3 -3
  1201. package/prisma/pg/index.d.ts +3 -3
  1202. package/prisma/pg/index.js +3 -3
  1203. package/prisma/pg/session.cjs +1 -25
  1204. package/prisma/pg/session.cjs.map +1 -1
  1205. package/prisma/pg/session.d.cts +3 -15
  1206. package/prisma/pg/session.d.ts +2 -14
  1207. package/prisma/pg/session.js +2 -25
  1208. package/prisma/pg/session.js.map +1 -1
  1209. package/prisma/sqlite/session.cjs +0 -3
  1210. package/prisma/sqlite/session.cjs.map +1 -1
  1211. package/prisma/sqlite/session.d.cts +0 -1
  1212. package/prisma/sqlite/session.d.ts +1 -2
  1213. package/prisma/sqlite/session.js +0 -3
  1214. package/prisma/sqlite/session.js.map +1 -1
  1215. package/query-builders/query-builder.cjs +4 -0
  1216. package/query-builders/query-builder.cjs.map +1 -1
  1217. package/query-builders/query-builder.js +4 -0
  1218. package/query-builders/query-builder.js.map +1 -1
  1219. package/relations.cjs +84 -23
  1220. package/relations.cjs.map +1 -1
  1221. package/relations.d.cts +41 -16
  1222. package/relations.d.ts +41 -16
  1223. package/relations.js +83 -24
  1224. package/relations.js.map +1 -1
  1225. package/row-mappers/index.cjs +1 -1
  1226. package/row-mappers/index.cjs.map +1 -1
  1227. package/row-mappers/index.js +1 -1
  1228. package/row-mappers/index.js.map +1 -1
  1229. package/singlestore/driver.cjs +4 -2
  1230. package/singlestore/driver.cjs.map +1 -1
  1231. package/singlestore/driver.d.cts +2 -1
  1232. package/singlestore/driver.d.ts +3 -2
  1233. package/singlestore/driver.js +4 -2
  1234. package/singlestore/driver.js.map +1 -1
  1235. package/singlestore/session.cjs +16 -6
  1236. package/singlestore/session.cjs.map +1 -1
  1237. package/singlestore/session.d.cts +8 -4
  1238. package/singlestore/session.d.ts +8 -4
  1239. package/singlestore/session.js +17 -7
  1240. package/singlestore/session.js.map +1 -1
  1241. package/singlestore-core/columns/bigint.cjs +4 -4
  1242. package/singlestore-core/columns/bigint.cjs.map +1 -1
  1243. package/singlestore-core/columns/bigint.d.cts +2 -2
  1244. package/singlestore-core/columns/bigint.d.ts +2 -2
  1245. package/singlestore-core/columns/bigint.js +4 -4
  1246. package/singlestore-core/columns/bigint.js.map +1 -1
  1247. package/singlestore-core/columns/binary.cjs +2 -2
  1248. package/singlestore-core/columns/binary.cjs.map +1 -1
  1249. package/singlestore-core/columns/binary.d.cts +1 -1
  1250. package/singlestore-core/columns/binary.d.ts +1 -1
  1251. package/singlestore-core/columns/binary.js +2 -2
  1252. package/singlestore-core/columns/binary.js.map +1 -1
  1253. package/singlestore-core/columns/boolean.cjs +2 -2
  1254. package/singlestore-core/columns/boolean.cjs.map +1 -1
  1255. package/singlestore-core/columns/boolean.d.cts +1 -1
  1256. package/singlestore-core/columns/boolean.d.ts +1 -1
  1257. package/singlestore-core/columns/boolean.js +2 -2
  1258. package/singlestore-core/columns/boolean.js.map +1 -1
  1259. package/singlestore-core/columns/custom.cjs +4 -4
  1260. package/singlestore-core/columns/custom.cjs.map +1 -1
  1261. package/singlestore-core/columns/custom.d.cts +2 -2
  1262. package/singlestore-core/columns/custom.d.ts +2 -2
  1263. package/singlestore-core/columns/custom.js +4 -4
  1264. package/singlestore-core/columns/custom.js.map +1 -1
  1265. package/singlestore-core/columns/date.cjs +2 -2
  1266. package/singlestore-core/columns/date.cjs.map +1 -1
  1267. package/singlestore-core/columns/date.d.cts +1 -1
  1268. package/singlestore-core/columns/date.d.ts +1 -1
  1269. package/singlestore-core/columns/date.js +2 -2
  1270. package/singlestore-core/columns/date.js.map +1 -1
  1271. package/singlestore-core/columns/datetime.cjs +6 -6
  1272. package/singlestore-core/columns/datetime.cjs.map +1 -1
  1273. package/singlestore-core/columns/datetime.d.cts +3 -3
  1274. package/singlestore-core/columns/datetime.d.ts +3 -3
  1275. package/singlestore-core/columns/datetime.js +6 -6
  1276. package/singlestore-core/columns/datetime.js.map +1 -1
  1277. package/singlestore-core/columns/decimal.cjs +4 -4
  1278. package/singlestore-core/columns/decimal.cjs.map +1 -1
  1279. package/singlestore-core/columns/decimal.d.cts +2 -2
  1280. package/singlestore-core/columns/decimal.d.ts +2 -2
  1281. package/singlestore-core/columns/decimal.js +4 -4
  1282. package/singlestore-core/columns/decimal.js.map +1 -1
  1283. package/singlestore-core/columns/float.cjs +2 -2
  1284. package/singlestore-core/columns/float.cjs.map +1 -1
  1285. package/singlestore-core/columns/float.d.cts +1 -1
  1286. package/singlestore-core/columns/float.d.ts +1 -1
  1287. package/singlestore-core/columns/float.js +2 -2
  1288. package/singlestore-core/columns/float.js.map +1 -1
  1289. package/singlestore-core/columns/int.cjs +2 -2
  1290. package/singlestore-core/columns/int.cjs.map +1 -1
  1291. package/singlestore-core/columns/int.d.cts +1 -1
  1292. package/singlestore-core/columns/int.d.ts +1 -1
  1293. package/singlestore-core/columns/int.js +2 -2
  1294. package/singlestore-core/columns/int.js.map +1 -1
  1295. package/singlestore-core/columns/json.cjs +2 -2
  1296. package/singlestore-core/columns/json.cjs.map +1 -1
  1297. package/singlestore-core/columns/json.d.cts +1 -1
  1298. package/singlestore-core/columns/json.d.ts +1 -1
  1299. package/singlestore-core/columns/json.js +2 -2
  1300. package/singlestore-core/columns/json.js.map +1 -1
  1301. package/singlestore-core/columns/mediumint.cjs +2 -2
  1302. package/singlestore-core/columns/mediumint.cjs.map +1 -1
  1303. package/singlestore-core/columns/mediumint.d.cts +1 -1
  1304. package/singlestore-core/columns/mediumint.d.ts +1 -1
  1305. package/singlestore-core/columns/mediumint.js +2 -2
  1306. package/singlestore-core/columns/mediumint.js.map +1 -1
  1307. package/singlestore-core/columns/serial.cjs +2 -2
  1308. package/singlestore-core/columns/serial.cjs.map +1 -1
  1309. package/singlestore-core/columns/serial.d.cts +1 -1
  1310. package/singlestore-core/columns/serial.d.ts +1 -1
  1311. package/singlestore-core/columns/serial.js +2 -2
  1312. package/singlestore-core/columns/serial.js.map +1 -1
  1313. package/singlestore-core/columns/smallint.cjs +2 -2
  1314. package/singlestore-core/columns/smallint.cjs.map +1 -1
  1315. package/singlestore-core/columns/smallint.d.cts +1 -1
  1316. package/singlestore-core/columns/smallint.d.ts +1 -1
  1317. package/singlestore-core/columns/smallint.js +2 -2
  1318. package/singlestore-core/columns/smallint.js.map +1 -1
  1319. package/singlestore-core/columns/timestamp.cjs +6 -6
  1320. package/singlestore-core/columns/timestamp.cjs.map +1 -1
  1321. package/singlestore-core/columns/timestamp.d.cts +3 -3
  1322. package/singlestore-core/columns/timestamp.d.ts +3 -3
  1323. package/singlestore-core/columns/timestamp.js +6 -6
  1324. package/singlestore-core/columns/timestamp.js.map +1 -1
  1325. package/singlestore-core/columns/tinyint.cjs +2 -2
  1326. package/singlestore-core/columns/tinyint.cjs.map +1 -1
  1327. package/singlestore-core/columns/tinyint.d.cts +1 -1
  1328. package/singlestore-core/columns/tinyint.d.ts +1 -1
  1329. package/singlestore-core/columns/tinyint.js +2 -2
  1330. package/singlestore-core/columns/tinyint.js.map +1 -1
  1331. package/singlestore-core/columns/varbinary.cjs +2 -2
  1332. package/singlestore-core/columns/varbinary.cjs.map +1 -1
  1333. package/singlestore-core/columns/varbinary.d.cts +1 -1
  1334. package/singlestore-core/columns/varbinary.d.ts +1 -1
  1335. package/singlestore-core/columns/varbinary.js +2 -2
  1336. package/singlestore-core/columns/varbinary.js.map +1 -1
  1337. package/singlestore-core/columns/vector.cjs +8 -8
  1338. package/singlestore-core/columns/vector.cjs.map +1 -1
  1339. package/singlestore-core/columns/vector.d.cts +4 -4
  1340. package/singlestore-core/columns/vector.d.ts +4 -4
  1341. package/singlestore-core/columns/vector.js +8 -8
  1342. package/singlestore-core/columns/vector.js.map +1 -1
  1343. package/singlestore-core/columns/year.cjs +2 -2
  1344. package/singlestore-core/columns/year.cjs.map +1 -1
  1345. package/singlestore-core/columns/year.d.cts +1 -1
  1346. package/singlestore-core/columns/year.d.ts +1 -1
  1347. package/singlestore-core/columns/year.js +2 -2
  1348. package/singlestore-core/columns/year.js.map +1 -1
  1349. package/singlestore-core/db.d.ts +1 -1
  1350. package/singlestore-core/dialect.cjs +1 -1
  1351. package/singlestore-core/dialect.d.ts +1 -1
  1352. package/singlestore-core/dialect.js +1 -1
  1353. package/singlestore-core/query-builders/query.cjs +13 -5
  1354. package/singlestore-core/query-builders/query.cjs.map +1 -1
  1355. package/singlestore-core/query-builders/query.d.ts +1 -1
  1356. package/singlestore-core/query-builders/query.js +13 -5
  1357. package/singlestore-core/query-builders/query.js.map +1 -1
  1358. package/singlestore-core/query-builders/select.cjs +4 -0
  1359. package/singlestore-core/query-builders/select.cjs.map +1 -1
  1360. package/singlestore-core/query-builders/select.js +4 -0
  1361. package/singlestore-core/query-builders/select.js.map +1 -1
  1362. package/singlestore-core/session.cjs.map +1 -1
  1363. package/singlestore-core/session.d.cts +2 -2
  1364. package/singlestore-core/session.d.ts +2 -2
  1365. package/singlestore-core/session.js.map +1 -1
  1366. package/singlestore-core/table.cjs +1 -1
  1367. package/singlestore-core/table.cjs.map +1 -1
  1368. package/singlestore-core/table.js +1 -1
  1369. package/singlestore-core/table.js.map +1 -1
  1370. package/singlestore-proxy/driver.cjs +5 -2
  1371. package/singlestore-proxy/driver.cjs.map +1 -1
  1372. package/singlestore-proxy/driver.js +5 -2
  1373. package/singlestore-proxy/driver.js.map +1 -1
  1374. package/singlestore-proxy/session.cjs +11 -6
  1375. package/singlestore-proxy/session.cjs.map +1 -1
  1376. package/singlestore-proxy/session.d.cts +9 -4
  1377. package/singlestore-proxy/session.d.ts +9 -4
  1378. package/singlestore-proxy/session.js +12 -7
  1379. package/singlestore-proxy/session.js.map +1 -1
  1380. package/sql/index.cjs +1 -0
  1381. package/sql/index.d.cts +2 -2
  1382. package/sql/index.d.ts +2 -2
  1383. package/sql/index.js +2 -2
  1384. package/sql/sql.cjs +32 -11
  1385. package/sql/sql.cjs.map +1 -1
  1386. package/sql/sql.d.cts +15 -5
  1387. package/sql/sql.d.ts +15 -5
  1388. package/sql/sql.js +32 -12
  1389. package/sql/sql.js.map +1 -1
  1390. package/sql-js/driver.cjs +5 -2
  1391. package/sql-js/driver.cjs.map +1 -1
  1392. package/sql-js/driver.d.ts +1 -1
  1393. package/sql-js/driver.js +5 -2
  1394. package/sql-js/driver.js.map +1 -1
  1395. package/sql-js/session.cjs +14 -14
  1396. package/sql-js/session.cjs.map +1 -1
  1397. package/sql-js/session.d.cts +10 -6
  1398. package/sql-js/session.d.ts +10 -6
  1399. package/sql-js/session.js +15 -15
  1400. package/sql-js/session.js.map +1 -1
  1401. package/sqlite-cloud/driver.cjs +3 -2
  1402. package/sqlite-cloud/driver.cjs.map +1 -1
  1403. package/sqlite-cloud/driver.d.ts +1 -1
  1404. package/sqlite-cloud/driver.js +3 -2
  1405. package/sqlite-cloud/driver.js.map +1 -1
  1406. package/sqlite-cloud/session.cjs +20 -19
  1407. package/sqlite-cloud/session.cjs.map +1 -1
  1408. package/sqlite-cloud/session.d.cts +9 -6
  1409. package/sqlite-cloud/session.d.ts +9 -6
  1410. package/sqlite-cloud/session.js +21 -20
  1411. package/sqlite-cloud/session.js.map +1 -1
  1412. package/sqlite-core/columns/blob.cjs +10 -10
  1413. package/sqlite-core/columns/blob.cjs.map +1 -1
  1414. package/sqlite-core/columns/blob.d.cts +5 -5
  1415. package/sqlite-core/columns/blob.d.ts +5 -5
  1416. package/sqlite-core/columns/blob.js +10 -10
  1417. package/sqlite-core/columns/blob.js.map +1 -1
  1418. package/sqlite-core/columns/custom.cjs +4 -4
  1419. package/sqlite-core/columns/custom.cjs.map +1 -1
  1420. package/sqlite-core/columns/custom.d.cts +2 -2
  1421. package/sqlite-core/columns/custom.d.ts +2 -2
  1422. package/sqlite-core/columns/custom.js +4 -4
  1423. package/sqlite-core/columns/custom.js.map +1 -1
  1424. package/sqlite-core/columns/integer.cjs +8 -8
  1425. package/sqlite-core/columns/integer.cjs.map +1 -1
  1426. package/sqlite-core/columns/integer.d.cts +4 -4
  1427. package/sqlite-core/columns/integer.d.ts +4 -4
  1428. package/sqlite-core/columns/integer.js +8 -8
  1429. package/sqlite-core/columns/integer.js.map +1 -1
  1430. package/sqlite-core/columns/numeric.cjs +4 -4
  1431. package/sqlite-core/columns/numeric.cjs.map +1 -1
  1432. package/sqlite-core/columns/numeric.d.cts +2 -2
  1433. package/sqlite-core/columns/numeric.d.ts +2 -2
  1434. package/sqlite-core/columns/numeric.js +4 -4
  1435. package/sqlite-core/columns/numeric.js.map +1 -1
  1436. package/sqlite-core/columns/text.cjs +4 -4
  1437. package/sqlite-core/columns/text.cjs.map +1 -1
  1438. package/sqlite-core/columns/text.d.cts +2 -2
  1439. package/sqlite-core/columns/text.d.ts +2 -2
  1440. package/sqlite-core/columns/text.js +4 -4
  1441. package/sqlite-core/columns/text.js.map +1 -1
  1442. package/sqlite-core/db.d.ts +1 -1
  1443. package/sqlite-core/dialect.cjs +2 -2
  1444. package/sqlite-core/dialect.d.ts +1 -1
  1445. package/sqlite-core/dialect.js +2 -2
  1446. package/sqlite-core/query-builders/_query.cjs +1 -1
  1447. package/sqlite-core/query-builders/_query.cjs.map +1 -1
  1448. package/sqlite-core/query-builders/_query.js +1 -1
  1449. package/sqlite-core/query-builders/_query.js.map +1 -1
  1450. package/sqlite-core/query-builders/delete.cjs +1 -1
  1451. package/sqlite-core/query-builders/delete.cjs.map +1 -1
  1452. package/sqlite-core/query-builders/delete.js +1 -1
  1453. package/sqlite-core/query-builders/delete.js.map +1 -1
  1454. package/sqlite-core/query-builders/insert.cjs +1 -1
  1455. package/sqlite-core/query-builders/insert.cjs.map +1 -1
  1456. package/sqlite-core/query-builders/insert.js +1 -1
  1457. package/sqlite-core/query-builders/insert.js.map +1 -1
  1458. package/sqlite-core/query-builders/query.cjs +13 -5
  1459. package/sqlite-core/query-builders/query.cjs.map +1 -1
  1460. package/sqlite-core/query-builders/query.d.ts +1 -1
  1461. package/sqlite-core/query-builders/query.js +13 -5
  1462. package/sqlite-core/query-builders/query.js.map +1 -1
  1463. package/sqlite-core/query-builders/raw.cjs +0 -4
  1464. package/sqlite-core/query-builders/raw.cjs.map +1 -1
  1465. package/sqlite-core/query-builders/raw.js +0 -4
  1466. package/sqlite-core/query-builders/raw.js.map +1 -1
  1467. package/sqlite-core/query-builders/select.cjs +5 -1
  1468. package/sqlite-core/query-builders/select.cjs.map +1 -1
  1469. package/sqlite-core/query-builders/select.js +5 -1
  1470. package/sqlite-core/query-builders/select.js.map +1 -1
  1471. package/sqlite-core/query-builders/update.cjs +1 -1
  1472. package/sqlite-core/query-builders/update.cjs.map +1 -1
  1473. package/sqlite-core/query-builders/update.js +1 -1
  1474. package/sqlite-core/query-builders/update.js.map +1 -1
  1475. package/sqlite-core/session.cjs +8 -8
  1476. package/sqlite-core/session.cjs.map +1 -1
  1477. package/sqlite-core/session.d.cts +5 -5
  1478. package/sqlite-core/session.d.ts +5 -5
  1479. package/sqlite-core/session.js +8 -8
  1480. package/sqlite-core/session.js.map +1 -1
  1481. package/sqlite-core/table.cjs +1 -1
  1482. package/sqlite-core/table.cjs.map +1 -1
  1483. package/sqlite-core/table.js +1 -1
  1484. package/sqlite-core/table.js.map +1 -1
  1485. package/sqlite-proxy/driver.cjs +3 -2
  1486. package/sqlite-proxy/driver.cjs.map +1 -1
  1487. package/sqlite-proxy/driver.d.ts +1 -1
  1488. package/sqlite-proxy/driver.js +3 -2
  1489. package/sqlite-proxy/driver.js.map +1 -1
  1490. package/sqlite-proxy/session.cjs +19 -16
  1491. package/sqlite-proxy/session.cjs.map +1 -1
  1492. package/sqlite-proxy/session.d.cts +11 -7
  1493. package/sqlite-proxy/session.d.ts +11 -7
  1494. package/sqlite-proxy/session.js +20 -17
  1495. package/sqlite-proxy/session.js.map +1 -1
  1496. package/table.d.cts +1 -1
  1497. package/table.d.ts +1 -1
  1498. package/tidb-serverless/driver.cjs +3 -2
  1499. package/tidb-serverless/driver.cjs.map +1 -1
  1500. package/tidb-serverless/driver.d.cts +1 -0
  1501. package/tidb-serverless/driver.d.ts +1 -0
  1502. package/tidb-serverless/driver.js +3 -2
  1503. package/tidb-serverless/driver.js.map +1 -1
  1504. package/tidb-serverless/session.cjs +24 -36
  1505. package/tidb-serverless/session.cjs.map +1 -1
  1506. package/tidb-serverless/session.d.cts +10 -4
  1507. package/tidb-serverless/session.d.ts +11 -5
  1508. package/tidb-serverless/session.js +25 -37
  1509. package/tidb-serverless/session.js.map +1 -1
  1510. package/tursodatabase/driver-core.cjs +3 -2
  1511. package/tursodatabase/driver-core.cjs.map +1 -1
  1512. package/tursodatabase/driver-core.d.ts +1 -1
  1513. package/tursodatabase/driver-core.js +3 -2
  1514. package/tursodatabase/driver-core.js.map +1 -1
  1515. package/tursodatabase/session.cjs +19 -18
  1516. package/tursodatabase/session.cjs.map +1 -1
  1517. package/tursodatabase/session.d.cts +9 -6
  1518. package/tursodatabase/session.d.ts +9 -6
  1519. package/tursodatabase/session.js +20 -19
  1520. package/tursodatabase/session.js.map +1 -1
  1521. package/up-migrations/effect-pg.cjs +3 -3
  1522. package/up-migrations/effect-pg.cjs.map +1 -1
  1523. package/up-migrations/effect-pg.js +3 -3
  1524. package/up-migrations/effect-pg.js.map +1 -1
  1525. package/up-migrations/pg.cjs +3 -8
  1526. package/up-migrations/pg.cjs.map +1 -1
  1527. package/up-migrations/pg.d.cts +1 -1
  1528. package/up-migrations/pg.d.ts +1 -1
  1529. package/up-migrations/pg.js +3 -8
  1530. package/up-migrations/pg.js.map +1 -1
  1531. package/up-migrations/sqlite.d.ts +2 -2
  1532. package/utils.cjs +128 -6
  1533. package/utils.cjs.map +1 -1
  1534. package/utils.d.cts +10 -3
  1535. package/utils.d.ts +10 -3
  1536. package/utils.js +126 -7
  1537. package/utils.js.map +1 -1
  1538. package/vercel-postgres/driver.cjs +14 -32
  1539. package/vercel-postgres/driver.cjs.map +1 -1
  1540. package/vercel-postgres/driver.d.cts +12 -17
  1541. package/vercel-postgres/driver.d.ts +13 -18
  1542. package/vercel-postgres/driver.js +14 -31
  1543. package/vercel-postgres/driver.js.map +1 -1
  1544. package/vercel-postgres/index.cjs +2 -3
  1545. package/vercel-postgres/index.d.cts +3 -3
  1546. package/vercel-postgres/index.d.ts +3 -3
  1547. package/vercel-postgres/index.js +3 -3
  1548. package/vercel-postgres/migrator.cjs.map +1 -1
  1549. package/vercel-postgres/migrator.d.cts +1 -1
  1550. package/vercel-postgres/migrator.d.ts +1 -1
  1551. package/vercel-postgres/migrator.js.map +1 -1
  1552. package/vercel-postgres/session.cjs +32 -110
  1553. package/vercel-postgres/session.cjs.map +1 -1
  1554. package/vercel-postgres/session.d.cts +9 -32
  1555. package/vercel-postgres/session.d.ts +9 -32
  1556. package/vercel-postgres/session.js +34 -111
  1557. package/vercel-postgres/session.js.map +1 -1
  1558. package/xata-http/driver.cjs +91 -31
  1559. package/xata-http/driver.cjs.map +1 -1
  1560. package/xata-http/driver.d.cts +10 -16
  1561. package/xata-http/driver.d.ts +11 -17
  1562. package/xata-http/driver.js +91 -30
  1563. package/xata-http/driver.js.map +1 -1
  1564. package/xata-http/index.cjs +2 -4
  1565. package/xata-http/index.d.cts +3 -3
  1566. package/xata-http/index.d.ts +3 -3
  1567. package/xata-http/index.js +3 -3
  1568. package/xata-http/migrator.cjs +1 -1
  1569. package/xata-http/migrator.cjs.map +1 -1
  1570. package/xata-http/migrator.d.cts +1 -1
  1571. package/xata-http/migrator.d.ts +1 -1
  1572. package/xata-http/migrator.js +1 -1
  1573. package/xata-http/migrator.js.map +1 -1
  1574. package/xata-http/session.cjs +23 -109
  1575. package/xata-http/session.cjs.map +1 -1
  1576. package/xata-http/session.d.cts +7 -33
  1577. package/xata-http/session.d.ts +6 -32
  1578. package/xata-http/session.js +25 -109
  1579. package/xata-http/session.js.map +1 -1
  1580. package/pg-core/query-builders/_query.cjs +0 -101
  1581. package/pg-core/query-builders/_query.cjs.map +0 -1
  1582. package/pg-core/query-builders/_query.d.cts +0 -55
  1583. package/pg-core/query-builders/_query.d.ts +0 -55
  1584. package/pg-core/query-builders/_query.js +0 -97
  1585. package/pg-core/query-builders/_query.js.map +0 -1
  1586. package/pg-core/utils/array.cjs.map +0 -1
  1587. package/pg-core/utils/array.js.map +0 -1
  1588. package/pg-core/utils/index.cjs +0 -6
  1589. package/pg-core/utils/index.d.cts +0 -2
  1590. package/pg-core/utils/index.d.ts +0 -2
  1591. package/pg-core/utils/index.js +0 -3
package/relations.js CHANGED
@@ -208,35 +208,94 @@ const orderByOperators = {
208
208
  function getOrderByOperators() {
209
209
  return orderByOperators;
210
210
  }
211
- function mapRelationalRow(row, buildQueryResultSelection, mapColumnValue = (value) => value, parseJson = false, parseJsonIfString = false, path) {
212
- for (const selectionItem of buildQueryResultSelection) {
213
- if (selectionItem.selection) {
214
- const currentPath = `${path ? `${path}.` : ""}${selectionItem.key}`;
215
- if (row[selectionItem.key] === null) continue;
216
- if (parseJson) {
217
- row[selectionItem.key] = JSON.parse(row[selectionItem.key]);
211
+ function mapRelationalRow(rows, isOne, buildQueryResultSelection, mapColumnValue, parseJson = false, parseJsonIfString = false, useJsonMappers = true) {
212
+ const maxIdx = isOne ? 1 : rows.length;
213
+ const decoders = buildQueryResultSelection.map(({ field, codec, arrayDimensions }) => {
214
+ let decoder;
215
+ if (is(field, Column)) {
216
+ if (useJsonMappers && field.mapFromJsonValue) return (v) => field.mapFromJsonValue(v);
217
+ decoder = field;
218
+ } else if (is(field, SQL)) decoder = field.decoder;
219
+ else if (is(field, SQL.Aliased)) decoder = field.sql.decoder;
220
+ else if (is(field, Table) || is(field, View)) decoder = noopDecoder;
221
+ else decoder = field.getSQL().decoder;
222
+ return decoder.mapFromDriverValue.isNoop ? codec ? (value) => codec(value, arrayDimensions) : void 0 : codec ? (value) => decoder.mapFromDriverValue(codec(value, arrayDimensions)) : (value) => decoder.mapFromDriverValue(value);
223
+ });
224
+ for (let i = 0; i < maxIdx; ++i) {
225
+ const row = isOne ? rows : rows[i];
226
+ for (let selectionItemIdx = 0; selectionItemIdx < buildQueryResultSelection.length; ++selectionItemIdx) {
227
+ const selectionItem = buildQueryResultSelection[selectionItemIdx];
228
+ if (selectionItem.selection) {
218
229
  if (row[selectionItem.key] === null) continue;
219
- }
220
- if (parseJsonIfString && typeof row[selectionItem.key] === "string") row[selectionItem.key] = JSON.parse(row[selectionItem.key]);
221
- if (selectionItem.isArray) {
222
- for (const item of row[selectionItem.key]) mapRelationalRow(item, selectionItem.selection, mapColumnValue, false, parseJsonIfString, currentPath);
230
+ if (parseJson) {
231
+ row[selectionItem.key] = JSON.parse(row[selectionItem.key]);
232
+ if (row[selectionItem.key] === null) continue;
233
+ } else if (parseJsonIfString && typeof row[selectionItem.key] === "string") row[selectionItem.key] = JSON.parse(row[selectionItem.key]);
234
+ if (selectionItem.isArray) {
235
+ mapRelationalRow(row[selectionItem.key], false, selectionItem.selection, mapColumnValue, false, parseJsonIfString);
236
+ continue;
237
+ }
238
+ mapRelationalRow(row[selectionItem.key], true, selectionItem.selection, mapColumnValue, false, parseJsonIfString);
223
239
  continue;
224
240
  }
225
- mapRelationalRow(row[selectionItem.key], selectionItem.selection, mapColumnValue, false, parseJsonIfString, currentPath);
226
- continue;
241
+ if (mapColumnValue) row[selectionItem.key] = mapColumnValue(row[selectionItem.key]);
242
+ if (row[selectionItem.key] === null) continue;
243
+ const decoder = decoders[selectionItemIdx];
244
+ if (!decoder) continue;
245
+ row[selectionItem.key] = decoder(row[selectionItem.key]);
246
+ }
247
+ }
248
+ return rows;
249
+ }
250
+ function makeDefaultRqbMapper({ selection, isFirst, parseJson, parseJsonIfString, rootJsonMappers }, mapColumnValue) {
251
+ return ((rows) => {
252
+ if (isFirst && !rows[0]) return rows[0];
253
+ return mapRelationalRow(isFirst ? rows[0] : rows, isFirst, selection, mapColumnValue, parseJson, parseJsonIfString, rootJsonMappers);
254
+ });
255
+ }
256
+ function makeJitRqbMapperInner(selection, pathPrefix, selectionPathPrefix, mapColumnValue, parseJson, parseJsonIfString, useJsonMappers, recursionDepth = 0) {
257
+ const fn = [];
258
+ for (const [idx, { field, key, codec, isArray, selection: innerSelection, arrayDimensions }] of selection.entries()) {
259
+ const sel = `${selectionPathPrefix}[${idx}]`;
260
+ const item = `${pathPrefix}[${JSON.stringify(key)}]`;
261
+ if (innerSelection) {
262
+ const innerIdx = `i${recursionDepth}`;
263
+ const innerCode = makeJitRqbMapperInner(innerSelection, isArray ? `${item}[${innerIdx}]` : item, `${sel}.selection`, mapColumnValue, false, parseJsonIfString, true, recursionDepth + 1);
264
+ if (innerCode && !isArray) fn.push(`if(${item} !== null${parseJson ? ` && (${item} = JSON.parse(${item})) !== null` : ""}) {`);
265
+ if (parseJson && (isArray || !innerCode)) fn.push(`${item} = JSON.parse(${item});`);
266
+ if (parseJsonIfString && !parseJson) fn.push(`if(typeof ${item} === 'string') ${item} = JSON.parse(${item});`);
267
+ if (innerCode) if (isArray) fn.push(`for(let ${innerIdx} = 0; ${innerIdx} < ${item}.length; ++${innerIdx} ) {`, innerCode, `}`);
268
+ else fn.push(innerCode);
269
+ if (innerCode && !isArray) fn.push(`}`);
227
270
  }
228
- const field = selectionItem.field;
229
- const value = mapColumnValue(row[selectionItem.key]);
230
- if (value === null) continue;
271
+ let bypassCodecs = false;
231
272
  let decoder;
232
- if (is(field, Column)) decoder = field;
233
- else if (is(field, SQL)) decoder = field.decoder;
234
- else if (is(field, SQL.Aliased)) decoder = field.sql.decoder;
235
- else if (is(field, Table) || is(field, View)) decoder = noopDecoder;
236
- else decoder = field.getSQL().decoder;
237
- row[selectionItem.key] = "mapFromJsonValue" in decoder ? decoder.mapFromJsonValue(value) : decoder.mapFromDriverValue(value);
273
+ if (is(field, Column)) if (useJsonMappers && field.mapFromJsonValue) {
274
+ bypassCodecs = true;
275
+ decoder = `${sel}.field.mapFromJsonValue`;
276
+ } else decoder = field.mapFromDriverValue.isNoop ? "" : `${sel}.field.mapFromDriverValue`;
277
+ else if (is(field, SQL)) decoder = field.decoder.mapFromDriverValue.isNoop ? "" : `${sel}.field.decoder.mapFromDriverValue`;
278
+ else if (is(field, SQL.Aliased)) decoder = field.sql.decoder.mapFromDriverValue.isNoop ? "" : `${sel}.field.sql.decoder.mapFromDriverValue`;
279
+ else if (is(field, Table) || is(field, View)) decoder = "";
280
+ else decoder = field.getSQL().decoder.mapFromDriverValue.isNoop ? "" : `${sel}.getSQL().decoder.mapFromDriverValue`;
281
+ if (mapColumnValue) fn.push(`${item} = this.mapColumnValue(${item});`);
282
+ let decodedValue = item;
283
+ if (!bypassCodecs && codec) decodedValue = `${sel}.codec(${decodedValue}, ${arrayDimensions})`;
284
+ if (decoder) decodedValue = `${decoder}(${decodedValue})`;
285
+ if (!bypassCodecs && codec || decoder) fn.push(`if(${item} !== null) {`, `${item} = ${decodedValue};`, "}");
238
286
  }
239
- return row;
287
+ return fn.join("\n");
288
+ }
289
+ function makeJitRqbMapper({ selection, isFirst, parseJson, parseJsonIfString, rootJsonMappers }, mapColumnValue) {
290
+ const fn = [];
291
+ const innerCode = makeJitRqbMapperInner(selection, isFirst ? "rows[0]" : "rows[i]", "this.selection", mapColumnValue, parseJson, parseJsonIfString, rootJsonMappers);
292
+ if (innerCode) if (isFirst) fn.push(`if(!rows[0]) return undefined;`, innerCode);
293
+ else fn.push(`for(let i = 0; i < rows.length; ++i) {`, innerCode, `}`);
294
+ fn.push(`return rows${isFirst ? "[0]" : ""};`, "//# sourceURL=drizzle:jit-relational-query-mapper");
295
+ return new Function("rows", fn.join("\n")).bind({
296
+ selection,
297
+ mapColumnValue
298
+ });
240
299
  }
241
300
  var RelationsBuilderTable = class {
242
301
  static [entityKind] = "RelationsBuilderTable";
@@ -469,5 +528,5 @@ function getTableAsAliasSQL(table) {
469
528
  }
470
529
 
471
530
  //#endregion
472
- export { AggregatedField, Count, Many, One, Relation, RelationsBuilderColumn, RelationsBuilderJunctionColumn, RelationsBuilderTable, RelationsHelperStatic, buildRelations, buildRelationsParts, createRelationsHelper, defineRelations, defineRelationsPart, extractTablesFromSchema, fieldSelectionToSQL, getOrderByOperators, getTableAsAliasSQL, mapRelationalRow, operators, orderByOperators, processRelations, relationExtrasToSQL, relationToSQL, relationsFilterToSQL, relationsOrderToSQL };
531
+ export { AggregatedField, Count, Many, One, Relation, RelationsBuilderColumn, RelationsBuilderJunctionColumn, RelationsBuilderTable, RelationsHelperStatic, buildRelations, buildRelationsParts, createRelationsHelper, defineRelations, defineRelationsPart, extractTablesFromSchema, fieldSelectionToSQL, getOrderByOperators, getTableAsAliasSQL, makeDefaultRqbMapper, makeJitRqbMapper, mapRelationalRow, operators, orderByOperators, processRelations, relationExtrasToSQL, relationToSQL, relationsFilterToSQL, relationsOrderToSQL };
473
532
  //# sourceMappingURL=relations.js.map
package/relations.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"relations.js","names":[],"sources":["../src/relations.ts"],"sourcesContent":["import { IsAlias, OriginalName, Table, TableColumns, TableSchema } from '~/table.ts';\nimport { aliasedTable } from './alias.ts';\nimport type { CasingCache } from './casing.ts';\nimport { type AnyColumn, Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { DrizzleError } from './errors.ts';\nimport {\n\tand,\n\tarrayContained,\n\tarrayContains,\n\tarrayOverlaps,\n\tasc,\n\tbetween,\n\tdesc,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tisNotNull,\n\tisNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotIlike,\n\tnotInArray,\n\tnotLike,\n\tor,\n} from './sql/expressions/index.ts';\nimport { type CommentInput, noopDecoder, Placeholder, SQL, sql, type SQLWrapper, View } from './sql/sql.ts';\nimport type { Assume, DrizzleTypeError, Equal, Simplify, ValueOrArray } from './utils.ts';\n\nexport type FilteredSchemaEntry = Table<any> | View<string, boolean, FieldSelection>;\n\nexport type SchemaEntry = Table<any> | View<string, boolean, any>;\n\nexport type Schema = Record<string, SchemaEntry>;\n\nexport type GetTableViewColumns<T extends SchemaEntry> = T extends View<string, boolean, any> ? T['_']['selectedFields']\n\t: T extends Table<any> ? T['_']['columns']\n\t: never;\n\nexport type GetTableViewFieldSelection<T extends SchemaEntry> = T extends View<string, boolean, FieldSelection>\n\t? T['_']['selectedFields']\n\t: T extends Table<any> ? T['_']['columns']\n\t: never;\n\nexport type FieldValue =\n\t| Column<any>\n\t| SQLWrapper\n\t| SQL.Aliased\n\t| SQL;\n\nexport type FieldSelection = Record<string, FieldValue>;\n\nexport function processRelations(tablesConfig: TablesRelationalConfig, tables: Schema) {\n\tfor (const tableConfig of Object.values(tablesConfig)) {\n\t\tfor (const [relationFieldName, relation] of Object.entries(tableConfig.relations)) {\n\t\t\tif (!is(relation, Relation)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trelation.sourceTable = tableConfig.table;\n\t\t\trelation.fieldName = relationFieldName;\n\t\t}\n\t}\n\n\tfor (const [sourceTableName, tableConfig] of Object.entries(tablesConfig)) {\n\t\tfor (const [relationFieldName, relation] of Object.entries(tableConfig.relations)) {\n\t\t\tif (!is(relation, Relation)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet reverseRelation: Relation | undefined;\n\t\t\tconst {\n\t\t\t\ttargetTableName,\n\t\t\t\talias,\n\t\t\t\tsourceColumns,\n\t\t\t\ttargetColumns,\n\t\t\t\tthroughTable,\n\t\t\t\tsourceTable,\n\t\t\t\tthrough,\n\t\t\t\twhere,\n\t\t\t\tsourceColumnTableNames,\n\t\t\t\ttargetColumnTableNames,\n\t\t\t} = relation;\n\t\t\tconst relationPrintName = `relations -> ${tableConfig.name}: { ${relationFieldName}: r.${\n\t\t\t\tis(relation, One) ? 'one' : 'many'\n\t\t\t}.${targetTableName}(...) }`;\n\n\t\t\tif (relationFieldName in tableConfig.table[TableColumns]) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${relationPrintName}: relation name collides with column \"${relationFieldName}\" of table \"${tableConfig.name}\"`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (typeof alias === 'string' && !alias) {\n\t\t\t\tthrow new Error(`${relationPrintName}: \"alias\" cannot be an empty string - omit it if you don't need it`);\n\t\t\t}\n\n\t\t\tif (sourceColumns?.length === 0) {\n\t\t\t\tthrow new Error(`${relationPrintName}: \"from\" cannot be empty`);\n\t\t\t}\n\n\t\t\tif (targetColumns?.length === 0) {\n\t\t\t\tthrow new Error(`${relationPrintName}: \"to\" cannot be empty`);\n\t\t\t}\n\n\t\t\tif (sourceColumns && targetColumns) {\n\t\t\t\tif (sourceColumns.length !== targetColumns.length && !throughTable) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${relationPrintName}: \"from\" and \"to\" fields without \"through\" must have the same length`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tfor (const sName of sourceColumnTableNames) {\n\t\t\t\t\tif (sName !== sourceTableName) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`${relationPrintName}: all \"from\" columns must belong to table \"${sourceTableName}\", found column of table \"${sName}\"`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const tName of targetColumnTableNames) {\n\t\t\t\t\tif (tName !== targetTableName) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`${relationPrintName}: all \"to\" columns must belong to table \"${targetTableName}\", found column of table \"${tName}\"`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (through) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthrough.source.length !== sourceColumns.length\n\t\t\t\t\t\t|| through.target.length !== targetColumns.length\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`${relationPrintName}: \".through(column)\" must be used either on all columns in \"from\" and \"to\" or not defined on any of them`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const column of through.source) {\n\t\t\t\t\t\tif (tables[column._.tableName] !== throughTable) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`${relationPrintName}: \".through(column)\" must be used on the same table by all columns of the relation`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const column of through.target) {\n\t\t\t\t\t\tif (tables[column._.tableName] !== throughTable) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`${relationPrintName}: \".through(column)\" must be used on the same table by all columns of the relation`,\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}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (sourceColumns || targetColumns) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${relationPrintName}: relation must have either both \"from\" and \"to\" defined, or none of them`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst reverseTableConfig = tablesConfig[targetTableName];\n\t\t\tif (!reverseTableConfig) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${relationPrintName}: not enough data provided to build the relation - \"from\"/\"to\" are not defined, and no reverse relations of table \"${targetTableName}\" were found\"`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (alias) {\n\t\t\t\tconst reverseRelations = Object.values(reverseTableConfig.relations).filter((it): it is Relation =>\n\t\t\t\t\tis(it, Relation) && it.alias === alias && it !== relation\n\t\t\t\t);\n\t\t\t\tif (reverseRelations.length > 1) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${relationPrintName}: not enough data provided to build the relation - \"from\"/\"to\" are not defined, and multiple relations with alias \"${alias}\" found in table \"${targetTableName}\": ${\n\t\t\t\t\t\t\treverseRelations.map((it) => `\"${it.fieldName}\"`).join(', ')\n\t\t\t\t\t\t}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treverseRelation = reverseRelations[0];\n\t\t\t\tif (!reverseRelation) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${relationPrintName}: not enough data provided to build the relation - \"from\"/\"to\" are not defined, and there is no reverse relation of table \"${targetTableName}\" with alias \"${alias}\"`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst reverseRelations = Object.values(reverseTableConfig.relations).filter((it): it is Relation =>\n\t\t\t\t\tis(it, Relation) && it.targetTable === sourceTable && !it.alias && it !== relation\n\t\t\t\t);\n\t\t\t\tif (reverseRelations.length > 1) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${relationPrintName}: not enough data provided to build the relation - \"from\"/\"to\" are not defined, and multiple relations between \"${targetTableName}\" and \"${sourceTableName}\" were found.\\nHint: you can specify \"alias\" on both sides of the relation with the same value`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treverseRelation = reverseRelations[0];\n\t\t\t\tif (!reverseRelation) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${relationPrintName}: not enough data provided to build the relation - \"from\"/\"to\" are not defined, and no reverse relation of table \"${targetTableName}\" with target table \"${sourceTableName}\" was found`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!reverseRelation.sourceColumns || !reverseRelation.targetColumns) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${relationPrintName}: not enough data provided to build the relation - \"from\"/\"to\" are not defined, and reverse relation \"${targetTableName}.${reverseRelation.fieldName}\" does not have \"from\"/\"to\" defined`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\trelation.sourceColumns = reverseRelation.targetColumns;\n\t\t\trelation.targetColumns = reverseRelation.sourceColumns;\n\t\t\trelation.through = reverseRelation.through\n\t\t\t\t? {\n\t\t\t\t\tsource: reverseRelation.through.target,\n\t\t\t\t\ttarget: reverseRelation.through.source,\n\t\t\t\t}\n\t\t\t\t: undefined;\n\t\t\trelation.throughTable = reverseRelation.throughTable;\n\t\t\trelation.isReversed = !where;\n\t\t\trelation.where = where ?? reverseRelation.where;\n\t\t}\n\t}\n\n\treturn tablesConfig;\n}\n\n/** Builds relational config for every table in schema */\nexport function buildRelations<TTables extends Schema, TConfig extends AnyRelationsBuilderConfig>(\n\ttables: TTables,\n\tconfig: TConfig,\n): ExtractTablesWithRelations<TConfig, TTables> {\n\tconst tablesConfig = {} as TablesRelationalConfig;\n\n\tfor (const [tsName, table] of Object.entries(tables)) {\n\t\ttablesConfig[tsName] = {\n\t\t\ttable,\n\t\t\tname: tsName,\n\t\t\trelations: config[tsName] ?? {},\n\t\t};\n\t}\n\n\treturn processRelations(tablesConfig, tables) as any;\n}\n\n/** Builds relational config only for tables present in relational config */\nexport function buildRelationsParts<TTables extends Schema, TConfig extends AnyRelationsBuilderConfig>(\n\ttables: TTables,\n\tconfig: TConfig,\n): ExtractTablesWithRelationsParts<TConfig, TTables> {\n\tconst tablesConfig = {} as TablesRelationalConfig;\n\n\tfor (const [tsName, relations] of Object.entries(config)) {\n\t\tif (!relations || !tables[tsName]) continue;\n\t\ttablesConfig[tsName] = {\n\t\t\ttable: tables[tsName],\n\t\t\tname: tsName,\n\t\t\trelations,\n\t\t};\n\t}\n\n\treturn processRelations(tablesConfig, tables) as any;\n}\n\nexport type RelationsRecord = Record<string, AnyRelation>;\nexport type EmptyRelations = {};\nexport type AnyRelations = TablesRelationalConfig;\n\nexport abstract class Relation<\n\tTTargetTableName extends string = string,\n> {\n\tstatic readonly [entityKind]: string = 'RelationV2';\n\tdeclare readonly $brand: 'RelationV2';\n\tdeclare public readonly relationType: 'many' | 'one';\n\n\tfieldName!: string;\n\tsourceColumns!: Column<any>[];\n\ttargetColumns!: Column<any>[];\n\talias: string | undefined;\n\twhere: AnyTableFilter | undefined;\n\tsourceTable!: SchemaEntry;\n\ttargetTable: SchemaEntry;\n\tthrough?: {\n\t\tsource: RelationsBuilderColumnBase[];\n\t\ttarget: RelationsBuilderColumnBase[];\n\t};\n\tthroughTable?: SchemaEntry;\n\tisReversed?: boolean;\n\n\t/** @internal */\n\tsourceColumnTableNames: string[] = [];\n\t/** @internal */\n\ttargetColumnTableNames: string[] = [];\n\n\tconstructor(\n\t\ttargetTable: SchemaEntry,\n\t\treadonly targetTableName: TTargetTableName,\n\t) {\n\t\tthis.targetTable = targetTable;\n\t}\n}\n\nexport type AnyRelation = Relation<string>;\n\nexport class One<\n\tTTargetTableName extends string,\n\tTOptional extends boolean = boolean,\n> extends Relation<TTargetTableName> {\n\tstatic override readonly [entityKind]: string = 'OneV2';\n\tdeclare protected $relationBrand: 'OneV2';\n\n\tpublic override readonly relationType = 'one' as const;\n\n\treadonly optional: TOptional;\n\n\tconstructor(\n\t\ttables: Schema,\n\t\ttargetTable: SchemaEntry,\n\t\ttargetTableName: TTargetTableName,\n\t\tconfig: AnyOneConfig | undefined,\n\t) {\n\t\tsuper(targetTable, targetTableName);\n\t\tthis.alias = config?.alias;\n\t\tthis.where = config?.where;\n\t\tif (config?.from) {\n\t\t\tthis.sourceColumns = ((Array.isArray(config.from)\n\t\t\t\t? config.from\n\t\t\t\t: [config.from]) as RelationsBuilderColumnBase[]).map((it: RelationsBuilderColumnBase) => {\n\t\t\t\t\tthis.throughTable ??= it._.through ? tables[it._.through._.tableName]! as SchemaEntry : undefined;\n\t\t\t\t\tthis.sourceColumnTableNames.push(it._.tableName);\n\t\t\t\t\treturn it._.column as Column;\n\t\t\t\t});\n\t\t}\n\t\tif (config?.to) {\n\t\t\tthis.targetColumns = (Array.isArray(config.to)\n\t\t\t\t? config.to\n\t\t\t\t: [config.to]).map((it: RelationsBuilderColumnBase) => {\n\t\t\t\t\tthis.throughTable ??= it._.through ? tables[it._.through._.tableName]! as SchemaEntry : undefined;\n\t\t\t\t\tthis.targetColumnTableNames.push(it._.tableName);\n\t\t\t\t\treturn it._.column as Column;\n\t\t\t\t});\n\t\t}\n\n\t\tif (this.throughTable) {\n\t\t\tthis.through = {\n\t\t\t\tsource: (Array.isArray(config?.from) ? config.from : config?.from ? [config.from] : []).map((\n\t\t\t\t\tc,\n\t\t\t\t) => c._.through!),\n\t\t\t\ttarget: (Array.isArray(config?.to) ? config.to : config?.to ? [config.to] : []).map((c) => c._.through!),\n\t\t\t};\n\t\t}\n\t\tthis.optional = (config?.optional ?? true) as TOptional;\n\t}\n}\n\nexport type AnyOne = One<string, boolean>;\n\nexport class Many<TTargetTableName extends string> extends Relation<TTargetTableName> {\n\tstatic override readonly [entityKind]: string = 'ManyV2';\n\tdeclare protected $relationBrand: 'ManyV2';\n\n\tpublic override readonly relationType = 'many' as const;\n\n\tconstructor(\n\t\ttables: Schema,\n\t\ttargetTable: SchemaEntry,\n\t\ttargetTableName: TTargetTableName,\n\t\treadonly config: AnyManyConfig | undefined,\n\t) {\n\t\tsuper(targetTable, targetTableName);\n\t\tthis.alias = config?.alias;\n\t\tthis.where = config?.where;\n\t\tif (config?.from) {\n\t\t\tthis.sourceColumns = ((Array.isArray(config.from)\n\t\t\t\t? config.from\n\t\t\t\t: [config.from]) as RelationsBuilderColumnBase[]).map((it: RelationsBuilderColumnBase) => {\n\t\t\t\t\tthis.throughTable ??= it._.through ? tables[it._.through._.tableName]! as SchemaEntry : undefined;\n\t\t\t\t\tthis.sourceColumnTableNames.push(it._.tableName);\n\t\t\t\t\treturn it._.column as Column;\n\t\t\t\t});\n\t\t}\n\t\tif (config?.to) {\n\t\t\tthis.targetColumns = (Array.isArray(config.to)\n\t\t\t\t? config.to\n\t\t\t\t: [config.to]).map((it: RelationsBuilderColumnBase) => {\n\t\t\t\t\tthis.throughTable ??= it._.through ? tables[it._.through._.tableName]! as SchemaEntry : undefined;\n\t\t\t\t\tthis.targetColumnTableNames.push(it._.tableName);\n\t\t\t\t\treturn it._.column as Column;\n\t\t\t\t});\n\t\t}\n\t\tif (this.throughTable) {\n\t\t\tthis.through = {\n\t\t\t\tsource: (Array.isArray(config?.from) ? config.from : config?.from ? [config.from] : []).map((\n\t\t\t\t\tc,\n\t\t\t\t) => c._.through!),\n\t\t\t\ttarget: (Array.isArray(config?.to) ? config.to : config?.to ? [config.to] : []).map((c) => c._.through!),\n\t\t\t};\n\t\t}\n\t}\n}\n\nexport type AnyMany = Many<string>;\n\nexport abstract class AggregatedField<T = unknown> implements SQLWrapper<T> {\n\tstatic readonly [entityKind]: string = 'AggregatedField';\n\n\tdeclare readonly $brand: 'AggregatedField';\n\n\tdeclare readonly _: {\n\t\treadonly data: T;\n\t};\n\n\tprotected table: SchemaEntry | undefined;\n\n\tonTable(table: SchemaEntry) {\n\t\tthis.table = table;\n\n\t\treturn this;\n\t}\n\n\tabstract getSQL(): SQL<T>;\n}\n\nexport class Count extends AggregatedField<number> {\n\tstatic override readonly [entityKind]: string = 'AggregatedFieldCount';\n\n\tdeclare protected $aggregatedFieldBrand: 'Count';\n\n\tprivate query: SQL<number> | undefined;\n\n\tgetSQL(): SQL<number> {\n\t\tif (!this.query) {\n\t\t\tif (!this.table) throw new Error('Table must be set before building aggregate field');\n\t\t\tthis.query = sql`select count(*) as ${sql.identifier('r')} from ${getTableAsAliasSQL(this.table)}`\n\t\t\t\t.mapWith(Number);\n\t\t}\n\n\t\treturn this.query;\n\t}\n}\n\nexport type ExtractObjectValues<T> = T[keyof T];\n\nexport const operators = {\n\tand,\n\tbetween,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tarrayContains,\n\tarrayContained,\n\tarrayOverlaps,\n\tisNull,\n\tisNotNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotLike,\n\tnotIlike,\n\tnotInArray,\n\tor,\n\tsql,\n};\n\nexport type Operators = typeof operators;\n\nexport const orderByOperators = {\n\tsql,\n\tasc,\n\tdesc,\n};\n\nexport type OrderByOperators = typeof orderByOperators;\n\nexport function getOrderByOperators(): OrderByOperators {\n\treturn orderByOperators;\n}\n\nexport type FindTargetTableInRelationalConfig<\n\tTConfig extends TablesRelationalConfig,\n\tTRelation extends AnyRelation,\n> = TConfig[TRelation['targetTableName']];\n\nexport interface SQLOperator {\n\tsql: Operators['sql'];\n}\n\nexport type DBQueryConfigColumns<TColumns extends FieldSelection> = {\n\t[K in keyof TColumns]?: boolean | undefined;\n};\n\nexport type DBQueryConfigExtras<TTable extends SchemaEntry> = Record<\n\tstring,\n\t| SQLWrapper\n\t| ((\n\t\ttable: TTable,\n\t\toperators: SQLOperator,\n\t) => SQLWrapper)\n>;\n\nexport type DBQueryConfigOrderByCallback<TTable extends SchemaEntry> = (\n\ttable: TTable,\n\toperators: OrderByOperators,\n) => ValueOrArray<AnyColumn | SQL>;\n\nexport type DBQueryConfigOrderByObject<TColumns extends FieldSelection> = {\n\t[K in keyof TColumns]?: 'asc' | 'desc' | undefined;\n};\n\nexport type DBQueryConfigOrderBy<TTable extends SchemaEntry, TColumns extends FieldSelection> =\n\t| DBQueryConfigOrderByCallback<TTable>\n\t| DBQueryConfigOrderByObject<TColumns>;\n\nexport type DBQueryConfigWith<TSchema extends TablesRelationalConfig, TRelations extends RelationsRecord> = {\n\t[K in keyof TRelations]?:\n\t\t| boolean\n\t\t| (DBQueryConfig<\n\t\t\tTRelations[K]['relationType'],\n\t\t\tTSchema,\n\t\t\tFindTargetTableInRelationalConfig<TSchema, TRelations[K]>\n\t\t>)\n\t\t| undefined;\n};\n\nexport type DBQueryConfig<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> =\n\t& (TTableConfig['relations'] extends Record<string, never> ? {}\n\t\t: {\n\t\t\twith?:\n\t\t\t\t| DBQueryConfigWith<TSchema, TTableConfig['relations']>\n\t\t\t\t| undefined;\n\t\t})\n\t& {\n\t\tcolumns?: DBQueryConfigColumns<GetTableViewFieldSelection<TTableConfig['table']>> | undefined;\n\t\twhere?: RelationsFilter<TTableConfig, TSchema> | undefined;\n\t\textras?:\n\t\t\t| DBQueryConfigExtras<TTableConfig['table']>\n\t\t\t| undefined;\n\t\torderBy?:\n\t\t\t| DBQueryConfigOrderBy<TTableConfig['table'], GetTableViewFieldSelection<TTableConfig['table']>>\n\t\t\t| undefined;\n\t\toffset?: number | Placeholder | undefined;\n\t}\n\t& (TRelationType extends 'many' ? {\n\t\t\tlimit?: number | Placeholder | undefined;\n\t\t}\n\t\t: {});\n\nexport type DBQueryConfigWithComment<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> =\n\t& (TTableConfig['relations'] extends Record<string, never> ? {}\n\t\t: {\n\t\t\twith?:\n\t\t\t\t| DBQueryConfigWith<TSchema, TTableConfig['relations']>\n\t\t\t\t| undefined;\n\t\t})\n\t& {\n\t\tcolumns?: DBQueryConfigColumns<GetTableViewFieldSelection<TTableConfig['table']>> | undefined;\n\t\twhere?: RelationsFilter<TTableConfig, TSchema> | undefined;\n\t\textras?:\n\t\t\t| DBQueryConfigExtras<TTableConfig['table']>\n\t\t\t| undefined;\n\t\torderBy?:\n\t\t\t| DBQueryConfigOrderBy<TTableConfig['table'], GetTableViewFieldSelection<TTableConfig['table']>>\n\t\t\t| undefined;\n\t\toffset?: number | Placeholder | undefined;\n\t\t/**\n\t\t * Attach [sqlcommenter](https://google.github.io/sqlcommenter) comment to a query\n\t\t */\n\t\tcomment?: CommentInput | undefined;\n\t}\n\t& (TRelationType extends 'many' ? {\n\t\t\tlimit?: number | Placeholder | undefined;\n\t\t}\n\t\t: {});\n\nexport type AnyDBQueryConfig = {\n\tcolumns?:\n\t\t| DBQueryConfigColumns<GetTableViewFieldSelection<TableRelationalConfig['table']>>\n\t\t| undefined;\n\twhere?: RelationsFilter<TableRelationalConfig, TablesRelationalConfig> | undefined;\n\textras?:\n\t\t| DBQueryConfigExtras<TableRelationalConfig['table']>\n\t\t| undefined;\n\twith?:\n\t\t| Record<string, AnyDBQueryConfig>\n\t\t| undefined;\n\torderBy?:\n\t\t| DBQueryConfigOrderBy<TableRelationalConfig['table'], GetTableViewFieldSelection<TableRelationalConfig['table']>>\n\t\t| undefined;\n\toffset?: number | Placeholder | undefined;\n\tlimit?: number | Placeholder | undefined;\n\tcomment?: CommentInput | undefined;\n};\n\nexport interface TableRelationalConfig {\n\ttable: SchemaEntry;\n\tname: string;\n\trelations: RelationsRecord;\n}\n\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\nexport type ExtractTablesWithRelations<\n\tTConfig extends AnyRelationsBuilderConfig,\n\tTTables extends Schema,\n> = {\n\t[K in keyof TTables]: {\n\t\ttable: TTables[K];\n\t\tname: K & string;\n\t\trelations: TConfig extends { [CK in K]: Record<string, any> } ? TConfig[K] : {};\n\t};\n};\n\nexport type ExtractTablesWithRelationsParts<\n\tTConfig extends AnyRelationsBuilderConfig,\n\tTTables extends Schema,\n> = {\n\t[K in NonUndefinedKeysOnly<TConfig> & keyof TTables]: {\n\t\ttable: TTables[K & string];\n\t\tname: K & string;\n\t\trelations: TConfig[K] extends Record<string, any> ? TConfig[K] : {};\n\t};\n};\n\nexport type ReturnTypeOrValue<T> = T extends (...args: any[]) => infer R ? R\n\t: T;\n\nexport type RelationResultKind<TResult, TInclude, TRelation extends AnyRelation> = TRelation extends AnyOne ? (\n\t\t| TResult\n\t\t| (Equal<TRelation['optional'], true> extends true ? null\n\t\t\t: TInclude extends Record<string, unknown> ? TInclude['where'] extends Record<string, any> ? null\n\t\t\t\t: never\n\t\t\t: never)\n\t)\n\t: TResult[];\n\nexport type BuildRelationResult<\n\tTConfig extends TablesRelationalConfig,\n\tTInclude,\n\tTRelations extends RelationsRecord,\n> = {\n\t[\n\t\tK in\n\t\t\t& TruthyKeysOnly<TInclude>\n\t\t\t& keyof TRelations\n\t]: TRelations[K] extends infer TRel extends AnyRelation ? RelationResultKind<\n\t\t\tBuildQueryResult<\n\t\t\t\tTConfig,\n\t\t\t\tFindTargetTableInRelationalConfig<TConfig, TRel>,\n\t\t\t\tAssume<TInclude[K], true | Record<string, unknown>>\n\t\t\t>,\n\t\t\tTInclude[K],\n\t\t\tTRel\n\t\t>\n\t\t: TRelations[K] extends AggregatedField<infer TData> ? TData\n\t\t: never;\n};\n\nexport type NonUndefinedKeysOnly<T> = {\n\t[K in keyof T]: T[K] extends undefined ? never : K;\n}[keyof T];\n\nexport type TruthyKeysOnly<T> = {\n\t[K in keyof T]: T[K] extends undefined | false ? never : K;\n}[keyof T];\n\nexport type InferRelationalQueryTableResult<\n\tTRawSelection extends Record<string, unknown>,\n\tTSelectedFields extends Record<string, unknown> | 'Full' = 'Full',\n> = TSelectedFields extends 'Full' ? TRawSelection : {\n\t[\n\t\tK in Equal<\n\t\t\tExclude<\n\t\t\t\tTSelectedFields[\n\t\t\t\t\t& keyof TSelectedFields\n\t\t\t\t\t& keyof TRawSelection\n\t\t\t\t],\n\t\t\t\tundefined\n\t\t\t>,\n\t\t\tfalse\n\t\t> extends true ? Exclude<\n\t\t\t\tkeyof TRawSelection,\n\t\t\t\tNonUndefinedKeysOnly<TSelectedFields>\n\t\t\t>\n\t\t\t:\n\t\t\t\t& {\n\t\t\t\t\t[K in keyof TSelectedFields]: Equal<\n\t\t\t\t\t\tTSelectedFields[K],\n\t\t\t\t\t\ttrue\n\t\t\t\t\t> extends true ? K\n\t\t\t\t\t\t: never;\n\t\t\t\t}[keyof TSelectedFields]\n\t\t\t\t& keyof TRawSelection\n\t]: TRawSelection[K];\n};\n\nexport type BuildQueryResult<\n\tTSchema extends TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig,\n\tTFullSelection extends true | Record<string, unknown>,\n\tTModel extends Record<string, unknown> = Assume<\n\t\tTTableConfig['table'],\n\t\t{ $inferSelect: Record<string, unknown> }\n\t>['$inferSelect'],\n> = TFullSelection extends true | Record<string, never> ? TModel\n\t: TFullSelection extends Record<string, unknown> ? Simplify<\n\t\t\t& (InferRelationalQueryTableResult<\n\t\t\t\tTModel,\n\t\t\t\tTFullSelection['columns'] extends Record<string, unknown> ? TFullSelection['columns'] : 'Full'\n\t\t\t>)\n\t\t\t& (TFullSelection['extras'] extends Record<string, SQLWrapper | ((...args: any[]) => SQLWrapper)> ? {\n\t\t\t\t\t[\n\t\t\t\t\t\tK in NonUndefinedKeysOnly<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>\n\t\t\t\t\t\t>\n\t\t\t\t\t]: ReturnType<\n\t\t\t\t\t\tAssume<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras'][K & string]>,\n\t\t\t\t\t\t\tSQLWrapper\n\t\t\t\t\t\t>['getSQL']\n\t\t\t\t\t>['_']['type'];\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t\t& (TFullSelection['with'] extends Record<string, unknown> ? BuildRelationResult<\n\t\t\t\t\tTSchema,\n\t\t\t\t\tTFullSelection['with'],\n\t\t\t\t\tTTableConfig['relations']\n\t\t\t\t>\n\t\t\t\t: {})\n\t\t>\n\t: never;\n\nexport interface BuildRelationalQueryResult {\n\tselection: {\n\t\tkey: string;\n\t\tfield: Column<any> | Table | View | SQL | SQL.Aliased | SQLWrapper | AggregatedField;\n\t\tisArray?: boolean;\n\t\tselection?: BuildRelationalQueryResult['selection'];\n\t\tisOptional?: boolean;\n\t}[];\n\tsql: SQL;\n}\n\nexport function mapRelationalRow(\n\trow: Record<string, unknown>,\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue: (value: unknown) => unknown = (value) => value,\n\t/** Needed for SQLite as it returns JSON values as strings */\n\tparseJson: boolean = false,\n\t/** Needed for SingleStore as it returns JSON arrays as strings */\n\tparseJsonIfString: boolean = false,\n\tpath?: string,\n): Record<string, unknown> {\n\tfor (const selectionItem of buildQueryResultSelection) {\n\t\tif (selectionItem.selection) {\n\t\t\tconst currentPath = `${path ? `${path}.` : ''}${selectionItem.key}`;\n\n\t\t\tif (row[selectionItem.key] === null) continue;\n\n\t\t\tif (parseJson) {\n\t\t\t\trow[selectionItem.key] = JSON.parse(row[selectionItem.key] as string);\n\t\t\t\tif (row[selectionItem.key] === null) continue;\n\t\t\t}\n\t\t\tif (parseJsonIfString && typeof row[selectionItem.key] === 'string') {\n\t\t\t\trow[selectionItem.key] = JSON.parse(row[selectionItem.key] as string);\n\t\t\t}\n\n\t\t\tif (selectionItem.isArray) {\n\t\t\t\tfor (const item of (row[selectionItem.key] as Array<Record<string, unknown>>)) {\n\t\t\t\t\tmapRelationalRow(\n\t\t\t\t\t\titem,\n\t\t\t\t\t\tselectionItem.selection!,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tparseJsonIfString,\n\t\t\t\t\t\tcurrentPath,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmapRelationalRow(\n\t\t\t\trow[selectionItem.key] as Record<string, unknown>,\n\t\t\t\tselectionItem.selection!,\n\t\t\t\tmapColumnValue,\n\t\t\t\tfalse,\n\t\t\t\tparseJsonIfString,\n\t\t\t\tcurrentPath,\n\t\t\t);\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst field = selectionItem.field!;\n\t\tconst value = mapColumnValue(row[selectionItem.key]);\n\t\tif (value === null) continue;\n\n\t\tlet decoder;\n\t\tif (is(field, Column)) {\n\t\t\tdecoder = field;\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoder = field.decoder;\n\t\t} else if (is(field, SQL.Aliased)) {\n\t\t\tdecoder = field.sql.decoder;\n\t\t} else if (is(field, Table) || is(field, View)) {\n\t\t\tdecoder = noopDecoder;\n\t\t} else {\n\t\t\tdecoder = field.getSQL().decoder;\n\t\t}\n\n\t\trow[selectionItem.key] = 'mapFromJsonValue' in decoder\n\t\t\t? (<(value: unknown) => unknown> decoder.mapFromJsonValue)(value)\n\t\t\t: decoder.mapFromDriverValue(value);\n\t}\n\n\treturn row;\n}\n\nexport class RelationsBuilderTable<TTableName extends string = string> {\n\tstatic readonly [entityKind]: string = 'RelationsBuilderTable';\n\n\tprotected readonly _: {\n\t\treadonly name: TTableName;\n\t\treadonly table: SchemaEntry;\n\t};\n\n\tconstructor(table: SchemaEntry, name: TTableName) {\n\t\tthis._ = {\n\t\t\tname,\n\t\t\ttable,\n\t\t};\n\t}\n}\n\nexport interface RelationsBuilderColumnConfig<\n\tTTableName extends string = string,\n> {\n\treadonly tableName: TTableName;\n\treadonly column: FieldValue;\n\treadonly through?: RelationsBuilderColumnBase;\n\treadonly key: string;\n}\n\nexport interface RelationsBuilderColumnBase<\n\tTTableName extends string = string,\n> {\n\t_: RelationsBuilderColumnConfig<TTableName>;\n}\n\nexport class RelationsBuilderColumn<\n\tTTableName extends string = string,\n> implements RelationsBuilderColumnBase<TTableName> {\n\tstatic readonly [entityKind]: string = 'RelationsBuilderColumn';\n\n\treadonly _: {\n\t\treadonly tableName: TTableName;\n\t\treadonly column: FieldValue;\n\t\treadonly key: string;\n\t};\n\n\tconstructor(\n\t\tcolumn: FieldValue,\n\t\ttableName: TTableName,\n\t\tkey: string,\n\t) {\n\t\tthis._ = {\n\t\t\ttableName: tableName,\n\t\t\tcolumn,\n\t\t\tkey,\n\t\t};\n\t}\n\n\tthrough(column: RelationsBuilderColumn): RelationsBuilderJunctionColumn<TTableName> {\n\t\treturn new RelationsBuilderJunctionColumn(\n\t\t\tthis._.column,\n\t\t\tthis._.tableName,\n\t\t\tthis._.key,\n\t\t\tcolumn,\n\t\t);\n\t}\n}\n\nexport class RelationsBuilderJunctionColumn<\n\tTTableName extends string = string,\n> implements RelationsBuilderColumnBase<TTableName> {\n\tstatic readonly [entityKind]: string = 'RelationsBuilderColumn';\n\n\treadonly _: {\n\t\treadonly tableName: TTableName;\n\t\treadonly column: FieldValue;\n\t\treadonly through: RelationsBuilderColumnBase;\n\t\treadonly key: string;\n\t};\n\n\tconstructor(\n\t\tcolumn: FieldValue,\n\t\ttableName: TTableName,\n\t\tkey: string,\n\t\tthrough: RelationsBuilderColumnBase,\n\t) {\n\t\tthis._ = {\n\t\t\ttableName: tableName,\n\t\t\tcolumn,\n\t\t\tthrough,\n\t\t\tkey,\n\t\t};\n\t}\n}\n\nexport interface RelationFieldsFilterInternals<T> {\n\teq?: T | Placeholder | undefined;\n\tne?: T | Placeholder | undefined;\n\tgt?: T | Placeholder | undefined;\n\tgte?: T | Placeholder | undefined;\n\tlt?: T | Placeholder | undefined;\n\tlte?: T | Placeholder | undefined;\n\tin?: (T | Placeholder)[] | Placeholder | undefined;\n\tnotIn?: (T | Placeholder)[] | Placeholder | undefined;\n\tarrayContains?: (T extends Array<infer E> ? (E | Placeholder)[] : (T | Placeholder)[]) | Placeholder | undefined;\n\tarrayContained?: (T extends Array<infer E> ? (E | Placeholder)[] : (T | Placeholder)[]) | Placeholder | undefined;\n\tarrayOverlaps?: (T extends Array<infer E> ? (E | Placeholder)[] : (T | Placeholder)[]) | Placeholder | undefined;\n\tlike?: string | Placeholder | undefined;\n\tilike?: string | Placeholder | undefined;\n\tnotLike?: string | Placeholder | undefined;\n\tnotIlike?: string | Placeholder | undefined;\n\tisNull?: true | undefined;\n\tisNotNull?: true | undefined;\n\tNOT?: RelationsFieldFilter<T> | undefined;\n\tOR?: RelationsFieldFilter<T>[] | undefined;\n\tAND?: RelationsFieldFilter<T>[] | undefined;\n}\n\nexport type RelationsFieldFilter<T = unknown> =\n\t| RelationFieldsFilterInternals<T>\n\t| (\n\t\tunknown extends T ? never : T extends object ? never : T\n\t)\n\t// Bleeds into filters - discuss removal\n\t| Placeholder;\n\nexport interface RelationsFilterCommons<\n\tTTable extends TableRelationalConfig = TableRelationalConfig,\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n> {\n\tOR?: RelationsFilter<TTable, TSchema>[] | undefined;\n\tNOT?: RelationsFilter<TTable, TSchema> | undefined;\n\tAND?: RelationsFilter<TTable, TSchema>[] | undefined;\n\tRAW?:\n\t\t| SQLWrapper\n\t\t| ((\n\t\t\ttable: TTable['table'],\n\t\t\toperators: Operators,\n\t\t) => SQL)\n\t\t| undefined;\n}\n\nexport type RelationsFilterColumns<\n\tTColumns extends Record<string, unknown>,\n> = {\n\t[K in keyof TColumns]?:\n\t\t| (TColumns[K] extends { _: { data: infer Data } } ? RelationsFieldFilter<Data>\n\t\t\t: RelationsFieldFilter<unknown>)\n\t\t| undefined;\n};\n\nexport type RelationsFilterRelations<\n\tTTable extends TableRelationalConfig,\n\tTSchema extends TablesRelationalConfig,\n\tTRelations extends RelationsRecord = TTable['relations'],\n> = {\n\t[K in keyof TRelations]?:\n\t\t| boolean\n\t\t| RelationsFilter<FindTargetTableInRelationalConfig<TSchema, TRelations[K]>, TSchema>\n\t\t| undefined;\n};\n\nexport type RelationsFilter<\n\tTTable extends TableRelationalConfig,\n\tTSchema extends TablesRelationalConfig,\n\tTColumns extends FieldSelection = GetTableViewFieldSelection<TTable['table']>,\n> = TTable['relations'] extends Record<string, never> ? TableFilter<TTable['table']>\n\t:\n\t\t& RelationsFilterColumns<TColumns>\n\t\t& RelationsFilterRelations<TTable, TSchema>\n\t\t& RelationsFilterCommons<TTable, TSchema>;\n\nexport interface TableFilterCommons<\n\tTTable extends SchemaEntry = SchemaEntry,\n\tTColumns extends Record<string, unknown> = GetTableViewColumns<TTable>,\n> {\n\tOR?: TableFilter<TTable, TColumns>[] | undefined;\n\tNOT?: TableFilter<TTable, TColumns> | undefined;\n\tAND?: TableFilter<TTable, TColumns>[] | undefined;\n\tRAW?:\n\t\t| SQLWrapper\n\t\t| ((\n\t\t\ttable: TTable,\n\t\t\toperators: Operators,\n\t\t) => SQL)\n\t\t| undefined;\n}\n\nexport type TableFilterColumns<\n\tTColumns extends Record<string, unknown>,\n> = {\n\t[K in keyof TColumns]?:\n\t\t| (TColumns[K] extends { _: { data: infer Data } } ? RelationsFieldFilter<Data>\n\t\t\t: RelationsFieldFilter<unknown>)\n\t\t| undefined;\n};\n\nexport type TableFilter<\n\tTTable extends SchemaEntry = SchemaEntry,\n\tTColumns extends Record<string, unknown> = GetTableViewColumns<TTable>,\n> =\n\t& TableFilterColumns<TColumns>\n\t& TableFilterCommons<TTable, TColumns>;\n\nexport type AnyRelationsFilter = RelationsFilter<\n\tTableRelationalConfig,\n\tTablesRelationalConfig,\n\tFieldSelection\n>;\n\nexport type AnyTableFilter = TableFilter<\n\tSchemaEntry,\n\tFieldSelection\n>;\n\nexport interface OneConfig<TTargetTable extends SchemaEntry, TOptional extends boolean> {\n\tfrom?: RelationsBuilderColumnBase | [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]];\n\tto?: RelationsBuilderColumnBase | [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]];\n\twhere?: TableFilter<TTargetTable>;\n\toptional?: TOptional;\n\talias?: string;\n}\n\nexport type AnyOneConfig = OneConfig<\n\tSchemaEntry,\n\tboolean\n>;\n\nexport interface ManyConfig<TTargetTable extends SchemaEntry> {\n\tfrom?: RelationsBuilderColumnBase | [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]];\n\tto?: RelationsBuilderColumnBase | [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]];\n\twhere?: TableFilter<TTargetTable>;\n\talias?: string;\n}\n\nexport type AnyManyConfig = ManyConfig<SchemaEntry>;\n\nexport interface OneFn<TTargetTable extends SchemaEntry, TTargetTableName extends string> {\n\t<TOptional extends boolean = true>(config?: OneConfig<TTargetTable, TOptional>): One<TTargetTableName, TOptional>;\n}\n\nexport interface ManyFn<TTargetTable extends SchemaEntry, TTargetTableName extends string> {\n\t(config?: ManyConfig<TTargetTable>): Many<TTargetTableName>;\n}\n\nexport class RelationsHelperStatic<TTables extends Schema> {\n\tstatic readonly [entityKind]: string = 'RelationsHelperStatic';\n\t// declare readonly $brand: 'RelationsHelperStatic';\n\n\tprivate readonly _: {\n\t\treadonly tables: TTables;\n\t};\n\n\tconstructor(tables: TTables) {\n\t\tthis._ = {\n\t\t\ttables,\n\t\t};\n\n\t\tconst one: Record<string, OneFn<TTables[string], string>> = {};\n\t\tconst many: Record<string, ManyFn<TTables[string], string>> = {};\n\n\t\tfor (const [tableName, table] of Object.entries(tables)) {\n\t\t\tone[tableName] = (config) => {\n\t\t\t\treturn new One(tables, table, tableName, config as unknown as AnyOneConfig);\n\t\t\t};\n\n\t\t\tmany[tableName] = (config) => {\n\t\t\t\treturn new Many(tables, table, tableName, config as AnyManyConfig);\n\t\t\t};\n\t\t}\n\n\t\tthis.one = one as any as this['one'];\n\t\tthis.many = many as any as this['many'];\n\t}\n\n\tone: {\n\t\t[K in keyof TTables]: TTables[K] extends FilteredSchemaEntry ? OneFn<TTables[K], K & string>\n\t\t\t: DrizzleTypeError<'Views with nested selections are not supported by the relational query builder'>;\n\t};\n\n\tmany: {\n\t\t[K in keyof TTables]: TTables[K] extends FilteredSchemaEntry ? ManyFn<TTables[K], K & string>\n\t\t\t: DrizzleTypeError<'Views with nested selections are not supported by the relational query builder'>;\n\t};\n\n\t/** @internal - to be reworked */\n\taggs = {\n\t\tcount(): Count {\n\t\t\treturn new Count();\n\t\t},\n\t};\n}\n\nexport type RelationsBuilderColumns<TTable extends SchemaEntry, TTableName extends string> = {\n\t[\n\t\tTColumnName in keyof GetTableViewColumns<TTable>\n\t]: RelationsBuilderColumn<\n\t\tTTableName\n\t>;\n};\n\nexport type RelationsBuilderTables<TSchema extends Schema> = {\n\t[TTableName in keyof TSchema]: TSchema[TTableName] extends FilteredSchemaEntry ? (\n\t\t\t& RelationsBuilderColumns<TSchema[TTableName], TTableName & string>\n\t\t\t& RelationsBuilderTable<TTableName & string>\n\t\t)\n\t\t: DrizzleTypeError<'Views with nested selections are not supported by the relational query builder'>;\n};\n\nexport type RelationsBuilder<TSchema extends Schema> =\n\t& RelationsBuilderTables<TSchema>\n\t& RelationsHelperStatic<TSchema>;\n\nexport type RelationsBuilderConfigValue =\n\t| RelationsRecord\n\t| undefined;\n\nexport type RelationsBuilderConfig<TTables extends Schema> = {\n\t[TTableName in keyof TTables]?: RelationsBuilderConfigValue;\n};\n\nexport type AnyRelationsBuilderConfig = Record<string, RelationsBuilderConfigValue>;\n\nexport type ExtractTablesFromSchema<TSchema extends Record<string, unknown>> = {\n\t[K in keyof TSchema as TSchema[K] extends SchemaEntry ? K extends string ? K : never : never]: Assume<\n\t\tTSchema[K],\n\t\tSchemaEntry\n\t>;\n};\n\nexport function createRelationsHelper<\n\tTTables extends Schema,\n>(tables: TTables): RelationsBuilder<TTables> {\n\tconst helperStatic = new RelationsHelperStatic(tables);\n\tconst relationsTables = Object.entries(tables).reduce<Record<string, RelationsBuilderTable>>((acc, [tKey, value]) => {\n\t\tconst rTable = new RelationsBuilderTable(value, tKey);\n\t\tconst columns = Object.entries(value[TableColumns]).reduce<\n\t\t\tRecord<string, RelationsBuilderColumnBase>\n\t\t>(\n\t\t\t(acc, [cKey, column]) => {\n\t\t\t\tconst rbColumn = new RelationsBuilderColumn(column as FieldValue, tKey, cKey);\n\t\t\t\tacc[cKey] = rbColumn;\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{},\n\t\t);\n\n\t\tacc[tKey] = Object.assign(rTable, columns);\n\n\t\treturn acc;\n\t}, {});\n\n\treturn Object.assign(helperStatic, relationsTables) as any;\n}\n\nexport function extractTablesFromSchema<TSchema extends Record<string, unknown>>(\n\tschema: TSchema,\n): ExtractTablesFromSchema<TSchema> {\n\treturn Object.fromEntries(\n\t\tObject.entries(schema).filter(([_, e]) => is(e, Table) || is(e, View)),\n\t) as ExtractTablesFromSchema<TSchema>;\n}\n\nexport type IncludeEveryTable<TTables extends Schema> = { [K in keyof TTables]: {} };\n\n/** Builds relational config for every table in schema */\nexport function defineRelations<\n\tTSchema extends Record<string, unknown>,\n\tTTables extends Schema = ExtractTablesFromSchema<TSchema>,\n>(\n\tschema: TSchema,\n): ExtractTablesWithRelations<{}, TTables>;\n/** Builds relational config for every table in schema */\nexport function defineRelations<\n\tTSchema extends Record<string, unknown>,\n\tTConfig extends RelationsBuilderConfig<TTables>,\n\tTTables extends Schema = ExtractTablesFromSchema<TSchema>,\n>(\n\tschema: TSchema,\n\trelations: (helpers: RelationsBuilder<TTables>) => TConfig,\n): ExtractTablesWithRelations<TConfig, TTables>;\nexport function defineRelations(\n\tschema: Record<string, unknown>,\n\trelations?: (helpers: RelationsBuilder<Schema>) => AnyRelationsBuilderConfig,\n): TablesRelationalConfig {\n\tconst tables = extractTablesFromSchema(schema);\n\tconst config = relations\n\t\t? relations(\n\t\t\tcreateRelationsHelper(tables) as RelationsBuilder<Schema>,\n\t\t)\n\t\t: {};\n\n\treturn buildRelations(tables, config);\n}\n\n/** Builds relational config for every table in schema */\nexport function defineRelationsPart<\n\tTSchema extends Record<string, unknown>,\n\tTTables extends Schema = ExtractTablesFromSchema<TSchema>,\n>(\n\tschema: TSchema,\n): ExtractTablesWithRelationsParts<IncludeEveryTable<TTables>, TTables>;\n/** Builds relational config only for tables present in relational config */\nexport function defineRelationsPart<\n\tTSchema extends Record<string, unknown>,\n\tTConfig extends RelationsBuilderConfig<TTables>,\n\tTTables extends Schema = ExtractTablesFromSchema<TSchema>,\n>(\n\tschema: TSchema,\n\trelations: (helpers: RelationsBuilder<TTables>) => TConfig,\n): ExtractTablesWithRelationsParts<TConfig, TTables>;\nexport function defineRelationsPart(\n\tschema: Record<string, unknown>,\n\trelations?: (helpers: RelationsBuilder<Schema>) => AnyRelationsBuilderConfig,\n): TablesRelationalConfig {\n\tconst tables = extractTablesFromSchema(schema);\n\tconst config = relations\n\t\t? relations(\n\t\t\tcreateRelationsHelper(tables) as RelationsBuilder<Schema>,\n\t\t)\n\t\t: Object.fromEntries(Object.keys(tables).map((k) => [k, {}])) as AnyRelationsBuilderConfig;\n\n\treturn buildRelationsParts(tables, config);\n}\n\nexport interface WithContainer {\n\twith?: Record<string, boolean | AnyDBQueryConfig | undefined>;\n}\n\nexport interface ColumnWithTSName {\n\tcolumn: Table | View | Column<any> | SQL | SQLWrapper | SQL.Aliased;\n\ttsName: string;\n}\n\nexport type RelationsOrder<TColumns extends FieldSelection> = {\n\t[K in keyof TColumns]?: 'asc' | 'desc';\n};\n\nexport type OrderBy = Exclude<AnyDBQueryConfig['orderBy'], undefined>;\n\nexport type Extras = Exclude<AnyDBQueryConfig['extras'], undefined>;\n\n/** @internal */\nexport function fieldSelectionToSQL(table: SchemaEntry, target: string) {\n\tconst field = table[TableColumns][target];\n\n\treturn field\n\t\t? is(field, Column)\n\t\t\t? field\n\t\t\t: is(field, SQL.Aliased)\n\t\t\t? sql`${table}.${sql.identifier(field.fieldAlias)}`\n\t\t\t: sql`${table}.${sql.identifier(target)}`\n\t\t: sql`${table}.${sql.identifier(target)}`;\n}\n\nfunction relationsFieldFilterToSQL(column: SQLWrapper, filter: RelationsFieldFilter<unknown>): SQL | undefined {\n\tif (typeof filter !== 'object' || is(filter, Placeholder)) return eq(column, filter);\n\n\tconst entries = Object.entries(filter as RelationFieldsFilterInternals<unknown>);\n\tif (!entries.length) return undefined;\n\n\tconst parts: (SQL)[] = [];\n\tfor (const [target, value] of entries) {\n\t\tif (value === undefined) continue;\n\n\t\tswitch (target as keyof RelationFieldsFilterInternals<unknown>) {\n\t\t\tcase 'NOT': {\n\t\t\t\tconst res = relationsFieldFilterToSQL(column, value as RelationsFieldFilter<unknown>);\n\t\t\t\tif (!res) continue;\n\n\t\t\t\tparts.push(not(res));\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase 'OR': {\n\t\t\t\tif (!(value as RelationsFieldFilter<unknown>[]).length) continue;\n\n\t\t\t\tparts.push(\n\t\t\t\t\tor(\n\t\t\t\t\t\t...(value as AnyRelationsFilter[]).map((subFilter) => relationsFieldFilterToSQL(column, subFilter)),\n\t\t\t\t\t)!,\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase 'AND': {\n\t\t\t\tif (!(value as RelationsFieldFilter<unknown>[]).length) continue;\n\n\t\t\t\tparts.push(\n\t\t\t\t\tand(\n\t\t\t\t\t\t...(value as AnyRelationsFilter[]).map((subFilter) => relationsFieldFilterToSQL(column, subFilter)),\n\t\t\t\t\t)!,\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase 'isNotNull':\n\t\t\tcase 'isNull': {\n\t\t\t\tif (!value) continue;\n\n\t\t\t\tparts.push(operators[target as 'isNull' | 'isNotNull'](column));\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase 'in': {\n\t\t\t\tparts.push(operators.inArray(column, value as any[] | Placeholder));\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase 'notIn': {\n\t\t\t\tparts.push(operators.notInArray(column, value as any[] | Placeholder));\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tparts.push(\n\t\t\t\t\t(operators[target as keyof typeof operators] as ((col: SQLWrapper, data: any) => SQL | undefined))(\n\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t)!,\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!parts.length) return undefined;\n\n\treturn and(...parts);\n}\n\nexport function relationsFilterToSQL(\n\ttable: SchemaEntry,\n\tfilter: AnyRelationsFilter | AnyTableFilter,\n): SQL | undefined;\nexport function relationsFilterToSQL(\n\ttable: SchemaEntry,\n\tfilter: AnyRelationsFilter | AnyTableFilter,\n\ttableRelations: RelationsRecord,\n\ttablesRelations: TablesRelationalConfig,\n\tcasing: CasingCache,\n\tdepth?: number,\n): SQL | undefined;\nexport function relationsFilterToSQL(\n\ttable: SchemaEntry,\n\tfilter: AnyRelationsFilter | AnyTableFilter,\n\ttableRelations: RelationsRecord = {},\n\ttablesRelations: TablesRelationalConfig = {},\n\tcasing?: CasingCache,\n\tdepth: number = 0,\n): SQL | undefined {\n\tconst entries = Object.entries(filter);\n\tif (!entries.length) return undefined;\n\n\tconst parts: SQL[] = [];\n\tfor (const [target, value] of entries) {\n\t\tif (value === undefined) continue;\n\n\t\tswitch (target) {\n\t\t\tcase 'RAW': {\n\t\t\t\tconst processed = typeof value === 'function'\n\t\t\t\t\t? (value as unknown as (table: FieldSelection, operators: Operators) => SQL)(table as any, operators)\n\t\t\t\t\t: (value as SQLWrapper).getSQL();\n\n\t\t\t\tparts.push(processed);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase 'OR': {\n\t\t\t\tif (!(value as AnyRelationsFilter[] | undefined)?.length) continue;\n\n\t\t\t\tparts.push(\n\t\t\t\t\tor(\n\t\t\t\t\t\t...(value as AnyRelationsFilter[]).map((subFilter) =>\n\t\t\t\t\t\t\trelationsFilterToSQL(table, subFilter, tableRelations, tablesRelations, casing!, depth)\n\t\t\t\t\t\t),\n\t\t\t\t\t)!,\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase 'AND': {\n\t\t\t\tif (!(value as AnyRelationsFilter[] | undefined)?.length) continue;\n\n\t\t\t\tparts.push(\n\t\t\t\t\tand(\n\t\t\t\t\t\t...(value as AnyRelationsFilter[]).map((subFilter) =>\n\t\t\t\t\t\t\trelationsFilterToSQL(table, subFilter, tableRelations, tablesRelations, casing!, depth)\n\t\t\t\t\t\t),\n\t\t\t\t\t)!,\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase 'NOT': {\n\t\t\t\tif (value === undefined) continue;\n\n\t\t\t\tconst built = relationsFilterToSQL(\n\t\t\t\t\ttable,\n\t\t\t\t\tvalue as AnyRelationsFilter,\n\t\t\t\t\ttableRelations,\n\t\t\t\t\ttablesRelations,\n\t\t\t\t\tcasing!,\n\t\t\t\t\tdepth,\n\t\t\t\t);\n\t\t\t\tif (!built) continue;\n\n\t\t\t\tparts.push(not(built));\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tif (table[TableColumns][target]) {\n\t\t\t\t\tconst column = fieldSelectionToSQL(table, target);\n\n\t\t\t\t\tconst colFilter = relationsFieldFilterToSQL(\n\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\tvalue as RelationsFieldFilter,\n\t\t\t\t\t);\n\t\t\t\t\tif (colFilter) parts.push(colFilter);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst relation = tableRelations[target];\n\t\t\t\tif (!relation) {\n\t\t\t\t\t// Should never trigger unless the types've been violated\n\t\t\t\t\tthrow new DrizzleError({\n\t\t\t\t\t\tmessage: `Unknown relational filter field: \"${target}\"`,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst targetTable = aliasedTable(relation.targetTable, `f${depth}`);\n\t\t\t\tconst throughTable = relation.throughTable ? aliasedTable(relation.throughTable, `ft${depth}`) : undefined;\n\t\t\t\tconst targetConfig = tablesRelations[relation.targetTableName]!;\n\n\t\t\t\tconst {\n\t\t\t\t\tfilter: relationFilter,\n\t\t\t\t\tjoinCondition,\n\t\t\t\t} = relationToSQL(casing!, relation, table, targetTable, throughTable);\n\t\t\t\tconst subfilter = typeof value === 'boolean' ? undefined : relationsFilterToSQL(\n\t\t\t\t\ttargetTable,\n\t\t\t\t\tvalue as AnyRelationsFilter,\n\t\t\t\t\ttargetConfig.relations,\n\t\t\t\t\ttablesRelations,\n\t\t\t\t\tcasing!,\n\t\t\t\t\tdepth + 1,\n\t\t\t\t);\n\t\t\t\tconst filter = and(\n\t\t\t\t\trelationFilter,\n\t\t\t\t\tsubfilter,\n\t\t\t\t);\n\n\t\t\t\tconst subquery = throughTable\n\t\t\t\t\t? sql`(select * from ${getTableAsAliasSQL(targetTable)} inner join ${\n\t\t\t\t\t\tgetTableAsAliasSQL(throughTable)\n\t\t\t\t\t} on ${joinCondition}${sql` where ${filter}`.if(filter)} limit 1)`\n\t\t\t\t\t: sql`(select * from ${getTableAsAliasSQL(targetTable)}${sql` where ${filter}`.if(filter)} limit 1)`;\n\t\t\t\tif (filter) parts.push((value ? exists : notExists)(subquery));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn and(...parts)!;\n}\n\nexport function relationsOrderToSQL(\n\ttable: SchemaEntry,\n\torders: OrderBy,\n): SQL | undefined {\n\tif (typeof orders === 'function') {\n\t\tconst data = orders(table as any, orderByOperators);\n\n\t\treturn is(data, SQL)\n\t\t\t? data\n\t\t\t: Array.isArray(data)\n\t\t\t? data.length\n\t\t\t\t? sql.join(data.map((o) => is(o, SQL) ? o : asc(o)), sql`, `)\n\t\t\t\t: undefined\n\t\t\t: is(data, Column)\n\t\t\t? asc(data)\n\t\t\t: undefined;\n\t}\n\n\tconst entries = Object.entries(orders).filter(([_, value]) => value);\n\tif (!entries.length) return undefined;\n\n\treturn sql.join(\n\t\tentries.map(([target, value]) => (value === 'asc' ? asc : desc)(fieldSelectionToSQL(table, target))),\n\t\tsql`, `,\n\t);\n}\n\nexport function relationExtrasToSQL(\n\ttable: SchemaEntry,\n\textras: Extras,\n) {\n\tconst subqueries: SQL[] = [];\n\tconst selection: BuildRelationalQueryResult['selection'] = [];\n\n\tfor (\n\t\tconst [key, field] of Object.entries(extras)\n\t) {\n\t\tif (!field) continue;\n\t\tconst extra = typeof field === 'function' ? field(table as any, { sql: operators.sql }) : field;\n\n\t\tconst query = sql`(${extra.getSQL()}) as ${sql.identifier(key)}`;\n\n\t\tquery.decoder = extra.getSQL().decoder;\n\n\t\tsubqueries.push(query);\n\t\tselection.push({\n\t\t\tkey,\n\t\t\tfield: query,\n\t\t});\n\t}\n\n\treturn {\n\t\tsql: subqueries.length ? sql.join(subqueries, sql`, `) : undefined,\n\t\tselection,\n\t};\n}\n\nexport interface BuiltRelationFilters {\n\tfilter?: SQL;\n\tjoinCondition?: SQL;\n}\n\nexport function relationToSQL(\n\tcasing: CasingCache,\n\trelation: Relation,\n\tsourceTable: SchemaEntry,\n\ttargetTable: SchemaEntry,\n\tthroughTable?: SchemaEntry,\n): BuiltRelationFilters {\n\tif (relation.through) {\n\t\tconst outerColumnWhere = relation.sourceColumns.map((s, i) => {\n\t\t\tconst t = relation.through!.source[i]!;\n\n\t\t\treturn eq(\n\t\t\t\tsql`${sourceTable}.${sql.identifier(casing.getColumnCasing(s))}`,\n\t\t\t\tsql`${throughTable!}.${sql.identifier(is(t._.column, Column) ? casing.getColumnCasing(t._.column) : t._.key)}`,\n\t\t\t);\n\t\t});\n\n\t\tconst innerColumnWhere = relation.targetColumns.map((s, i) => {\n\t\t\tconst t = relation.through!.target[i]!;\n\n\t\t\treturn eq(\n\t\t\t\tsql`${throughTable!}.${sql.identifier(is(t._.column, Column) ? casing.getColumnCasing(t._.column) : t._.key)}`,\n\t\t\t\tsql`${targetTable}.${sql.identifier(casing.getColumnCasing(s))}`,\n\t\t\t);\n\t\t});\n\n\t\treturn {\n\t\t\tfilter: and(\n\t\t\t\trelation.where\n\t\t\t\t\t? relationsFilterToSQL(relation.isReversed ? sourceTable : targetTable, relation.where)\n\t\t\t\t\t: undefined,\n\t\t\t\t...outerColumnWhere,\n\t\t\t),\n\t\t\tjoinCondition: and(...innerColumnWhere),\n\t\t};\n\t}\n\n\tconst columnWhere = relation.sourceColumns.map((s, i) => {\n\t\tconst t = relation.targetColumns[i]!;\n\n\t\treturn eq(\n\t\t\tsql`${sourceTable}.${sql.identifier(casing.getColumnCasing(s))}`,\n\t\t\tsql`${targetTable}.${sql.identifier(casing.getColumnCasing(t))}`,\n\t\t);\n\t});\n\n\tconst fullWhere = and(\n\t\t...columnWhere,\n\t\trelation.where\n\t\t\t? relationsFilterToSQL(relation.isReversed ? sourceTable : targetTable, relation.where)\n\t\t\t: undefined,\n\t)!;\n\n\treturn { filter: fullWhere };\n}\n\nexport function getTableAsAliasSQL(table: SchemaEntry) {\n\treturn sql`${\n\t\ttable[IsAlias]\n\t\t\t? sql`${sql`${sql.identifier(table[TableSchema] ?? '')}.`.if(table[TableSchema])}${\n\t\t\t\tsql.identifier(table[OriginalName])\n\t\t\t} as ${table}`\n\t\t\t: table\n\t}`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"relations.js","names":[],"sources":["../src/relations.ts"],"sourcesContent":["import { IsAlias, OriginalName, Table, TableColumns, TableSchema } from '~/table.ts';\nimport { aliasedTable } from './alias.ts';\nimport type { CasingCache } from './casing.ts';\nimport type { NormalizeArrayCodec, NormalizeCodec } from './codecs.ts';\nimport { type AnyColumn, Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { DrizzleError } from './errors.ts';\nimport {\n\tand,\n\tarrayContained,\n\tarrayContains,\n\tarrayOverlaps,\n\tasc,\n\tbetween,\n\tdesc,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tisNotNull,\n\tisNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotIlike,\n\tnotInArray,\n\tnotLike,\n\tor,\n} from './sql/expressions/index.ts';\nimport { type CommentInput, noopDecoder, Placeholder, SQL, sql, type SQLWrapper, View } from './sql/sql.ts';\nimport type { Assume, DrizzleTypeError, Equal, Simplify, ValueOrArray } from './utils.ts';\n\nexport type FilteredSchemaEntry = Table<any> | View<string, boolean, FieldSelection>;\n\nexport type SchemaEntry = Table<any> | View<string, boolean, any>;\n\nexport type Schema = Record<string, SchemaEntry>;\n\nexport type GetTableViewColumns<T extends SchemaEntry> = T extends View<string, boolean, any> ? T['_']['selectedFields']\n\t: T extends Table<any> ? T['_']['columns']\n\t: never;\n\nexport type GetTableViewFieldSelection<T extends SchemaEntry> = T extends View<string, boolean, FieldSelection>\n\t? T['_']['selectedFields']\n\t: T extends Table<any> ? T['_']['columns']\n\t: never;\n\nexport type FieldValue =\n\t| Column<any>\n\t| SQLWrapper\n\t| SQL.Aliased\n\t| SQL;\n\nexport type FieldSelection = Record<string, FieldValue>;\n\nexport function processRelations(tablesConfig: TablesRelationalConfig, tables: Schema) {\n\tfor (const tableConfig of Object.values(tablesConfig)) {\n\t\tfor (const [relationFieldName, relation] of Object.entries(tableConfig.relations)) {\n\t\t\tif (!is(relation, Relation)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trelation.sourceTable = tableConfig.table;\n\t\t\trelation.fieldName = relationFieldName;\n\t\t}\n\t}\n\n\tfor (const [sourceTableName, tableConfig] of Object.entries(tablesConfig)) {\n\t\tfor (const [relationFieldName, relation] of Object.entries(tableConfig.relations)) {\n\t\t\tif (!is(relation, Relation)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet reverseRelation: Relation | undefined;\n\t\t\tconst {\n\t\t\t\ttargetTableName,\n\t\t\t\talias,\n\t\t\t\tsourceColumns,\n\t\t\t\ttargetColumns,\n\t\t\t\tthroughTable,\n\t\t\t\tsourceTable,\n\t\t\t\tthrough,\n\t\t\t\twhere,\n\t\t\t\tsourceColumnTableNames,\n\t\t\t\ttargetColumnTableNames,\n\t\t\t} = relation;\n\t\t\tconst relationPrintName = `relations -> ${tableConfig.name}: { ${relationFieldName}: r.${\n\t\t\t\tis(relation, One) ? 'one' : 'many'\n\t\t\t}.${targetTableName}(...) }`;\n\n\t\t\tif (relationFieldName in tableConfig.table[TableColumns]) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${relationPrintName}: relation name collides with column \"${relationFieldName}\" of table \"${tableConfig.name}\"`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (typeof alias === 'string' && !alias) {\n\t\t\t\tthrow new Error(`${relationPrintName}: \"alias\" cannot be an empty string - omit it if you don't need it`);\n\t\t\t}\n\n\t\t\tif (sourceColumns?.length === 0) {\n\t\t\t\tthrow new Error(`${relationPrintName}: \"from\" cannot be empty`);\n\t\t\t}\n\n\t\t\tif (targetColumns?.length === 0) {\n\t\t\t\tthrow new Error(`${relationPrintName}: \"to\" cannot be empty`);\n\t\t\t}\n\n\t\t\tif (sourceColumns && targetColumns) {\n\t\t\t\tif (sourceColumns.length !== targetColumns.length && !throughTable) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${relationPrintName}: \"from\" and \"to\" fields without \"through\" must have the same length`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tfor (const sName of sourceColumnTableNames) {\n\t\t\t\t\tif (sName !== sourceTableName) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`${relationPrintName}: all \"from\" columns must belong to table \"${sourceTableName}\", found column of table \"${sName}\"`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const tName of targetColumnTableNames) {\n\t\t\t\t\tif (tName !== targetTableName) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`${relationPrintName}: all \"to\" columns must belong to table \"${targetTableName}\", found column of table \"${tName}\"`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (through) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthrough.source.length !== sourceColumns.length\n\t\t\t\t\t\t|| through.target.length !== targetColumns.length\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`${relationPrintName}: \".through(column)\" must be used either on all columns in \"from\" and \"to\" or not defined on any of them`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const column of through.source) {\n\t\t\t\t\t\tif (tables[column._.tableName] !== throughTable) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`${relationPrintName}: \".through(column)\" must be used on the same table by all columns of the relation`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const column of through.target) {\n\t\t\t\t\t\tif (tables[column._.tableName] !== throughTable) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`${relationPrintName}: \".through(column)\" must be used on the same table by all columns of the relation`,\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}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (sourceColumns || targetColumns) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${relationPrintName}: relation must have either both \"from\" and \"to\" defined, or none of them`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst reverseTableConfig = tablesConfig[targetTableName];\n\t\t\tif (!reverseTableConfig) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${relationPrintName}: not enough data provided to build the relation - \"from\"/\"to\" are not defined, and no reverse relations of table \"${targetTableName}\" were found\"`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (alias) {\n\t\t\t\tconst reverseRelations = Object.values(reverseTableConfig.relations).filter((it): it is Relation =>\n\t\t\t\t\tis(it, Relation) && it.alias === alias && it !== relation\n\t\t\t\t);\n\t\t\t\tif (reverseRelations.length > 1) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${relationPrintName}: not enough data provided to build the relation - \"from\"/\"to\" are not defined, and multiple relations with alias \"${alias}\" found in table \"${targetTableName}\": ${\n\t\t\t\t\t\t\treverseRelations.map((it) => `\"${it.fieldName}\"`).join(', ')\n\t\t\t\t\t\t}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treverseRelation = reverseRelations[0];\n\t\t\t\tif (!reverseRelation) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${relationPrintName}: not enough data provided to build the relation - \"from\"/\"to\" are not defined, and there is no reverse relation of table \"${targetTableName}\" with alias \"${alias}\"`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst reverseRelations = Object.values(reverseTableConfig.relations).filter((it): it is Relation =>\n\t\t\t\t\tis(it, Relation) && it.targetTable === sourceTable && !it.alias && it !== relation\n\t\t\t\t);\n\t\t\t\tif (reverseRelations.length > 1) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${relationPrintName}: not enough data provided to build the relation - \"from\"/\"to\" are not defined, and multiple relations between \"${targetTableName}\" and \"${sourceTableName}\" were found.\\nHint: you can specify \"alias\" on both sides of the relation with the same value`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treverseRelation = reverseRelations[0];\n\t\t\t\tif (!reverseRelation) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${relationPrintName}: not enough data provided to build the relation - \"from\"/\"to\" are not defined, and no reverse relation of table \"${targetTableName}\" with target table \"${sourceTableName}\" was found`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!reverseRelation.sourceColumns || !reverseRelation.targetColumns) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${relationPrintName}: not enough data provided to build the relation - \"from\"/\"to\" are not defined, and reverse relation \"${targetTableName}.${reverseRelation.fieldName}\" does not have \"from\"/\"to\" defined`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\trelation.sourceColumns = reverseRelation.targetColumns;\n\t\t\trelation.targetColumns = reverseRelation.sourceColumns;\n\t\t\trelation.through = reverseRelation.through\n\t\t\t\t? {\n\t\t\t\t\tsource: reverseRelation.through.target,\n\t\t\t\t\ttarget: reverseRelation.through.source,\n\t\t\t\t}\n\t\t\t\t: undefined;\n\t\t\trelation.throughTable = reverseRelation.throughTable;\n\t\t\trelation.isReversed = !where;\n\t\t\trelation.where = where ?? reverseRelation.where;\n\t\t}\n\t}\n\n\treturn tablesConfig;\n}\n\n/** Builds relational config for every table in schema */\nexport function buildRelations<TTables extends Schema, TConfig extends AnyRelationsBuilderConfig>(\n\ttables: TTables,\n\tconfig: TConfig,\n): ExtractTablesWithRelations<TConfig, TTables> {\n\tconst tablesConfig = {} as TablesRelationalConfig;\n\n\tfor (const [tsName, table] of Object.entries(tables)) {\n\t\ttablesConfig[tsName] = {\n\t\t\ttable,\n\t\t\tname: tsName,\n\t\t\trelations: config[tsName] ?? {},\n\t\t};\n\t}\n\n\treturn processRelations(tablesConfig, tables) as any;\n}\n\n/** Builds relational config only for tables present in relational config */\nexport function buildRelationsParts<TTables extends Schema, TConfig extends AnyRelationsBuilderConfig>(\n\ttables: TTables,\n\tconfig: TConfig,\n): ExtractTablesWithRelationsParts<TConfig, TTables> {\n\tconst tablesConfig = {} as TablesRelationalConfig;\n\n\tfor (const [tsName, relations] of Object.entries(config)) {\n\t\tif (!relations || !tables[tsName]) continue;\n\t\ttablesConfig[tsName] = {\n\t\t\ttable: tables[tsName],\n\t\t\tname: tsName,\n\t\t\trelations,\n\t\t};\n\t}\n\n\treturn processRelations(tablesConfig, tables) as any;\n}\n\nexport type RelationsRecord = Record<string, AnyRelation>;\nexport type EmptyRelations = {};\nexport type AnyRelations = TablesRelationalConfig;\n\nexport abstract class Relation<\n\tTTargetTableName extends string = string,\n> {\n\tstatic readonly [entityKind]: string = 'RelationV2';\n\tdeclare readonly $brand: 'RelationV2';\n\tdeclare public readonly relationType: 'many' | 'one';\n\n\tfieldName!: string;\n\tsourceColumns!: Column<any>[];\n\ttargetColumns!: Column<any>[];\n\talias: string | undefined;\n\twhere: AnyTableFilter | undefined;\n\tsourceTable!: SchemaEntry;\n\ttargetTable: SchemaEntry;\n\tthrough?: {\n\t\tsource: RelationsBuilderColumnBase[];\n\t\ttarget: RelationsBuilderColumnBase[];\n\t};\n\tthroughTable?: SchemaEntry;\n\tisReversed?: boolean;\n\n\t/** @internal */\n\tsourceColumnTableNames: string[] = [];\n\t/** @internal */\n\ttargetColumnTableNames: string[] = [];\n\n\tconstructor(\n\t\ttargetTable: SchemaEntry,\n\t\treadonly targetTableName: TTargetTableName,\n\t) {\n\t\tthis.targetTable = targetTable;\n\t}\n}\n\nexport type AnyRelation = Relation<string>;\n\nexport class One<\n\tTTargetTableName extends string,\n\tTOptional extends boolean = boolean,\n> extends Relation<TTargetTableName> {\n\tstatic override readonly [entityKind]: string = 'OneV2';\n\tdeclare protected $relationBrand: 'OneV2';\n\n\tpublic override readonly relationType = 'one' as const;\n\n\treadonly optional: TOptional;\n\n\tconstructor(\n\t\ttables: Schema,\n\t\ttargetTable: SchemaEntry,\n\t\ttargetTableName: TTargetTableName,\n\t\tconfig: AnyOneConfig | undefined,\n\t) {\n\t\tsuper(targetTable, targetTableName);\n\t\tthis.alias = config?.alias;\n\t\tthis.where = config?.where;\n\t\tif (config?.from) {\n\t\t\tthis.sourceColumns = ((Array.isArray(config.from)\n\t\t\t\t? config.from\n\t\t\t\t: [config.from]) as RelationsBuilderColumnBase[]).map((it: RelationsBuilderColumnBase) => {\n\t\t\t\t\tthis.throughTable ??= it._.through ? tables[it._.through._.tableName]! as SchemaEntry : undefined;\n\t\t\t\t\tthis.sourceColumnTableNames.push(it._.tableName);\n\t\t\t\t\treturn it._.column as Column;\n\t\t\t\t});\n\t\t}\n\t\tif (config?.to) {\n\t\t\tthis.targetColumns = (Array.isArray(config.to)\n\t\t\t\t? config.to\n\t\t\t\t: [config.to]).map((it: RelationsBuilderColumnBase) => {\n\t\t\t\t\tthis.throughTable ??= it._.through ? tables[it._.through._.tableName]! as SchemaEntry : undefined;\n\t\t\t\t\tthis.targetColumnTableNames.push(it._.tableName);\n\t\t\t\t\treturn it._.column as Column;\n\t\t\t\t});\n\t\t}\n\n\t\tif (this.throughTable) {\n\t\t\tthis.through = {\n\t\t\t\tsource: (Array.isArray(config?.from) ? config.from : config?.from ? [config.from] : []).map((\n\t\t\t\t\tc,\n\t\t\t\t) => c._.through!),\n\t\t\t\ttarget: (Array.isArray(config?.to) ? config.to : config?.to ? [config.to] : []).map((c) => c._.through!),\n\t\t\t};\n\t\t}\n\t\tthis.optional = (config?.optional ?? true) as TOptional;\n\t}\n}\n\nexport type AnyOne = One<string, boolean>;\n\nexport class Many<TTargetTableName extends string> extends Relation<TTargetTableName> {\n\tstatic override readonly [entityKind]: string = 'ManyV2';\n\tdeclare protected $relationBrand: 'ManyV2';\n\n\tpublic override readonly relationType = 'many' as const;\n\n\tconstructor(\n\t\ttables: Schema,\n\t\ttargetTable: SchemaEntry,\n\t\ttargetTableName: TTargetTableName,\n\t\treadonly config: AnyManyConfig | undefined,\n\t) {\n\t\tsuper(targetTable, targetTableName);\n\t\tthis.alias = config?.alias;\n\t\tthis.where = config?.where;\n\t\tif (config?.from) {\n\t\t\tthis.sourceColumns = ((Array.isArray(config.from)\n\t\t\t\t? config.from\n\t\t\t\t: [config.from]) as RelationsBuilderColumnBase[]).map((it: RelationsBuilderColumnBase) => {\n\t\t\t\t\tthis.throughTable ??= it._.through ? tables[it._.through._.tableName]! as SchemaEntry : undefined;\n\t\t\t\t\tthis.sourceColumnTableNames.push(it._.tableName);\n\t\t\t\t\treturn it._.column as Column;\n\t\t\t\t});\n\t\t}\n\t\tif (config?.to) {\n\t\t\tthis.targetColumns = (Array.isArray(config.to)\n\t\t\t\t? config.to\n\t\t\t\t: [config.to]).map((it: RelationsBuilderColumnBase) => {\n\t\t\t\t\tthis.throughTable ??= it._.through ? tables[it._.through._.tableName]! as SchemaEntry : undefined;\n\t\t\t\t\tthis.targetColumnTableNames.push(it._.tableName);\n\t\t\t\t\treturn it._.column as Column;\n\t\t\t\t});\n\t\t}\n\t\tif (this.throughTable) {\n\t\t\tthis.through = {\n\t\t\t\tsource: (Array.isArray(config?.from) ? config.from : config?.from ? [config.from] : []).map((\n\t\t\t\t\tc,\n\t\t\t\t) => c._.through!),\n\t\t\t\ttarget: (Array.isArray(config?.to) ? config.to : config?.to ? [config.to] : []).map((c) => c._.through!),\n\t\t\t};\n\t\t}\n\t}\n}\n\nexport type AnyMany = Many<string>;\n\nexport abstract class AggregatedField<T = unknown> implements SQLWrapper<T> {\n\tstatic readonly [entityKind]: string = 'AggregatedField';\n\n\tdeclare readonly $brand: 'AggregatedField';\n\n\tdeclare readonly _: {\n\t\treadonly data: T;\n\t};\n\n\tprotected table: SchemaEntry | undefined;\n\n\tonTable(table: SchemaEntry) {\n\t\tthis.table = table;\n\n\t\treturn this;\n\t}\n\n\tabstract getSQL(): SQL<T>;\n}\n\nexport class Count extends AggregatedField<number> {\n\tstatic override readonly [entityKind]: string = 'AggregatedFieldCount';\n\n\tdeclare protected $aggregatedFieldBrand: 'Count';\n\n\tprivate query: SQL<number> | undefined;\n\n\tgetSQL(): SQL<number> {\n\t\tif (!this.query) {\n\t\t\tif (!this.table) throw new Error('Table must be set before building aggregate field');\n\t\t\tthis.query = sql`select count(*) as ${sql.identifier('r')} from ${getTableAsAliasSQL(this.table)}`\n\t\t\t\t.mapWith(Number);\n\t\t}\n\n\t\treturn this.query;\n\t}\n}\n\nexport type ExtractObjectValues<T> = T[keyof T];\n\nexport const operators = {\n\tand,\n\tbetween,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tarrayContains,\n\tarrayContained,\n\tarrayOverlaps,\n\tisNull,\n\tisNotNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotLike,\n\tnotIlike,\n\tnotInArray,\n\tor,\n\tsql,\n};\n\nexport type Operators = typeof operators;\n\nexport const orderByOperators = {\n\tsql,\n\tasc,\n\tdesc,\n};\n\nexport type OrderByOperators = typeof orderByOperators;\n\nexport function getOrderByOperators(): OrderByOperators {\n\treturn orderByOperators;\n}\n\nexport type FindTargetTableInRelationalConfig<\n\tTConfig extends TablesRelationalConfig,\n\tTRelation extends AnyRelation,\n> = TConfig[TRelation['targetTableName']];\n\nexport interface SQLOperator {\n\tsql: Operators['sql'];\n}\n\nexport type DBQueryConfigColumns<TColumns extends FieldSelection> = {\n\t[K in keyof TColumns]?: boolean | undefined;\n};\n\nexport type DBQueryConfigExtras<TTable extends SchemaEntry> = Record<\n\tstring,\n\t| SQLWrapper\n\t| ((\n\t\ttable: TTable,\n\t\toperators: SQLOperator,\n\t) => SQLWrapper)\n>;\n\nexport type DBQueryConfigOrderByCallback<TTable extends SchemaEntry> = (\n\ttable: TTable,\n\toperators: OrderByOperators,\n) => ValueOrArray<AnyColumn | SQL>;\n\nexport type DBQueryConfigOrderByObject<TColumns extends FieldSelection> = {\n\t[K in keyof TColumns]?: 'asc' | 'desc' | undefined;\n};\n\nexport type DBQueryConfigOrderBy<TTable extends SchemaEntry, TColumns extends FieldSelection> =\n\t| DBQueryConfigOrderByCallback<TTable>\n\t| DBQueryConfigOrderByObject<TColumns>;\n\nexport type DBQueryConfigWith<TSchema extends TablesRelationalConfig, TRelations extends RelationsRecord> = {\n\t[K in keyof TRelations]?:\n\t\t| boolean\n\t\t| (DBQueryConfig<\n\t\t\tTRelations[K]['relationType'],\n\t\t\tTSchema,\n\t\t\tFindTargetTableInRelationalConfig<TSchema, TRelations[K]>\n\t\t>)\n\t\t| undefined;\n};\n\nexport type DBQueryConfig<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> =\n\t& (TTableConfig['relations'] extends Record<string, never> ? {}\n\t\t: {\n\t\t\twith?:\n\t\t\t\t| DBQueryConfigWith<TSchema, TTableConfig['relations']>\n\t\t\t\t| undefined;\n\t\t})\n\t& {\n\t\tcolumns?: DBQueryConfigColumns<GetTableViewFieldSelection<TTableConfig['table']>> | undefined;\n\t\twhere?: RelationsFilter<TTableConfig, TSchema> | undefined;\n\t\textras?:\n\t\t\t| DBQueryConfigExtras<TTableConfig['table']>\n\t\t\t| undefined;\n\t\torderBy?:\n\t\t\t| DBQueryConfigOrderBy<TTableConfig['table'], GetTableViewFieldSelection<TTableConfig['table']>>\n\t\t\t| undefined;\n\t\toffset?: number | Placeholder | undefined;\n\t}\n\t& (TRelationType extends 'many' ? {\n\t\t\tlimit?: number | Placeholder | undefined;\n\t\t}\n\t\t: {});\n\nexport type DBQueryConfigWithComment<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> = DBQueryConfig<TRelationType, TSchema, TTableConfig> & {\n\t/**\n\t * Attach [sqlcommenter](https://google.github.io/sqlcommenter) comment to a query\n\t */\n\tcomment?: CommentInput | undefined;\n};\n\nexport type AnyDBQueryConfig = {\n\tcolumns?:\n\t\t| DBQueryConfigColumns<GetTableViewFieldSelection<TableRelationalConfig['table']>>\n\t\t| undefined;\n\twhere?: RelationsFilter<TableRelationalConfig, TablesRelationalConfig> | undefined;\n\textras?:\n\t\t| DBQueryConfigExtras<TableRelationalConfig['table']>\n\t\t| undefined;\n\twith?:\n\t\t| Record<string, AnyDBQueryConfig>\n\t\t| undefined;\n\torderBy?:\n\t\t| DBQueryConfigOrderBy<TableRelationalConfig['table'], GetTableViewFieldSelection<TableRelationalConfig['table']>>\n\t\t| undefined;\n\toffset?: number | Placeholder | undefined;\n\tlimit?: number | Placeholder | undefined;\n\tcomment?: CommentInput | undefined;\n};\n\nexport interface TableRelationalConfig {\n\ttable: SchemaEntry;\n\tname: string;\n\trelations: RelationsRecord;\n}\n\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\nexport type ExtractTablesWithRelations<\n\tTConfig extends AnyRelationsBuilderConfig,\n\tTTables extends Schema,\n> = {\n\t[K in keyof TTables]: {\n\t\ttable: TTables[K];\n\t\tname: K & string;\n\t\trelations: TConfig extends { [CK in K]: Record<string, any> } ? TConfig[K] : {};\n\t};\n};\n\nexport type ExtractTablesWithRelationsParts<\n\tTConfig extends AnyRelationsBuilderConfig,\n\tTTables extends Schema,\n> = {\n\t[K in NonUndefinedKeysOnly<TConfig> & keyof TTables]: {\n\t\ttable: TTables[K & string];\n\t\tname: K & string;\n\t\trelations: TConfig[K] extends Record<string, any> ? TConfig[K] : {};\n\t};\n};\n\nexport type ReturnTypeOrValue<T> = T extends (...args: any[]) => infer R ? R\n\t: T;\n\nexport type RelationResultKind<TResult, TInclude, TRelation extends AnyRelation> = TRelation extends AnyOne ? (\n\t\t| TResult\n\t\t| (Equal<TRelation['optional'], true> extends true ? null\n\t\t\t: TInclude extends Record<string, unknown> ? TInclude['where'] extends Record<string, any> ? null\n\t\t\t\t: never\n\t\t\t: never)\n\t)\n\t: TResult[];\n\nexport type BuildRelationResult<\n\tTConfig extends TablesRelationalConfig,\n\tTInclude,\n\tTRelations extends RelationsRecord,\n> = {\n\t[\n\t\tK in\n\t\t\t& TruthyKeysOnly<TInclude>\n\t\t\t& keyof TRelations\n\t]: TRelations[K] extends infer TRel extends AnyRelation ? RelationResultKind<\n\t\t\tBuildQueryResult<\n\t\t\t\tTConfig,\n\t\t\t\tFindTargetTableInRelationalConfig<TConfig, TRel>,\n\t\t\t\tAssume<TInclude[K], true | Record<string, unknown>>\n\t\t\t>,\n\t\t\tTInclude[K],\n\t\t\tTRel\n\t\t>\n\t\t: TRelations[K] extends AggregatedField<infer TData> ? TData\n\t\t: never;\n};\n\nexport type NonUndefinedKeysOnly<T> = {\n\t[K in keyof T]: T[K] extends undefined ? never : K;\n}[keyof T];\n\nexport type TruthyKeysOnly<T> = {\n\t[K in keyof T]: T[K] extends undefined | false ? never : K;\n}[keyof T];\n\nexport type InferRelationalQueryTableResult<\n\tTRawSelection extends Record<string, unknown>,\n\tTSelectedFields extends Record<string, unknown> | 'Full' = 'Full',\n> = TSelectedFields extends 'Full' ? TRawSelection : {\n\t[\n\t\tK in Equal<\n\t\t\tExclude<\n\t\t\t\tTSelectedFields[\n\t\t\t\t\t& keyof TSelectedFields\n\t\t\t\t\t& keyof TRawSelection\n\t\t\t\t],\n\t\t\t\tundefined\n\t\t\t>,\n\t\t\tfalse\n\t\t> extends true ? Exclude<\n\t\t\t\tkeyof TRawSelection,\n\t\t\t\tNonUndefinedKeysOnly<TSelectedFields>\n\t\t\t>\n\t\t\t:\n\t\t\t\t& {\n\t\t\t\t\t[K in keyof TSelectedFields]: Equal<\n\t\t\t\t\t\tTSelectedFields[K],\n\t\t\t\t\t\ttrue\n\t\t\t\t\t> extends true ? K\n\t\t\t\t\t\t: never;\n\t\t\t\t}[keyof TSelectedFields]\n\t\t\t\t& keyof TRawSelection\n\t]: TRawSelection[K];\n};\n\nexport type BuildQueryResult<\n\tTSchema extends TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig,\n\tTFullSelection extends true | Record<string, unknown>,\n\tTModel extends Record<string, unknown> = Assume<\n\t\tTTableConfig['table'],\n\t\t{ $inferSelect: Record<string, unknown> }\n\t>['$inferSelect'],\n> = TFullSelection extends true | Record<string, never> ? TModel\n\t: TFullSelection extends Record<string, unknown> ? Simplify<\n\t\t\t& (InferRelationalQueryTableResult<\n\t\t\t\tTModel,\n\t\t\t\tTFullSelection['columns'] extends Record<string, unknown> ? TFullSelection['columns'] : 'Full'\n\t\t\t>)\n\t\t\t& (TFullSelection['extras'] extends Record<string, SQLWrapper | ((...args: any[]) => SQLWrapper)> ? {\n\t\t\t\t\t[\n\t\t\t\t\t\tK in NonUndefinedKeysOnly<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>\n\t\t\t\t\t\t>\n\t\t\t\t\t]: ReturnType<\n\t\t\t\t\t\tAssume<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras'][K & string]>,\n\t\t\t\t\t\t\tSQLWrapper\n\t\t\t\t\t\t>['getSQL']\n\t\t\t\t\t>['_']['type'];\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t\t& (TFullSelection['with'] extends Record<string, unknown> ? BuildRelationResult<\n\t\t\t\t\tTSchema,\n\t\t\t\t\tTFullSelection['with'],\n\t\t\t\t\tTTableConfig['relations']\n\t\t\t\t>\n\t\t\t\t: {})\n\t\t>\n\t: never;\n\nexport interface BuildRelationalQueryResult {\n\tselection: {\n\t\tkey: string;\n\t\tfield: Column<any> | Table | View | SQL | SQL.Aliased | SQLWrapper | AggregatedField;\n\t\t/** For array type relations */\n\t\tisArray?: boolean;\n\t\tselection?: BuildRelationalQueryResult['selection'];\n\t\tisOptional?: boolean;\n\t\tcodec?: NormalizeCodec | NormalizeArrayCodec;\n\t\t/** For array type columns */\n\t\tarrayDimensions?: number;\n\t}[];\n\tsql: SQL;\n}\n\nexport function mapRelationalRow(\n\trows: Record<string, unknown> | Record<string, unknown>[],\n\tisOne: boolean,\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue?: (value: unknown) => unknown,\n\t/** Needed for SQLite as it returns JSON values as strings */\n\tparseJson: boolean = false,\n\t/** Needed for SingleStore as it returns JSON arrays as strings */\n\tparseJsonIfString: boolean = false,\n\t/** Root level data of query is usually not nested in JSON */\n\tuseJsonMappers: boolean = true,\n): Record<string, unknown> | Record<string, unknown>[] {\n\tconst maxIdx = isOne ? 1 : (rows as Record<string, unknown>[]).length;\n\tconst decoders: (undefined | ((v: any) => any))[] = buildQueryResultSelection.map(\n\t\t({ field, codec, arrayDimensions }) => {\n\t\t\tlet decoder;\n\t\t\tif (is(field, Column)) {\n\t\t\t\t// Support for old custom column JSON field API\n\t\t\t\tif (useJsonMappers && (<any> field).mapFromJsonValue) {\n\t\t\t\t\treturn (v) => (<(value: unknown) => unknown> (<any> field).mapFromJsonValue)(v);\n\t\t\t\t}\n\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else if (is(field, SQL.Aliased)) {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t} else if (is(field, Table) || is(field, View)) {\n\t\t\t\tdecoder = noopDecoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.getSQL().decoder;\n\t\t\t}\n\n\t\t\treturn decoder.mapFromDriverValue.isNoop\n\t\t\t\t? codec\n\t\t\t\t\t? (value) => codec(value, arrayDimensions!)\n\t\t\t\t\t: undefined\n\t\t\t\t: codec\n\t\t\t\t? (value) => decoder.mapFromDriverValue(codec(value, arrayDimensions!))\n\t\t\t\t: (value) => decoder.mapFromDriverValue(value);\n\t\t},\n\t);\n\n\tfor (let i = 0; i < maxIdx; ++i) {\n\t\tconst row = (isOne ? rows : (rows as Record<string, unknown>[])[i]) as Record<string, unknown>;\n\n\t\tfor (let selectionItemIdx = 0; selectionItemIdx < buildQueryResultSelection.length; ++selectionItemIdx) {\n\t\t\tconst selectionItem = buildQueryResultSelection[selectionItemIdx]!;\n\n\t\t\tif (selectionItem.selection) {\n\t\t\t\tif (row[selectionItem.key] === null) continue;\n\n\t\t\t\tif (parseJson) {\n\t\t\t\t\trow[selectionItem.key] = JSON.parse(row[selectionItem.key] as string);\n\t\t\t\t\tif (row[selectionItem.key] === null) continue;\n\t\t\t\t} else if (parseJsonIfString && typeof row[selectionItem.key] === 'string') {\n\t\t\t\t\trow[selectionItem.key] = JSON.parse(row[selectionItem.key] as string);\n\t\t\t\t}\n\n\t\t\t\tif (selectionItem.isArray) {\n\t\t\t\t\tmapRelationalRow(\n\t\t\t\t\t\trow[selectionItem.key] as Array<Record<string, unknown>>,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tselectionItem.selection!,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tparseJsonIfString,\n\t\t\t\t\t);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tmapRelationalRow(\n\t\t\t\t\trow[selectionItem.key] as Record<string, unknown>,\n\t\t\t\t\ttrue,\n\t\t\t\t\tselectionItem.selection!,\n\t\t\t\t\tmapColumnValue,\n\t\t\t\t\tfalse,\n\t\t\t\t\tparseJsonIfString,\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (mapColumnValue) row[selectionItem.key] = mapColumnValue(row[selectionItem.key]);\n\t\t\tif (row[selectionItem.key] === null) continue;\n\n\t\t\tconst decoder = decoders[selectionItemIdx];\n\t\t\tif (!decoder) continue;\n\n\t\t\trow[selectionItem.key] = decoder(row[selectionItem.key]);\n\t\t}\n\t}\n\n\treturn rows;\n}\n\nexport type RelationalRowsMapper<T = any> = (rows: Record<string, unknown>[]) => T;\nexport type RelationalRowsMapperGenerator<T = any> = (\n\tconfig: RelationalQueryMapperConfig,\n\tmapColumnValue?: (value: unknown) => unknown,\n) => (rows: Record<string, unknown>[]) => T;\n\nexport function makeDefaultRqbMapper<T = any>(\n\t{ selection, isFirst, parseJson, parseJsonIfString, rootJsonMappers }: RelationalQueryMapperConfig,\n\tmapColumnValue?: (value: unknown) => unknown,\n): RelationalRowsMapper<T> {\n\treturn ((rows) => {\n\t\tif (isFirst && !rows[0]) return rows[0];\n\n\t\treturn mapRelationalRow(\n\t\t\tisFirst ? rows[0]! : rows,\n\t\t\tisFirst,\n\t\t\tselection,\n\t\t\tmapColumnValue,\n\t\t\tparseJson,\n\t\t\tparseJsonIfString,\n\t\t\trootJsonMappers,\n\t\t);\n\t}) as RelationalRowsMapper<T>;\n}\n\nfunction makeJitRqbMapperInner(\n\tselection: BuildRelationalQueryResult['selection'],\n\tpathPrefix: string,\n\tselectionPathPrefix: string,\n\tmapColumnValue: ((value: unknown) => unknown) | undefined,\n\t/** Needed for SQLite as it returns JSON values as strings */\n\tparseJson: boolean,\n\t/** Needed for SingleStore as it returns JSON arrays as strings */\n\tparseJsonIfString: boolean,\n\t/** Root level data of query is usually not nested in JSON */\n\tuseJsonMappers: boolean,\n\trecursionDepth = 0,\n): string {\n\tconst fn = [] as string[];\n\tfor (\n\t\tconst [idx, { field, key, codec, isArray, selection: innerSelection, arrayDimensions }] of selection\n\t\t\t.entries()\n\t) {\n\t\tconst sel = `${selectionPathPrefix}[${idx}]`;\n\t\tconst item = `${pathPrefix}[${JSON.stringify(key)}]`;\n\n\t\tif (innerSelection) {\n\t\t\tconst innerIdx = `i${recursionDepth}`;\n\t\t\tconst innerCode = makeJitRqbMapperInner(\n\t\t\t\tinnerSelection,\n\t\t\t\tisArray ? `${item}[${innerIdx}]` : item,\n\t\t\t\t`${sel}.selection`,\n\t\t\t\tmapColumnValue,\n\t\t\t\tfalse,\n\t\t\t\tparseJsonIfString,\n\t\t\t\ttrue,\n\t\t\t\trecursionDepth + 1,\n\t\t\t);\n\n\t\t\tif (innerCode && !isArray) {\n\t\t\t\tfn.push(`if(${item} !== null${parseJson ? ` && (${item} = JSON.parse(${item})) !== null` : ''}) {`);\n\t\t\t}\n\n\t\t\tif (parseJson && (isArray || !innerCode)) fn.push(`${item} = JSON.parse(${item});`);\n\t\t\tif (parseJsonIfString && !parseJson) fn.push(`if(typeof ${item} === 'string') ${item} = JSON.parse(${item});`);\n\n\t\t\tif (innerCode) {\n\t\t\t\tif (isArray) {\n\t\t\t\t\tfn.push(\n\t\t\t\t\t\t`for(let ${innerIdx} = 0; ${innerIdx} < ${item}.length; ++${innerIdx} ) {`,\n\t\t\t\t\t\tinnerCode,\n\t\t\t\t\t\t`}`,\n\t\t\t\t\t);\n\t\t\t\t} else fn.push(innerCode);\n\t\t\t}\n\n\t\t\tif (innerCode && !isArray) {\n\t\t\t\tfn.push(`}`);\n\t\t\t}\n\t\t}\n\n\t\tlet bypassCodecs = false;\n\t\tlet decoder: string;\n\t\tif (is(field, Column)) {\n\t\t\tif (useJsonMappers && (<any> field).mapFromJsonValue) {\n\t\t\t\tbypassCodecs = true;\n\t\t\t\tdecoder = `${sel}.field.mapFromJsonValue`;\n\t\t\t} else {\n\t\t\t\tdecoder = field.mapFromDriverValue.isNoop ? '' : `${sel}.field.mapFromDriverValue`;\n\t\t\t}\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoder = field.decoder.mapFromDriverValue.isNoop ? '' : `${sel}.field.decoder.mapFromDriverValue`;\n\t\t} else if (is(field, SQL.Aliased)) {\n\t\t\tdecoder = field.sql.decoder.mapFromDriverValue.isNoop ? '' : `${sel}.field.sql.decoder.mapFromDriverValue`;\n\t\t} else if (is(field, Table) || is(field, View)) {\n\t\t\tdecoder = '';\n\t\t} else {\n\t\t\tdecoder = field.getSQL().decoder.mapFromDriverValue.isNoop ? '' : `${sel}.getSQL().decoder.mapFromDriverValue`;\n\t\t}\n\n\t\tif (mapColumnValue) fn.push(`${item} = this.mapColumnValue(${item});`);\n\n\t\tlet decodedValue = item;\n\t\tif (!bypassCodecs && codec) decodedValue = `${sel}.codec(${decodedValue}, ${arrayDimensions})`;\n\t\tif (decoder) decodedValue = `${decoder}(${decodedValue})`;\n\t\tif ((!bypassCodecs && codec) || decoder) fn.push(`if(${item} !== null) {`, `${item} = ${decodedValue};`, '}');\n\t}\n\n\treturn fn.join('\\n');\n}\n\nexport interface RelationalQueryMapperConfig {\n\tselection: BuildRelationalQueryResult['selection'];\n\t/** Used for `db.query.table.findFirst(...)` */\n\tisFirst: boolean;\n\t/** Used by SQLite & drivers that return JSON-s as strings by default */\n\tparseJson: boolean;\n\t/** Used by SingleStore to fix malformed outputs for empty JSON arrays */\n\tparseJsonIfString: boolean;\n\t/** Enable for non-reworked dialects & drivers with JSON-ified root level of relational query */\n\trootJsonMappers: boolean;\n}\n\nexport function makeJitRqbMapper<T = unknown>(\n\t{ selection, isFirst, parseJson, parseJsonIfString, rootJsonMappers }: RelationalQueryMapperConfig,\n\tmapColumnValue?: (value: unknown) => unknown,\n): RelationalRowsMapper<T> {\n\tconst fn = [] as string[];\n\tconst innerCode = makeJitRqbMapperInner(\n\t\tselection,\n\t\tisFirst ? 'rows[0]' : 'rows[i]',\n\t\t'this.selection',\n\t\tmapColumnValue,\n\t\tparseJson,\n\t\tparseJsonIfString,\n\t\trootJsonMappers,\n\t);\n\n\tif (innerCode) {\n\t\tif (isFirst) {\n\t\t\tfn.push(\n\t\t\t\t`if(!rows[0]) return undefined;`,\n\t\t\t\tinnerCode,\n\t\t\t);\n\t\t} else {\n\t\t\tfn.push(`for(let i = 0; i < rows.length; ++i) {`, innerCode, `}`);\n\t\t}\n\t}\n\n\tfn.push(`return rows${isFirst ? '[0]' : ''};`, '//# sourceURL=drizzle:jit-relational-query-mapper');\n\treturn new Function(\n\t\t'rows',\n\t\tfn.join('\\n'),\n\t).bind({\n\t\tselection,\n\t\tmapColumnValue,\n\t}) as RelationalRowsMapper<T>;\n}\n\nexport class RelationsBuilderTable<TTableName extends string = string> {\n\tstatic readonly [entityKind]: string = 'RelationsBuilderTable';\n\n\tprotected readonly _: {\n\t\treadonly name: TTableName;\n\t\treadonly table: SchemaEntry;\n\t};\n\n\tconstructor(table: SchemaEntry, name: TTableName) {\n\t\tthis._ = {\n\t\t\tname,\n\t\t\ttable,\n\t\t};\n\t}\n}\n\nexport interface RelationsBuilderColumnConfig<\n\tTTableName extends string = string,\n> {\n\treadonly tableName: TTableName;\n\treadonly column: FieldValue;\n\treadonly through?: RelationsBuilderColumnBase;\n\treadonly key: string;\n}\n\nexport interface RelationsBuilderColumnBase<\n\tTTableName extends string = string,\n> {\n\t_: RelationsBuilderColumnConfig<TTableName>;\n}\n\nexport class RelationsBuilderColumn<\n\tTTableName extends string = string,\n> implements RelationsBuilderColumnBase<TTableName> {\n\tstatic readonly [entityKind]: string = 'RelationsBuilderColumn';\n\n\treadonly _: {\n\t\treadonly tableName: TTableName;\n\t\treadonly column: FieldValue;\n\t\treadonly key: string;\n\t};\n\n\tconstructor(\n\t\tcolumn: FieldValue,\n\t\ttableName: TTableName,\n\t\tkey: string,\n\t) {\n\t\tthis._ = {\n\t\t\ttableName: tableName,\n\t\t\tcolumn,\n\t\t\tkey,\n\t\t};\n\t}\n\n\tthrough(column: RelationsBuilderColumn): RelationsBuilderJunctionColumn<TTableName> {\n\t\treturn new RelationsBuilderJunctionColumn(\n\t\t\tthis._.column,\n\t\t\tthis._.tableName,\n\t\t\tthis._.key,\n\t\t\tcolumn,\n\t\t);\n\t}\n}\n\nexport class RelationsBuilderJunctionColumn<\n\tTTableName extends string = string,\n> implements RelationsBuilderColumnBase<TTableName> {\n\tstatic readonly [entityKind]: string = 'RelationsBuilderColumn';\n\n\treadonly _: {\n\t\treadonly tableName: TTableName;\n\t\treadonly column: FieldValue;\n\t\treadonly through: RelationsBuilderColumnBase;\n\t\treadonly key: string;\n\t};\n\n\tconstructor(\n\t\tcolumn: FieldValue,\n\t\ttableName: TTableName,\n\t\tkey: string,\n\t\tthrough: RelationsBuilderColumnBase,\n\t) {\n\t\tthis._ = {\n\t\t\ttableName: tableName,\n\t\t\tcolumn,\n\t\t\tthrough,\n\t\t\tkey,\n\t\t};\n\t}\n}\n\nexport interface RelationFieldsFilterInternals<T> {\n\teq?: T | Placeholder | undefined;\n\tne?: T | Placeholder | undefined;\n\tgt?: T | Placeholder | undefined;\n\tgte?: T | Placeholder | undefined;\n\tlt?: T | Placeholder | undefined;\n\tlte?: T | Placeholder | undefined;\n\tin?: (T | Placeholder)[] | Placeholder | undefined;\n\tnotIn?: (T | Placeholder)[] | Placeholder | undefined;\n\tarrayContains?: (T extends Array<infer E> ? (E | Placeholder)[] : (T | Placeholder)[]) | Placeholder | undefined;\n\tarrayContained?: (T extends Array<infer E> ? (E | Placeholder)[] : (T | Placeholder)[]) | Placeholder | undefined;\n\tarrayOverlaps?: (T extends Array<infer E> ? (E | Placeholder)[] : (T | Placeholder)[]) | Placeholder | undefined;\n\tlike?: string | Placeholder | undefined;\n\tilike?: string | Placeholder | undefined;\n\tnotLike?: string | Placeholder | undefined;\n\tnotIlike?: string | Placeholder | undefined;\n\tisNull?: true | undefined;\n\tisNotNull?: true | undefined;\n\tNOT?: RelationsFieldFilter<T> | undefined;\n\tOR?: RelationsFieldFilter<T>[] | undefined;\n\tAND?: RelationsFieldFilter<T>[] | undefined;\n}\n\nexport type RelationsFieldFilter<T = unknown> =\n\t| RelationFieldsFilterInternals<T>\n\t| (\n\t\tunknown extends T ? never : T extends object ? never : T\n\t)\n\t// Bleeds into filters - discuss removal\n\t| Placeholder;\n\nexport interface RelationsFilterCommons<\n\tTTable extends TableRelationalConfig = TableRelationalConfig,\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n> {\n\tOR?: RelationsFilter<TTable, TSchema>[] | undefined;\n\tNOT?: RelationsFilter<TTable, TSchema> | undefined;\n\tAND?: RelationsFilter<TTable, TSchema>[] | undefined;\n\tRAW?:\n\t\t| SQLWrapper\n\t\t| ((\n\t\t\ttable: TTable['table'],\n\t\t\toperators: Operators,\n\t\t) => SQL)\n\t\t| undefined;\n}\n\nexport type RelationsFilterColumns<\n\tTColumns extends Record<string, unknown>,\n> = {\n\t[K in keyof TColumns]?:\n\t\t| (TColumns[K] extends { _: { data: infer Data } } ? RelationsFieldFilter<Data>\n\t\t\t: RelationsFieldFilter<unknown>)\n\t\t| undefined;\n};\n\nexport type RelationsFilterRelations<\n\tTTable extends TableRelationalConfig,\n\tTSchema extends TablesRelationalConfig,\n\tTRelations extends RelationsRecord = TTable['relations'],\n> = {\n\t[K in keyof TRelations]?:\n\t\t| boolean\n\t\t| RelationsFilter<FindTargetTableInRelationalConfig<TSchema, TRelations[K]>, TSchema>\n\t\t| undefined;\n};\n\nexport type RelationsFilter<\n\tTTable extends TableRelationalConfig,\n\tTSchema extends TablesRelationalConfig,\n\tTColumns extends FieldSelection = GetTableViewFieldSelection<TTable['table']>,\n> = TTable['relations'] extends Record<string, never> ? TableFilter<TTable['table']>\n\t:\n\t\t& RelationsFilterColumns<TColumns>\n\t\t& RelationsFilterRelations<TTable, TSchema>\n\t\t& RelationsFilterCommons<TTable, TSchema>;\n\nexport interface TableFilterCommons<\n\tTTable extends SchemaEntry = SchemaEntry,\n\tTColumns extends Record<string, unknown> = GetTableViewColumns<TTable>,\n> {\n\tOR?: TableFilter<TTable, TColumns>[] | undefined;\n\tNOT?: TableFilter<TTable, TColumns> | undefined;\n\tAND?: TableFilter<TTable, TColumns>[] | undefined;\n\tRAW?:\n\t\t| SQLWrapper\n\t\t| ((\n\t\t\ttable: TTable,\n\t\t\toperators: Operators,\n\t\t) => SQL)\n\t\t| undefined;\n}\n\nexport type TableFilterColumns<\n\tTColumns extends Record<string, unknown>,\n> = {\n\t[K in keyof TColumns]?:\n\t\t| (TColumns[K] extends { _: { data: infer Data } } ? RelationsFieldFilter<Data>\n\t\t\t: RelationsFieldFilter<unknown>)\n\t\t| undefined;\n};\n\nexport type TableFilter<\n\tTTable extends SchemaEntry = SchemaEntry,\n\tTColumns extends Record<string, unknown> = GetTableViewColumns<TTable>,\n> =\n\t& TableFilterColumns<TColumns>\n\t& TableFilterCommons<TTable, TColumns>;\n\nexport type AnyRelationsFilter = RelationsFilter<\n\tTableRelationalConfig,\n\tTablesRelationalConfig,\n\tFieldSelection\n>;\n\nexport type AnyTableFilter = TableFilter<\n\tSchemaEntry,\n\tFieldSelection\n>;\n\nexport interface OneConfig<TTargetTable extends SchemaEntry, TOptional extends boolean> {\n\tfrom?: RelationsBuilderColumnBase | [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]];\n\tto?: RelationsBuilderColumnBase | [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]];\n\twhere?: TableFilter<TTargetTable>;\n\toptional?: TOptional;\n\talias?: string;\n}\n\nexport type AnyOneConfig = OneConfig<\n\tSchemaEntry,\n\tboolean\n>;\n\nexport interface ManyConfig<TTargetTable extends SchemaEntry> {\n\tfrom?: RelationsBuilderColumnBase | [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]];\n\tto?: RelationsBuilderColumnBase | [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]];\n\twhere?: TableFilter<TTargetTable>;\n\talias?: string;\n}\n\nexport type AnyManyConfig = ManyConfig<SchemaEntry>;\n\nexport interface OneFn<TTargetTable extends SchemaEntry, TTargetTableName extends string> {\n\t<TOptional extends boolean = true>(config?: OneConfig<TTargetTable, TOptional>): One<TTargetTableName, TOptional>;\n}\n\nexport interface ManyFn<TTargetTable extends SchemaEntry, TTargetTableName extends string> {\n\t(config?: ManyConfig<TTargetTable>): Many<TTargetTableName>;\n}\n\nexport class RelationsHelperStatic<TTables extends Schema> {\n\tstatic readonly [entityKind]: string = 'RelationsHelperStatic';\n\t// declare readonly $brand: 'RelationsHelperStatic';\n\n\tprivate readonly _: {\n\t\treadonly tables: TTables;\n\t};\n\n\tconstructor(tables: TTables) {\n\t\tthis._ = {\n\t\t\ttables,\n\t\t};\n\n\t\tconst one: Record<string, OneFn<TTables[string], string>> = {};\n\t\tconst many: Record<string, ManyFn<TTables[string], string>> = {};\n\n\t\tfor (const [tableName, table] of Object.entries(tables)) {\n\t\t\tone[tableName] = (config) => {\n\t\t\t\treturn new One(tables, table, tableName, config as unknown as AnyOneConfig);\n\t\t\t};\n\n\t\t\tmany[tableName] = (config) => {\n\t\t\t\treturn new Many(tables, table, tableName, config as AnyManyConfig);\n\t\t\t};\n\t\t}\n\n\t\tthis.one = one as any as this['one'];\n\t\tthis.many = many as any as this['many'];\n\t}\n\n\tone: {\n\t\t[K in keyof TTables]: TTables[K] extends FilteredSchemaEntry ? OneFn<TTables[K], K & string>\n\t\t\t: DrizzleTypeError<'Views with nested selections are not supported by the relational query builder'>;\n\t};\n\n\tmany: {\n\t\t[K in keyof TTables]: TTables[K] extends FilteredSchemaEntry ? ManyFn<TTables[K], K & string>\n\t\t\t: DrizzleTypeError<'Views with nested selections are not supported by the relational query builder'>;\n\t};\n\n\t/** @internal - to be reworked */\n\taggs = {\n\t\tcount(): Count {\n\t\t\treturn new Count();\n\t\t},\n\t};\n}\n\nexport type RelationsBuilderColumns<TTable extends SchemaEntry, TTableName extends string> = {\n\t[\n\t\tTColumnName in keyof GetTableViewColumns<TTable>\n\t]: RelationsBuilderColumn<\n\t\tTTableName\n\t>;\n};\n\nexport type RelationsBuilderTables<TSchema extends Schema> = {\n\t[TTableName in keyof TSchema]: TSchema[TTableName] extends FilteredSchemaEntry ? (\n\t\t\t& RelationsBuilderColumns<TSchema[TTableName], TTableName & string>\n\t\t\t& RelationsBuilderTable<TTableName & string>\n\t\t)\n\t\t: DrizzleTypeError<'Views with nested selections are not supported by the relational query builder'>;\n};\n\nexport type RelationsBuilder<TSchema extends Schema> =\n\t& RelationsBuilderTables<TSchema>\n\t& RelationsHelperStatic<TSchema>;\n\nexport type RelationsBuilderConfigValue =\n\t| RelationsRecord\n\t| undefined;\n\nexport type RelationsBuilderConfig<TTables extends Schema> = {\n\t[TTableName in keyof TTables]?: RelationsBuilderConfigValue;\n};\n\nexport type AnyRelationsBuilderConfig = Record<string, RelationsBuilderConfigValue>;\n\nexport type ExtractTablesFromSchema<TSchema extends Record<string, unknown>> = {\n\t[K in keyof TSchema as TSchema[K] extends SchemaEntry ? K extends string ? K : never : never]: Assume<\n\t\tTSchema[K],\n\t\tSchemaEntry\n\t>;\n};\n\nexport function createRelationsHelper<\n\tTTables extends Schema,\n>(tables: TTables): RelationsBuilder<TTables> {\n\tconst helperStatic = new RelationsHelperStatic(tables);\n\tconst relationsTables = Object.entries(tables).reduce<Record<string, RelationsBuilderTable>>((acc, [tKey, value]) => {\n\t\tconst rTable = new RelationsBuilderTable(value, tKey);\n\t\tconst columns = Object.entries(value[TableColumns]).reduce<\n\t\t\tRecord<string, RelationsBuilderColumnBase>\n\t\t>(\n\t\t\t(acc, [cKey, column]) => {\n\t\t\t\tconst rbColumn = new RelationsBuilderColumn(column as FieldValue, tKey, cKey);\n\t\t\t\tacc[cKey] = rbColumn;\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{},\n\t\t);\n\n\t\tacc[tKey] = Object.assign(rTable, columns);\n\n\t\treturn acc;\n\t}, {});\n\n\treturn Object.assign(helperStatic, relationsTables) as any;\n}\n\nexport function extractTablesFromSchema<TSchema extends Record<string, unknown>>(\n\tschema: TSchema,\n): ExtractTablesFromSchema<TSchema> {\n\treturn Object.fromEntries(\n\t\tObject.entries(schema).filter(([_, e]) => is(e, Table) || is(e, View)),\n\t) as ExtractTablesFromSchema<TSchema>;\n}\n\nexport type IncludeEveryTable<TTables extends Schema> = { [K in keyof TTables]: {} };\n\n/** Builds relational config for every table in schema */\nexport function defineRelations<\n\tTSchema extends Record<string, unknown>,\n\tTTables extends Schema = ExtractTablesFromSchema<TSchema>,\n>(\n\tschema: TSchema,\n): ExtractTablesWithRelations<{}, TTables>;\n/** Builds relational config for every table in schema */\nexport function defineRelations<\n\tTSchema extends Record<string, unknown>,\n\tTConfig extends RelationsBuilderConfig<TTables>,\n\tTTables extends Schema = ExtractTablesFromSchema<TSchema>,\n>(\n\tschema: TSchema,\n\trelations: (helpers: RelationsBuilder<TTables>) => TConfig,\n): ExtractTablesWithRelations<TConfig, TTables>;\nexport function defineRelations(\n\tschema: Record<string, unknown>,\n\trelations?: (helpers: RelationsBuilder<Schema>) => AnyRelationsBuilderConfig,\n): TablesRelationalConfig {\n\tconst tables = extractTablesFromSchema(schema);\n\tconst config = relations\n\t\t? relations(\n\t\t\tcreateRelationsHelper(tables) as RelationsBuilder<Schema>,\n\t\t)\n\t\t: {};\n\n\treturn buildRelations(tables, config);\n}\n\n/** Builds relational config for every table in schema */\nexport function defineRelationsPart<\n\tTSchema extends Record<string, unknown>,\n\tTTables extends Schema = ExtractTablesFromSchema<TSchema>,\n>(\n\tschema: TSchema,\n): ExtractTablesWithRelationsParts<IncludeEveryTable<TTables>, TTables>;\n/** Builds relational config only for tables present in relational config */\nexport function defineRelationsPart<\n\tTSchema extends Record<string, unknown>,\n\tTConfig extends RelationsBuilderConfig<TTables>,\n\tTTables extends Schema = ExtractTablesFromSchema<TSchema>,\n>(\n\tschema: TSchema,\n\trelations: (helpers: RelationsBuilder<TTables>) => TConfig,\n): ExtractTablesWithRelationsParts<TConfig, TTables>;\nexport function defineRelationsPart(\n\tschema: Record<string, unknown>,\n\trelations?: (helpers: RelationsBuilder<Schema>) => AnyRelationsBuilderConfig,\n): TablesRelationalConfig {\n\tconst tables = extractTablesFromSchema(schema);\n\tconst config = relations\n\t\t? relations(\n\t\t\tcreateRelationsHelper(tables) as RelationsBuilder<Schema>,\n\t\t)\n\t\t: Object.fromEntries(Object.keys(tables).map((k) => [k, {}])) as AnyRelationsBuilderConfig;\n\n\treturn buildRelationsParts(tables, config);\n}\n\nexport interface WithContainer {\n\twith?: Record<string, boolean | AnyDBQueryConfig | undefined>;\n}\n\nexport interface ColumnWithTSName {\n\tcolumn: Table | View | Column<any> | SQL | SQLWrapper | SQL.Aliased;\n\ttsName: string;\n}\n\nexport type RelationsOrder<TColumns extends FieldSelection> = {\n\t[K in keyof TColumns]?: 'asc' | 'desc';\n};\n\nexport type OrderBy = Exclude<AnyDBQueryConfig['orderBy'], undefined>;\n\nexport type Extras = Exclude<AnyDBQueryConfig['extras'], undefined>;\n\n/** @internal */\nexport function fieldSelectionToSQL(table: SchemaEntry, target: string) {\n\tconst field = table[TableColumns][target];\n\n\treturn field\n\t\t? is(field, Column)\n\t\t\t? field\n\t\t\t: is(field, SQL.Aliased)\n\t\t\t? sql`${table}.${sql.identifier(field.fieldAlias)}`\n\t\t\t: sql`${table}.${sql.identifier(target)}`\n\t\t: sql`${table}.${sql.identifier(target)}`;\n}\n\nfunction relationsFieldFilterToSQL(column: SQLWrapper, filter: RelationsFieldFilter<unknown>): SQL | undefined {\n\tif (typeof filter !== 'object' || is(filter, Placeholder)) return eq(column, filter);\n\n\tconst entries = Object.entries(filter as RelationFieldsFilterInternals<unknown>);\n\tif (!entries.length) return undefined;\n\n\tconst parts: (SQL)[] = [];\n\tfor (const [target, value] of entries) {\n\t\tif (value === undefined) continue;\n\n\t\tswitch (target as keyof RelationFieldsFilterInternals<unknown>) {\n\t\t\tcase 'NOT': {\n\t\t\t\tconst res = relationsFieldFilterToSQL(column, value as RelationsFieldFilter<unknown>);\n\t\t\t\tif (!res) continue;\n\n\t\t\t\tparts.push(not(res));\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase 'OR': {\n\t\t\t\tif (!(value as RelationsFieldFilter<unknown>[]).length) continue;\n\n\t\t\t\tparts.push(\n\t\t\t\t\tor(\n\t\t\t\t\t\t...(value as AnyRelationsFilter[]).map((subFilter) => relationsFieldFilterToSQL(column, subFilter)),\n\t\t\t\t\t)!,\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase 'AND': {\n\t\t\t\tif (!(value as RelationsFieldFilter<unknown>[]).length) continue;\n\n\t\t\t\tparts.push(\n\t\t\t\t\tand(\n\t\t\t\t\t\t...(value as AnyRelationsFilter[]).map((subFilter) => relationsFieldFilterToSQL(column, subFilter)),\n\t\t\t\t\t)!,\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase 'isNotNull':\n\t\t\tcase 'isNull': {\n\t\t\t\tif (!value) continue;\n\n\t\t\t\tparts.push(operators[target as 'isNull' | 'isNotNull'](column));\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase 'in': {\n\t\t\t\tparts.push(operators.inArray(column, value as any[] | Placeholder));\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase 'notIn': {\n\t\t\t\tparts.push(operators.notInArray(column, value as any[] | Placeholder));\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tparts.push(\n\t\t\t\t\t(operators[target as keyof typeof operators] as ((col: SQLWrapper, data: any) => SQL | undefined))(\n\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t)!,\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!parts.length) return undefined;\n\n\treturn and(...parts);\n}\n\nexport function relationsFilterToSQL(\n\ttable: SchemaEntry,\n\tfilter: AnyRelationsFilter | AnyTableFilter,\n): SQL | undefined;\nexport function relationsFilterToSQL(\n\ttable: SchemaEntry,\n\tfilter: AnyRelationsFilter | AnyTableFilter,\n\ttableRelations: RelationsRecord,\n\ttablesRelations: TablesRelationalConfig,\n\tcasing: CasingCache,\n\tdepth?: number,\n): SQL | undefined;\nexport function relationsFilterToSQL(\n\ttable: SchemaEntry,\n\tfilter: AnyRelationsFilter | AnyTableFilter,\n\ttableRelations: RelationsRecord = {},\n\ttablesRelations: TablesRelationalConfig = {},\n\tcasing?: CasingCache,\n\tdepth: number = 0,\n): SQL | undefined {\n\tconst entries = Object.entries(filter);\n\tif (!entries.length) return undefined;\n\n\tconst parts: SQL[] = [];\n\tfor (const [target, value] of entries) {\n\t\tif (value === undefined) continue;\n\n\t\tswitch (target) {\n\t\t\tcase 'RAW': {\n\t\t\t\tconst processed = typeof value === 'function'\n\t\t\t\t\t? (value as unknown as (table: FieldSelection, operators: Operators) => SQL)(table as any, operators)\n\t\t\t\t\t: (value as SQLWrapper).getSQL();\n\n\t\t\t\tparts.push(processed);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase 'OR': {\n\t\t\t\tif (!(value as AnyRelationsFilter[] | undefined)?.length) continue;\n\n\t\t\t\tparts.push(\n\t\t\t\t\tor(\n\t\t\t\t\t\t...(value as AnyRelationsFilter[]).map((subFilter) =>\n\t\t\t\t\t\t\trelationsFilterToSQL(table, subFilter, tableRelations, tablesRelations, casing!, depth)\n\t\t\t\t\t\t),\n\t\t\t\t\t)!,\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase 'AND': {\n\t\t\t\tif (!(value as AnyRelationsFilter[] | undefined)?.length) continue;\n\n\t\t\t\tparts.push(\n\t\t\t\t\tand(\n\t\t\t\t\t\t...(value as AnyRelationsFilter[]).map((subFilter) =>\n\t\t\t\t\t\t\trelationsFilterToSQL(table, subFilter, tableRelations, tablesRelations, casing!, depth)\n\t\t\t\t\t\t),\n\t\t\t\t\t)!,\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase 'NOT': {\n\t\t\t\tif (value === undefined) continue;\n\n\t\t\t\tconst built = relationsFilterToSQL(\n\t\t\t\t\ttable,\n\t\t\t\t\tvalue as AnyRelationsFilter,\n\t\t\t\t\ttableRelations,\n\t\t\t\t\ttablesRelations,\n\t\t\t\t\tcasing!,\n\t\t\t\t\tdepth,\n\t\t\t\t);\n\t\t\t\tif (!built) continue;\n\n\t\t\t\tparts.push(not(built));\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tif (table[TableColumns][target]) {\n\t\t\t\t\tconst column = fieldSelectionToSQL(table, target);\n\n\t\t\t\t\tconst colFilter = relationsFieldFilterToSQL(\n\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\tvalue as RelationsFieldFilter,\n\t\t\t\t\t);\n\t\t\t\t\tif (colFilter) parts.push(colFilter);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst relation = tableRelations[target];\n\t\t\t\tif (!relation) {\n\t\t\t\t\t// Should never trigger unless the types've been violated\n\t\t\t\t\tthrow new DrizzleError({\n\t\t\t\t\t\tmessage: `Unknown relational filter field: \"${target}\"`,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst targetTable = aliasedTable(relation.targetTable, `f${depth}`);\n\t\t\t\tconst throughTable = relation.throughTable ? aliasedTable(relation.throughTable, `ft${depth}`) : undefined;\n\t\t\t\tconst targetConfig = tablesRelations[relation.targetTableName]!;\n\n\t\t\t\tconst {\n\t\t\t\t\tfilter: relationFilter,\n\t\t\t\t\tjoinCondition,\n\t\t\t\t} = relationToSQL(casing!, relation, table, targetTable, throughTable);\n\t\t\t\tconst subfilter = typeof value === 'boolean' ? undefined : relationsFilterToSQL(\n\t\t\t\t\ttargetTable,\n\t\t\t\t\tvalue as AnyRelationsFilter,\n\t\t\t\t\ttargetConfig.relations,\n\t\t\t\t\ttablesRelations,\n\t\t\t\t\tcasing!,\n\t\t\t\t\tdepth + 1,\n\t\t\t\t);\n\t\t\t\tconst filter = and(\n\t\t\t\t\trelationFilter,\n\t\t\t\t\tsubfilter,\n\t\t\t\t);\n\n\t\t\t\tconst subquery = throughTable\n\t\t\t\t\t? sql`(select * from ${getTableAsAliasSQL(targetTable)} inner join ${\n\t\t\t\t\t\tgetTableAsAliasSQL(throughTable)\n\t\t\t\t\t} on ${joinCondition}${sql` where ${filter}`.if(filter)} limit 1)`\n\t\t\t\t\t: sql`(select * from ${getTableAsAliasSQL(targetTable)}${sql` where ${filter}`.if(filter)} limit 1)`;\n\t\t\t\tif (filter) parts.push((value ? exists : notExists)(subquery));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn and(...parts)!;\n}\n\nexport function relationsOrderToSQL(\n\ttable: SchemaEntry,\n\torders: OrderBy,\n): SQL | undefined {\n\tif (typeof orders === 'function') {\n\t\tconst data = orders(table as any, orderByOperators);\n\n\t\treturn is(data, SQL)\n\t\t\t? data\n\t\t\t: Array.isArray(data)\n\t\t\t? data.length\n\t\t\t\t? sql.join(data.map((o) => is(o, SQL) ? o : asc(o)), sql`, `)\n\t\t\t\t: undefined\n\t\t\t: is(data, Column)\n\t\t\t? asc(data)\n\t\t\t: undefined;\n\t}\n\n\tconst entries = Object.entries(orders).filter(([_, value]) => value);\n\tif (!entries.length) return undefined;\n\n\treturn sql.join(\n\t\tentries.map(([target, value]) => (value === 'asc' ? asc : desc)(fieldSelectionToSQL(table, target))),\n\t\tsql`, `,\n\t);\n}\n\nexport function relationExtrasToSQL(\n\ttable: SchemaEntry,\n\textras: Extras,\n) {\n\tconst subqueries: SQL[] = [];\n\tconst selection: BuildRelationalQueryResult['selection'] = [];\n\n\tfor (\n\t\tconst [key, field] of Object.entries(extras)\n\t) {\n\t\tif (!field) continue;\n\t\tconst extra = typeof field === 'function' ? field(table as any, { sql: operators.sql }) : field;\n\n\t\tconst query = sql`(${extra.getSQL()}) as ${sql.identifier(key)}`;\n\n\t\tquery.decoder = extra.getSQL().decoder;\n\n\t\tsubqueries.push(query);\n\t\tselection.push({\n\t\t\tkey,\n\t\t\tfield: query,\n\t\t});\n\t}\n\n\treturn {\n\t\tsql: subqueries.length ? sql.join(subqueries, sql`, `) : undefined,\n\t\tselection,\n\t};\n}\n\nexport interface BuiltRelationFilters {\n\tfilter?: SQL;\n\tjoinCondition?: SQL;\n}\n\nexport function relationToSQL(\n\tcasing: CasingCache,\n\trelation: Relation,\n\tsourceTable: SchemaEntry,\n\ttargetTable: SchemaEntry,\n\tthroughTable?: SchemaEntry,\n): BuiltRelationFilters {\n\tif (relation.through) {\n\t\tconst outerColumnWhere = relation.sourceColumns.map((s, i) => {\n\t\t\tconst t = relation.through!.source[i]!;\n\n\t\t\treturn eq(\n\t\t\t\tsql`${sourceTable}.${sql.identifier(casing.getColumnCasing(s))}`,\n\t\t\t\tsql`${throughTable!}.${sql.identifier(is(t._.column, Column) ? casing.getColumnCasing(t._.column) : t._.key)}`,\n\t\t\t);\n\t\t});\n\n\t\tconst innerColumnWhere = relation.targetColumns.map((s, i) => {\n\t\t\tconst t = relation.through!.target[i]!;\n\n\t\t\treturn eq(\n\t\t\t\tsql`${throughTable!}.${sql.identifier(is(t._.column, Column) ? casing.getColumnCasing(t._.column) : t._.key)}`,\n\t\t\t\tsql`${targetTable}.${sql.identifier(casing.getColumnCasing(s))}`,\n\t\t\t);\n\t\t});\n\n\t\treturn {\n\t\t\tfilter: and(\n\t\t\t\trelation.where\n\t\t\t\t\t? relationsFilterToSQL(relation.isReversed ? sourceTable : targetTable, relation.where)\n\t\t\t\t\t: undefined,\n\t\t\t\t...outerColumnWhere,\n\t\t\t),\n\t\t\tjoinCondition: and(...innerColumnWhere),\n\t\t};\n\t}\n\n\tconst columnWhere = relation.sourceColumns.map((s, i) => {\n\t\tconst t = relation.targetColumns[i]!;\n\n\t\treturn eq(\n\t\t\tsql`${sourceTable}.${sql.identifier(casing.getColumnCasing(s))}`,\n\t\t\tsql`${targetTable}.${sql.identifier(casing.getColumnCasing(t))}`,\n\t\t);\n\t});\n\n\tconst fullWhere = and(\n\t\t...columnWhere,\n\t\trelation.where\n\t\t\t? relationsFilterToSQL(relation.isReversed ? sourceTable : targetTable, relation.where)\n\t\t\t: undefined,\n\t)!;\n\n\treturn { filter: fullWhere };\n}\n\nexport function getTableAsAliasSQL(table: SchemaEntry) {\n\treturn sql`${\n\t\ttable[IsAlias]\n\t\t\t? sql`${sql`${sql.identifier(table[TableSchema] ?? '')}.`.if(table[TableSchema])}${\n\t\t\t\tsql.identifier(table[OriginalName])\n\t\t\t} as ${table}`\n\t\t\t: table\n\t}`;\n}\n"],"mappings":"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"}
@@ -108,7 +108,7 @@ function mapRowInterpreted(row, selection, parseJson) {
108
108
  else if (value === null) result[key] = null;
109
109
  else {
110
110
  const decoder = resolveDecoder(item.field);
111
- result[key] = decoder ? decoder(value) : value;
111
+ result[key] = decoder ? decoder(item.codec ? item.codec(value, item.arrayDimensions) : value) : item.codec ? item.codec(value, item.arrayDimensions) : value;
112
112
  }
113
113
  }
114
114
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["Column","SQL","Table","View","noopDecoder"],"sources":["../../src/row-mappers/index.ts"],"sourcesContent":["import { Column } from '~/column.ts';\nimport { is } from '~/entity.ts';\nimport type { BuildRelationalQueryResult } from '~/relations.ts';\nimport { noopDecoder, SQL, type SQLWrapper, View } from '~/sql/sql.ts';\nimport { Table } from '~/table.ts';\n\n/**\n * Type for the selection structure used by row mappers.\n */\nexport type RowMapperSelection = BuildRelationalQueryResult['selection'];\n\n/**\n * Result of a row mapper generator.\n * Contains the mapper function and metadata about the expected input format.\n */\nexport interface RowMapperResult {\n\t/** The mapper function that transforms ALL raw rows into typed objects in a single call */\n\tmapper:\n\t\t| ((rows: Record<string, unknown>[]) => Record<string, unknown>[])\n\t\t| ((rows: unknown[][]) => Record<string, unknown>[]);\n\t/** Whether this mapper expects array-mode input (from .values()) */\n\tisArrayMode: boolean;\n\t/** The generated function body code (for debugging purposes) */\n\tcode?: string;\n}\n\n/**\n * A function that generates a row mapper for a given selection.\n * The row mapper transforms raw database rows into properly typed objects.\n */\nexport type RowMapperGenerator = (\n\tselection: RowMapperSelection,\n\tparseJson: boolean,\n) => RowMapperResult;\n\n// ============================================================================\n// JIT Row Mapper (uses new Function for best performance)\n// ============================================================================\n\nfunction resolveDecoder(\n\tfield: RowMapperSelection[number]['field'],\n): ((value: unknown) => unknown) | null {\n\tlet decoder: { mapFromDriverValue: (v: unknown) => unknown; mapFromJsonValue?: (v: unknown) => unknown };\n\n\tif (is(field, Column)) {\n\t\tdecoder = field;\n\t} else if (is(field, SQL)) {\n\t\tdecoder = field.decoder;\n\t} else if (is(field, SQL.Aliased)) {\n\t\tdecoder = field.sql.decoder;\n\t} else if (is(field, Table) || is(field, View)) {\n\t\treturn null;\n\t} else {\n\t\tdecoder = (field as SQLWrapper).getSQL().decoder;\n\t}\n\n\tif (decoder.mapFromDriverValue === noopDecoder.mapFromDriverValue) {\n\t\treturn null;\n\t}\n\n\treturn 'mapFromJsonValue' in decoder && decoder.mapFromJsonValue\n\t\t? (decoder.mapFromJsonValue as (value: unknown) => unknown).bind(decoder)\n\t\t: decoder.mapFromDriverValue.bind(decoder);\n}\n\nfunction generateObjectCode(\n\tselection: RowMapperSelection,\n\tdecoders: ((value: unknown) => unknown)[],\n\trowVar: string,\n\tparseJson: boolean,\n): string {\n\tconst props: string[] = [];\n\n\tfor (const item of selection) {\n\t\tconst key = item.key;\n\t\tconst keyLiteral = JSON.stringify(key);\n\t\tconst accessor = `${rowVar}[${keyLiteral}]`;\n\n\t\tif (item.selection) {\n\t\t\tconst innerVar = `i${decoders.length}`;\n\t\t\tconst innerObject = generateObjectCode(item.selection, decoders, innerVar, false);\n\n\t\t\tlet nestedCode: string;\n\t\t\tif (item.isArray) {\n\t\t\t\tnestedCode = `((a) => {\n const l = a.length, r = Array.from({ length: l });\n for (let j = 0; j < l; j++) { const ${innerVar} = a[j]; r[j] = ${innerObject}; }\n return r;\n })`;\n\t\t\t} else {\n\t\t\t\tnestedCode = `((${innerVar}) => (${innerObject}))`;\n\t\t\t}\n\n\t\t\tif (parseJson) {\n\t\t\t\tprops.push(`${keyLiteral}: ${accessor} === null ? null : ((v) => {\n const p = JSON.parse(v);\n return p === null ? null : ${nestedCode}(p);\n })(${accessor})`);\n\t\t\t} else {\n\t\t\t\tprops.push(`${keyLiteral}: ${accessor} === null ? null : ${nestedCode}(${accessor})`);\n\t\t\t}\n\t\t} else {\n\t\t\tconst decoder = resolveDecoder(item.field);\n\t\t\tif (decoder === null) {\n\t\t\t\tprops.push(`${keyLiteral}: ${accessor}`);\n\t\t\t} else {\n\t\t\t\tconst idx = decoders.length;\n\t\t\t\tdecoders.push(decoder);\n\t\t\t\tprops.push(`${keyLiteral}: d[${idx}](${accessor})`);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn `{ ${props.join(', ')} }`;\n}\n\n/**\n * JIT-compiled row mapper generator.\n * Uses `new Function()` to generate optimized mapping code at prepare time.\n *\n * **Note:** This mapper does NOT work in environments that restrict dynamic code evaluation,\n * such as Cloudflare Workers, Deno Deploy, or Vercel Edge Functions.\n * Use `interpretedRowMapper` in those environments.\n *\n * @example\n * ```ts\n * import { jitRowMapper } from 'drizzle-orm/row-mappers';\n *\n * const db = drizzle({\n * client,\n * schema,\n * relations,\n * rowMapperGenerator: jitRowMapper,\n * });\n * ```\n */\nexport const jitRowMapper: RowMapperGenerator = (\n\tselection: RowMapperSelection,\n\tparseJson: boolean,\n): RowMapperResult => {\n\tconst decoders: ((value: unknown) => unknown)[] = [];\n\tconst objectCode = generateObjectCode(selection, decoders, 'r', parseJson);\n\n\t// Generate batch processing code - mutates rows in-place to avoid allocation\n\tconst batchCode = `const l = rows.length;\nfor (let i = 0; i < l; i++) {\n const r = rows[i];\n rows[i] = ${objectCode};\n}\nreturn rows;`;\n\n\tconst fn = decoders.length > 0\n\t\t? new Function('rows', 'd', batchCode) as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tdecoders: ((v: unknown) => unknown)[],\n\t\t) => Record<string, unknown>[]\n\t\t: new Function('rows', batchCode) as (rows: Record<string, unknown>[]) => Record<string, unknown>[];\n\n\treturn {\n\t\tmapper: decoders.length > 0\n\t\t\t? (rows: Record<string, unknown>[]) =>\n\t\t\t\t(fn as (rows: Record<string, unknown>[], d: ((v: unknown) => unknown)[]) => Record<string, unknown>[])(\n\t\t\t\t\trows,\n\t\t\t\t\tdecoders,\n\t\t\t\t)\n\t\t\t: fn as (rows: Record<string, unknown>[]) => Record<string, unknown>[],\n\t\tisArrayMode: false,\n\t\tcode: batchCode,\n\t};\n};\n\n// ============================================================================\n// Interpreted Row Mapper (works in all environments)\n// ============================================================================\n\nfunction mapRowInterpreted(\n\trow: Record<string, unknown>,\n\tselection: RowMapperSelection,\n\tparseJson: boolean,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (const item of selection) {\n\t\tconst key = item.key;\n\t\tlet value = row[key];\n\n\t\tif (item.selection) {\n\t\t\t// Nested relation\n\t\t\tif (value === null) {\n\t\t\t\tresult[key] = null;\n\t\t\t} else {\n\t\t\t\tif (parseJson && typeof value === 'string') {\n\t\t\t\t\tvalue = JSON.parse(value);\n\t\t\t\t\tif (value === null) {\n\t\t\t\t\t\tresult[key] = null;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (item.isArray) {\n\t\t\t\t\tconst arr = value as Record<string, unknown>[];\n\t\t\t\t\tconst mapped: Record<string, unknown>[] = [];\n\t\t\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\t\t\tmapped[i] = mapRowInterpreted(arr[i]!, item.selection, false);\n\t\t\t\t\t}\n\t\t\t\t\tresult[key] = mapped;\n\t\t\t\t} else {\n\t\t\t\t\tresult[key] = mapRowInterpreted(value as Record<string, unknown>, item.selection, false);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Leaf field\n\t\t\tif (value === null) {\n\t\t\t\tresult[key] = null;\n\t\t\t} else {\n\t\t\t\tconst decoder = resolveDecoder(item.field);\n\t\t\t\tresult[key] = decoder ? decoder(value) : value;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Interpreted row mapper generator.\n * Uses a recursive function to map rows at runtime.\n *\n * This mapper works in ALL JavaScript environments, including those that\n * restrict dynamic code evaluation (Cloudflare Workers, Deno Deploy, Vercel Edge Functions).\n *\n * Performance is slightly slower than `jitRowMapper`, but the difference\n * is negligible for most use cases.\n *\n * @example\n * ```ts\n * import { interpretedRowMapper } from 'drizzle-orm/row-mappers';\n *\n * const db = drizzle({\n * client,\n * schema,\n * relations,\n * rowMapperGenerator: interpretedRowMapper,\n * });\n * ```\n */\nexport const interpretedRowMapper: RowMapperGenerator = (\n\tselection: RowMapperSelection,\n\tparseJson: boolean,\n): RowMapperResult => {\n\treturn {\n\t\tmapper: (rows: Record<string, unknown>[]) => {\n\t\t\tconst l = rows.length;\n\t\t\tfor (let i = 0; i < l; i++) {\n\t\t\t\trows[i] = mapRowInterpreted(rows[i]!, selection, parseJson);\n\t\t\t}\n\t\t\treturn rows;\n\t\t},\n\t\tisArrayMode: false,\n\t\tcode: '[interpreted mode - no generated code]',\n\t};\n};\n\n/**\n * Default row mapper generator.\n * Currently uses the JIT mapper for best performance.\n */\nexport const defaultRowMapper: RowMapperGenerator = jitRowMapper;\n\n// ============================================================================\n// JIT Array-Mode Row Mapper (uses new Function + .values() for best performance)\n// ============================================================================\n\nfunction generateArrayObjectCode(\n\tselection: RowMapperSelection,\n\tdecoders: ((value: unknown) => unknown)[],\n\trowVar: string,\n\tindexRef: { value: number },\n\tparseJson: boolean,\n): string {\n\tconst props: string[] = [];\n\n\tfor (const item of selection) {\n\t\tconst key = item.key;\n\t\tconst keyLiteral = JSON.stringify(key);\n\n\t\tif (item.selection) {\n\t\t\t// Nested relations are still accessed by key (they come as JSON objects)\n\t\t\tconst idx = indexRef.value++;\n\t\t\tconst accessor = `${rowVar}[${idx}]`;\n\t\t\tconst innerVar = `i${decoders.length}`;\n\t\t\t// Nested objects still use key-based access since they're parsed JSON\n\t\t\tconst innerObject = generateObjectCode(item.selection, decoders, innerVar, false);\n\n\t\t\tlet nestedCode: string;\n\t\t\tif (item.isArray) {\n\t\t\t\tnestedCode = `((a) => {\n const l = a.length, r = Array.from({ length: l });\n for (let j = 0; j < l; j++) { const ${innerVar} = a[j]; r[j] = ${innerObject}; }\n return r;\n })`;\n\t\t\t} else {\n\t\t\t\tnestedCode = `((${innerVar}) => (${innerObject}))`;\n\t\t\t}\n\n\t\t\tif (parseJson) {\n\t\t\t\tprops.push(`${keyLiteral}: ${accessor} === null ? null : ((v) => {\n const p = JSON.parse(v);\n return p === null ? null : ${nestedCode}(p);\n })(${accessor})`);\n\t\t\t} else {\n\t\t\t\tprops.push(`${keyLiteral}: ${accessor} === null ? null : ${nestedCode}(${accessor})`);\n\t\t\t}\n\t\t} else {\n\t\t\t// Leaf field - access by index\n\t\t\tconst idx = indexRef.value++;\n\t\t\tconst accessor = `${rowVar}[${idx}]`;\n\t\t\tconst decoder = resolveDecoder(item.field);\n\t\t\tif (decoder === null) {\n\t\t\t\tprops.push(`${keyLiteral}: ${accessor}`);\n\t\t\t} else {\n\t\t\t\tconst decoderIdx = decoders.length;\n\t\t\t\tdecoders.push(decoder);\n\t\t\t\tprops.push(`${keyLiteral}: d[${decoderIdx}](${accessor})`);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn `{ ${props.join(', ')} }`;\n}\n\n/**\n * JIT-compiled array-mode row mapper generator.\n * Uses `new Function()` to generate optimized mapping code that works with\n * array-based rows from `.values()` queries for maximum performance.\n *\n * This mapper expects the driver to return rows as arrays (e.g., `[1, \"John\", \"2024-01-01\"]`)\n * instead of objects (e.g., `{id: 1, name: \"John\", createdAt: \"2024-01-01\"}`).\n *\n * **Note:** This mapper does NOT work in environments that restrict dynamic code evaluation,\n * such as Cloudflare Workers, Deno Deploy, or Vercel Edge Functions.\n *\n * @example\n * ```ts\n * import { jitArrayRowMapper } from 'drizzle-orm/row-mappers';\n *\n * const db = drizzle({\n * client,\n * schema,\n * relations,\n * rowMapperGenerator: jitArrayRowMapper,\n * });\n * ```\n */\nexport const jitArrayRowMapper: RowMapperGenerator = (\n\tselection: RowMapperSelection,\n\tparseJson: boolean,\n): RowMapperResult => {\n\tconst decoders: ((value: unknown) => unknown)[] = [];\n\tconst indexRef = { value: 0 };\n\tconst objectCode = generateArrayObjectCode(selection, decoders, 'r', indexRef, parseJson);\n\n\t// Generate batch processing code - mutates rows in-place to avoid allocation\n\tconst batchCode = `const l = rows.length;\nfor (let i = 0; i < l; i++) {\n const r = rows[i];\n rows[i] = ${objectCode};\n}\nreturn rows;`;\n\n\tconst fn = decoders.length > 0\n\t\t? new Function('rows', 'd', batchCode) as (\n\t\t\trows: unknown[][],\n\t\t\tdecoders: ((v: unknown) => unknown)[],\n\t\t) => Record<string, unknown>[]\n\t\t: new Function('rows', batchCode) as (rows: unknown[][]) => Record<string, unknown>[];\n\n\treturn {\n\t\tmapper: decoders.length > 0\n\t\t\t? (rows: unknown[][]) =>\n\t\t\t\t(fn as (rows: unknown[][], d: ((v: unknown) => unknown)[]) => Record<string, unknown>[])(rows, decoders)\n\t\t\t: fn as (rows: unknown[][]) => Record<string, unknown>[],\n\t\tisArrayMode: true,\n\t\tcode: batchCode,\n\t};\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["Column","SQL","Table","View","noopDecoder"],"sources":["../../src/row-mappers/index.ts"],"sourcesContent":["import { Column } from '~/column.ts';\nimport { is } from '~/entity.ts';\nimport type { BuildRelationalQueryResult } from '~/relations.ts';\nimport { noopDecoder, SQL, type SQLWrapper, View } from '~/sql/sql.ts';\nimport { Table } from '~/table.ts';\n\n/**\n * Type for the selection structure used by row mappers.\n */\nexport type RowMapperSelection = BuildRelationalQueryResult['selection'];\n\n/**\n * Result of a row mapper generator.\n * Contains the mapper function and metadata about the expected input format.\n */\nexport interface RowMapperResult {\n\t/** The mapper function that transforms ALL raw rows into typed objects in a single call */\n\tmapper:\n\t\t| ((rows: Record<string, unknown>[]) => Record<string, unknown>[])\n\t\t| ((rows: unknown[][]) => Record<string, unknown>[]);\n\t/** Whether this mapper expects array-mode input (from .values()) */\n\tisArrayMode: boolean;\n\t/** The generated function body code (for debugging purposes) */\n\tcode?: string;\n}\n\n/**\n * A function that generates a row mapper for a given selection.\n * The row mapper transforms raw database rows into properly typed objects.\n */\nexport type RowMapperGenerator = (\n\tselection: RowMapperSelection,\n\tparseJson: boolean,\n) => RowMapperResult;\n\n// ============================================================================\n// JIT Row Mapper (uses new Function for best performance)\n// ============================================================================\n\nfunction resolveDecoder(\n\tfield: RowMapperSelection[number]['field'],\n): ((value: unknown) => unknown) | null {\n\tlet decoder: { mapFromDriverValue: (v: unknown) => unknown; mapFromJsonValue?: (v: unknown) => unknown };\n\n\tif (is(field, Column)) {\n\t\tdecoder = field;\n\t} else if (is(field, SQL)) {\n\t\tdecoder = field.decoder;\n\t} else if (is(field, SQL.Aliased)) {\n\t\tdecoder = field.sql.decoder;\n\t} else if (is(field, Table) || is(field, View)) {\n\t\treturn null;\n\t} else {\n\t\tdecoder = (field as SQLWrapper).getSQL().decoder;\n\t}\n\n\tif (decoder.mapFromDriverValue === noopDecoder.mapFromDriverValue) {\n\t\treturn null;\n\t}\n\n\treturn 'mapFromJsonValue' in decoder && decoder.mapFromJsonValue\n\t\t? (decoder.mapFromJsonValue as (value: unknown) => unknown).bind(decoder)\n\t\t: decoder.mapFromDriverValue.bind(decoder);\n}\n\nfunction generateObjectCode(\n\tselection: RowMapperSelection,\n\tdecoders: ((value: unknown) => unknown)[],\n\trowVar: string,\n\tparseJson: boolean,\n): string {\n\tconst props: string[] = [];\n\n\tfor (const item of selection) {\n\t\tconst key = item.key;\n\t\tconst keyLiteral = JSON.stringify(key);\n\t\tconst accessor = `${rowVar}[${keyLiteral}]`;\n\n\t\tif (item.selection) {\n\t\t\tconst innerVar = `i${decoders.length}`;\n\t\t\tconst innerObject = generateObjectCode(item.selection, decoders, innerVar, false);\n\n\t\t\tlet nestedCode: string;\n\t\t\tif (item.isArray) {\n\t\t\t\tnestedCode = `((a) => {\n const l = a.length, r = Array.from({ length: l });\n for (let j = 0; j < l; j++) { const ${innerVar} = a[j]; r[j] = ${innerObject}; }\n return r;\n })`;\n\t\t\t} else {\n\t\t\t\tnestedCode = `((${innerVar}) => (${innerObject}))`;\n\t\t\t}\n\n\t\t\tif (parseJson) {\n\t\t\t\tprops.push(`${keyLiteral}: ${accessor} === null ? null : ((v) => {\n const p = JSON.parse(v);\n return p === null ? null : ${nestedCode}(p);\n })(${accessor})`);\n\t\t\t} else {\n\t\t\t\tprops.push(`${keyLiteral}: ${accessor} === null ? null : ${nestedCode}(${accessor})`);\n\t\t\t}\n\t\t} else {\n\t\t\tconst decoder = resolveDecoder(item.field);\n\t\t\tif (decoder === null) {\n\t\t\t\tprops.push(`${keyLiteral}: ${accessor}`);\n\t\t\t} else {\n\t\t\t\tconst idx = decoders.length;\n\t\t\t\tdecoders.push(decoder);\n\t\t\t\tprops.push(`${keyLiteral}: d[${idx}](${accessor})`);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn `{ ${props.join(', ')} }`;\n}\n\n/**\n * JIT-compiled row mapper generator.\n * Uses `new Function()` to generate optimized mapping code at prepare time.\n *\n * **Note:** This mapper does NOT work in environments that restrict dynamic code evaluation,\n * such as Cloudflare Workers, Deno Deploy, or Vercel Edge Functions.\n * Use `interpretedRowMapper` in those environments.\n *\n * @example\n * ```ts\n * import { jitRowMapper } from 'drizzle-orm/row-mappers';\n *\n * const db = drizzle({\n * client,\n * schema,\n * relations,\n * rowMapperGenerator: jitRowMapper,\n * });\n * ```\n */\nexport const jitRowMapper: RowMapperGenerator = (\n\tselection: RowMapperSelection,\n\tparseJson: boolean,\n): RowMapperResult => {\n\tconst decoders: ((value: unknown) => unknown)[] = [];\n\tconst objectCode = generateObjectCode(selection, decoders, 'r', parseJson);\n\n\t// Generate batch processing code - mutates rows in-place to avoid allocation\n\tconst batchCode = `const l = rows.length;\nfor (let i = 0; i < l; i++) {\n const r = rows[i];\n rows[i] = ${objectCode};\n}\nreturn rows;`;\n\n\tconst fn = decoders.length > 0\n\t\t? new Function('rows', 'd', batchCode) as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tdecoders: ((v: unknown) => unknown)[],\n\t\t) => Record<string, unknown>[]\n\t\t: new Function('rows', batchCode) as (rows: Record<string, unknown>[]) => Record<string, unknown>[];\n\n\treturn {\n\t\tmapper: decoders.length > 0\n\t\t\t? (rows: Record<string, unknown>[]) =>\n\t\t\t\t(fn as (rows: Record<string, unknown>[], d: ((v: unknown) => unknown)[]) => Record<string, unknown>[])(\n\t\t\t\t\trows,\n\t\t\t\t\tdecoders,\n\t\t\t\t)\n\t\t\t: fn as (rows: Record<string, unknown>[]) => Record<string, unknown>[],\n\t\tisArrayMode: false,\n\t\tcode: batchCode,\n\t};\n};\n\n// ============================================================================\n// Interpreted Row Mapper (works in all environments)\n// ============================================================================\n\nfunction mapRowInterpreted(\n\trow: Record<string, unknown>,\n\tselection: RowMapperSelection,\n\tparseJson: boolean,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (const item of selection) {\n\t\tconst key = item.key;\n\t\tlet value = row[key];\n\n\t\tif (item.selection) {\n\t\t\t// Nested relation\n\t\t\tif (value === null) {\n\t\t\t\tresult[key] = null;\n\t\t\t} else {\n\t\t\t\tif (parseJson && typeof value === 'string') {\n\t\t\t\t\tvalue = JSON.parse(value);\n\t\t\t\t\tif (value === null) {\n\t\t\t\t\t\tresult[key] = null;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (item.isArray) {\n\t\t\t\t\tconst arr = value as Record<string, unknown>[];\n\t\t\t\t\tconst mapped: Record<string, unknown>[] = [];\n\t\t\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\t\t\tmapped[i] = mapRowInterpreted(arr[i]!, item.selection, false);\n\t\t\t\t\t}\n\t\t\t\t\tresult[key] = mapped;\n\t\t\t\t} else {\n\t\t\t\t\tresult[key] = mapRowInterpreted(value as Record<string, unknown>, item.selection, false);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Leaf field\n\t\t\tif (value === null) {\n\t\t\t\tresult[key] = null;\n\t\t\t} else {\n\t\t\t\tconst decoder = resolveDecoder(item.field);\n\t\t\t\tresult[key] = decoder\n\t\t\t\t\t? decoder(item.codec ? item.codec(value, item.arrayDimensions!) : value)\n\t\t\t\t\t: item.codec\n\t\t\t\t\t? item.codec(value, item.arrayDimensions!)\n\t\t\t\t\t: value;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Interpreted row mapper generator.\n * Uses a recursive function to map rows at runtime.\n *\n * This mapper works in ALL JavaScript environments, including those that\n * restrict dynamic code evaluation (Cloudflare Workers, Deno Deploy, Vercel Edge Functions).\n *\n * Performance is slightly slower than `jitRowMapper`, but the difference\n * is negligible for most use cases.\n *\n * @example\n * ```ts\n * import { interpretedRowMapper } from 'drizzle-orm/row-mappers';\n *\n * const db = drizzle({\n * client,\n * schema,\n * relations,\n * rowMapperGenerator: interpretedRowMapper,\n * });\n * ```\n */\nexport const interpretedRowMapper: RowMapperGenerator = (\n\tselection: RowMapperSelection,\n\tparseJson: boolean,\n): RowMapperResult => {\n\treturn {\n\t\tmapper: (rows: Record<string, unknown>[]) => {\n\t\t\tconst l = rows.length;\n\t\t\tfor (let i = 0; i < l; i++) {\n\t\t\t\trows[i] = mapRowInterpreted(rows[i]!, selection, parseJson);\n\t\t\t}\n\t\t\treturn rows;\n\t\t},\n\t\tisArrayMode: false,\n\t\tcode: '[interpreted mode - no generated code]',\n\t};\n};\n\n/**\n * Default row mapper generator.\n * Currently uses the JIT mapper for best performance.\n */\nexport const defaultRowMapper: RowMapperGenerator = jitRowMapper;\n\n// ============================================================================\n// JIT Array-Mode Row Mapper (uses new Function + .values() for best performance)\n// ============================================================================\n\nfunction generateArrayObjectCode(\n\tselection: RowMapperSelection,\n\tdecoders: ((value: unknown) => unknown)[],\n\trowVar: string,\n\tindexRef: { value: number },\n\tparseJson: boolean,\n): string {\n\tconst props: string[] = [];\n\n\tfor (const item of selection) {\n\t\tconst key = item.key;\n\t\tconst keyLiteral = JSON.stringify(key);\n\n\t\tif (item.selection) {\n\t\t\t// Nested relations are still accessed by key (they come as JSON objects)\n\t\t\tconst idx = indexRef.value++;\n\t\t\tconst accessor = `${rowVar}[${idx}]`;\n\t\t\tconst innerVar = `i${decoders.length}`;\n\t\t\t// Nested objects still use key-based access since they're parsed JSON\n\t\t\tconst innerObject = generateObjectCode(item.selection, decoders, innerVar, false);\n\n\t\t\tlet nestedCode: string;\n\t\t\tif (item.isArray) {\n\t\t\t\tnestedCode = `((a) => {\n const l = a.length, r = Array.from({ length: l });\n for (let j = 0; j < l; j++) { const ${innerVar} = a[j]; r[j] = ${innerObject}; }\n return r;\n })`;\n\t\t\t} else {\n\t\t\t\tnestedCode = `((${innerVar}) => (${innerObject}))`;\n\t\t\t}\n\n\t\t\tif (parseJson) {\n\t\t\t\tprops.push(`${keyLiteral}: ${accessor} === null ? null : ((v) => {\n const p = JSON.parse(v);\n return p === null ? null : ${nestedCode}(p);\n })(${accessor})`);\n\t\t\t} else {\n\t\t\t\tprops.push(`${keyLiteral}: ${accessor} === null ? null : ${nestedCode}(${accessor})`);\n\t\t\t}\n\t\t} else {\n\t\t\t// Leaf field - access by index\n\t\t\tconst idx = indexRef.value++;\n\t\t\tconst accessor = `${rowVar}[${idx}]`;\n\t\t\tconst decoder = resolveDecoder(item.field);\n\t\t\tif (decoder === null) {\n\t\t\t\tprops.push(`${keyLiteral}: ${accessor}`);\n\t\t\t} else {\n\t\t\t\tconst decoderIdx = decoders.length;\n\t\t\t\tdecoders.push(decoder);\n\t\t\t\tprops.push(`${keyLiteral}: d[${decoderIdx}](${accessor})`);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn `{ ${props.join(', ')} }`;\n}\n\n/**\n * JIT-compiled array-mode row mapper generator.\n * Uses `new Function()` to generate optimized mapping code that works with\n * array-based rows from `.values()` queries for maximum performance.\n *\n * This mapper expects the driver to return rows as arrays (e.g., `[1, \"John\", \"2024-01-01\"]`)\n * instead of objects (e.g., `{id: 1, name: \"John\", createdAt: \"2024-01-01\"}`).\n *\n * **Note:** This mapper does NOT work in environments that restrict dynamic code evaluation,\n * such as Cloudflare Workers, Deno Deploy, or Vercel Edge Functions.\n *\n * @example\n * ```ts\n * import { jitArrayRowMapper } from 'drizzle-orm/row-mappers';\n *\n * const db = drizzle({\n * client,\n * schema,\n * relations,\n * rowMapperGenerator: jitArrayRowMapper,\n * });\n * ```\n */\nexport const jitArrayRowMapper: RowMapperGenerator = (\n\tselection: RowMapperSelection,\n\tparseJson: boolean,\n): RowMapperResult => {\n\tconst decoders: ((value: unknown) => unknown)[] = [];\n\tconst indexRef = { value: 0 };\n\tconst objectCode = generateArrayObjectCode(selection, decoders, 'r', indexRef, parseJson);\n\n\t// Generate batch processing code - mutates rows in-place to avoid allocation\n\tconst batchCode = `const l = rows.length;\nfor (let i = 0; i < l; i++) {\n const r = rows[i];\n rows[i] = ${objectCode};\n}\nreturn rows;`;\n\n\tconst fn = decoders.length > 0\n\t\t? new Function('rows', 'd', batchCode) as (\n\t\t\trows: unknown[][],\n\t\t\tdecoders: ((v: unknown) => unknown)[],\n\t\t) => Record<string, unknown>[]\n\t\t: new Function('rows', batchCode) as (rows: unknown[][]) => Record<string, unknown>[];\n\n\treturn {\n\t\tmapper: decoders.length > 0\n\t\t\t? (rows: unknown[][]) =>\n\t\t\t\t(fn as (rows: unknown[][], d: ((v: unknown) => unknown)[]) => Record<string, unknown>[])(rows, decoders)\n\t\t\t: fn as (rows: unknown[][]) => Record<string, unknown>[],\n\t\tisArrayMode: true,\n\t\tcode: batchCode,\n\t};\n};\n"],"mappings":"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"}
@@ -106,7 +106,7 @@ function mapRowInterpreted(row, selection, parseJson) {
106
106
  else if (value === null) result[key] = null;
107
107
  else {
108
108
  const decoder = resolveDecoder(item.field);
109
- result[key] = decoder ? decoder(value) : value;
109
+ result[key] = decoder ? decoder(item.codec ? item.codec(value, item.arrayDimensions) : value) : item.codec ? item.codec(value, item.arrayDimensions) : value;
110
110
  }
111
111
  }
112
112
  return result;