drizzle-orm 0.38.4 → 0.39.0-b06bbcd

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