drizzle-orm 0.36.4-6f7d345 → 0.36.4-7f37974

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