drizzle-orm 0.38.3-2329e17 → 0.38.3-348fb92

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 (607) hide show
  1. package/_relations.cjs +328 -0
  2. package/_relations.cjs.map +1 -0
  3. package/_relations.d.cts +215 -0
  4. package/_relations.d.ts +215 -0
  5. package/_relations.js +316 -0
  6. package/_relations.js.map +1 -0
  7. package/alias.cjs.map +1 -1
  8. package/alias.d.cts +3 -3
  9. package/alias.d.ts +3 -3
  10. package/alias.js.map +1 -1
  11. package/aws-data-api/pg/driver.cjs +19 -5
  12. package/aws-data-api/pg/driver.cjs.map +1 -1
  13. package/aws-data-api/pg/driver.d.cts +9 -8
  14. package/aws-data-api/pg/driver.d.ts +9 -8
  15. package/aws-data-api/pg/driver.js +9 -8
  16. package/aws-data-api/pg/driver.js.map +1 -1
  17. package/aws-data-api/pg/migrator.cjs.map +1 -1
  18. package/aws-data-api/pg/migrator.d.cts +2 -1
  19. package/aws-data-api/pg/migrator.d.ts +2 -1
  20. package/aws-data-api/pg/migrator.js.map +1 -1
  21. package/aws-data-api/pg/session.cjs +67 -4
  22. package/aws-data-api/pg/session.cjs.map +1 -1
  23. package/aws-data-api/pg/session.d.cts +13 -8
  24. package/aws-data-api/pg/session.d.ts +13 -8
  25. package/aws-data-api/pg/session.js +67 -4
  26. package/aws-data-api/pg/session.js.map +1 -1
  27. package/better-sqlite3/driver.cjs +12 -5
  28. package/better-sqlite3/driver.cjs.map +1 -1
  29. package/better-sqlite3/driver.d.cts +7 -6
  30. package/better-sqlite3/driver.d.ts +7 -6
  31. package/better-sqlite3/driver.js +12 -8
  32. package/better-sqlite3/driver.js.map +1 -1
  33. package/better-sqlite3/migrator.cjs.map +1 -1
  34. package/better-sqlite3/migrator.d.cts +2 -1
  35. package/better-sqlite3/migrator.d.ts +2 -1
  36. package/better-sqlite3/migrator.js.map +1 -1
  37. package/better-sqlite3/session.cjs +49 -4
  38. package/better-sqlite3/session.cjs.map +1 -1
  39. package/better-sqlite3/session.d.cts +14 -8
  40. package/better-sqlite3/session.d.ts +14 -8
  41. package/better-sqlite3/session.js +49 -4
  42. package/better-sqlite3/session.js.map +1 -1
  43. package/bun-sqlite/driver.cjs +22 -5
  44. package/bun-sqlite/driver.cjs.map +1 -1
  45. package/bun-sqlite/driver.d.cts +7 -6
  46. package/bun-sqlite/driver.d.ts +7 -6
  47. package/bun-sqlite/driver.js +12 -8
  48. package/bun-sqlite/driver.js.map +1 -1
  49. package/bun-sqlite/migrator.cjs.map +1 -1
  50. package/bun-sqlite/migrator.d.cts +2 -1
  51. package/bun-sqlite/migrator.d.ts +2 -1
  52. package/bun-sqlite/migrator.js.map +1 -1
  53. package/bun-sqlite/session.cjs +49 -4
  54. package/bun-sqlite/session.cjs.map +1 -1
  55. package/bun-sqlite/session.d.cts +14 -8
  56. package/bun-sqlite/session.d.ts +14 -8
  57. package/bun-sqlite/session.js +49 -4
  58. package/bun-sqlite/session.js.map +1 -1
  59. package/d1/driver.cjs +22 -5
  60. package/d1/driver.cjs.map +1 -1
  61. package/d1/driver.d.cts +3 -2
  62. package/d1/driver.d.ts +3 -2
  63. package/d1/driver.js +12 -8
  64. package/d1/driver.js.map +1 -1
  65. package/d1/migrator.cjs.map +1 -1
  66. package/d1/migrator.d.cts +2 -1
  67. package/d1/migrator.d.ts +2 -1
  68. package/d1/migrator.js.map +1 -1
  69. package/d1/session.cjs +48 -6
  70. package/d1/session.cjs.map +1 -1
  71. package/d1/session.d.cts +15 -8
  72. package/d1/session.d.ts +15 -8
  73. package/d1/session.js +48 -6
  74. package/d1/session.js.map +1 -1
  75. package/durable-sqlite/driver.cjs +16 -5
  76. package/durable-sqlite/driver.cjs.map +1 -1
  77. package/durable-sqlite/driver.d.cts +3 -2
  78. package/durable-sqlite/driver.d.ts +3 -2
  79. package/durable-sqlite/driver.js +6 -8
  80. package/durable-sqlite/driver.js.map +1 -1
  81. package/durable-sqlite/migrator.cjs.map +1 -1
  82. package/durable-sqlite/migrator.d.cts +2 -1
  83. package/durable-sqlite/migrator.d.ts +2 -1
  84. package/durable-sqlite/migrator.js.map +1 -1
  85. package/durable-sqlite/session.cjs +46 -4
  86. package/durable-sqlite/session.cjs.map +1 -1
  87. package/durable-sqlite/session.d.cts +14 -8
  88. package/durable-sqlite/session.d.ts +14 -8
  89. package/durable-sqlite/session.js +46 -4
  90. package/durable-sqlite/session.js.map +1 -1
  91. package/expo-sqlite/driver.cjs +22 -5
  92. package/expo-sqlite/driver.cjs.map +1 -1
  93. package/expo-sqlite/driver.d.cts +3 -2
  94. package/expo-sqlite/driver.d.ts +3 -2
  95. package/expo-sqlite/driver.js +12 -8
  96. package/expo-sqlite/driver.js.map +1 -1
  97. package/expo-sqlite/migrator.cjs.map +1 -1
  98. package/expo-sqlite/migrator.d.cts +3 -2
  99. package/expo-sqlite/migrator.d.ts +3 -2
  100. package/expo-sqlite/migrator.js.map +1 -1
  101. package/expo-sqlite/query.cjs +13 -2
  102. package/expo-sqlite/query.cjs.map +1 -1
  103. package/expo-sqlite/query.d.cts +2 -1
  104. package/expo-sqlite/query.d.ts +2 -1
  105. package/expo-sqlite/query.js +3 -2
  106. package/expo-sqlite/query.js.map +1 -1
  107. package/expo-sqlite/session.cjs +47 -4
  108. package/expo-sqlite/session.cjs.map +1 -1
  109. package/expo-sqlite/session.d.cts +14 -8
  110. package/expo-sqlite/session.d.ts +14 -8
  111. package/expo-sqlite/session.js +47 -4
  112. package/expo-sqlite/session.js.map +1 -1
  113. package/libsql/driver-core.cjs +22 -5
  114. package/libsql/driver-core.cjs.map +1 -1
  115. package/libsql/driver-core.d.cts +2 -1
  116. package/libsql/driver-core.d.ts +2 -1
  117. package/libsql/driver-core.js +12 -8
  118. package/libsql/driver-core.js.map +1 -1
  119. package/libsql/driver.cjs.map +1 -1
  120. package/libsql/driver.d.cts +6 -5
  121. package/libsql/driver.d.ts +6 -5
  122. package/libsql/driver.js.map +1 -1
  123. package/libsql/http/index.cjs.map +1 -1
  124. package/libsql/http/index.d.cts +6 -5
  125. package/libsql/http/index.d.ts +6 -5
  126. package/libsql/http/index.js.map +1 -1
  127. package/libsql/migrator.cjs.map +1 -1
  128. package/libsql/migrator.d.cts +2 -1
  129. package/libsql/migrator.d.ts +2 -1
  130. package/libsql/migrator.js.map +1 -1
  131. package/libsql/node/index.cjs.map +1 -1
  132. package/libsql/node/index.d.cts +6 -5
  133. package/libsql/node/index.d.ts +6 -5
  134. package/libsql/node/index.js.map +1 -1
  135. package/libsql/session.cjs +56 -4
  136. package/libsql/session.cjs.map +1 -1
  137. package/libsql/session.d.cts +15 -9
  138. package/libsql/session.d.ts +15 -9
  139. package/libsql/session.js +56 -4
  140. package/libsql/session.js.map +1 -1
  141. package/libsql/sqlite3/index.cjs.map +1 -1
  142. package/libsql/sqlite3/index.d.cts +6 -5
  143. package/libsql/sqlite3/index.d.ts +6 -5
  144. package/libsql/sqlite3/index.js.map +1 -1
  145. package/libsql/wasm/index.cjs.map +1 -1
  146. package/libsql/wasm/index.d.cts +6 -5
  147. package/libsql/wasm/index.d.ts +6 -5
  148. package/libsql/wasm/index.js.map +1 -1
  149. package/libsql/web/index.cjs.map +1 -1
  150. package/libsql/web/index.d.cts +6 -5
  151. package/libsql/web/index.d.ts +6 -5
  152. package/libsql/web/index.js.map +1 -1
  153. package/libsql/ws/index.cjs.map +1 -1
  154. package/libsql/ws/index.d.cts +6 -5
  155. package/libsql/ws/index.d.ts +6 -5
  156. package/libsql/ws/index.js.map +1 -1
  157. package/mysql-core/db.cjs +29 -8
  158. package/mysql-core/db.cjs.map +1 -1
  159. package/mysql-core/db.d.cts +15 -8
  160. package/mysql-core/db.d.ts +15 -8
  161. package/mysql-core/db.js +28 -7
  162. package/mysql-core/db.js.map +1 -1
  163. package/mysql-core/dialect.cjs +188 -15
  164. package/mysql-core/dialect.cjs.map +1 -1
  165. package/mysql-core/dialect.d.cts +32 -13
  166. package/mysql-core/dialect.d.ts +32 -13
  167. package/mysql-core/dialect.js +185 -21
  168. package/mysql-core/dialect.js.map +1 -1
  169. package/mysql-core/query-builders/_query.cjs +149 -0
  170. package/mysql-core/query-builders/_query.cjs.map +1 -0
  171. package/mysql-core/query-builders/_query.d.cts +44 -0
  172. package/mysql-core/query-builders/_query.d.ts +44 -0
  173. package/mysql-core/query-builders/_query.js +114 -0
  174. package/mysql-core/query-builders/_query.js.map +1 -0
  175. package/mysql-core/query-builders/count.cjs.map +1 -1
  176. package/mysql-core/query-builders/count.d.cts +1 -1
  177. package/mysql-core/query-builders/count.d.ts +1 -1
  178. package/mysql-core/query-builders/count.js.map +1 -1
  179. package/mysql-core/query-builders/query.cjs +18 -31
  180. package/mysql-core/query-builders/query.cjs.map +1 -1
  181. package/mysql-core/query-builders/query.d.cts +8 -10
  182. package/mysql-core/query-builders/query.d.ts +8 -10
  183. package/mysql-core/query-builders/query.js +18 -31
  184. package/mysql-core/query-builders/query.js.map +1 -1
  185. package/mysql-core/session.cjs +3 -2
  186. package/mysql-core/session.cjs.map +1 -1
  187. package/mysql-core/session.d.cts +10 -7
  188. package/mysql-core/session.d.ts +10 -7
  189. package/mysql-core/session.js +3 -2
  190. package/mysql-core/session.js.map +1 -1
  191. package/mysql-proxy/driver.cjs +22 -5
  192. package/mysql-proxy/driver.cjs.map +1 -1
  193. package/mysql-proxy/driver.d.cts +3 -2
  194. package/mysql-proxy/driver.d.ts +3 -2
  195. package/mysql-proxy/driver.js +12 -8
  196. package/mysql-proxy/driver.js.map +1 -1
  197. package/mysql-proxy/migrator.cjs.map +1 -1
  198. package/mysql-proxy/migrator.d.cts +2 -1
  199. package/mysql-proxy/migrator.d.ts +2 -1
  200. package/mysql-proxy/migrator.js.map +1 -1
  201. package/mysql-proxy/session.cjs +47 -2
  202. package/mysql-proxy/session.cjs.map +1 -1
  203. package/mysql-proxy/session.d.cts +13 -8
  204. package/mysql-proxy/session.d.ts +13 -8
  205. package/mysql-proxy/session.js +47 -2
  206. package/mysql-proxy/session.js.map +1 -1
  207. package/mysql2/driver.cjs +24 -7
  208. package/mysql2/driver.cjs.map +1 -1
  209. package/mysql2/driver.d.cts +10 -9
  210. package/mysql2/driver.d.ts +10 -9
  211. package/mysql2/driver.js +14 -10
  212. package/mysql2/driver.js.map +1 -1
  213. package/mysql2/migrator.cjs.map +1 -1
  214. package/mysql2/migrator.d.cts +2 -1
  215. package/mysql2/migrator.d.ts +2 -1
  216. package/mysql2/migrator.js.map +1 -1
  217. package/mysql2/session.cjs +30 -2
  218. package/mysql2/session.cjs.map +1 -1
  219. package/mysql2/session.d.cts +13 -8
  220. package/mysql2/session.d.ts +13 -8
  221. package/mysql2/session.js +30 -2
  222. package/mysql2/session.js.map +1 -1
  223. package/neon-http/driver.cjs +21 -7
  224. package/neon-http/driver.cjs.map +1 -1
  225. package/neon-http/driver.d.cts +10 -9
  226. package/neon-http/driver.d.ts +10 -9
  227. package/neon-http/driver.js +11 -7
  228. package/neon-http/driver.js.map +1 -1
  229. package/neon-http/migrator.cjs.map +1 -1
  230. package/neon-http/migrator.d.cts +2 -1
  231. package/neon-http/migrator.d.ts +2 -1
  232. package/neon-http/migrator.js.map +1 -1
  233. package/neon-http/session.cjs +32 -2
  234. package/neon-http/session.cjs.map +1 -1
  235. package/neon-http/session.d.cts +13 -8
  236. package/neon-http/session.d.ts +13 -8
  237. package/neon-http/session.js +32 -2
  238. package/neon-http/session.js.map +1 -1
  239. package/neon-serverless/driver.cjs +18 -7
  240. package/neon-serverless/driver.cjs.map +1 -1
  241. package/neon-serverless/driver.d.cts +9 -8
  242. package/neon-serverless/driver.d.ts +9 -8
  243. package/neon-serverless/driver.js +8 -10
  244. package/neon-serverless/driver.js.map +1 -1
  245. package/neon-serverless/migrator.cjs.map +1 -1
  246. package/neon-serverless/migrator.d.cts +2 -1
  247. package/neon-serverless/migrator.d.ts +2 -1
  248. package/neon-serverless/migrator.js.map +1 -1
  249. package/neon-serverless/session.cjs +40 -5
  250. package/neon-serverless/session.cjs.map +1 -1
  251. package/neon-serverless/session.d.cts +13 -8
  252. package/neon-serverless/session.d.ts +13 -8
  253. package/neon-serverless/session.js +40 -5
  254. package/neon-serverless/session.js.map +1 -1
  255. package/node-postgres/driver.cjs +13 -7
  256. package/node-postgres/driver.cjs.map +1 -1
  257. package/node-postgres/driver.d.cts +9 -8
  258. package/node-postgres/driver.d.ts +9 -8
  259. package/node-postgres/driver.js +13 -10
  260. package/node-postgres/driver.js.map +1 -1
  261. package/node-postgres/migrator.cjs.map +1 -1
  262. package/node-postgres/migrator.d.cts +2 -1
  263. package/node-postgres/migrator.d.ts +2 -1
  264. package/node-postgres/migrator.js.map +1 -1
  265. package/node-postgres/session.cjs +45 -4
  266. package/node-postgres/session.cjs.map +1 -1
  267. package/node-postgres/session.d.cts +13 -8
  268. package/node-postgres/session.d.ts +13 -8
  269. package/node-postgres/session.js +45 -4
  270. package/node-postgres/session.js.map +1 -1
  271. package/op-sqlite/driver.cjs +22 -5
  272. package/op-sqlite/driver.cjs.map +1 -1
  273. package/op-sqlite/driver.d.cts +3 -2
  274. package/op-sqlite/driver.d.ts +3 -2
  275. package/op-sqlite/driver.js +12 -8
  276. package/op-sqlite/driver.js.map +1 -1
  277. package/op-sqlite/migrator.cjs.map +1 -1
  278. package/op-sqlite/migrator.d.cts +3 -2
  279. package/op-sqlite/migrator.d.ts +3 -2
  280. package/op-sqlite/migrator.js.map +1 -1
  281. package/op-sqlite/session.cjs +47 -4
  282. package/op-sqlite/session.cjs.map +1 -1
  283. package/op-sqlite/session.d.cts +14 -8
  284. package/op-sqlite/session.d.ts +14 -8
  285. package/op-sqlite/session.js +47 -4
  286. package/op-sqlite/session.js.map +1 -1
  287. package/package.json +51 -3
  288. package/pg-core/db.cjs +31 -7
  289. package/pg-core/db.cjs.map +1 -1
  290. package/pg-core/db.d.cts +16 -9
  291. package/pg-core/db.d.ts +16 -9
  292. package/pg-core/db.js +30 -6
  293. package/pg-core/db.js.map +1 -1
  294. package/pg-core/dialect.cjs +153 -488
  295. package/pg-core/dialect.cjs.map +1 -1
  296. package/pg-core/dialect.d.cts +23 -7
  297. package/pg-core/dialect.d.ts +23 -7
  298. package/pg-core/dialect.js +150 -494
  299. package/pg-core/dialect.js.map +1 -1
  300. package/pg-core/query-builders/_query.cjs +155 -0
  301. package/pg-core/query-builders/_query.cjs.map +1 -0
  302. package/pg-core/query-builders/_query.d.cts +47 -0
  303. package/pg-core/query-builders/_query.d.ts +47 -0
  304. package/pg-core/query-builders/_query.js +120 -0
  305. package/pg-core/query-builders/_query.js.map +1 -0
  306. package/pg-core/query-builders/count.cjs.map +1 -1
  307. package/pg-core/query-builders/count.d.cts +1 -1
  308. package/pg-core/query-builders/count.d.ts +1 -1
  309. package/pg-core/query-builders/count.js.map +1 -1
  310. package/pg-core/query-builders/query.cjs +15 -18
  311. package/pg-core/query-builders/query.cjs.map +1 -1
  312. package/pg-core/query-builders/query.d.cts +6 -6
  313. package/pg-core/query-builders/query.d.ts +6 -6
  314. package/pg-core/query-builders/query.js +15 -18
  315. package/pg-core/query-builders/query.js.map +1 -1
  316. package/pg-core/session.cjs +3 -2
  317. package/pg-core/session.cjs.map +1 -1
  318. package/pg-core/session.d.cts +9 -6
  319. package/pg-core/session.d.ts +9 -6
  320. package/pg-core/session.js +3 -2
  321. package/pg-core/session.js.map +1 -1
  322. package/pg-proxy/driver.cjs +21 -5
  323. package/pg-proxy/driver.cjs.map +1 -1
  324. package/pg-proxy/driver.d.cts +3 -2
  325. package/pg-proxy/driver.d.ts +3 -2
  326. package/pg-proxy/driver.js +11 -8
  327. package/pg-proxy/driver.js.map +1 -1
  328. package/pg-proxy/migrator.cjs.map +1 -1
  329. package/pg-proxy/migrator.d.cts +2 -1
  330. package/pg-proxy/migrator.d.ts +2 -1
  331. package/pg-proxy/migrator.js.map +1 -1
  332. package/pg-proxy/session.cjs +37 -2
  333. package/pg-proxy/session.cjs.map +1 -1
  334. package/pg-proxy/session.d.cts +13 -8
  335. package/pg-proxy/session.d.ts +13 -8
  336. package/pg-proxy/session.js +37 -2
  337. package/pg-proxy/session.js.map +1 -1
  338. package/pglite/driver.cjs +23 -7
  339. package/pglite/driver.cjs.map +1 -1
  340. package/pglite/driver.d.cts +9 -8
  341. package/pglite/driver.d.ts +9 -8
  342. package/pglite/driver.js +13 -10
  343. package/pglite/driver.js.map +1 -1
  344. package/pglite/migrator.cjs.map +1 -1
  345. package/pglite/migrator.d.cts +2 -1
  346. package/pglite/migrator.d.ts +2 -1
  347. package/pglite/migrator.js.map +1 -1
  348. package/pglite/session.cjs +34 -3
  349. package/pglite/session.cjs.map +1 -1
  350. package/pglite/session.d.cts +13 -8
  351. package/pglite/session.d.ts +13 -8
  352. package/pglite/session.js +34 -3
  353. package/pglite/session.js.map +1 -1
  354. package/planetscale-serverless/driver.cjs +22 -5
  355. package/planetscale-serverless/driver.cjs.map +1 -1
  356. package/planetscale-serverless/driver.d.cts +7 -6
  357. package/planetscale-serverless/driver.d.ts +7 -6
  358. package/planetscale-serverless/driver.js +12 -8
  359. package/planetscale-serverless/driver.js.map +1 -1
  360. package/planetscale-serverless/migrator.cjs.map +1 -1
  361. package/planetscale-serverless/migrator.d.cts +2 -1
  362. package/planetscale-serverless/migrator.d.ts +2 -1
  363. package/planetscale-serverless/migrator.js.map +1 -1
  364. package/planetscale-serverless/session.cjs +68 -5
  365. package/planetscale-serverless/session.cjs.map +1 -1
  366. package/planetscale-serverless/session.d.cts +14 -9
  367. package/planetscale-serverless/session.d.ts +14 -9
  368. package/planetscale-serverless/session.js +68 -5
  369. package/planetscale-serverless/session.js.map +1 -1
  370. package/postgres-js/driver.cjs +6 -5
  371. package/postgres-js/driver.cjs.map +1 -1
  372. package/postgres-js/driver.d.cts +7 -6
  373. package/postgres-js/driver.d.ts +7 -6
  374. package/postgres-js/driver.js +6 -8
  375. package/postgres-js/driver.js.map +1 -1
  376. package/postgres-js/migrator.cjs.map +1 -1
  377. package/postgres-js/migrator.d.cts +2 -1
  378. package/postgres-js/migrator.d.ts +2 -1
  379. package/postgres-js/migrator.js.map +1 -1
  380. package/postgres-js/session.cjs +51 -6
  381. package/postgres-js/session.cjs.map +1 -1
  382. package/postgres-js/session.d.cts +15 -9
  383. package/postgres-js/session.d.ts +15 -9
  384. package/postgres-js/session.js +51 -6
  385. package/postgres-js/session.js.map +1 -1
  386. package/prisma/mysql/driver.cjs +1 -1
  387. package/prisma/mysql/driver.cjs.map +1 -1
  388. package/prisma/mysql/driver.js +1 -1
  389. package/prisma/mysql/driver.js.map +1 -1
  390. package/prisma/mysql/session.cjs +3 -0
  391. package/prisma/mysql/session.cjs.map +1 -1
  392. package/prisma/mysql/session.d.cts +3 -1
  393. package/prisma/mysql/session.d.ts +3 -1
  394. package/prisma/mysql/session.js +3 -0
  395. package/prisma/mysql/session.js.map +1 -1
  396. package/prisma/pg/driver.cjs +1 -1
  397. package/prisma/pg/driver.cjs.map +1 -1
  398. package/prisma/pg/driver.js +1 -1
  399. package/prisma/pg/driver.js.map +1 -1
  400. package/prisma/pg/session.cjs +3 -0
  401. package/prisma/pg/session.cjs.map +1 -1
  402. package/prisma/pg/session.d.cts +3 -1
  403. package/prisma/pg/session.d.ts +3 -1
  404. package/prisma/pg/session.js +3 -0
  405. package/prisma/pg/session.js.map +1 -1
  406. package/prisma/sqlite/driver.cjs +1 -1
  407. package/prisma/sqlite/driver.cjs.map +1 -1
  408. package/prisma/sqlite/driver.js +1 -1
  409. package/prisma/sqlite/driver.js.map +1 -1
  410. package/prisma/sqlite/session.cjs +3 -0
  411. package/prisma/sqlite/session.cjs.map +1 -1
  412. package/prisma/sqlite/session.d.cts +4 -2
  413. package/prisma/sqlite/session.d.ts +4 -2
  414. package/prisma/sqlite/session.js +3 -0
  415. package/prisma/sqlite/session.js.map +1 -1
  416. package/relations.cjs +510 -246
  417. package/relations.cjs.map +1 -1
  418. package/relations.d.cts +263 -131
  419. package/relations.d.ts +263 -131
  420. package/relations.js +504 -240
  421. package/relations.js.map +1 -1
  422. package/singlestore/driver.cjs +1 -1
  423. package/singlestore/driver.cjs.map +1 -1
  424. package/singlestore/driver.d.cts +1 -1
  425. package/singlestore/driver.d.ts +1 -1
  426. package/singlestore/driver.js +3 -3
  427. package/singlestore/driver.js.map +1 -1
  428. package/singlestore/session.cjs.map +1 -1
  429. package/singlestore/session.d.cts +4 -4
  430. package/singlestore/session.d.ts +4 -4
  431. package/singlestore/session.js.map +1 -1
  432. package/singlestore-core/db.cjs.map +1 -1
  433. package/singlestore-core/db.d.cts +3 -3
  434. package/singlestore-core/db.d.ts +3 -3
  435. package/singlestore-core/db.js.map +1 -1
  436. package/singlestore-core/dialect.cjs +16 -6
  437. package/singlestore-core/dialect.cjs.map +1 -1
  438. package/singlestore-core/dialect.d.cts +6 -6
  439. package/singlestore-core/dialect.d.ts +6 -6
  440. package/singlestore-core/dialect.js +6 -12
  441. package/singlestore-core/dialect.js.map +1 -1
  442. package/singlestore-core/query-builders/query.cjs +12 -2
  443. package/singlestore-core/query-builders/query.cjs.map +1 -1
  444. package/singlestore-core/query-builders/query.d.cts +6 -6
  445. package/singlestore-core/query-builders/query.d.ts +6 -6
  446. package/singlestore-core/query-builders/query.js +2 -4
  447. package/singlestore-core/query-builders/query.js.map +1 -1
  448. package/singlestore-core/session.cjs.map +1 -1
  449. package/singlestore-core/session.d.cts +5 -5
  450. package/singlestore-core/session.d.ts +5 -5
  451. package/singlestore-core/session.js.map +1 -1
  452. package/singlestore-proxy/driver.cjs +1 -1
  453. package/singlestore-proxy/driver.cjs.map +1 -1
  454. package/singlestore-proxy/driver.js +3 -3
  455. package/singlestore-proxy/driver.js.map +1 -1
  456. package/singlestore-proxy/session.cjs.map +1 -1
  457. package/singlestore-proxy/session.d.cts +4 -4
  458. package/singlestore-proxy/session.d.ts +4 -4
  459. package/singlestore-proxy/session.js.map +1 -1
  460. package/sql/sql.cjs.map +1 -1
  461. package/sql/sql.d.cts +8 -8
  462. package/sql/sql.d.ts +8 -8
  463. package/sql/sql.js.map +1 -1
  464. package/sql-js/driver.cjs +16 -5
  465. package/sql-js/driver.cjs.map +1 -1
  466. package/sql-js/driver.d.cts +3 -2
  467. package/sql-js/driver.d.ts +3 -2
  468. package/sql-js/driver.js +6 -8
  469. package/sql-js/driver.js.map +1 -1
  470. package/sql-js/migrator.cjs.map +1 -1
  471. package/sql-js/migrator.d.cts +2 -1
  472. package/sql-js/migrator.d.ts +2 -1
  473. package/sql-js/migrator.js.map +1 -1
  474. package/sql-js/session.cjs +58 -4
  475. package/sql-js/session.cjs.map +1 -1
  476. package/sql-js/session.d.cts +14 -8
  477. package/sql-js/session.d.ts +14 -8
  478. package/sql-js/session.js +58 -4
  479. package/sql-js/session.js.map +1 -1
  480. package/sqlite-core/db.cjs +36 -14
  481. package/sqlite-core/db.cjs.map +1 -1
  482. package/sqlite-core/db.d.cts +15 -8
  483. package/sqlite-core/db.d.ts +15 -8
  484. package/sqlite-core/db.js +35 -13
  485. package/sqlite-core/db.js.map +1 -1
  486. package/sqlite-core/dialect.cjs +172 -7
  487. package/sqlite-core/dialect.cjs.map +1 -1
  488. package/sqlite-core/dialect.d.cts +27 -9
  489. package/sqlite-core/dialect.d.ts +27 -9
  490. package/sqlite-core/dialect.js +169 -13
  491. package/sqlite-core/dialect.js.map +1 -1
  492. package/sqlite-core/query-builders/_query.cjs +187 -0
  493. package/sqlite-core/query-builders/_query.cjs.map +1 -0
  494. package/sqlite-core/query-builders/_query.d.cts +55 -0
  495. package/sqlite-core/query-builders/_query.d.ts +55 -0
  496. package/sqlite-core/query-builders/_query.js +151 -0
  497. package/sqlite-core/query-builders/_query.js.map +1 -0
  498. package/sqlite-core/query-builders/count.cjs.map +1 -1
  499. package/sqlite-core/query-builders/count.d.cts +1 -1
  500. package/sqlite-core/query-builders/count.d.ts +1 -1
  501. package/sqlite-core/query-builders/count.js.map +1 -1
  502. package/sqlite-core/query-builders/delete.cjs.map +1 -1
  503. package/sqlite-core/query-builders/delete.d.cts +1 -1
  504. package/sqlite-core/query-builders/delete.d.ts +1 -1
  505. package/sqlite-core/query-builders/delete.js.map +1 -1
  506. package/sqlite-core/query-builders/insert.cjs.map +1 -1
  507. package/sqlite-core/query-builders/insert.d.cts +3 -3
  508. package/sqlite-core/query-builders/insert.d.ts +3 -3
  509. package/sqlite-core/query-builders/insert.js.map +1 -1
  510. package/sqlite-core/query-builders/query.cjs +32 -29
  511. package/sqlite-core/query-builders/query.cjs.map +1 -1
  512. package/sqlite-core/query-builders/query.d.cts +15 -16
  513. package/sqlite-core/query-builders/query.d.ts +15 -16
  514. package/sqlite-core/query-builders/query.js +32 -29
  515. package/sqlite-core/query-builders/query.js.map +1 -1
  516. package/sqlite-core/query-builders/select.cjs.map +1 -1
  517. package/sqlite-core/query-builders/select.d.cts +3 -3
  518. package/sqlite-core/query-builders/select.d.ts +3 -3
  519. package/sqlite-core/query-builders/select.js.map +1 -1
  520. package/sqlite-core/query-builders/update.cjs.map +1 -1
  521. package/sqlite-core/query-builders/update.d.cts +3 -3
  522. package/sqlite-core/query-builders/update.d.ts +3 -3
  523. package/sqlite-core/query-builders/update.js.map +1 -1
  524. package/sqlite-core/session.cjs +6 -2
  525. package/sqlite-core/session.cjs.map +1 -1
  526. package/sqlite-core/session.d.cts +14 -6
  527. package/sqlite-core/session.d.ts +14 -6
  528. package/sqlite-core/session.js +6 -2
  529. package/sqlite-core/session.js.map +1 -1
  530. package/sqlite-proxy/driver.cjs +22 -5
  531. package/sqlite-proxy/driver.cjs.map +1 -1
  532. package/sqlite-proxy/driver.d.cts +4 -3
  533. package/sqlite-proxy/driver.d.ts +4 -3
  534. package/sqlite-proxy/driver.js +12 -5
  535. package/sqlite-proxy/driver.js.map +1 -1
  536. package/sqlite-proxy/migrator.cjs.map +1 -1
  537. package/sqlite-proxy/migrator.d.cts +2 -1
  538. package/sqlite-proxy/migrator.d.ts +2 -1
  539. package/sqlite-proxy/migrator.js.map +1 -1
  540. package/sqlite-proxy/session.cjs +47 -4
  541. package/sqlite-proxy/session.cjs.map +1 -1
  542. package/sqlite-proxy/session.d.cts +14 -8
  543. package/sqlite-proxy/session.d.ts +14 -8
  544. package/sqlite-proxy/session.js +47 -4
  545. package/sqlite-proxy/session.js.map +1 -1
  546. package/table.cjs.map +1 -1
  547. package/table.d.cts +1 -1
  548. package/table.d.ts +1 -1
  549. package/table.js.map +1 -1
  550. package/tidb-serverless/driver.cjs +22 -5
  551. package/tidb-serverless/driver.cjs.map +1 -1
  552. package/tidb-serverless/driver.d.cts +7 -6
  553. package/tidb-serverless/driver.d.ts +7 -6
  554. package/tidb-serverless/driver.js +12 -8
  555. package/tidb-serverless/driver.js.map +1 -1
  556. package/tidb-serverless/migrator.cjs.map +1 -1
  557. package/tidb-serverless/migrator.d.cts +2 -1
  558. package/tidb-serverless/migrator.d.ts +2 -1
  559. package/tidb-serverless/migrator.js.map +1 -1
  560. package/tidb-serverless/session.cjs +62 -5
  561. package/tidb-serverless/session.cjs.map +1 -1
  562. package/tidb-serverless/session.d.cts +14 -9
  563. package/tidb-serverless/session.d.ts +14 -9
  564. package/tidb-serverless/session.js +62 -5
  565. package/tidb-serverless/session.js.map +1 -1
  566. package/utils.cjs +2 -2
  567. package/utils.cjs.map +1 -1
  568. package/utils.d.cts +3 -1
  569. package/utils.d.ts +3 -1
  570. package/utils.js +2 -2
  571. package/utils.js.map +1 -1
  572. package/vercel-postgres/driver.cjs +23 -7
  573. package/vercel-postgres/driver.cjs.map +1 -1
  574. package/vercel-postgres/driver.d.cts +9 -8
  575. package/vercel-postgres/driver.d.ts +9 -8
  576. package/vercel-postgres/driver.js +13 -10
  577. package/vercel-postgres/driver.js.map +1 -1
  578. package/vercel-postgres/migrator.cjs.map +1 -1
  579. package/vercel-postgres/migrator.d.cts +2 -1
  580. package/vercel-postgres/migrator.d.ts +2 -1
  581. package/vercel-postgres/migrator.js.map +1 -1
  582. package/vercel-postgres/session.cjs +34 -4
  583. package/vercel-postgres/session.cjs.map +1 -1
  584. package/vercel-postgres/session.d.cts +13 -8
  585. package/vercel-postgres/session.d.ts +13 -8
  586. package/vercel-postgres/session.js +34 -4
  587. package/vercel-postgres/session.js.map +1 -1
  588. package/version.cjs +1 -1
  589. package/version.d.cts +1 -1
  590. package/version.d.ts +1 -1
  591. package/version.js +1 -1
  592. package/xata-http/driver.cjs +17 -5
  593. package/xata-http/driver.cjs.map +1 -1
  594. package/xata-http/driver.d.cts +5 -4
  595. package/xata-http/driver.d.ts +5 -4
  596. package/xata-http/driver.js +7 -5
  597. package/xata-http/driver.js.map +1 -1
  598. package/xata-http/migrator.cjs.map +1 -1
  599. package/xata-http/migrator.d.cts +2 -1
  600. package/xata-http/migrator.d.ts +2 -1
  601. package/xata-http/migrator.js.map +1 -1
  602. package/xata-http/session.cjs +30 -2
  603. package/xata-http/session.cjs.map +1 -1
  604. package/xata-http/session.d.cts +13 -8
  605. package/xata-http/session.d.ts +13 -8
  606. package/xata-http/session.js +30 -2
  607. package/xata-http/session.js.map +1 -1
