drizzle-orm 0.38.4 → 0.39.0-0cc153d

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