package/relations.js CHANGED
@@ -1,6 +1,14 @@
1
- import { getTableUniqueName, Table } from "./table.js";
1
+ import {
2
+ getTableUniqueName,
3
+ IsAlias,
4
+ OriginalName,
5
+ Schema,
6
+ Table
7
+ } from "./table.js";
8
+ import { Columns, getTableName } from "./table.js";
2
9
  import { Column } from "./column.js";
3
10
  import { entityKind, is } from "./entity.js";
11
+ import { DrizzleError } from "./errors.js";
4
12
  import { PrimaryKeyBuilder } from "./pg-core/primary-keys.js";
5
13
  import {
6
14
  and,
@@ -28,289 +36,545 @@ import {
28
36
  or
29
37
  } from "./sql/expressions/index.js";
30
38
  import { SQL, sql } from "./sql/sql.js";
31
- class Relation {
32
- constructor(sourceTable, referencedTable, relationName) {
33
- this.sourceTable = sourceTable;
34
- this.referencedTable = referencedTable;
35
- this.relationName = relationName;
36
- this.referencedTableName = referencedTable[Table.Symbol.Name];
37
- }
38
- static [entityKind] = "Relation";
39
- referencedTableName;
40
- fieldName;
41
- }
39
+ import { getTableColumns } from "./utils.js";
42
40
  class Relations {
43
- constructor(table, config) {
44
- this.table = table;
45
- this.config = config;
46
- }
47
- static [entityKind] = "Relations";
48
- }
49
- class One extends Relation {
50
- constructor(sourceTable, referencedTable, config, isNullable) {
51
- super(sourceTable, referencedTable, config?.relationName);
41
+ constructor(schema, tables, config) {
42
+ this.schema = schema;
43
+ this.tables = tables;
52
44
  this.config = config;
53
- this.isNullable = isNullable;
54
- }
55
- static [entityKind] = "One";
56
- withFieldName(fieldName) {
57
- const relation = new One(
58
- this.sourceTable,
59
- this.referencedTable,
60
- this.config,
61
- this.isNullable
62
- );
63
- relation.fieldName = fieldName;
64
- return relation;
65
- }
66
- }
67
- class Many extends Relation {
68
- constructor(sourceTable, referencedTable, config) {
69
- super(sourceTable, referencedTable, config?.relationName);
70
- this.config = config;
71
- }
72
- static [entityKind] = "Many";
73
- withFieldName(fieldName) {
74
- const relation = new Many(
75
- this.sourceTable,
76
- this.referencedTable,
77
- this.config
78
- );
79
- relation.fieldName = fieldName;
80
- return relation;
81
- }
82
- }
83
- function getOperators() {
84
- return {
85
- and,
86
- between,
87
- eq,
88
- exists,
89
- gt,
90
- gte,
91
- ilike,
92
- inArray,
93
- isNull,
94
- isNotNull,
95
- like,
96
- lt,
97
- lte,
98
- ne,
99
- not,
100
- notBetween,
101
- notExists,
102
- notLike,
103
- notIlike,
104
- notInArray,
105
- or,
106
- sql
107
- };
108
- }
109
- function getOrderByOperators() {
110
- return {
111
- sql,
112
- asc,
113
- desc
114
- };
115
- }
116
- function extractTablesRelationalConfig(schema, configHelpers) {
117
- if (Object.keys(schema).length === 1 && "default" in schema && !is(schema["default"], Table)) {
118
- schema = schema["default"];
119
- }
120
- const tableNamesMap = {};
121
- const relationsBuffer = {};
122
- const tablesConfig = {};
123
- for (const [key, value] of Object.entries(schema)) {
124
- if (is(value, Table)) {
125
- const dbName = getTableUniqueName(value);
126
- const bufferedRelations = relationsBuffer[dbName];
127
- tableNamesMap[dbName] = key;
128
- tablesConfig[key] = {
129
- tsName: key,
130
- dbName: value[Table.Symbol.Name],
131
- schema: value[Table.Symbol.Schema],
132
- columns: value[Table.Symbol.Columns],
133
- relations: bufferedRelations?.relations ?? {},
134
- primaryKey: bufferedRelations?.primaryKey ?? []
45
+ for (const [tsName, table] of Object.entries(tables)) {
46
+ if (!is(table, Table))
47
+ continue;
48
+ this.tableNamesMap[getTableUniqueName(table)] = tsName;
49
+ const tableConfig = this.tablesConfig[tsName] = {
50
+ table,
51
+ tsName,
52
+ dbName: table[Table.Symbol.Name],
53
+ schema: table[Table.Symbol.Schema],
54
+ columns: table[Table.Symbol.Columns],
55
+ relations: config[tsName] || {},
56
+ primaryKey: []
135
57
  };
136
- for (const column of Object.values(
137
- value[Table.Symbol.Columns]
138
- )) {
58
+ for (const column of Object.values(table[Table.Symbol.Columns])) {
139
59
  if (column.primary) {
140
- tablesConfig[key].primaryKey.push(column);
60
+ tableConfig.primaryKey.push(column);
141
61
  }
142
62
  }
143
- const extraConfig = value[Table.Symbol.ExtraConfigBuilder]?.(value[Table.Symbol.ExtraConfigColumns]);
63
+ const extraConfig = table[Table.Symbol.ExtraConfigBuilder]?.(table);
144
64
  if (extraConfig) {
145
65
  for (const configEntry of Object.values(extraConfig)) {
146
66
  if (is(configEntry, PrimaryKeyBuilder)) {
147
- tablesConfig[key].primaryKey.push(...configEntry.columns);
67
+ tableConfig.primaryKey.push(...configEntry.columns);
148
68
  }
149
69
  }
150
70
  }
151
- } else if (is(value, Relations)) {
152
- const dbName = getTableUniqueName(value.table);
153
- const tableName = tableNamesMap[dbName];
154
- const relations2 = value.config(
155
- configHelpers(value.table)
156
- );
157
- let primaryKey;
158
- for (const [relationName, relation] of Object.entries(relations2)) {
159
- if (tableName) {
160
- const tableConfig = tablesConfig[tableName];
161
- tableConfig.relations[relationName] = relation;
162
- if (primaryKey) {
163
- tableConfig.primaryKey.push(...primaryKey);
71
+ }
72
+ for (const tableConfig of Object.values(this.tablesConfig)) {
73
+ for (const [relationFieldName, relation] of Object.entries(tableConfig.relations)) {
74
+ if (!is(relation, Relation)) {
75
+ continue;
76
+ }
77
+ relation.sourceTable = tableConfig.table;
78
+ relation.fieldName = relationFieldName;
79
+ }
80
+ }
81
+ for (const tableConfig of Object.values(this.tablesConfig)) {
82
+ for (const [relationFieldName, relation] of Object.entries(tableConfig.relations)) {
83
+ const relationPrintName = `relations -> ${tableConfig.tsName}.${relationFieldName}`;
84
+ if (!is(relation, Relation)) {
85
+ continue;
86
+ }
87
+ if (typeof relation.alias === "string" && !relation.alias) {
88
+ throw new Error(`${relationPrintName}: "alias" cannot be an empty string - omit it if you don't need it`);
89
+ }
90
+ if (relation.sourceColumns?.length === 0) {
91
+ throw new Error(`${relationPrintName}: "from" cannot be an empty array`);
92
+ }
93
+ if (relation.targetColumns?.length === 0) {
94
+ throw new Error(`${relationPrintName}: "to" cannot be an empty array`);
95
+ }
96
+ if (relation.sourceColumns && relation.targetColumns) {
97
+ if (relation.sourceColumns.length !== relation.targetColumns.length) {
98
+ throw new Error(
99
+ `${relationPrintName}: "from" and "to" arrays must have the same length`
100
+ );
101
+ }
102
+ continue;
103
+ }
104
+ if (relation.sourceColumns || relation.targetColumns) {
105
+ throw new Error(
106
+ `${relationPrintName}: relation must have either both "from" and "to" defined, or none of them`
107
+ );
108
+ }
109
+ let reverseRelation;
110
+ const targetTableTsName = this.tableNamesMap[getTableUniqueName(relation.targetTable)];
111
+ if (!targetTableTsName) {
112
+ throw new Error(
113
+ `Table "${getTableUniqueName(relation.targetTable)}" not found in provided TS schema`
114
+ );
115
+ }
116
+ const reverseTableConfig = this.tablesConfig[targetTableTsName];
117
+ if (!reverseTableConfig) {
118
+ throw new Error(
119
+ `${relationPrintName}: not enough data provided to build the relation - "from"/"to" are not defined, and no reverse relations of table "${targetTableTsName}" were found"`
120
+ );
121
+ }
122
+ if (relation.alias) {
123
+ const reverseRelations = Object.values(reverseTableConfig.relations).filter(
124
+ (it) => is(it, Relation) && it.alias === relation.alias
125
+ );
126
+ if (reverseRelations.length > 1) {
127
+ throw new Error(
128
+ `${relationPrintName}: not enough data provided to build the relation - "from"/"to" are not defined, and multiple relations with alias "${relation.alias}" found in table "${targetTableTsName}": ${reverseRelations.map((it) => `"${it.fieldName}"`).join(", ")}`
129
+ );
130
+ }
131
+ reverseRelation = reverseRelations[0];
132
+ if (!reverseRelation) {
133
+ throw new Error(
134
+ `${relationPrintName}: not enough data provided to build the relation - "from"/"to" are not defined, and there is no reverse relation of table "${targetTableTsName}" with alias "${relation.alias}"`
135
+ );
164
136
  }
165
137
  } else {
166
- if (!(dbName in relationsBuffer)) {
167
- relationsBuffer[dbName] = {
168
- relations: {},
169
- primaryKey
170
- };
138
+ const reverseRelations = Object.values(reverseTableConfig.relations).filter(
139
+ (it) => is(it, Relation) && it.targetTable === relation.sourceTable && !it.alias
140
+ );
141
+ if (reverseRelations.length > 1) {
142
+ throw new Error(
143
+ `${relationPrintName}: not enough data provided to build the relation - "from"/"to" are not defined, and multiple relations between "${targetTableTsName}" and "${getTableUniqueName(relation.sourceTable)}" were found.
144
+ Hint: you can specify "alias" on both sides of the relation with the same value`
145
+ );
146
+ }
147
+ reverseRelation = reverseRelations[0];
148
+ if (!reverseRelation) {
149
+ throw new Error(
150
+ `${relationPrintName}: not enough data provided to build the relation - "from"/"to" are not defined, and no reverse relation of table "${targetTableTsName}" with target table "${getTableUniqueName(relation.sourceTable)}" was found`
151
+ );
171
152
  }
172
- relationsBuffer[dbName].relations[relationName] = relation;
173
153
  }
154
+ if (!reverseRelation.sourceColumns || !reverseRelation.targetColumns) {
155
+ throw new Error(
156
+ `${relationPrintName}: not enough data provided to build the relation - "from"/"to" are not defined, and reverse relation "${targetTableTsName}.${reverseRelation.fieldName}" does not have "from"/"to" defined`
157
+ );
158
+ }
159
+ relation.sourceColumns = reverseRelation.targetColumns;
160
+ relation.targetColumns = reverseRelation.sourceColumns;
161
+ relation.where = reverseRelation.where;
174
162
  }
175
163
  }
176
164
  }
177
- return { tables: tablesConfig, tableNamesMap };
165
+ static [entityKind] = "RelationsV2";
166
+ /** table DB name -> schema table key */
167
+ tableNamesMap = {};
168
+ tablesConfig = {};
178
169
  }
179
- function relations(table, relations2) {
180
- return new Relations(
181
- table,
182
- (helpers) => Object.fromEntries(
183
- Object.entries(relations2(helpers)).map(([key, value]) => [
184
- key,
185
- value.withFieldName(key)
186
- ])
187
- )
188
- );
189
- }
190
- function createOne(sourceTable) {
191
- return function one(table, config) {
192
- return new One(
193
- sourceTable,
194
- table,
195
- config,
196
- config?.fields.reduce((res, f) => res && f.notNull, true) ?? false
197
- );
198
- };
199
- }
200
- function createMany(sourceTable) {
201
- return function many(referencedTable, config) {
202
- return new Many(sourceTable, referencedTable, config);
203
- };
170
+ class Relation {
171
+ constructor(targetTable) {
172
+ this.targetTable = targetTable;
173
+ }
174
+ static [entityKind] = "RelationV2";
175
+ fieldName;
176
+ sourceColumns;
177
+ targetColumns;
178
+ alias;
179
+ where;
180
+ sourceTable;
204
181
  }
205
- function normalizeRelation(schema, tableNamesMap, relation) {
206
- if (is(relation, One) && relation.config) {
207
- return {
208
- fields: relation.config.fields,
209
- references: relation.config.references
210
- };
182
+ class One extends Relation {
183
+ static [entityKind] = "OneV2";
184
+ optional;
185
+ constructor(targetTable, config) {
186
+ super(targetTable);
187
+ this.alias = config?.alias;
188
+ this.where = config?.where;
189
+ if (config?.from) {
190
+ this.sourceColumns = Array.isArray(config.from) ? config.from.map((it) => it._.column) : [config.from._.column];
191
+ }
192
+ if (config?.to) {
193
+ this.targetColumns = Array.isArray(config.to) ? config.to.map((it) => it._.column) : [config.to._.column];
194
+ }
195
+ this.optional = config?.optional ?? false;
211
196
  }
212
- const referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];
213
- if (!referencedTableTsName) {
214
- throw new Error(
215
- `Table "${relation.referencedTable[Table.Symbol.Name]}" not found in schema`
216
- );
197
+ }
198
+ class Many extends Relation {
199
+ constructor(targetTable, config) {
200
+ super(targetTable);
201
+ this.config = config;
202
+ this.alias = config?.alias;
203
+ this.where = config?.where;
204
+ if (config?.from) {
205
+ this.sourceColumns = Array.isArray(config.from) ? config.from.map((it) => it._.column) : [config.from._.column];
206
+ }
207
+ if (config?.to) {
208
+ this.targetColumns = Array.isArray(config.to) ? config.to.map((it) => it._.column) : [config.to._.column];
209
+ }
217
210
  }
218
- const referencedTableConfig = schema[referencedTableTsName];
219
- if (!referencedTableConfig) {
220
- throw new Error(`Table "${referencedTableTsName}" not found in schema`);
211
+ static [entityKind] = "ManyV2";
212
+ }
213
+ class AggregatedField {
214
+ static [entityKind] = "AggregatedField";
215
+ table;
216
+ onTable(table) {
217
+ this.table = table;
218
+ return this;
221
219
  }
222
- const sourceTable = relation.sourceTable;
223
- const sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];
224
- if (!sourceTableTsName) {
225
- throw new Error(
226
- `Table "${sourceTable[Table.Symbol.Name]}" not found in schema`
227
- );
220
+ }
221
+ class Count extends AggregatedField {
222
+ static [entityKind] = "AggregatedFieldCount";
223
+ query;
224
+ getSQL() {
225
+ if (!this.query) {
226
+ if (!this.table)
227
+ throw new Error("Table must be set before building aggregate field");
228
+ const table = this.table;
229
+ this.query = sql`select count(*) as ${sql.identifier("r")} from ${table[IsAlias] ? sql`${sql`${sql.identifier(table[Schema] ?? "")}.`.if(table[Schema])}${sql.identifier(table[OriginalName])} as ${table}` : table}`.mapWith(Number);
230
+ }
231
+ return this.query;
228
232
  }
229
- const reverseRelations = [];
230
- for (const referencedTableRelation of Object.values(
231
- referencedTableConfig.relations
232
- )) {
233
- if (relation.relationName && relation !== referencedTableRelation && referencedTableRelation.relationName === relation.relationName || !relation.relationName && referencedTableRelation.referencedTable === relation.sourceTable) {
234
- reverseRelations.push(referencedTableRelation);
233
+ }
234
+ const operators = {
235
+ and,
236
+ between,
237
+ eq,
238
+ exists,
239
+ gt,
240
+ gte,
241
+ ilike,
242
+ inArray,
243
+ isNull,
244
+ isNotNull,
245
+ like,
246
+ lt,
247
+ lte,
248
+ ne,
249
+ not,
250
+ notBetween,
251
+ notExists,
252
+ notLike,
253
+ notIlike,
254
+ notInArray,
255
+ or,
256
+ sql
257
+ };
258
+ const orderByOperators = {
259
+ sql,
260
+ asc,
261
+ desc
262
+ };
263
+ function getOrderByOperators() {
264
+ return orderByOperators;
265
+ }
266
+ function mapRelationalRow(row, buildQueryResultSelection, mapColumnValue = (value) => value, parseJson = false, path) {
267
+ for (const selectionItem of buildQueryResultSelection) {
268
+ const field = selectionItem.field;
269
+ if (is(field, Table)) {
270
+ const currentPath = `${path ? `${path}.` : ""}${selectionItem.key}`;
271
+ if (row[selectionItem.key] === null) {
272
+ if (!selectionItem.isOptional) {
273
+ throw new DrizzleError({
274
+ message: `Unexpected null in relational query result on field "${currentPath}".
275
+ Did you forget to mark relation as optional?`
276
+ });
277
+ }
278
+ continue;
279
+ }
280
+ if (parseJson)
281
+ row[selectionItem.key] = JSON.parse(row[selectionItem.key]);
282
+ if (selectionItem.isArray) {
283
+ for (const item of row[selectionItem.key]) {
284
+ mapRelationalRow(
285
+ item,
286
+ selectionItem.selection,
287
+ mapColumnValue,
288
+ false,
289
+ currentPath
290
+ );
291
+ }
292
+ continue;
293
+ }
294
+ mapRelationalRow(
295
+ row[selectionItem.key],
296
+ selectionItem.selection,
297
+ mapColumnValue,
298
+ false,
299
+ currentPath
300
+ );
301
+ continue;
235
302
  }
303
+ const value = mapColumnValue(row[selectionItem.key]);
304
+ if (value === null)
305
+ continue;
306
+ let decoder;
307
+ if (is(field, Column)) {
308
+ decoder = field;
309
+ } else if (is(field, SQL)) {
310
+ decoder = field.decoder;
311
+ } else if (is(field, SQL.Aliased)) {
312
+ decoder = field.sql.decoder;
313
+ } else {
314
+ decoder = field.getSQL().decoder;
315
+ }
316
+ row[selectionItem.key] = decoder.mapFromDriverValue(value);
236
317
  }
237
- if (reverseRelations.length > 1) {
238
- throw relation.relationName ? new Error(
239
- `There are multiple relations with name "${relation.relationName}" in table "${referencedTableTsName}"`
240
- ) : new Error(
241
- `There are multiple relations between "${referencedTableTsName}" and "${relation.sourceTable[Table.Symbol.Name]}". Please specify relation name`
242
- );
318
+ return row;
319
+ }
320
+ class RelationsBuilderTable {
321
+ static [entityKind] = "RelationsBuilderTable";
322
+ _;
323
+ constructor(table) {
324
+ this._ = {
325
+ name: getTableName(table),
326
+ table
327
+ };
328
+ }
329
+ getSQL() {
330
+ return this._.table.getSQL();
243
331
  }
244
- if (reverseRelations[0] && is(reverseRelations[0], One) && reverseRelations[0].config) {
245
- return {
246
- fields: reverseRelations[0].config.references,
247
- references: reverseRelations[0].config.fields
332
+ }
333
+ class RelationsBuilderColumn {
334
+ static [entityKind] = "RelationsBuilderColumn";
335
+ _;
336
+ constructor(column) {
337
+ this._ = {
338
+ tableName: getTableName(column.table),
339
+ data: void 0,
340
+ column
248
341
  };
249
342
  }
250
- throw new Error(
251
- `There is not enough information to infer relation "${sourceTableTsName}.${relation.fieldName}"`
252
- );
343
+ through(column) {
344
+ this._.through = column;
345
+ throw new Error("Not implemented");
346
+ }
347
+ getSQL() {
348
+ return this._.column.getSQL();
349
+ }
253
350
  }
254
- function createTableRelationsHelpers(sourceTable) {
255
- return {
256
- one: createOne(sourceTable),
257
- many: createMany(sourceTable)
351
+ class RelationsHelperStatic {
352
+ static [entityKind] = "RelationsHelperStatic";
353
+ _;
354
+ constructor(tables) {
355
+ this._ = {
356
+ tables
357
+ };
358
+ const one = {};
359
+ const many = {};
360
+ for (const [tableName, table] of Object.entries(tables)) {
361
+ one[tableName] = (config) => {
362
+ return new One(table, config);
363
+ };
364
+ many[tableName] = (config) => {
365
+ return new Many(table, config);
366
+ };
367
+ }
368
+ this.one = one;
369
+ this.many = many;
370
+ }
371
+ one;
372
+ many;
373
+ aggs = {
374
+ count() {
375
+ return new Count();
376
+ }
258
377
  };
259
378
  }
260
- function mapRelationalRow(tablesConfig, tableConfig, row, buildQueryResultSelection, mapColumnValue = (value) => value) {
261
- const result = {};
262
- for (const [
263
- selectionItemIndex,
264
- selectionItem
265
- ] of buildQueryResultSelection.entries()) {
266
- if (selectionItem.isJson) {
267
- const relation = tableConfig.relations[selectionItem.tsKey];
268
- const rawSubRows = row[selectionItemIndex];
269
- const subRows = typeof rawSubRows === "string" ? JSON.parse(rawSubRows) : rawSubRows;
270
- result[selectionItem.tsKey] = is(relation, One) ? subRows && mapRelationalRow(
271
- tablesConfig,
272
- tablesConfig[selectionItem.relationTableTsKey],
273
- subRows,
274
- selectionItem.selection,
275
- mapColumnValue
276
- ) : subRows.map(
277
- (subRow) => mapRelationalRow(
278
- tablesConfig,
279
- tablesConfig[selectionItem.relationTableTsKey],
280
- subRow,
281
- selectionItem.selection,
282
- mapColumnValue
283
- )
379
+ function createRelationsHelper(schema) {
380
+ const schemaTables = Object.fromEntries(
381
+ Object.entries(schema).filter((e) => is(e[1], Table))
382
+ );
383
+ const helperStatic = new RelationsHelperStatic(schemaTables);
384
+ const tables = Object.entries(schema).reduce((acc, [key, value]) => {
385
+ if (is(value, Table)) {
386
+ const rTable = new RelationsBuilderTable(value);
387
+ const columns = Object.entries(getTableColumns(value)).reduce(
388
+ (acc2, [key2, column]) => {
389
+ const rbColumn = new RelationsBuilderColumn(column);
390
+ acc2[key2] = rbColumn;
391
+ return acc2;
392
+ },
393
+ {}
284
394
  );
285
- } else {
286
- const value = mapColumnValue(row[selectionItemIndex]);
287
- const field = selectionItem.field;
288
- let decoder;
289
- if (is(field, Column)) {
290
- decoder = field;
291
- } else if (is(field, SQL)) {
292
- decoder = field.decoder;
293
- } else {
294
- decoder = field.sql.decoder;
395
+ acc[key] = Object.assign(rTable, columns);
396
+ }
397
+ return acc;
398
+ }, {});
399
+ return Object.assign(helperStatic, tables);
400
+ }
401
+ function defineRelations(schema, relations) {
402
+ return new Relations(
403
+ schema,
404
+ schema,
405
+ relations(createRelationsHelper(schema))
406
+ );
407
+ }
408
+ function relationsFieldFilterToSQL(column, filter) {
409
+ if (typeof filter !== "object")
410
+ return eq(column, filter);
411
+ const entries = Object.entries(filter);
412
+ if (!entries.length)
413
+ return void 0;
414
+ const parts = [];
415
+ for (const [target, value] of entries) {
416
+ if (value === void 0)
417
+ continue;
418
+ switch (target) {
419
+ case "NOT": {
420
+ const res = relationsFieldFilterToSQL(column, value);
421
+ if (!res)
422
+ continue;
423
+ parts.push(not(res));
424
+ continue;
425
+ }
426
+ case "OR": {
427
+ if (!value.length)
428
+ continue;
429
+ parts.push(
430
+ or(
431
+ ...value.map((subFilter) => relationsFieldFilterToSQL(column, subFilter))
432
+ )
433
+ );
434
+ continue;
435
+ }
436
+ case "isNotNull":
437
+ case "isNull": {
438
+ if (!value)
439
+ continue;
440
+ parts.push(operators[target](column));
441
+ continue;
442
+ }
443
+ case "in": {
444
+ parts.push(operators.inArray(column, value));
445
+ continue;
446
+ }
447
+ case "notIn": {
448
+ parts.push(operators.notInArray(column, value));
449
+ continue;
450
+ }
451
+ default: {
452
+ parts.push(
453
+ operators[target](
454
+ column,
455
+ value
456
+ )
457
+ );
458
+ continue;
459
+ }
460
+ }
461
+ }
462
+ if (!parts.length)
463
+ return void 0;
464
+ return and(...parts);
465
+ }
466
+ function relationsFilterToSQL(table, filter) {
467
+ const entries = Object.entries(filter);
468
+ if (!entries.length)
469
+ return void 0;
470
+ const parts = [];
471
+ for (const [target, value] of entries) {
472
+ if (value === void 0)
473
+ continue;
474
+ switch (target) {
475
+ case "RAW": {
476
+ if (value) {
477
+ parts.push(
478
+ value(table[Columns], operators)
479
+ );
480
+ }
481
+ continue;
482
+ }
483
+ case "OR": {
484
+ if (!value?.length)
485
+ continue;
486
+ parts.push(
487
+ or(
488
+ ...value.map(
489
+ (subFilter) => relationsFilterToSQL(table, subFilter)
490
+ )
491
+ )
492
+ );
493
+ continue;
494
+ }
495
+ case "NOT": {
496
+ if (value === void 0)
497
+ continue;
498
+ const built = relationsFilterToSQL(table, value);
499
+ if (!built)
500
+ continue;
501
+ parts.push(not(built));
502
+ continue;
503
+ }
504
+ default: {
505
+ const colFilter = relationsFieldFilterToSQL(
506
+ table[target],
507
+ value
508
+ );
509
+ if (colFilter)
510
+ parts.push(colFilter);
511
+ continue;
295
512
  }
296
- result[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);
297
513
  }
298
514
  }
299
- return result;
515
+ return and(...parts);
516
+ }
517
+ function relationsOrderToSQL(table, orders) {
518
+ if (typeof orders === "function") {
519
+ const data = orders(table, orderByOperators);
520
+ return is(data, SQL) ? data : Array.isArray(data) ? data.length ? sql.join(data.map((o) => is(o, SQL) ? o : asc(o)), sql`, `) : void 0 : is(data, Column) ? asc(data) : void 0;
521
+ }
522
+ const entries = Object.entries(orders).filter(([_, value]) => value);
523
+ if (!entries.length)
524
+ return void 0;
525
+ return sql.join(entries.map(([column, value]) => (value === "asc" ? asc : desc)(table[Columns][column])), sql`, `);
526
+ }
527
+ function relationExtrasToSQL(table, extras) {
528
+ const subqueries = [];
529
+ const selection = [];
530
+ for (const [key, extra] of Object.entries(
531
+ typeof extras === "function" ? extras(table, { sql: operators.sql }) : extras
532
+ )) {
533
+ if (!extra)
534
+ continue;
535
+ const query = sql`(${extra.getSQL()}) as ${sql.identifier(key)}`;
536
+ query.decoder = extra.getSQL().decoder;
537
+ subqueries.push(query);
538
+ selection.push({
539
+ key,
540
+ field: query
541
+ });
542
+ }
543
+ return {
544
+ sql: subqueries.length ? sql.join(subqueries, sql`, `) : void 0,
545
+ selection
546
+ };
547
+ }
548
+ function relationToSQL(relation, sourceTable, targetTable) {
549
+ const columnWhere = relation.sourceColumns.map((s, i) => {
550
+ const t = relation.targetColumns[i];
551
+ return eq(
552
+ sql`${sql`${sql`${sql.identifier(sourceTable[Schema] ?? "")}.`.if(sourceTable[Schema] && !sourceTable[IsAlias])}`}${sourceTable}.${sql.identifier(s.name)}`,
553
+ sql`${sql`${sql`${sql.identifier(targetTable[Schema] ?? "")}.`.if(targetTable[Schema] && !targetTable[IsAlias])}`}${targetTable}.${sql.identifier(t.name)}`
554
+ );
555
+ });
556
+ const targetWhere = relation.where ? and(...columnWhere, relationsFilterToSQL(sourceTable, relation.where)) : and(...columnWhere);
557
+ return targetWhere;
300
558
  }
301
559
  export {
560
+ AggregatedField,
561
+ Count,
302
562
  Many,
303
563
  One,
304
564
  Relation,
305
565
  Relations,
306
- createMany,
307
- createOne,
308
- createTableRelationsHelpers,
309
- extractTablesRelationalConfig,
310
- getOperators,
566
+ RelationsBuilderColumn,
567
+ RelationsBuilderTable,
568
+ RelationsHelperStatic,
569
+ createRelationsHelper,
570
+ defineRelations,
311
571
  getOrderByOperators,
312
572
  mapRelationalRow,
313
- normalizeRelation,
314
- relations
573
+ operators,
574
+ orderByOperators,
575
+ relationExtrasToSQL,
576
+ relationToSQL,
577
+ relationsFilterToSQL,
578
+ relationsOrderToSQL
315
579
  };
316
580
  //# sourceMappingURL=relations.js.map