drizzle-orm 1.0.0-beta.1-2acab7f → 1.0.0-beta.1-4ec2def

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 (1303) hide show
  1. package/_relations.cjs +48 -0
  2. package/_relations.cjs.map +1 -1
  3. package/_relations.d.cts +1 -0
  4. package/_relations.d.ts +1 -0
  5. package/_relations.js +47 -0
  6. package/_relations.js.map +1 -1
  7. package/cockroach/driver.cjs +113 -0
  8. package/cockroach/driver.cjs.map +1 -0
  9. package/cockroach/driver.d.cts +42 -0
  10. package/cockroach/driver.d.ts +42 -0
  11. package/cockroach/driver.js +77 -0
  12. package/cockroach/driver.js.map +1 -0
  13. package/cockroach/index.cjs +25 -0
  14. package/cockroach/index.cjs.map +1 -0
  15. package/cockroach/index.d.cts +2 -0
  16. package/cockroach/index.d.ts +2 -0
  17. package/cockroach/index.js +3 -0
  18. package/cockroach/index.js.map +1 -0
  19. package/cockroach/migrator.cjs +33 -0
  20. package/cockroach/migrator.cjs.map +1 -0
  21. package/cockroach/migrator.d.cts +3 -0
  22. package/cockroach/migrator.d.ts +3 -0
  23. package/cockroach/migrator.js +9 -0
  24. package/cockroach/migrator.js.map +1 -0
  25. package/cockroach/session.cjs +253 -0
  26. package/cockroach/session.cjs.map +1 -0
  27. package/cockroach/session.d.cts +48 -0
  28. package/cockroach/session.d.ts +48 -0
  29. package/cockroach/session.js +217 -0
  30. package/cockroach/session.js.map +1 -0
  31. package/cockroach-core/alias.cjs +32 -0
  32. package/cockroach-core/alias.cjs.map +1 -0
  33. package/cockroach-core/alias.d.cts +4 -0
  34. package/cockroach-core/alias.d.ts +4 -0
  35. package/cockroach-core/alias.js +8 -0
  36. package/cockroach-core/alias.js.map +1 -0
  37. package/cockroach-core/checks.cjs +58 -0
  38. package/cockroach-core/checks.cjs.map +1 -0
  39. package/cockroach-core/checks.d.cts +18 -0
  40. package/cockroach-core/checks.d.ts +18 -0
  41. package/cockroach-core/checks.js +32 -0
  42. package/cockroach-core/checks.js.map +1 -0
  43. package/cockroach-core/columns/all.cjs +81 -0
  44. package/cockroach-core/columns/all.cjs.map +1 -0
  45. package/cockroach-core/columns/all.d.cts +52 -0
  46. package/cockroach-core/columns/all.d.ts +52 -0
  47. package/cockroach-core/columns/all.js +57 -0
  48. package/cockroach-core/columns/all.js.map +1 -0
  49. package/cockroach-core/columns/bigint.cjs +104 -0
  50. package/cockroach-core/columns/bigint.cjs.map +1 -0
  51. package/cockroach-core/columns/bigint.d.cts +37 -0
  52. package/cockroach-core/columns/bigint.d.ts +37 -0
  53. package/cockroach-core/columns/bigint.js +75 -0
  54. package/cockroach-core/columns/bigint.js.map +1 -0
  55. package/cockroach-core/columns/bit.cjs +61 -0
  56. package/cockroach-core/columns/bit.cjs.map +1 -0
  57. package/cockroach-core/columns/bit.d.cts +29 -0
  58. package/cockroach-core/columns/bit.d.ts +29 -0
  59. package/cockroach-core/columns/bit.js +35 -0
  60. package/cockroach-core/columns/bit.js.map +1 -0
  61. package/cockroach-core/columns/bool.cjs +56 -0
  62. package/cockroach-core/columns/bool.cjs.map +1 -0
  63. package/cockroach-core/columns/bool.d.cts +16 -0
  64. package/cockroach-core/columns/bool.d.ts +16 -0
  65. package/cockroach-core/columns/bool.js +30 -0
  66. package/cockroach-core/columns/bool.js.map +1 -0
  67. package/cockroach-core/columns/char.cjs +62 -0
  68. package/cockroach-core/columns/char.cjs.map +1 -0
  69. package/cockroach-core/columns/char.d.cts +31 -0
  70. package/cockroach-core/columns/char.d.ts +31 -0
  71. package/cockroach-core/columns/char.js +36 -0
  72. package/cockroach-core/columns/char.js.map +1 -0
  73. package/cockroach-core/columns/common.cjs +199 -0
  74. package/cockroach-core/columns/common.cjs.map +1 -0
  75. package/cockroach-core/columns/common.d.cts +98 -0
  76. package/cockroach-core/columns/common.d.ts +98 -0
  77. package/cockroach-core/columns/common.js +169 -0
  78. package/cockroach-core/columns/common.js.map +1 -0
  79. package/cockroach-core/columns/custom.cjs +102 -0
  80. package/cockroach-core/columns/custom.cjs.map +1 -0
  81. package/cockroach-core/columns/custom.d.cts +261 -0
  82. package/cockroach-core/columns/custom.d.ts +261 -0
  83. package/cockroach-core/columns/custom.js +76 -0
  84. package/cockroach-core/columns/custom.js.map +1 -0
  85. package/cockroach-core/columns/date.cjs +91 -0
  86. package/cockroach-core/columns/date.cjs.map +1 -0
  87. package/cockroach-core/columns/date.common.cjs +37 -0
  88. package/cockroach-core/columns/date.common.cjs.map +1 -0
  89. package/cockroach-core/columns/date.common.d.cts +7 -0
  90. package/cockroach-core/columns/date.common.d.ts +7 -0
  91. package/cockroach-core/columns/date.common.js +13 -0
  92. package/cockroach-core/columns/date.common.js.map +1 -0
  93. package/cockroach-core/columns/date.d.cts +36 -0
  94. package/cockroach-core/columns/date.d.ts +36 -0
  95. package/cockroach-core/columns/date.js +63 -0
  96. package/cockroach-core/columns/date.js.map +1 -0
  97. package/cockroach-core/columns/decimal.cjs +164 -0
  98. package/cockroach-core/columns/decimal.cjs.map +1 -0
  99. package/cockroach-core/columns/decimal.d.cts +80 -0
  100. package/cockroach-core/columns/decimal.d.ts +80 -0
  101. package/cockroach-core/columns/decimal.js +133 -0
  102. package/cockroach-core/columns/decimal.js.map +1 -0
  103. package/cockroach-core/columns/enum.cjs +127 -0
  104. package/cockroach-core/columns/enum.cjs.map +1 -0
  105. package/cockroach-core/columns/enum.d.cts +64 -0
  106. package/cockroach-core/columns/enum.d.ts +64 -0
  107. package/cockroach-core/columns/enum.js +96 -0
  108. package/cockroach-core/columns/enum.js.map +1 -0
  109. package/cockroach-core/columns/float.cjs +65 -0
  110. package/cockroach-core/columns/float.cjs.map +1 -0
  111. package/cockroach-core/columns/float.d.cts +18 -0
  112. package/cockroach-core/columns/float.d.ts +18 -0
  113. package/cockroach-core/columns/float.js +38 -0
  114. package/cockroach-core/columns/float.js.map +1 -0
  115. package/cockroach-core/columns/geometry.cjs +98 -0
  116. package/cockroach-core/columns/geometry.cjs.map +1 -0
  117. package/cockroach-core/columns/geometry.d.cts +48 -0
  118. package/cockroach-core/columns/geometry.d.ts +48 -0
  119. package/cockroach-core/columns/geometry.js +70 -0
  120. package/cockroach-core/columns/geometry.js.map +1 -0
  121. package/cockroach-core/columns/index.cjs +71 -0
  122. package/cockroach-core/columns/index.cjs.map +1 -0
  123. package/cockroach-core/columns/index.d.cts +25 -0
  124. package/cockroach-core/columns/index.d.ts +25 -0
  125. package/cockroach-core/columns/index.js +26 -0
  126. package/cockroach-core/columns/index.js.map +1 -0
  127. package/cockroach-core/columns/inet.cjs +56 -0
  128. package/cockroach-core/columns/inet.cjs.map +1 -0
  129. package/cockroach-core/columns/inet.d.cts +16 -0
  130. package/cockroach-core/columns/inet.d.ts +16 -0
  131. package/cockroach-core/columns/inet.js +30 -0
  132. package/cockroach-core/columns/inet.js.map +1 -0
  133. package/cockroach-core/columns/int.common.cjs +55 -0
  134. package/cockroach-core/columns/int.common.cjs.map +1 -0
  135. package/cockroach-core/columns/int.common.d.cts +11 -0
  136. package/cockroach-core/columns/int.common.d.ts +11 -0
  137. package/cockroach-core/columns/int.common.js +31 -0
  138. package/cockroach-core/columns/int.common.js.map +1 -0
  139. package/cockroach-core/columns/integer.cjs +63 -0
  140. package/cockroach-core/columns/integer.cjs.map +1 -0
  141. package/cockroach-core/columns/integer.d.cts +18 -0
  142. package/cockroach-core/columns/integer.d.ts +18 -0
  143. package/cockroach-core/columns/integer.js +37 -0
  144. package/cockroach-core/columns/integer.js.map +1 -0
  145. package/cockroach-core/columns/interval.cjs +63 -0
  146. package/cockroach-core/columns/interval.cjs.map +1 -0
  147. package/cockroach-core/columns/interval.d.cts +28 -0
  148. package/cockroach-core/columns/interval.d.ts +28 -0
  149. package/cockroach-core/columns/interval.js +37 -0
  150. package/cockroach-core/columns/interval.js.map +1 -0
  151. package/cockroach-core/columns/jsonb.cjs +72 -0
  152. package/cockroach-core/columns/jsonb.cjs.map +1 -0
  153. package/cockroach-core/columns/jsonb.d.cts +20 -0
  154. package/cockroach-core/columns/jsonb.d.ts +20 -0
  155. package/cockroach-core/columns/jsonb.js +46 -0
  156. package/cockroach-core/columns/jsonb.js.map +1 -0
  157. package/cockroach-core/columns/real.cjs +66 -0
  158. package/cockroach-core/columns/real.cjs.map +1 -0
  159. package/cockroach-core/columns/real.d.cts +21 -0
  160. package/cockroach-core/columns/real.d.ts +21 -0
  161. package/cockroach-core/columns/real.js +40 -0
  162. package/cockroach-core/columns/real.js.map +1 -0
  163. package/cockroach-core/columns/smallint.cjs +68 -0
  164. package/cockroach-core/columns/smallint.cjs.map +1 -0
  165. package/cockroach-core/columns/smallint.d.cts +19 -0
  166. package/cockroach-core/columns/smallint.d.ts +19 -0
  167. package/cockroach-core/columns/smallint.js +41 -0
  168. package/cockroach-core/columns/smallint.js.map +1 -0
  169. package/cockroach-core/columns/string.cjs +66 -0
  170. package/cockroach-core/columns/string.cjs.map +1 -0
  171. package/cockroach-core/columns/string.d.cts +35 -0
  172. package/cockroach-core/columns/string.d.ts +35 -0
  173. package/cockroach-core/columns/string.js +39 -0
  174. package/cockroach-core/columns/string.js.map +1 -0
  175. package/cockroach-core/columns/time.cjs +70 -0
  176. package/cockroach-core/columns/time.cjs.map +1 -0
  177. package/cockroach-core/columns/time.d.cts +31 -0
  178. package/cockroach-core/columns/time.d.ts +31 -0
  179. package/cockroach-core/columns/time.js +44 -0
  180. package/cockroach-core/columns/time.js.map +1 -0
  181. package/cockroach-core/columns/timestamp.cjs +111 -0
  182. package/cockroach-core/columns/timestamp.cjs.map +1 -0
  183. package/cockroach-core/columns/timestamp.d.cts +52 -0
  184. package/cockroach-core/columns/timestamp.d.ts +52 -0
  185. package/cockroach-core/columns/timestamp.js +83 -0
  186. package/cockroach-core/columns/timestamp.js.map +1 -0
  187. package/cockroach-core/columns/utils.cjs +65 -0
  188. package/cockroach-core/columns/utils.cjs.map +1 -0
  189. package/cockroach-core/columns/utils.d.cts +1 -0
  190. package/cockroach-core/columns/utils.d.ts +1 -0
  191. package/cockroach-core/columns/utils.js +41 -0
  192. package/cockroach-core/columns/utils.js.map +1 -0
  193. package/cockroach-core/columns/uuid.cjs +63 -0
  194. package/cockroach-core/columns/uuid.cjs.map +1 -0
  195. package/cockroach-core/columns/uuid.d.cts +20 -0
  196. package/cockroach-core/columns/uuid.d.ts +20 -0
  197. package/cockroach-core/columns/uuid.js +37 -0
  198. package/cockroach-core/columns/uuid.js.map +1 -0
  199. package/cockroach-core/columns/varbit.cjs +59 -0
  200. package/cockroach-core/columns/varbit.cjs.map +1 -0
  201. package/cockroach-core/columns/varbit.d.cts +24 -0
  202. package/cockroach-core/columns/varbit.d.ts +24 -0
  203. package/cockroach-core/columns/varbit.js +33 -0
  204. package/cockroach-core/columns/varbit.js.map +1 -0
  205. package/cockroach-core/columns/varchar.cjs +61 -0
  206. package/cockroach-core/columns/varchar.cjs.map +1 -0
  207. package/cockroach-core/columns/varchar.d.cts +30 -0
  208. package/cockroach-core/columns/varchar.d.ts +30 -0
  209. package/cockroach-core/columns/varchar.js +35 -0
  210. package/cockroach-core/columns/varchar.js.map +1 -0
  211. package/cockroach-core/columns/vector.cjs +65 -0
  212. package/cockroach-core/columns/vector.cjs.map +1 -0
  213. package/cockroach-core/columns/vector.d.cts +26 -0
  214. package/cockroach-core/columns/vector.d.ts +26 -0
  215. package/cockroach-core/columns/vector.js +39 -0
  216. package/cockroach-core/columns/vector.js.map +1 -0
  217. package/cockroach-core/db.cjs +346 -0
  218. package/cockroach-core/db.cjs.map +1 -0
  219. package/cockroach-core/db.d.cts +282 -0
  220. package/cockroach-core/db.d.ts +282 -0
  221. package/cockroach-core/db.js +327 -0
  222. package/cockroach-core/db.js.map +1 -0
  223. package/cockroach-core/dialect.cjs +1146 -0
  224. package/cockroach-core/dialect.cjs.map +1 -0
  225. package/cockroach-core/dialect.d.cts +65 -0
  226. package/cockroach-core/dialect.d.ts +65 -0
  227. package/cockroach-core/dialect.js +1126 -0
  228. package/cockroach-core/dialect.js.map +1 -0
  229. package/cockroach-core/expressions.cjs +49 -0
  230. package/cockroach-core/expressions.cjs.map +1 -0
  231. package/cockroach-core/expressions.d.cts +8 -0
  232. package/cockroach-core/expressions.d.ts +8 -0
  233. package/cockroach-core/expressions.js +22 -0
  234. package/cockroach-core/expressions.js.map +1 -0
  235. package/cockroach-core/foreign-keys.cjs +92 -0
  236. package/cockroach-core/foreign-keys.cjs.map +1 -0
  237. package/cockroach-core/foreign-keys.d.cts +52 -0
  238. package/cockroach-core/foreign-keys.d.ts +52 -0
  239. package/cockroach-core/foreign-keys.js +66 -0
  240. package/cockroach-core/foreign-keys.js.map +1 -0
  241. package/cockroach-core/index.cjs +61 -0
  242. package/cockroach-core/index.cjs.map +1 -0
  243. package/cockroach-core/index.d.cts +20 -0
  244. package/cockroach-core/index.d.ts +20 -0
  245. package/cockroach-core/index.js +21 -0
  246. package/cockroach-core/index.js.map +1 -0
  247. package/cockroach-core/indexes.cjs +137 -0
  248. package/cockroach-core/indexes.cjs.map +1 -0
  249. package/cockroach-core/indexes.d.cts +64 -0
  250. package/cockroach-core/indexes.d.ts +64 -0
  251. package/cockroach-core/indexes.js +109 -0
  252. package/cockroach-core/indexes.js.map +1 -0
  253. package/cockroach-core/policies.cjs +58 -0
  254. package/cockroach-core/policies.cjs.map +1 -0
  255. package/cockroach-core/policies.d.cts +24 -0
  256. package/cockroach-core/policies.d.ts +24 -0
  257. package/cockroach-core/policies.js +33 -0
  258. package/cockroach-core/policies.js.map +1 -0
  259. package/cockroach-core/primary-keys.cjs +64 -0
  260. package/cockroach-core/primary-keys.cjs.map +1 -0
  261. package/cockroach-core/primary-keys.d.cts +23 -0
  262. package/cockroach-core/primary-keys.d.ts +23 -0
  263. package/cockroach-core/primary-keys.js +38 -0
  264. package/cockroach-core/primary-keys.js.map +1 -0
  265. package/cockroach-core/query-builders/count.cjs +79 -0
  266. package/cockroach-core/query-builders/count.cjs.map +1 -0
  267. package/cockroach-core/query-builders/count.d.cts +29 -0
  268. package/cockroach-core/query-builders/count.d.ts +29 -0
  269. package/cockroach-core/query-builders/count.js +55 -0
  270. package/cockroach-core/query-builders/count.js.map +1 -0
  271. package/cockroach-core/query-builders/delete.cjs +124 -0
  272. package/cockroach-core/query-builders/delete.cjs.map +1 -0
  273. package/cockroach-core/query-builders/delete.d.cts +103 -0
  274. package/cockroach-core/query-builders/delete.d.ts +103 -0
  275. package/cockroach-core/query-builders/delete.js +100 -0
  276. package/cockroach-core/query-builders/delete.js.map +1 -0
  277. package/cockroach-core/query-builders/index.cjs +35 -0
  278. package/cockroach-core/query-builders/index.cjs.map +1 -0
  279. package/cockroach-core/query-builders/index.d.cts +7 -0
  280. package/cockroach-core/query-builders/index.d.ts +7 -0
  281. package/cockroach-core/query-builders/index.js +8 -0
  282. package/cockroach-core/query-builders/index.js.map +1 -0
  283. package/cockroach-core/query-builders/insert.cjs +213 -0
  284. package/cockroach-core/query-builders/insert.cjs.map +1 -0
  285. package/cockroach-core/query-builders/insert.d.cts +168 -0
  286. package/cockroach-core/query-builders/insert.d.ts +168 -0
  287. package/cockroach-core/query-builders/insert.js +188 -0
  288. package/cockroach-core/query-builders/insert.js.map +1 -0
  289. package/cockroach-core/query-builders/query-builder.cjs +118 -0
  290. package/cockroach-core/query-builders/query-builder.cjs.map +1 -0
  291. package/cockroach-core/query-builders/query-builder.d.cts +37 -0
  292. package/cockroach-core/query-builders/query-builder.d.ts +37 -0
  293. package/cockroach-core/query-builders/query-builder.js +94 -0
  294. package/cockroach-core/query-builders/query-builder.js.map +1 -0
  295. package/cockroach-core/query-builders/query.cjs +145 -0
  296. package/cockroach-core/query-builders/query.cjs.map +1 -0
  297. package/cockroach-core/query-builders/query.d.cts +47 -0
  298. package/cockroach-core/query-builders/query.d.ts +47 -0
  299. package/cockroach-core/query-builders/query.js +122 -0
  300. package/cockroach-core/query-builders/query.js.map +1 -0
  301. package/cockroach-core/query-builders/raw.cjs +57 -0
  302. package/cockroach-core/query-builders/raw.cjs.map +1 -0
  303. package/cockroach-core/query-builders/raw.d.cts +22 -0
  304. package/cockroach-core/query-builders/raw.d.ts +22 -0
  305. package/cockroach-core/query-builders/raw.js +33 -0
  306. package/cockroach-core/query-builders/raw.js.map +1 -0
  307. package/cockroach-core/query-builders/refresh-materialized-view.cjs +83 -0
  308. package/cockroach-core/query-builders/refresh-materialized-view.cjs.map +1 -0
  309. package/cockroach-core/query-builders/refresh-materialized-view.d.cts +28 -0
  310. package/cockroach-core/query-builders/refresh-materialized-view.d.ts +28 -0
  311. package/cockroach-core/query-builders/refresh-materialized-view.js +59 -0
  312. package/cockroach-core/query-builders/refresh-materialized-view.js.map +1 -0
  313. package/cockroach-core/query-builders/select.cjs +848 -0
  314. package/cockroach-core/query-builders/select.cjs.map +1 -0
  315. package/cockroach-core/query-builders/select.d.cts +787 -0
  316. package/cockroach-core/query-builders/select.d.ts +787 -0
  317. package/cockroach-core/query-builders/select.js +821 -0
  318. package/cockroach-core/query-builders/select.js.map +1 -0
  319. package/cockroach-core/query-builders/select.types.cjs +17 -0
  320. package/cockroach-core/query-builders/select.types.cjs.map +1 -0
  321. package/cockroach-core/query-builders/select.types.d.cts +140 -0
  322. package/cockroach-core/query-builders/select.types.d.ts +140 -0
  323. package/cockroach-core/query-builders/select.types.js +1 -0
  324. package/cockroach-core/query-builders/select.types.js.map +1 -0
  325. package/cockroach-core/query-builders/update.cjs +240 -0
  326. package/cockroach-core/query-builders/update.cjs.map +1 -0
  327. package/cockroach-core/query-builders/update.d.cts +170 -0
  328. package/cockroach-core/query-builders/update.d.ts +170 -0
  329. package/cockroach-core/query-builders/update.js +219 -0
  330. package/cockroach-core/query-builders/update.js.map +1 -0
  331. package/cockroach-core/roles.cjs +54 -0
  332. package/cockroach-core/roles.cjs.map +1 -0
  333. package/cockroach-core/roles.d.cts +12 -0
  334. package/cockroach-core/roles.d.ts +12 -0
  335. package/cockroach-core/roles.js +29 -0
  336. package/cockroach-core/roles.js.map +1 -0
  337. package/cockroach-core/schema.cjs +80 -0
  338. package/cockroach-core/schema.cjs.map +1 -0
  339. package/cockroach-core/schema.d.cts +22 -0
  340. package/cockroach-core/schema.d.ts +22 -0
  341. package/cockroach-core/schema.js +60 -0
  342. package/cockroach-core/schema.js.map +1 -0
  343. package/cockroach-core/sequence.cjs +52 -0
  344. package/cockroach-core/sequence.cjs.map +1 -0
  345. package/cockroach-core/sequence.d.cts +17 -0
  346. package/cockroach-core/sequence.d.ts +17 -0
  347. package/cockroach-core/sequence.js +25 -0
  348. package/cockroach-core/sequence.js.map +1 -0
  349. package/cockroach-core/session.cjs +120 -0
  350. package/cockroach-core/session.cjs.map +1 -0
  351. package/cockroach-core/session.d.cts +62 -0
  352. package/cockroach-core/session.d.ts +62 -0
  353. package/cockroach-core/session.js +94 -0
  354. package/cockroach-core/session.js.map +1 -0
  355. package/cockroach-core/subquery.cjs +17 -0
  356. package/cockroach-core/subquery.cjs.map +1 -0
  357. package/cockroach-core/subquery.d.cts +18 -0
  358. package/cockroach-core/subquery.d.ts +18 -0
  359. package/cockroach-core/subquery.js +1 -0
  360. package/cockroach-core/subquery.js.map +1 -0
  361. package/cockroach-core/table.cjs +100 -0
  362. package/cockroach-core/table.cjs.map +1 -0
  363. package/cockroach-core/table.d.cts +37 -0
  364. package/cockroach-core/table.d.ts +37 -0
  365. package/cockroach-core/table.js +73 -0
  366. package/cockroach-core/table.js.map +1 -0
  367. package/cockroach-core/unique-constraint.cjs +77 -0
  368. package/cockroach-core/unique-constraint.cjs.map +1 -0
  369. package/cockroach-core/unique-constraint.d.cts +23 -0
  370. package/cockroach-core/unique-constraint.d.ts +23 -0
  371. package/cockroach-core/unique-constraint.js +50 -0
  372. package/cockroach-core/unique-constraint.js.map +1 -0
  373. package/cockroach-core/utils/array.cjs +106 -0
  374. package/cockroach-core/utils/array.cjs.map +1 -0
  375. package/cockroach-core/utils/array.d.cts +3 -0
  376. package/cockroach-core/utils/array.d.ts +3 -0
  377. package/cockroach-core/utils/array.js +80 -0
  378. package/cockroach-core/utils/array.js.map +1 -0
  379. package/cockroach-core/utils/index.cjs +23 -0
  380. package/cockroach-core/utils/index.cjs.map +1 -0
  381. package/cockroach-core/utils/index.d.cts +1 -0
  382. package/cockroach-core/utils/index.d.ts +1 -0
  383. package/cockroach-core/utils/index.js +2 -0
  384. package/cockroach-core/utils/index.js.map +1 -0
  385. package/cockroach-core/utils.cjs +98 -0
  386. package/cockroach-core/utils.cjs.map +1 -0
  387. package/cockroach-core/utils.d.cts +47 -0
  388. package/cockroach-core/utils.d.ts +47 -0
  389. package/cockroach-core/utils.js +72 -0
  390. package/cockroach-core/utils.js.map +1 -0
  391. package/cockroach-core/view-base.cjs +33 -0
  392. package/cockroach-core/view-base.cjs.map +1 -0
  393. package/cockroach-core/view-base.d.cts +8 -0
  394. package/cockroach-core/view-base.d.ts +8 -0
  395. package/cockroach-core/view-base.js +9 -0
  396. package/cockroach-core/view-base.js.map +1 -0
  397. package/cockroach-core/view.cjs +271 -0
  398. package/cockroach-core/view.cjs.map +1 -0
  399. package/cockroach-core/view.d.cts +106 -0
  400. package/cockroach-core/view.d.ts +106 -0
  401. package/cockroach-core/view.js +233 -0
  402. package/cockroach-core/view.js.map +1 -0
  403. package/column-builder.cjs.map +1 -1
  404. package/column-builder.d.cts +10 -8
  405. package/column-builder.d.ts +10 -8
  406. package/column-builder.js.map +1 -1
  407. package/column.cjs +2 -0
  408. package/column.cjs.map +1 -1
  409. package/column.d.cts +1 -0
  410. package/column.d.ts +1 -0
  411. package/column.js +2 -0
  412. package/column.js.map +1 -1
  413. package/gel-core/columns/bigint.cjs.map +1 -1
  414. package/gel-core/columns/bigint.d.cts +0 -1
  415. package/gel-core/columns/bigint.d.ts +0 -1
  416. package/gel-core/columns/bigint.js.map +1 -1
  417. package/gel-core/columns/bigintT.cjs.map +1 -1
  418. package/gel-core/columns/bigintT.d.cts +0 -1
  419. package/gel-core/columns/bigintT.d.ts +0 -1
  420. package/gel-core/columns/bigintT.js.map +1 -1
  421. package/gel-core/columns/boolean.cjs.map +1 -1
  422. package/gel-core/columns/boolean.d.cts +0 -1
  423. package/gel-core/columns/boolean.d.ts +0 -1
  424. package/gel-core/columns/boolean.js.map +1 -1
  425. package/gel-core/columns/bytes.cjs.map +1 -1
  426. package/gel-core/columns/bytes.d.cts +0 -1
  427. package/gel-core/columns/bytes.d.ts +0 -1
  428. package/gel-core/columns/bytes.js.map +1 -1
  429. package/gel-core/columns/custom.cjs.map +1 -1
  430. package/gel-core/columns/custom.d.cts +0 -1
  431. package/gel-core/columns/custom.d.ts +0 -1
  432. package/gel-core/columns/custom.js.map +1 -1
  433. package/gel-core/columns/date-duration.cjs.map +1 -1
  434. package/gel-core/columns/date-duration.d.cts +0 -1
  435. package/gel-core/columns/date-duration.d.ts +0 -1
  436. package/gel-core/columns/date-duration.js.map +1 -1
  437. package/gel-core/columns/decimal.cjs.map +1 -1
  438. package/gel-core/columns/decimal.d.cts +0 -1
  439. package/gel-core/columns/decimal.d.ts +0 -1
  440. package/gel-core/columns/decimal.js.map +1 -1
  441. package/gel-core/columns/double-precision.cjs.map +1 -1
  442. package/gel-core/columns/double-precision.d.cts +0 -1
  443. package/gel-core/columns/double-precision.d.ts +0 -1
  444. package/gel-core/columns/double-precision.js.map +1 -1
  445. package/gel-core/columns/duration.cjs.map +1 -1
  446. package/gel-core/columns/duration.d.cts +0 -1
  447. package/gel-core/columns/duration.d.ts +0 -1
  448. package/gel-core/columns/duration.js.map +1 -1
  449. package/gel-core/columns/integer.cjs.map +1 -1
  450. package/gel-core/columns/integer.d.cts +0 -1
  451. package/gel-core/columns/integer.d.ts +0 -1
  452. package/gel-core/columns/integer.js.map +1 -1
  453. package/gel-core/columns/json.cjs.map +1 -1
  454. package/gel-core/columns/json.d.cts +0 -1
  455. package/gel-core/columns/json.d.ts +0 -1
  456. package/gel-core/columns/json.js.map +1 -1
  457. package/gel-core/columns/localdate.cjs.map +1 -1
  458. package/gel-core/columns/localdate.d.cts +0 -1
  459. package/gel-core/columns/localdate.d.ts +0 -1
  460. package/gel-core/columns/localdate.js.map +1 -1
  461. package/gel-core/columns/localtime.cjs.map +1 -1
  462. package/gel-core/columns/localtime.d.cts +0 -1
  463. package/gel-core/columns/localtime.d.ts +0 -1
  464. package/gel-core/columns/localtime.js.map +1 -1
  465. package/gel-core/columns/real.cjs.map +1 -1
  466. package/gel-core/columns/real.d.cts +0 -1
  467. package/gel-core/columns/real.d.ts +0 -1
  468. package/gel-core/columns/real.js.map +1 -1
  469. package/gel-core/columns/relative-duration.cjs.map +1 -1
  470. package/gel-core/columns/relative-duration.d.cts +0 -1
  471. package/gel-core/columns/relative-duration.d.ts +0 -1
  472. package/gel-core/columns/relative-duration.js.map +1 -1
  473. package/gel-core/columns/smallint.cjs.map +1 -1
  474. package/gel-core/columns/smallint.d.cts +0 -1
  475. package/gel-core/columns/smallint.d.ts +0 -1
  476. package/gel-core/columns/smallint.js.map +1 -1
  477. package/gel-core/columns/text.cjs.map +1 -1
  478. package/gel-core/columns/text.d.cts +0 -1
  479. package/gel-core/columns/text.d.ts +0 -1
  480. package/gel-core/columns/text.js.map +1 -1
  481. package/gel-core/columns/timestamp.cjs.map +1 -1
  482. package/gel-core/columns/timestamp.d.cts +0 -1
  483. package/gel-core/columns/timestamp.d.ts +0 -1
  484. package/gel-core/columns/timestamp.js.map +1 -1
  485. package/gel-core/columns/timestamptz.cjs.map +1 -1
  486. package/gel-core/columns/timestamptz.d.cts +0 -1
  487. package/gel-core/columns/timestamptz.d.ts +0 -1
  488. package/gel-core/columns/timestamptz.js.map +1 -1
  489. package/gel-core/columns/uuid.cjs.map +1 -1
  490. package/gel-core/columns/uuid.d.cts +0 -1
  491. package/gel-core/columns/uuid.d.ts +0 -1
  492. package/gel-core/columns/uuid.js.map +1 -1
  493. package/gel-core/query-builders/insert.cjs.map +1 -1
  494. package/gel-core/query-builders/insert.d.cts +6 -9
  495. package/gel-core/query-builders/insert.d.ts +6 -9
  496. package/gel-core/query-builders/insert.js.map +1 -1
  497. package/gel-core/query-builders/update.cjs.map +1 -1
  498. package/gel-core/query-builders/update.d.cts +1 -1
  499. package/gel-core/query-builders/update.d.ts +1 -1
  500. package/gel-core/query-builders/update.js.map +1 -1
  501. package/mssql-core/alias.cjs +32 -0
  502. package/mssql-core/alias.cjs.map +1 -0
  503. package/mssql-core/alias.d.cts +4 -0
  504. package/mssql-core/alias.d.ts +4 -0
  505. package/mssql-core/alias.js +8 -0
  506. package/mssql-core/alias.js.map +1 -0
  507. package/mssql-core/checks.cjs +58 -0
  508. package/mssql-core/checks.cjs.map +1 -0
  509. package/mssql-core/checks.d.cts +18 -0
  510. package/mssql-core/checks.d.ts +18 -0
  511. package/mssql-core/checks.js +32 -0
  512. package/mssql-core/checks.js.map +1 -0
  513. package/mssql-core/columns/all.cjs +74 -0
  514. package/mssql-core/columns/all.cjs.map +1 -0
  515. package/mssql-core/columns/all.d.cts +45 -0
  516. package/mssql-core/columns/all.d.ts +45 -0
  517. package/mssql-core/columns/all.js +50 -0
  518. package/mssql-core/columns/all.js.map +1 -0
  519. package/mssql-core/columns/bigint.cjs +72 -0
  520. package/mssql-core/columns/bigint.cjs.map +1 -0
  521. package/mssql-core/columns/bigint.d.cts +25 -0
  522. package/mssql-core/columns/bigint.d.ts +25 -0
  523. package/mssql-core/columns/bigint.js +46 -0
  524. package/mssql-core/columns/bigint.js.map +1 -0
  525. package/mssql-core/columns/binary.cjs +57 -0
  526. package/mssql-core/columns/binary.cjs.map +1 -0
  527. package/mssql-core/columns/binary.d.cts +24 -0
  528. package/mssql-core/columns/binary.d.ts +24 -0
  529. package/mssql-core/columns/binary.js +31 -0
  530. package/mssql-core/columns/binary.js.map +1 -0
  531. package/mssql-core/columns/bit.cjs +54 -0
  532. package/mssql-core/columns/bit.cjs.map +1 -0
  533. package/mssql-core/columns/bit.d.cts +17 -0
  534. package/mssql-core/columns/bit.d.ts +17 -0
  535. package/mssql-core/columns/bit.js +28 -0
  536. package/mssql-core/columns/bit.js.map +1 -0
  537. package/mssql-core/columns/char.cjs +73 -0
  538. package/mssql-core/columns/char.cjs.map +1 -0
  539. package/mssql-core/columns/char.d.cts +29 -0
  540. package/mssql-core/columns/char.d.ts +29 -0
  541. package/mssql-core/columns/char.js +46 -0
  542. package/mssql-core/columns/char.js.map +1 -0
  543. package/mssql-core/columns/common.cjs +112 -0
  544. package/mssql-core/columns/common.cjs.map +1 -0
  545. package/mssql-core/columns/common.d.cts +57 -0
  546. package/mssql-core/columns/common.d.ts +57 -0
  547. package/mssql-core/columns/common.js +85 -0
  548. package/mssql-core/columns/common.js.map +1 -0
  549. package/mssql-core/columns/custom.cjs +105 -0
  550. package/mssql-core/columns/custom.cjs.map +1 -0
  551. package/mssql-core/columns/custom.d.cts +261 -0
  552. package/mssql-core/columns/custom.d.ts +261 -0
  553. package/mssql-core/columns/custom.js +79 -0
  554. package/mssql-core/columns/custom.js.map +1 -0
  555. package/mssql-core/columns/date.cjs +94 -0
  556. package/mssql-core/columns/date.cjs.map +1 -0
  557. package/mssql-core/columns/date.common.cjs +37 -0
  558. package/mssql-core/columns/date.common.cjs.map +1 -0
  559. package/mssql-core/columns/date.common.d.cts +12 -0
  560. package/mssql-core/columns/date.common.d.ts +12 -0
  561. package/mssql-core/columns/date.common.js +13 -0
  562. package/mssql-core/columns/date.common.js.map +1 -0
  563. package/mssql-core/columns/date.d.cts +39 -0
  564. package/mssql-core/columns/date.d.ts +39 -0
  565. package/mssql-core/columns/date.js +66 -0
  566. package/mssql-core/columns/date.js.map +1 -0
  567. package/mssql-core/columns/datetime.cjs +94 -0
  568. package/mssql-core/columns/datetime.cjs.map +1 -0
  569. package/mssql-core/columns/datetime.d.cts +38 -0
  570. package/mssql-core/columns/datetime.d.ts +38 -0
  571. package/mssql-core/columns/datetime.js +66 -0
  572. package/mssql-core/columns/datetime.js.map +1 -0
  573. package/mssql-core/columns/datetime2.cjs +102 -0
  574. package/mssql-core/columns/datetime2.cjs.map +1 -0
  575. package/mssql-core/columns/datetime2.d.cts +38 -0
  576. package/mssql-core/columns/datetime2.d.ts +38 -0
  577. package/mssql-core/columns/datetime2.js +74 -0
  578. package/mssql-core/columns/datetime2.js.map +1 -0
  579. package/mssql-core/columns/datetimeoffset.cjs +102 -0
  580. package/mssql-core/columns/datetimeoffset.cjs.map +1 -0
  581. package/mssql-core/columns/datetimeoffset.d.cts +39 -0
  582. package/mssql-core/columns/datetimeoffset.d.ts +39 -0
  583. package/mssql-core/columns/datetimeoffset.js +74 -0
  584. package/mssql-core/columns/datetimeoffset.js.map +1 -0
  585. package/mssql-core/columns/decimal.cjs +146 -0
  586. package/mssql-core/columns/decimal.cjs.map +1 -0
  587. package/mssql-core/columns/decimal.d.cts +58 -0
  588. package/mssql-core/columns/decimal.d.ts +58 -0
  589. package/mssql-core/columns/decimal.js +116 -0
  590. package/mssql-core/columns/decimal.js.map +1 -0
  591. package/mssql-core/columns/float.cjs +58 -0
  592. package/mssql-core/columns/float.cjs.map +1 -0
  593. package/mssql-core/columns/float.d.cts +21 -0
  594. package/mssql-core/columns/float.d.ts +21 -0
  595. package/mssql-core/columns/float.js +32 -0
  596. package/mssql-core/columns/float.js.map +1 -0
  597. package/mssql-core/columns/index.cjs +63 -0
  598. package/mssql-core/columns/index.cjs.map +1 -0
  599. package/mssql-core/columns/index.d.cts +21 -0
  600. package/mssql-core/columns/index.d.ts +21 -0
  601. package/mssql-core/columns/index.js +22 -0
  602. package/mssql-core/columns/index.js.map +1 -0
  603. package/mssql-core/columns/int.cjs +53 -0
  604. package/mssql-core/columns/int.cjs.map +1 -0
  605. package/mssql-core/columns/int.d.cts +16 -0
  606. package/mssql-core/columns/int.d.ts +16 -0
  607. package/mssql-core/columns/int.js +27 -0
  608. package/mssql-core/columns/int.js.map +1 -0
  609. package/mssql-core/columns/numeric.cjs +146 -0
  610. package/mssql-core/columns/numeric.cjs.map +1 -0
  611. package/mssql-core/columns/numeric.d.cts +58 -0
  612. package/mssql-core/columns/numeric.d.ts +58 -0
  613. package/mssql-core/columns/numeric.js +116 -0
  614. package/mssql-core/columns/numeric.js.map +1 -0
  615. package/mssql-core/columns/real.cjs +53 -0
  616. package/mssql-core/columns/real.cjs.map +1 -0
  617. package/mssql-core/columns/real.d.cts +16 -0
  618. package/mssql-core/columns/real.d.ts +16 -0
  619. package/mssql-core/columns/real.js +27 -0
  620. package/mssql-core/columns/real.js.map +1 -0
  621. package/mssql-core/columns/smallint.cjs +62 -0
  622. package/mssql-core/columns/smallint.cjs.map +1 -0
  623. package/mssql-core/columns/smallint.d.cts +17 -0
  624. package/mssql-core/columns/smallint.d.ts +17 -0
  625. package/mssql-core/columns/smallint.js +36 -0
  626. package/mssql-core/columns/smallint.js.map +1 -0
  627. package/mssql-core/columns/text.cjs +68 -0
  628. package/mssql-core/columns/text.cjs.map +1 -0
  629. package/mssql-core/columns/text.d.cts +36 -0
  630. package/mssql-core/columns/text.d.ts +36 -0
  631. package/mssql-core/columns/text.js +41 -0
  632. package/mssql-core/columns/text.js.map +1 -0
  633. package/mssql-core/columns/time.cjs +90 -0
  634. package/mssql-core/columns/time.cjs.map +1 -0
  635. package/mssql-core/columns/time.d.cts +37 -0
  636. package/mssql-core/columns/time.d.ts +37 -0
  637. package/mssql-core/columns/time.js +62 -0
  638. package/mssql-core/columns/time.js.map +1 -0
  639. package/mssql-core/columns/tinyint.cjs +62 -0
  640. package/mssql-core/columns/tinyint.cjs.map +1 -0
  641. package/mssql-core/columns/tinyint.d.cts +17 -0
  642. package/mssql-core/columns/tinyint.d.ts +17 -0
  643. package/mssql-core/columns/tinyint.js +36 -0
  644. package/mssql-core/columns/tinyint.js.map +1 -0
  645. package/mssql-core/columns/varbinary.cjs +61 -0
  646. package/mssql-core/columns/varbinary.cjs.map +1 -0
  647. package/mssql-core/columns/varbinary.d.cts +23 -0
  648. package/mssql-core/columns/varbinary.d.ts +23 -0
  649. package/mssql-core/columns/varbinary.js +35 -0
  650. package/mssql-core/columns/varbinary.js.map +1 -0
  651. package/mssql-core/columns/varchar.cjs +117 -0
  652. package/mssql-core/columns/varchar.cjs.map +1 -0
  653. package/mssql-core/columns/varchar.d.cts +59 -0
  654. package/mssql-core/columns/varchar.d.ts +59 -0
  655. package/mssql-core/columns/varchar.js +88 -0
  656. package/mssql-core/columns/varchar.js.map +1 -0
  657. package/mssql-core/db.cjs +254 -0
  658. package/mssql-core/db.cjs.map +1 -0
  659. package/mssql-core/db.d.cts +228 -0
  660. package/mssql-core/db.d.ts +228 -0
  661. package/mssql-core/db.js +235 -0
  662. package/mssql-core/db.js.map +1 -0
  663. package/mssql-core/dialect.cjs +633 -0
  664. package/mssql-core/dialect.cjs.map +1 -0
  665. package/mssql-core/dialect.d.cts +58 -0
  666. package/mssql-core/dialect.d.ts +58 -0
  667. package/mssql-core/dialect.js +599 -0
  668. package/mssql-core/dialect.js.map +1 -0
  669. package/mssql-core/expressions.cjs +49 -0
  670. package/mssql-core/expressions.cjs.map +1 -0
  671. package/mssql-core/expressions.d.cts +8 -0
  672. package/mssql-core/expressions.d.ts +8 -0
  673. package/mssql-core/expressions.js +22 -0
  674. package/mssql-core/expressions.js.map +1 -0
  675. package/mssql-core/foreign-keys.cjs +91 -0
  676. package/mssql-core/foreign-keys.cjs.map +1 -0
  677. package/mssql-core/foreign-keys.d.cts +51 -0
  678. package/mssql-core/foreign-keys.d.ts +51 -0
  679. package/mssql-core/foreign-keys.js +65 -0
  680. package/mssql-core/foreign-keys.js.map +1 -0
  681. package/mssql-core/index.cjs +55 -0
  682. package/mssql-core/index.cjs.map +1 -0
  683. package/mssql-core/index.d.cts +17 -0
  684. package/mssql-core/index.d.ts +17 -0
  685. package/mssql-core/index.js +18 -0
  686. package/mssql-core/index.js.map +1 -0
  687. package/mssql-core/indexes.cjs +80 -0
  688. package/mssql-core/indexes.cjs.map +1 -0
  689. package/mssql-core/indexes.d.cts +49 -0
  690. package/mssql-core/indexes.d.ts +49 -0
  691. package/mssql-core/indexes.js +52 -0
  692. package/mssql-core/indexes.js.map +1 -0
  693. package/mssql-core/primary-keys.cjs +64 -0
  694. package/mssql-core/primary-keys.cjs.map +1 -0
  695. package/mssql-core/primary-keys.d.cts +23 -0
  696. package/mssql-core/primary-keys.d.ts +23 -0
  697. package/mssql-core/primary-keys.js +38 -0
  698. package/mssql-core/primary-keys.js.map +1 -0
  699. package/mssql-core/query-builders/delete.cjs +107 -0
  700. package/mssql-core/query-builders/delete.cjs.map +1 -0
  701. package/mssql-core/query-builders/delete.d.cts +98 -0
  702. package/mssql-core/query-builders/delete.d.ts +98 -0
  703. package/mssql-core/query-builders/delete.js +83 -0
  704. package/mssql-core/query-builders/delete.js.map +1 -0
  705. package/mssql-core/query-builders/index.cjs +33 -0
  706. package/mssql-core/query-builders/index.cjs.map +1 -0
  707. package/mssql-core/query-builders/index.d.cts +6 -0
  708. package/mssql-core/query-builders/index.d.ts +6 -0
  709. package/mssql-core/query-builders/index.js +7 -0
  710. package/mssql-core/query-builders/index.js.map +1 -0
  711. package/mssql-core/query-builders/insert.cjs +105 -0
  712. package/mssql-core/query-builders/insert.cjs.map +1 -0
  713. package/mssql-core/query-builders/insert.d.cts +79 -0
  714. package/mssql-core/query-builders/insert.d.ts +79 -0
  715. package/mssql-core/query-builders/insert.js +80 -0
  716. package/mssql-core/query-builders/insert.js.map +1 -0
  717. package/mssql-core/query-builders/query-builder.cjs +95 -0
  718. package/mssql-core/query-builders/query-builder.cjs.map +1 -0
  719. package/mssql-core/query-builders/query-builder.d.cts +32 -0
  720. package/mssql-core/query-builders/query-builder.d.ts +32 -0
  721. package/mssql-core/query-builders/query-builder.js +71 -0
  722. package/mssql-core/query-builders/query-builder.js.map +1 -0
  723. package/mssql-core/query-builders/query.cjs +126 -0
  724. package/mssql-core/query-builders/query.cjs.map +1 -0
  725. package/mssql-core/query-builders/query.d.cts +42 -0
  726. package/mssql-core/query-builders/query.d.ts +42 -0
  727. package/mssql-core/query-builders/query.js +103 -0
  728. package/mssql-core/query-builders/query.js.map +1 -0
  729. package/mssql-core/query-builders/select.cjs +679 -0
  730. package/mssql-core/query-builders/select.cjs.map +1 -0
  731. package/mssql-core/query-builders/select.d.cts +549 -0
  732. package/mssql-core/query-builders/select.d.ts +549 -0
  733. package/mssql-core/query-builders/select.js +649 -0
  734. package/mssql-core/query-builders/select.js.map +1 -0
  735. package/mssql-core/query-builders/select.types.cjs +17 -0
  736. package/mssql-core/query-builders/select.types.cjs.map +1 -0
  737. package/mssql-core/query-builders/select.types.d.cts +142 -0
  738. package/mssql-core/query-builders/select.types.d.ts +142 -0
  739. package/mssql-core/query-builders/select.types.js +1 -0
  740. package/mssql-core/query-builders/select.types.js.map +1 -0
  741. package/mssql-core/query-builders/update.cjs +138 -0
  742. package/mssql-core/query-builders/update.cjs.map +1 -0
  743. package/mssql-core/query-builders/update.d.cts +142 -0
  744. package/mssql-core/query-builders/update.d.ts +142 -0
  745. package/mssql-core/query-builders/update.js +113 -0
  746. package/mssql-core/query-builders/update.js.map +1 -0
  747. package/mssql-core/schema.cjs +51 -0
  748. package/mssql-core/schema.cjs.map +1 -0
  749. package/mssql-core/schema.d.cts +22 -0
  750. package/mssql-core/schema.d.ts +22 -0
  751. package/mssql-core/schema.js +25 -0
  752. package/mssql-core/schema.js.map +1 -0
  753. package/mssql-core/session.cjs +74 -0
  754. package/mssql-core/session.cjs.map +1 -0
  755. package/mssql-core/session.d.cts +63 -0
  756. package/mssql-core/session.d.ts +63 -0
  757. package/mssql-core/session.js +48 -0
  758. package/mssql-core/session.js.map +1 -0
  759. package/mssql-core/subquery.cjs +17 -0
  760. package/mssql-core/subquery.cjs.map +1 -0
  761. package/mssql-core/subquery.d.cts +18 -0
  762. package/mssql-core/subquery.d.ts +18 -0
  763. package/mssql-core/subquery.js +1 -0
  764. package/mssql-core/subquery.js.map +1 -0
  765. package/mssql-core/table.cjs +81 -0
  766. package/mssql-core/table.cjs.map +1 -0
  767. package/mssql-core/table.d.cts +40 -0
  768. package/mssql-core/table.d.ts +40 -0
  769. package/mssql-core/table.js +55 -0
  770. package/mssql-core/table.js.map +1 -0
  771. package/mssql-core/unique-constraint.cjs +76 -0
  772. package/mssql-core/unique-constraint.cjs.map +1 -0
  773. package/mssql-core/unique-constraint.d.cts +23 -0
  774. package/mssql-core/unique-constraint.d.ts +23 -0
  775. package/mssql-core/unique-constraint.js +49 -0
  776. package/mssql-core/unique-constraint.js.map +1 -0
  777. package/mssql-core/utils.cjs +85 -0
  778. package/mssql-core/utils.cjs.map +1 -0
  779. package/mssql-core/utils.d.cts +31 -0
  780. package/mssql-core/utils.d.ts +31 -0
  781. package/mssql-core/utils.js +60 -0
  782. package/mssql-core/utils.js.map +1 -0
  783. package/mssql-core/view-base.cjs +33 -0
  784. package/mssql-core/view-base.cjs.map +1 -0
  785. package/mssql-core/view-base.d.cts +9 -0
  786. package/mssql-core/view-base.d.ts +9 -0
  787. package/mssql-core/view-base.js +9 -0
  788. package/mssql-core/view-base.js.map +1 -0
  789. package/mssql-core/view-common.cjs +29 -0
  790. package/mssql-core/view-common.cjs.map +1 -0
  791. package/mssql-core/view-common.d.cts +1 -0
  792. package/mssql-core/view-common.d.ts +1 -0
  793. package/mssql-core/view-common.js +5 -0
  794. package/mssql-core/view-common.js.map +1 -0
  795. package/mssql-core/view.cjs +154 -0
  796. package/mssql-core/view.cjs.map +1 -0
  797. package/mssql-core/view.d.cts +63 -0
  798. package/mssql-core/view.d.ts +63 -0
  799. package/mssql-core/view.js +125 -0
  800. package/mssql-core/view.js.map +1 -0
  801. package/mysql-core/columns/bigint.cjs.map +1 -1
  802. package/mysql-core/columns/bigint.d.cts +0 -2
  803. package/mysql-core/columns/bigint.d.ts +0 -2
  804. package/mysql-core/columns/bigint.js.map +1 -1
  805. package/mysql-core/columns/binary.cjs +0 -1
  806. package/mysql-core/columns/binary.cjs.map +1 -1
  807. package/mysql-core/columns/binary.d.cts +0 -2
  808. package/mysql-core/columns/binary.d.ts +0 -2
  809. package/mysql-core/columns/binary.js +0 -1
  810. package/mysql-core/columns/binary.js.map +1 -1
  811. package/mysql-core/columns/boolean.cjs.map +1 -1
  812. package/mysql-core/columns/boolean.d.cts +0 -1
  813. package/mysql-core/columns/boolean.d.ts +0 -1
  814. package/mysql-core/columns/boolean.js.map +1 -1
  815. package/mysql-core/columns/char.cjs +0 -1
  816. package/mysql-core/columns/char.cjs.map +1 -1
  817. package/mysql-core/columns/char.d.cts +0 -2
  818. package/mysql-core/columns/char.d.ts +0 -2
  819. package/mysql-core/columns/char.js +0 -1
  820. package/mysql-core/columns/char.js.map +1 -1
  821. package/mysql-core/columns/common.cjs.map +1 -1
  822. package/mysql-core/columns/common.d.cts +1 -1
  823. package/mysql-core/columns/common.d.ts +1 -1
  824. package/mysql-core/columns/common.js.map +1 -1
  825. package/mysql-core/columns/custom.cjs.map +1 -1
  826. package/mysql-core/columns/custom.d.cts +0 -1
  827. package/mysql-core/columns/custom.d.ts +0 -1
  828. package/mysql-core/columns/custom.js.map +1 -1
  829. package/mysql-core/columns/date.cjs.map +1 -1
  830. package/mysql-core/columns/date.d.cts +0 -2
  831. package/mysql-core/columns/date.d.ts +0 -2
  832. package/mysql-core/columns/date.js.map +1 -1
  833. package/mysql-core/columns/datetime.cjs.map +1 -1
  834. package/mysql-core/columns/datetime.d.cts +0 -2
  835. package/mysql-core/columns/datetime.d.ts +0 -2
  836. package/mysql-core/columns/datetime.js.map +1 -1
  837. package/mysql-core/columns/decimal.cjs.map +1 -1
  838. package/mysql-core/columns/decimal.d.cts +0 -3
  839. package/mysql-core/columns/decimal.d.ts +0 -3
  840. package/mysql-core/columns/decimal.js.map +1 -1
  841. package/mysql-core/columns/double.cjs.map +1 -1
  842. package/mysql-core/columns/double.d.cts +0 -1
  843. package/mysql-core/columns/double.d.ts +0 -1
  844. package/mysql-core/columns/double.js.map +1 -1
  845. package/mysql-core/columns/enum.cjs.map +1 -1
  846. package/mysql-core/columns/enum.d.cts +0 -2
  847. package/mysql-core/columns/enum.d.ts +0 -2
  848. package/mysql-core/columns/enum.js.map +1 -1
  849. package/mysql-core/columns/float.cjs.map +1 -1
  850. package/mysql-core/columns/float.d.cts +0 -1
  851. package/mysql-core/columns/float.d.ts +0 -1
  852. package/mysql-core/columns/float.js.map +1 -1
  853. package/mysql-core/columns/int.cjs.map +1 -1
  854. package/mysql-core/columns/int.d.cts +0 -1
  855. package/mysql-core/columns/int.d.ts +0 -1
  856. package/mysql-core/columns/int.js.map +1 -1
  857. package/mysql-core/columns/json.cjs.map +1 -1
  858. package/mysql-core/columns/json.d.cts +0 -1
  859. package/mysql-core/columns/json.d.ts +0 -1
  860. package/mysql-core/columns/json.js.map +1 -1
  861. package/mysql-core/columns/mediumint.cjs.map +1 -1
  862. package/mysql-core/columns/mediumint.d.cts +0 -1
  863. package/mysql-core/columns/mediumint.d.ts +0 -1
  864. package/mysql-core/columns/mediumint.js.map +1 -1
  865. package/mysql-core/columns/real.cjs.map +1 -1
  866. package/mysql-core/columns/real.d.cts +0 -1
  867. package/mysql-core/columns/real.d.ts +0 -1
  868. package/mysql-core/columns/real.js.map +1 -1
  869. package/mysql-core/columns/serial.cjs.map +1 -1
  870. package/mysql-core/columns/serial.d.cts +0 -1
  871. package/mysql-core/columns/serial.d.ts +0 -1
  872. package/mysql-core/columns/serial.js.map +1 -1
  873. package/mysql-core/columns/smallint.cjs.map +1 -1
  874. package/mysql-core/columns/smallint.d.cts +0 -1
  875. package/mysql-core/columns/smallint.d.ts +0 -1
  876. package/mysql-core/columns/smallint.js.map +1 -1
  877. package/mysql-core/columns/text.cjs.map +1 -1
  878. package/mysql-core/columns/text.d.cts +0 -1
  879. package/mysql-core/columns/text.d.ts +0 -1
  880. package/mysql-core/columns/text.js.map +1 -1
  881. package/mysql-core/columns/time.cjs.map +1 -1
  882. package/mysql-core/columns/time.d.cts +0 -1
  883. package/mysql-core/columns/time.d.ts +0 -1
  884. package/mysql-core/columns/time.js.map +1 -1
  885. package/mysql-core/columns/timestamp.cjs.map +1 -1
  886. package/mysql-core/columns/timestamp.d.cts +0 -2
  887. package/mysql-core/columns/timestamp.d.ts +0 -2
  888. package/mysql-core/columns/timestamp.js.map +1 -1
  889. package/mysql-core/columns/tinyint.cjs.map +1 -1
  890. package/mysql-core/columns/tinyint.d.cts +0 -1
  891. package/mysql-core/columns/tinyint.d.ts +0 -1
  892. package/mysql-core/columns/tinyint.js.map +1 -1
  893. package/mysql-core/columns/varbinary.cjs.map +1 -1
  894. package/mysql-core/columns/varbinary.d.cts +0 -1
  895. package/mysql-core/columns/varbinary.d.ts +0 -1
  896. package/mysql-core/columns/varbinary.js.map +1 -1
  897. package/mysql-core/columns/varchar.cjs +1 -1
  898. package/mysql-core/columns/varchar.cjs.map +1 -1
  899. package/mysql-core/columns/varchar.d.cts +1 -2
  900. package/mysql-core/columns/varchar.d.ts +1 -2
  901. package/mysql-core/columns/varchar.js +1 -1
  902. package/mysql-core/columns/varchar.js.map +1 -1
  903. package/mysql-core/columns/year.cjs.map +1 -1
  904. package/mysql-core/columns/year.d.cts +0 -1
  905. package/mysql-core/columns/year.d.ts +0 -1
  906. package/mysql-core/columns/year.js.map +1 -1
  907. package/mysql-core/dialect.cjs +3 -0
  908. package/mysql-core/dialect.cjs.map +1 -1
  909. package/mysql-core/dialect.d.cts +1 -0
  910. package/mysql-core/dialect.d.ts +1 -0
  911. package/mysql-core/dialect.js +3 -0
  912. package/mysql-core/dialect.js.map +1 -1
  913. package/mysql-core/query-builders/insert.cjs.map +1 -1
  914. package/mysql-core/query-builders/insert.d.cts +2 -2
  915. package/mysql-core/query-builders/insert.d.ts +2 -2
  916. package/mysql-core/query-builders/insert.js.map +1 -1
  917. package/mysql-core/query-builders/update.cjs.map +1 -1
  918. package/mysql-core/query-builders/update.d.cts +1 -1
  919. package/mysql-core/query-builders/update.d.ts +1 -1
  920. package/mysql-core/query-builders/update.js.map +1 -1
  921. package/mysql-proxy/driver.cjs +2 -2
  922. package/mysql-proxy/driver.cjs.map +1 -1
  923. package/mysql-proxy/driver.d.cts +2 -1
  924. package/mysql-proxy/driver.d.ts +2 -1
  925. package/mysql-proxy/driver.js +2 -2
  926. package/mysql-proxy/driver.js.map +1 -1
  927. package/node-mssql/driver.cjs +117 -0
  928. package/node-mssql/driver.cjs.map +1 -0
  929. package/node-mssql/driver.d.cts +46 -0
  930. package/node-mssql/driver.d.ts +46 -0
  931. package/node-mssql/driver.js +81 -0
  932. package/node-mssql/driver.js.map +1 -0
  933. package/node-mssql/index.cjs +25 -0
  934. package/node-mssql/index.cjs.map +1 -0
  935. package/node-mssql/index.d.cts +2 -0
  936. package/node-mssql/index.d.ts +2 -0
  937. package/node-mssql/index.js +3 -0
  938. package/node-mssql/index.js.map +1 -0
  939. package/node-mssql/migrator.cjs +33 -0
  940. package/node-mssql/migrator.cjs.map +1 -0
  941. package/node-mssql/migrator.d.cts +3 -0
  942. package/node-mssql/migrator.d.ts +3 -0
  943. package/node-mssql/migrator.js +9 -0
  944. package/node-mssql/migrator.js.map +1 -0
  945. package/node-mssql/pool.cjs +54 -0
  946. package/node-mssql/pool.cjs.map +1 -0
  947. package/node-mssql/pool.d.cts +8 -0
  948. package/node-mssql/pool.d.ts +8 -0
  949. package/node-mssql/pool.js +20 -0
  950. package/node-mssql/pool.js.map +1 -0
  951. package/node-mssql/session.cjs +256 -0
  952. package/node-mssql/session.cjs.map +1 -0
  953. package/node-mssql/session.d.cts +48 -0
  954. package/node-mssql/session.d.ts +48 -0
  955. package/node-mssql/session.js +224 -0
  956. package/node-mssql/session.js.map +1 -0
  957. package/node-postgres/session.cjs.map +1 -1
  958. package/node-postgres/session.js.map +1 -1
  959. package/package.json +1632 -190
  960. package/pg-core/columns/bigint.cjs.map +1 -1
  961. package/pg-core/columns/bigint.d.cts +0 -2
  962. package/pg-core/columns/bigint.d.ts +0 -2
  963. package/pg-core/columns/bigint.js.map +1 -1
  964. package/pg-core/columns/bigserial.cjs +1 -0
  965. package/pg-core/columns/bigserial.cjs.map +1 -1
  966. package/pg-core/columns/bigserial.d.cts +0 -2
  967. package/pg-core/columns/bigserial.d.ts +0 -2
  968. package/pg-core/columns/bigserial.js +1 -0
  969. package/pg-core/columns/bigserial.js.map +1 -1
  970. package/pg-core/columns/boolean.cjs.map +1 -1
  971. package/pg-core/columns/boolean.d.cts +0 -1
  972. package/pg-core/columns/boolean.d.ts +0 -1
  973. package/pg-core/columns/boolean.js.map +1 -1
  974. package/pg-core/columns/bytea.cjs.map +1 -1
  975. package/pg-core/columns/bytea.d.cts +0 -1
  976. package/pg-core/columns/bytea.d.ts +0 -1
  977. package/pg-core/columns/bytea.js.map +1 -1
  978. package/pg-core/columns/char.cjs +0 -1
  979. package/pg-core/columns/char.cjs.map +1 -1
  980. package/pg-core/columns/char.d.cts +0 -2
  981. package/pg-core/columns/char.d.ts +0 -2
  982. package/pg-core/columns/char.js +0 -1
  983. package/pg-core/columns/char.js.map +1 -1
  984. package/pg-core/columns/cidr.cjs.map +1 -1
  985. package/pg-core/columns/cidr.d.cts +0 -1
  986. package/pg-core/columns/cidr.d.ts +0 -1
  987. package/pg-core/columns/cidr.js.map +1 -1
  988. package/pg-core/columns/common.cjs +11 -10
  989. package/pg-core/columns/common.cjs.map +1 -1
  990. package/pg-core/columns/common.d.cts +3 -2
  991. package/pg-core/columns/common.d.ts +3 -2
  992. package/pg-core/columns/common.js +11 -10
  993. package/pg-core/columns/common.js.map +1 -1
  994. package/pg-core/columns/custom.cjs.map +1 -1
  995. package/pg-core/columns/custom.d.cts +0 -1
  996. package/pg-core/columns/custom.d.ts +0 -1
  997. package/pg-core/columns/custom.js.map +1 -1
  998. package/pg-core/columns/date.cjs.map +1 -1
  999. package/pg-core/columns/date.d.cts +0 -2
  1000. package/pg-core/columns/date.d.ts +0 -2
  1001. package/pg-core/columns/date.js.map +1 -1
  1002. package/pg-core/columns/double-precision.cjs.map +1 -1
  1003. package/pg-core/columns/double-precision.d.cts +0 -1
  1004. package/pg-core/columns/double-precision.d.ts +0 -1
  1005. package/pg-core/columns/double-precision.js.map +1 -1
  1006. package/pg-core/columns/enum.cjs.map +1 -1
  1007. package/pg-core/columns/enum.d.cts +0 -2
  1008. package/pg-core/columns/enum.d.ts +0 -2
  1009. package/pg-core/columns/enum.js.map +1 -1
  1010. package/pg-core/columns/inet.cjs.map +1 -1
  1011. package/pg-core/columns/inet.d.cts +0 -1
  1012. package/pg-core/columns/inet.d.ts +0 -1
  1013. package/pg-core/columns/inet.js.map +1 -1
  1014. package/pg-core/columns/integer.cjs.map +1 -1
  1015. package/pg-core/columns/integer.d.cts +0 -1
  1016. package/pg-core/columns/integer.d.ts +0 -1
  1017. package/pg-core/columns/integer.js.map +1 -1
  1018. package/pg-core/columns/interval.cjs.map +1 -1
  1019. package/pg-core/columns/interval.d.cts +0 -1
  1020. package/pg-core/columns/interval.d.ts +0 -1
  1021. package/pg-core/columns/interval.js.map +1 -1
  1022. package/pg-core/columns/json.cjs.map +1 -1
  1023. package/pg-core/columns/json.d.cts +0 -1
  1024. package/pg-core/columns/json.d.ts +0 -1
  1025. package/pg-core/columns/json.js.map +1 -1
  1026. package/pg-core/columns/jsonb.cjs.map +1 -1
  1027. package/pg-core/columns/jsonb.d.cts +0 -1
  1028. package/pg-core/columns/jsonb.d.ts +0 -1
  1029. package/pg-core/columns/jsonb.js.map +1 -1
  1030. package/pg-core/columns/line.cjs +2 -0
  1031. package/pg-core/columns/line.cjs.map +1 -1
  1032. package/pg-core/columns/line.d.cts +2 -2
  1033. package/pg-core/columns/line.d.ts +2 -2
  1034. package/pg-core/columns/line.js +2 -0
  1035. package/pg-core/columns/line.js.map +1 -1
  1036. package/pg-core/columns/macaddr.cjs.map +1 -1
  1037. package/pg-core/columns/macaddr.d.cts +0 -1
  1038. package/pg-core/columns/macaddr.d.ts +0 -1
  1039. package/pg-core/columns/macaddr.js.map +1 -1
  1040. package/pg-core/columns/macaddr8.cjs.map +1 -1
  1041. package/pg-core/columns/macaddr8.d.cts +0 -1
  1042. package/pg-core/columns/macaddr8.d.ts +0 -1
  1043. package/pg-core/columns/macaddr8.js.map +1 -1
  1044. package/pg-core/columns/numeric.cjs.map +1 -1
  1045. package/pg-core/columns/numeric.d.cts +0 -3
  1046. package/pg-core/columns/numeric.d.ts +0 -3
  1047. package/pg-core/columns/numeric.js.map +1 -1
  1048. package/pg-core/columns/point.cjs +2 -0
  1049. package/pg-core/columns/point.cjs.map +1 -1
  1050. package/pg-core/columns/point.d.cts +2 -2
  1051. package/pg-core/columns/point.d.ts +2 -2
  1052. package/pg-core/columns/point.js +2 -0
  1053. package/pg-core/columns/point.js.map +1 -1
  1054. package/pg-core/columns/postgis_extension/geometry.cjs +14 -8
  1055. package/pg-core/columns/postgis_extension/geometry.cjs.map +1 -1
  1056. package/pg-core/columns/postgis_extension/geometry.d.cts +16 -6
  1057. package/pg-core/columns/postgis_extension/geometry.d.ts +16 -6
  1058. package/pg-core/columns/postgis_extension/geometry.js +14 -8
  1059. package/pg-core/columns/postgis_extension/geometry.js.map +1 -1
  1060. package/pg-core/columns/postgis_extension/utils.cjs +3 -3
  1061. package/pg-core/columns/postgis_extension/utils.cjs.map +1 -1
  1062. package/pg-core/columns/postgis_extension/utils.d.cts +4 -1
  1063. package/pg-core/columns/postgis_extension/utils.d.ts +4 -1
  1064. package/pg-core/columns/postgis_extension/utils.js +3 -3
  1065. package/pg-core/columns/postgis_extension/utils.js.map +1 -1
  1066. package/pg-core/columns/real.cjs.map +1 -1
  1067. package/pg-core/columns/real.d.cts +0 -1
  1068. package/pg-core/columns/real.d.ts +0 -1
  1069. package/pg-core/columns/real.js.map +1 -1
  1070. package/pg-core/columns/serial.cjs.map +1 -1
  1071. package/pg-core/columns/serial.d.cts +0 -1
  1072. package/pg-core/columns/serial.d.ts +0 -1
  1073. package/pg-core/columns/serial.js.map +1 -1
  1074. package/pg-core/columns/smallint.cjs.map +1 -1
  1075. package/pg-core/columns/smallint.d.cts +0 -1
  1076. package/pg-core/columns/smallint.d.ts +0 -1
  1077. package/pg-core/columns/smallint.js.map +1 -1
  1078. package/pg-core/columns/smallserial.cjs.map +1 -1
  1079. package/pg-core/columns/smallserial.d.cts +0 -1
  1080. package/pg-core/columns/smallserial.d.ts +0 -1
  1081. package/pg-core/columns/smallserial.js.map +1 -1
  1082. package/pg-core/columns/text.cjs.map +1 -1
  1083. package/pg-core/columns/text.d.cts +0 -1
  1084. package/pg-core/columns/text.d.ts +0 -1
  1085. package/pg-core/columns/text.js.map +1 -1
  1086. package/pg-core/columns/time.cjs.map +1 -1
  1087. package/pg-core/columns/time.d.cts +0 -1
  1088. package/pg-core/columns/time.d.ts +0 -1
  1089. package/pg-core/columns/time.js.map +1 -1
  1090. package/pg-core/columns/timestamp.cjs.map +1 -1
  1091. package/pg-core/columns/timestamp.d.cts +0 -2
  1092. package/pg-core/columns/timestamp.d.ts +0 -2
  1093. package/pg-core/columns/timestamp.js.map +1 -1
  1094. package/pg-core/columns/uuid.cjs.map +1 -1
  1095. package/pg-core/columns/uuid.d.cts +0 -1
  1096. package/pg-core/columns/uuid.d.ts +0 -1
  1097. package/pg-core/columns/uuid.js.map +1 -1
  1098. package/pg-core/columns/varchar.cjs.map +1 -1
  1099. package/pg-core/columns/varchar.d.cts +0 -1
  1100. package/pg-core/columns/varchar.d.ts +0 -1
  1101. package/pg-core/columns/varchar.js.map +1 -1
  1102. package/pg-core/columns/vector_extension/bit.cjs.map +1 -1
  1103. package/pg-core/columns/vector_extension/bit.d.cts +0 -1
  1104. package/pg-core/columns/vector_extension/bit.d.ts +0 -1
  1105. package/pg-core/columns/vector_extension/bit.js.map +1 -1
  1106. package/pg-core/columns/vector_extension/halfvec.cjs.map +1 -1
  1107. package/pg-core/columns/vector_extension/halfvec.d.cts +0 -1
  1108. package/pg-core/columns/vector_extension/halfvec.d.ts +0 -1
  1109. package/pg-core/columns/vector_extension/halfvec.js.map +1 -1
  1110. package/pg-core/columns/vector_extension/sparsevec.cjs.map +1 -1
  1111. package/pg-core/columns/vector_extension/sparsevec.d.cts +0 -1
  1112. package/pg-core/columns/vector_extension/sparsevec.d.ts +0 -1
  1113. package/pg-core/columns/vector_extension/sparsevec.js.map +1 -1
  1114. package/pg-core/columns/vector_extension/vector.cjs.map +1 -1
  1115. package/pg-core/columns/vector_extension/vector.d.cts +0 -1
  1116. package/pg-core/columns/vector_extension/vector.d.ts +0 -1
  1117. package/pg-core/columns/vector_extension/vector.js.map +1 -1
  1118. package/pg-core/foreign-keys.cjs +4 -0
  1119. package/pg-core/foreign-keys.cjs.map +1 -1
  1120. package/pg-core/foreign-keys.d.cts +2 -0
  1121. package/pg-core/foreign-keys.d.ts +2 -0
  1122. package/pg-core/foreign-keys.js +4 -0
  1123. package/pg-core/foreign-keys.js.map +1 -1
  1124. package/pg-core/primary-keys.cjs +3 -0
  1125. package/pg-core/primary-keys.cjs.map +1 -1
  1126. package/pg-core/primary-keys.d.cts +1 -0
  1127. package/pg-core/primary-keys.d.ts +1 -0
  1128. package/pg-core/primary-keys.js +3 -0
  1129. package/pg-core/primary-keys.js.map +1 -1
  1130. package/pg-core/query-builders/insert.cjs.map +1 -1
  1131. package/pg-core/query-builders/insert.d.cts +6 -9
  1132. package/pg-core/query-builders/insert.d.ts +6 -9
  1133. package/pg-core/query-builders/insert.js.map +1 -1
  1134. package/pg-core/query-builders/update.cjs.map +1 -1
  1135. package/pg-core/query-builders/update.d.cts +1 -1
  1136. package/pg-core/query-builders/update.d.ts +1 -1
  1137. package/pg-core/query-builders/update.js.map +1 -1
  1138. package/pg-core/unique-constraint.cjs +5 -0
  1139. package/pg-core/unique-constraint.cjs.map +1 -1
  1140. package/pg-core/unique-constraint.d.cts +2 -0
  1141. package/pg-core/unique-constraint.d.ts +2 -0
  1142. package/pg-core/unique-constraint.js +5 -0
  1143. package/pg-core/unique-constraint.js.map +1 -1
  1144. package/singlestore-core/columns/bigint.cjs.map +1 -1
  1145. package/singlestore-core/columns/bigint.d.cts +0 -2
  1146. package/singlestore-core/columns/bigint.d.ts +0 -2
  1147. package/singlestore-core/columns/bigint.js.map +1 -1
  1148. package/singlestore-core/columns/binary.cjs +0 -1
  1149. package/singlestore-core/columns/binary.cjs.map +1 -1
  1150. package/singlestore-core/columns/binary.d.cts +0 -2
  1151. package/singlestore-core/columns/binary.d.ts +0 -2
  1152. package/singlestore-core/columns/binary.js +0 -1
  1153. package/singlestore-core/columns/binary.js.map +1 -1
  1154. package/singlestore-core/columns/boolean.cjs.map +1 -1
  1155. package/singlestore-core/columns/boolean.d.cts +0 -1
  1156. package/singlestore-core/columns/boolean.d.ts +0 -1
  1157. package/singlestore-core/columns/boolean.js.map +1 -1
  1158. package/singlestore-core/columns/char.cjs +0 -1
  1159. package/singlestore-core/columns/char.cjs.map +1 -1
  1160. package/singlestore-core/columns/char.d.cts +0 -2
  1161. package/singlestore-core/columns/char.d.ts +0 -2
  1162. package/singlestore-core/columns/char.js +0 -1
  1163. package/singlestore-core/columns/char.js.map +1 -1
  1164. package/singlestore-core/columns/common.cjs.map +1 -1
  1165. package/singlestore-core/columns/common.d.cts +1 -1
  1166. package/singlestore-core/columns/common.d.ts +1 -1
  1167. package/singlestore-core/columns/common.js.map +1 -1
  1168. package/singlestore-core/columns/custom.cjs.map +1 -1
  1169. package/singlestore-core/columns/custom.d.cts +0 -1
  1170. package/singlestore-core/columns/custom.d.ts +0 -1
  1171. package/singlestore-core/columns/custom.js.map +1 -1
  1172. package/singlestore-core/columns/date.cjs.map +1 -1
  1173. package/singlestore-core/columns/date.d.cts +0 -2
  1174. package/singlestore-core/columns/date.d.ts +0 -2
  1175. package/singlestore-core/columns/date.js.map +1 -1
  1176. package/singlestore-core/columns/datetime.cjs.map +1 -1
  1177. package/singlestore-core/columns/datetime.d.cts +0 -2
  1178. package/singlestore-core/columns/datetime.d.ts +0 -2
  1179. package/singlestore-core/columns/datetime.js.map +1 -1
  1180. package/singlestore-core/columns/decimal.cjs.map +1 -1
  1181. package/singlestore-core/columns/decimal.d.cts +0 -3
  1182. package/singlestore-core/columns/decimal.d.ts +0 -3
  1183. package/singlestore-core/columns/decimal.js.map +1 -1
  1184. package/singlestore-core/columns/double.cjs.map +1 -1
  1185. package/singlestore-core/columns/double.d.cts +0 -1
  1186. package/singlestore-core/columns/double.d.ts +0 -1
  1187. package/singlestore-core/columns/double.js.map +1 -1
  1188. package/singlestore-core/columns/enum.cjs.map +1 -1
  1189. package/singlestore-core/columns/enum.d.cts +0 -1
  1190. package/singlestore-core/columns/enum.d.ts +0 -1
  1191. package/singlestore-core/columns/enum.js.map +1 -1
  1192. package/singlestore-core/columns/float.cjs.map +1 -1
  1193. package/singlestore-core/columns/float.d.cts +0 -1
  1194. package/singlestore-core/columns/float.d.ts +0 -1
  1195. package/singlestore-core/columns/float.js.map +1 -1
  1196. package/singlestore-core/columns/int.cjs.map +1 -1
  1197. package/singlestore-core/columns/int.d.cts +0 -1
  1198. package/singlestore-core/columns/int.d.ts +0 -1
  1199. package/singlestore-core/columns/int.js.map +1 -1
  1200. package/singlestore-core/columns/json.cjs.map +1 -1
  1201. package/singlestore-core/columns/json.d.cts +0 -1
  1202. package/singlestore-core/columns/json.d.ts +0 -1
  1203. package/singlestore-core/columns/json.js.map +1 -1
  1204. package/singlestore-core/columns/mediumint.cjs.map +1 -1
  1205. package/singlestore-core/columns/mediumint.d.cts +0 -1
  1206. package/singlestore-core/columns/mediumint.d.ts +0 -1
  1207. package/singlestore-core/columns/mediumint.js.map +1 -1
  1208. package/singlestore-core/columns/real.cjs.map +1 -1
  1209. package/singlestore-core/columns/real.d.cts +0 -1
  1210. package/singlestore-core/columns/real.d.ts +0 -1
  1211. package/singlestore-core/columns/real.js.map +1 -1
  1212. package/singlestore-core/columns/serial.cjs.map +1 -1
  1213. package/singlestore-core/columns/serial.d.cts +0 -1
  1214. package/singlestore-core/columns/serial.d.ts +0 -1
  1215. package/singlestore-core/columns/serial.js.map +1 -1
  1216. package/singlestore-core/columns/smallint.cjs.map +1 -1
  1217. package/singlestore-core/columns/smallint.d.cts +0 -1
  1218. package/singlestore-core/columns/smallint.d.ts +0 -1
  1219. package/singlestore-core/columns/smallint.js.map +1 -1
  1220. package/singlestore-core/columns/text.cjs.map +1 -1
  1221. package/singlestore-core/columns/text.d.cts +0 -1
  1222. package/singlestore-core/columns/text.d.ts +0 -1
  1223. package/singlestore-core/columns/text.js.map +1 -1
  1224. package/singlestore-core/columns/time.cjs.map +1 -1
  1225. package/singlestore-core/columns/time.d.cts +0 -1
  1226. package/singlestore-core/columns/time.d.ts +0 -1
  1227. package/singlestore-core/columns/time.js.map +1 -1
  1228. package/singlestore-core/columns/timestamp.cjs.map +1 -1
  1229. package/singlestore-core/columns/timestamp.d.cts +0 -2
  1230. package/singlestore-core/columns/timestamp.d.ts +0 -2
  1231. package/singlestore-core/columns/timestamp.js.map +1 -1
  1232. package/singlestore-core/columns/tinyint.cjs.map +1 -1
  1233. package/singlestore-core/columns/tinyint.d.cts +0 -1
  1234. package/singlestore-core/columns/tinyint.d.ts +0 -1
  1235. package/singlestore-core/columns/tinyint.js.map +1 -1
  1236. package/singlestore-core/columns/varbinary.cjs.map +1 -1
  1237. package/singlestore-core/columns/varbinary.d.cts +0 -1
  1238. package/singlestore-core/columns/varbinary.d.ts +0 -1
  1239. package/singlestore-core/columns/varbinary.js.map +1 -1
  1240. package/singlestore-core/columns/varchar.cjs.map +1 -1
  1241. package/singlestore-core/columns/varchar.d.cts +0 -1
  1242. package/singlestore-core/columns/varchar.d.ts +0 -1
  1243. package/singlestore-core/columns/varchar.js.map +1 -1
  1244. package/singlestore-core/columns/vector.cjs +1 -1
  1245. package/singlestore-core/columns/vector.cjs.map +1 -1
  1246. package/singlestore-core/columns/vector.d.cts +0 -2
  1247. package/singlestore-core/columns/vector.d.ts +0 -2
  1248. package/singlestore-core/columns/vector.js +1 -1
  1249. package/singlestore-core/columns/vector.js.map +1 -1
  1250. package/singlestore-core/columns/year.cjs.map +1 -1
  1251. package/singlestore-core/columns/year.d.cts +0 -1
  1252. package/singlestore-core/columns/year.d.ts +0 -1
  1253. package/singlestore-core/columns/year.js.map +1 -1
  1254. package/singlestore-core/query-builders/insert.cjs.map +1 -1
  1255. package/singlestore-core/query-builders/insert.d.cts +1 -1
  1256. package/singlestore-core/query-builders/insert.d.ts +1 -1
  1257. package/singlestore-core/query-builders/insert.js.map +1 -1
  1258. package/singlestore-core/query-builders/update.cjs.map +1 -1
  1259. package/singlestore-core/query-builders/update.d.cts +1 -1
  1260. package/singlestore-core/query-builders/update.d.ts +1 -1
  1261. package/singlestore-core/query-builders/update.js.map +1 -1
  1262. package/sql/sql.cjs +10 -3
  1263. package/sql/sql.cjs.map +1 -1
  1264. package/sql/sql.d.cts +1 -1
  1265. package/sql/sql.d.ts +1 -1
  1266. package/sql/sql.js +10 -3
  1267. package/sql/sql.js.map +1 -1
  1268. package/sqlite-core/columns/blob.cjs.map +1 -1
  1269. package/sqlite-core/columns/blob.d.cts +0 -3
  1270. package/sqlite-core/columns/blob.d.ts +0 -3
  1271. package/sqlite-core/columns/blob.js.map +1 -1
  1272. package/sqlite-core/columns/custom.cjs.map +1 -1
  1273. package/sqlite-core/columns/custom.d.cts +0 -1
  1274. package/sqlite-core/columns/custom.d.ts +0 -1
  1275. package/sqlite-core/columns/custom.js.map +1 -1
  1276. package/sqlite-core/columns/integer.cjs.map +1 -1
  1277. package/sqlite-core/columns/integer.d.cts +0 -3
  1278. package/sqlite-core/columns/integer.d.ts +0 -3
  1279. package/sqlite-core/columns/integer.js.map +1 -1
  1280. package/sqlite-core/columns/numeric.cjs.map +1 -1
  1281. package/sqlite-core/columns/numeric.d.cts +0 -3
  1282. package/sqlite-core/columns/numeric.d.ts +0 -3
  1283. package/sqlite-core/columns/numeric.js.map +1 -1
  1284. package/sqlite-core/columns/real.cjs.map +1 -1
  1285. package/sqlite-core/columns/real.d.cts +0 -1
  1286. package/sqlite-core/columns/real.d.ts +0 -1
  1287. package/sqlite-core/columns/real.js.map +1 -1
  1288. package/sqlite-core/columns/text.cjs.map +1 -1
  1289. package/sqlite-core/columns/text.d.cts +0 -2
  1290. package/sqlite-core/columns/text.d.ts +0 -2
  1291. package/sqlite-core/columns/text.js.map +1 -1
  1292. package/sqlite-core/query-builders/insert.cjs.map +1 -1
  1293. package/sqlite-core/query-builders/insert.d.cts +2 -2
  1294. package/sqlite-core/query-builders/insert.d.ts +2 -2
  1295. package/sqlite-core/query-builders/insert.js.map +1 -1
  1296. package/sqlite-core/query-builders/update.cjs.map +1 -1
  1297. package/sqlite-core/query-builders/update.d.cts +1 -1
  1298. package/sqlite-core/query-builders/update.d.ts +1 -1
  1299. package/sqlite-core/query-builders/update.js.map +1 -1
  1300. package/version.cjs +1 -1
  1301. package/version.d.cts +1 -1
  1302. package/version.d.ts +1 -1
  1303. package/version.js +1 -1
package/_relations.cjs CHANGED
@@ -29,6 +29,7 @@ __export(relations_exports, {
29
29
  getOperators: () => getOperators,
30
30
  getOrderByOperators: () => getOrderByOperators,
31
31
  mapRelationalRow: () => mapRelationalRow,
32
+ mapRelationalRowFromObj: () => mapRelationalRowFromObj,
32
33
  normalizeRelation: () => normalizeRelation,
33
34
  relations: () => relations
34
35
  });
@@ -309,6 +310,52 @@ function mapRelationalRow(tablesConfig, tableConfig, row, buildQueryResultSelect
309
310
  }
310
311
  return result;
311
312
  }
313
+ function mapRelationalRowFromObj(tablesConfig, tableConfig, row, buildQueryResultSelection, mapColumnValue = (value) => value) {
314
+ const result = {};
315
+ for (const [
316
+ selectionItemIndex,
317
+ selectionItem
318
+ ] of buildQueryResultSelection.entries()) {
319
+ if (selectionItem.isJson) {
320
+ const relation = tableConfig.relations[selectionItem.tsKey];
321
+ const isOne = (0, import_entity.is)(relation, One);
322
+ const rawSubRows = row[selectionItemIndex];
323
+ let subRows = rawSubRows;
324
+ if (subRows || Array.isArray(subRows)) {
325
+ subRows = typeof rawSubRows === "string" ? JSON.parse(rawSubRows) : rawSubRows;
326
+ subRows = isOne ? subRows.flatMap((r) => Array.isArray(r) ? r : Object.values(r)) : subRows.map((r) => Array.isArray(r) ? r : Object.values(r));
327
+ }
328
+ result[selectionItem.tsKey] = isOne ? subRows && mapRelationalRowFromObj(
329
+ tablesConfig,
330
+ tablesConfig[selectionItem.relationTableTsKey],
331
+ subRows,
332
+ selectionItem.selection,
333
+ mapColumnValue
334
+ ) : (subRows ?? []).map(
335
+ (subRow) => mapRelationalRowFromObj(
336
+ tablesConfig,
337
+ tablesConfig[selectionItem.relationTableTsKey],
338
+ subRow,
339
+ selectionItem.selection,
340
+ mapColumnValue
341
+ )
342
+ );
343
+ } else {
344
+ const value = mapColumnValue(row[selectionItemIndex]);
345
+ const field = selectionItem.field;
346
+ let decoder;
347
+ if ((0, import_entity.is)(field, import_column.Column)) {
348
+ decoder = field;
349
+ } else if ((0, import_entity.is)(field, import_sql.SQL)) {
350
+ decoder = field.decoder;
351
+ } else {
352
+ decoder = field.sql.decoder;
353
+ }
354
+ result[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);
355
+ }
356
+ }
357
+ return result;
358
+ }
312
359
  // Annotate the CommonJS export names for ESM import in node:
313
360
  0 && (module.exports = {
314
361
  Many,
@@ -322,6 +369,7 @@ function mapRelationalRow(tablesConfig, tableConfig, row, buildQueryResultSelect
322
369
  getOperators,
323
370
  getOrderByOperators,
324
371
  mapRelationalRow,
372
+ mapRelationalRowFromObj,
325
373
  normalizeRelation,
326
374
  relations
327
375
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/_relations.ts"],"sourcesContent":["import { type AnyTable, getTableUniqueName, type InferModelFromColumns, Table } from '~/table.ts';\nimport { type AnyColumn, Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { PrimaryKeyBuilder } from './pg-core/primary-keys.ts';\nimport {\n\tand,\n\tasc,\n\tbetween,\n\tdesc,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tisNotNull,\n\tisNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotIlike,\n\tnotInArray,\n\tnotLike,\n\tor,\n} from './sql/expressions/index.ts';\nimport { type Placeholder, SQL, sql } from './sql/sql.ts';\nimport type { Assume, ColumnsWithTable, Equal, Simplify, ValueOrArray } from './utils.ts';\n\nexport abstract class Relation<TTableName extends string = string> {\n\tstatic readonly [entityKind]: string = 'Relation';\n\n\tdeclare readonly $brand: 'Relation';\n\treadonly referencedTableName: TTableName;\n\tfieldName!: string;\n\n\tconstructor(\n\t\treadonly sourceTable: Table,\n\t\treadonly referencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly relationName: string | undefined,\n\t) {\n\t\tthis.referencedTableName = referencedTable[Table.Symbol.Name] as TTableName;\n\t}\n\n\tabstract withFieldName(fieldName: string): Relation<TTableName>;\n}\n\nexport class Relations<\n\tTTableName extends string = string,\n\tTConfig extends Record<string, Relation> = Record<string, Relation>,\n> {\n\tstatic readonly [entityKind]: string = 'Relations';\n\n\tdeclare readonly $brand: 'Relations';\n\n\tconstructor(\n\t\treadonly table: AnyTable<{ name: TTableName }>,\n\t\treadonly config: (helpers: TableRelationsHelpers<TTableName>) => TConfig,\n\t) {}\n}\n\nexport class One<\n\tTTableName extends string = string,\n\tTIsNullable extends boolean = boolean,\n> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'One';\n\n\tdeclare protected $relationBrand: 'One';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config:\n\t\t\t| RelationConfig<\n\t\t\t\tTTableName,\n\t\t\t\tstring,\n\t\t\t\tAnyColumn<{ tableName: TTableName }>[]\n\t\t\t>\n\t\t\t| undefined,\n\t\treadonly isNullable: TIsNullable,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): One<TTableName> {\n\t\tconst relation = new One(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t\tthis.isNullable,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport class Many<TTableName extends string> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'Many';\n\n\tdeclare protected $relationBrand: 'Many';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config: { relationName: string } | undefined,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): Many<TTableName> {\n\t\tconst relation = new Many(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport type TableRelationsKeysOnly<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n\tK extends keyof TSchema,\n> = TSchema[K] extends Relations<TTableName> ? K : never;\n\nexport type ExtractTableRelationsFromSchema<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TableRelationsKeysOnly<\n\t\t\t\tTSchema,\n\t\t\t\tTTableName,\n\t\t\t\tK\n\t\t\t>\n\t\t]: TSchema[K] extends Relations<TTableName, infer TConfig> ? TConfig : never;\n\t}\n>;\n\nexport type ExtractObjectValues<T> = T[keyof T];\n\nexport type ExtractRelationsFromTableExtraConfigSchema<\n\tTConfig extends unknown[],\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TConfig as TConfig[K] extends Relations<any> ? K\n\t\t\t\t: never\n\t\t]: TConfig[K] extends Relations<infer TRelationConfig> ? TRelationConfig\n\t\t\t: never;\n\t}\n>;\n\nexport function getOperators() {\n\treturn {\n\t\tand,\n\t\tbetween,\n\t\teq,\n\t\texists,\n\t\tgt,\n\t\tgte,\n\t\tilike,\n\t\tinArray,\n\t\tisNull,\n\t\tisNotNull,\n\t\tlike,\n\t\tlt,\n\t\tlte,\n\t\tne,\n\t\tnot,\n\t\tnotBetween,\n\t\tnotExists,\n\t\tnotLike,\n\t\tnotIlike,\n\t\tnotInArray,\n\t\tor,\n\t\tsql,\n\t};\n}\n\nexport type Operators = ReturnType<typeof getOperators>;\n\nexport function getOrderByOperators() {\n\treturn {\n\t\tsql,\n\t\tasc,\n\t\tdesc,\n\t};\n}\n\nexport type OrderByOperators = ReturnType<typeof getOrderByOperators>;\n\nexport type FindTableByDBName<\n\tTSchema extends TablesRelationalConfig,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TSchema[K]['dbName'] extends TTableName ? K\n\t\t\t\t: never\n\t\t]: TSchema[K];\n\t}\n>;\n\nexport type DBQueryConfig<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTIsRoot extends boolean = boolean,\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> =\n\t& {\n\t\tcolumns?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['columns']]?: boolean;\n\t\t\t}\n\t\t\t| undefined;\n\t\twith?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['relations']]?:\n\t\t\t\t\t| true\n\t\t\t\t\t| DBQueryConfig<\n\t\t\t\t\t\tTTableConfig['relations'][K] extends One ? 'one' : 'many',\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\tFindTableByDBName<\n\t\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\t\tTTableConfig['relations'][K]['referencedTableName']\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\t| undefined;\n\t\t\t}\n\t\t\t| undefined;\n\t\textras?:\n\t\t\t| Record<string, SQL.Aliased>\n\t\t\t| ((\n\t\t\t\tfields: Simplify<\n\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t>,\n\t\t\t\toperators: { sql: Operators['sql'] },\n\t\t\t) => Record<string, SQL.Aliased>)\n\t\t\t| undefined;\n\t}\n\t& (TRelationType extends 'many' ?\n\t\t\t& {\n\t\t\t\twhere?:\n\t\t\t\t\t| SQL\n\t\t\t\t\t| undefined\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: Operators,\n\t\t\t\t\t) => SQL | undefined);\n\t\t\t\torderBy?:\n\t\t\t\t\t| ValueOrArray<AnyColumn | SQL>\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: OrderByOperators,\n\t\t\t\t\t) => ValueOrArray<AnyColumn | SQL>)\n\t\t\t\t\t| undefined;\n\t\t\t\tlimit?: number | Placeholder | undefined;\n\t\t\t}\n\t\t\t& (TIsRoot extends true ? {\n\t\t\t\t\toffset?: number | Placeholder | undefined;\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t: {});\n\nexport interface TableRelationalConfig {\n\ttsName: string;\n\tdbName: string;\n\tcolumns: Record<string, Column>;\n\trelations: Record<string, Relation>;\n\tprimaryKey: AnyColumn[];\n\tschema?: string;\n}\n\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\nexport interface RelationalSchemaConfig<\n\tTSchema extends TablesRelationalConfig,\n> {\n\tfullSchema: Record<string, unknown>;\n\tschema: TSchema;\n\ttableNamesMap: Record<string, string>;\n}\n\nexport type ExtractTablesWithRelations<\n\tTSchema extends Record<string, unknown>,\n> = {\n\t[\n\t\tK in keyof TSchema as TSchema[K] extends Table ? K\n\t\t\t: never\n\t]: TSchema[K] extends Table ? {\n\t\t\ttsName: K & string;\n\t\t\tdbName: TSchema[K]['_']['name'];\n\t\t\tcolumns: TSchema[K]['_']['columns'];\n\t\t\trelations: ExtractTableRelationsFromSchema<\n\t\t\t\tTSchema,\n\t\t\t\tTSchema[K]['_']['name']\n\t\t\t>;\n\t\t\tprimaryKey: AnyColumn[];\n\t\t}\n\t\t: never;\n};\n\nexport type ReturnTypeOrValue<T> = T extends (...args: any[]) => infer R ? R\n\t: T;\n\nexport type BuildRelationResult<\n\tTSchema extends TablesRelationalConfig,\n\tTInclude,\n\tTRelations extends Record<string, Relation>,\n> = {\n\t[\n\t\tK in\n\t\t\t& NonUndefinedKeysOnly<TInclude>\n\t\t\t& keyof TRelations\n\t]: TRelations[K] extends infer TRel extends Relation ? BuildQueryResult<\n\t\t\tTSchema,\n\t\t\tFindTableByDBName<TSchema, TRel['referencedTableName']>,\n\t\t\tAssume<TInclude[K], true | Record<string, unknown>>\n\t\t> extends infer TResult ? TRel extends One ?\n\t\t\t\t\t| TResult\n\t\t\t\t\t| (Equal<TRel['isNullable'], false> extends true ? null : never)\n\t\t\t: TResult[]\n\t\t: never\n\t\t: never;\n};\n\nexport type NonUndefinedKeysOnly<T> =\n\t& ExtractObjectValues<\n\t\t{\n\t\t\t[K in keyof T as T[K] extends undefined ? never : K]: K;\n\t\t}\n\t>\n\t& keyof T;\n\nexport type BuildQueryResult<\n\tTSchema extends TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig,\n\tTFullSelection extends true | Record<string, unknown>,\n> = Equal<TFullSelection, true> extends true ? InferModelFromColumns<TTableConfig['columns']>\n\t: TFullSelection extends Record<string, unknown> ? Simplify<\n\t\t\t& (TFullSelection['columns'] extends Record<string, unknown> ? InferModelFromColumns<\n\t\t\t\t\t{\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tK in Equal<\n\t\t\t\t\t\t\t\tExclude<\n\t\t\t\t\t\t\t\t\tTFullSelection['columns'][\n\t\t\t\t\t\t\t\t\t\t& keyof TFullSelection['columns']\n\t\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t> extends true ? Exclude<\n\t\t\t\t\t\t\t\t\tkeyof TTableConfig['columns'],\n\t\t\t\t\t\t\t\t\tNonUndefinedKeysOnly<TFullSelection['columns']>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\t\t\t[K in keyof TFullSelection['columns']]: Equal<\n\t\t\t\t\t\t\t\t\t\t\tTFullSelection['columns'][K],\n\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t> extends true ? K\n\t\t\t\t\t\t\t\t\t\t\t: never;\n\t\t\t\t\t\t\t\t\t}[keyof TFullSelection['columns']]\n\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t]: TTableConfig['columns'][K];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t: InferModelFromColumns<TTableConfig['columns']>)\n\t\t\t& (TFullSelection['extras'] extends\n\t\t\t\t| Record<string, unknown>\n\t\t\t\t| ((...args: any[]) => Record<string, unknown>) ? {\n\t\t\t\t\t[\n\t\t\t\t\t\tK in NonUndefinedKeysOnly<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>\n\t\t\t\t\t\t>\n\t\t\t\t\t]: Assume<\n\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>[K],\n\t\t\t\t\t\tSQL.Aliased\n\t\t\t\t\t>['_']['type'];\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t\t& (TFullSelection['with'] extends Record<string, unknown> ? BuildRelationResult<\n\t\t\t\t\tTSchema,\n\t\t\t\t\tTFullSelection['with'],\n\t\t\t\t\tTTableConfig['relations']\n\t\t\t\t>\n\t\t\t\t: {})\n\t\t>\n\t: never;\n\nexport interface RelationConfig<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> {\n\trelationName?: string;\n\tfields: TColumns;\n\treferences: ColumnsWithTable<TTableName, TForeignTableName, TColumns>;\n}\n\nexport function extractTablesRelationalConfig<\n\tTTables extends TablesRelationalConfig,\n>(\n\tschema: Record<string, unknown>,\n\tconfigHelpers: (table: Table) => any,\n): { tables: TTables; tableNamesMap: Record<string, string> } {\n\tif (\n\t\tObject.keys(schema).length === 1\n\t\t&& 'default' in schema\n\t\t&& !is(schema['default'], Table)\n\t) {\n\t\tschema = schema['default'] as Record<string, unknown>;\n\t}\n\n\t// table DB name -> schema table key\n\tconst tableNamesMap: Record<string, string> = {};\n\t// Table relations found before their tables - need to buffer them until we know the schema table key\n\tconst relationsBuffer: Record<\n\t\tstring,\n\t\t{ relations: Record<string, Relation>; primaryKey?: AnyColumn[] }\n\t> = {};\n\tconst tablesConfig: TablesRelationalConfig = {};\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (is(value, Table)) {\n\t\t\tconst dbName = getTableUniqueName(value);\n\t\t\tconst bufferedRelations = relationsBuffer[dbName];\n\t\t\ttableNamesMap[dbName] = key;\n\t\t\ttablesConfig[key] = {\n\t\t\t\ttsName: key,\n\t\t\t\tdbName: value[Table.Symbol.Name],\n\t\t\t\tschema: value[Table.Symbol.Schema],\n\t\t\t\tcolumns: value[Table.Symbol.Columns],\n\t\t\t\trelations: bufferedRelations?.relations ?? {},\n\t\t\t\tprimaryKey: bufferedRelations?.primaryKey ?? [],\n\t\t\t};\n\n\t\t\t// Fill in primary keys\n\t\t\tfor (\n\t\t\t\tconst column of Object.values(\n\t\t\t\t\t(value as Table)[Table.Symbol.Columns],\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif (column.primary) {\n\t\t\t\t\ttablesConfig[key]!.primaryKey.push(column);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst extraConfig = value[Table.Symbol.ExtraConfigBuilder]?.((value as Table)[Table.Symbol.ExtraConfigColumns]);\n\t\t\tif (extraConfig) {\n\t\t\t\tfor (const configEntry of Object.values(extraConfig)) {\n\t\t\t\t\tif (is(configEntry, PrimaryKeyBuilder)) {\n\t\t\t\t\t\ttablesConfig[key]!.primaryKey.push(...configEntry.columns);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (is(value, Relations)) {\n\t\t\tconst dbName = getTableUniqueName(value.table);\n\t\t\tconst tableName = tableNamesMap[dbName];\n\t\t\tconst relations: Record<string, Relation> = value.config(\n\t\t\t\tconfigHelpers(value.table),\n\t\t\t);\n\t\t\tlet primaryKey: AnyColumn[] | undefined;\n\n\t\t\tfor (const [relationName, relation] of Object.entries(relations)) {\n\t\t\t\tif (tableName) {\n\t\t\t\t\tconst tableConfig = tablesConfig[tableName]!;\n\t\t\t\t\ttableConfig.relations[relationName] = relation;\n\t\t\t\t\tif (primaryKey) {\n\t\t\t\t\t\ttableConfig.primaryKey.push(...primaryKey);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!(dbName in relationsBuffer)) {\n\t\t\t\t\t\trelationsBuffer[dbName] = {\n\t\t\t\t\t\t\trelations: {},\n\t\t\t\t\t\t\tprimaryKey,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\trelationsBuffer[dbName]!.relations[relationName] = relation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { tables: tablesConfig as TTables, tableNamesMap };\n}\n\nexport function relations<\n\tTTableName extends string,\n\tTRelations extends Record<string, Relation<any>>,\n>(\n\ttable: AnyTable<{ name: TTableName }>,\n\trelations: (helpers: TableRelationsHelpers<TTableName>) => TRelations,\n): Relations<TTableName, TRelations> {\n\treturn new Relations<TTableName, TRelations>(\n\t\ttable,\n\t\t(helpers: TableRelationsHelpers<TTableName>) =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries(relations(helpers)).map(([key, value]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue.withFieldName(key),\n\t\t\t\t]),\n\t\t\t) as TRelations,\n\t);\n}\n\nexport function createOne<TTableName extends string>(sourceTable: Table) {\n\treturn function one<\n\t\tTForeignTable extends Table,\n\t\tTColumns extends [\n\t\t\tAnyColumn<{ tableName: TTableName }>,\n\t\t\t...AnyColumn<{ tableName: TTableName }>[],\n\t\t],\n\t>(\n\t\ttable: TForeignTable,\n\t\tconfig?: RelationConfig<TTableName, TForeignTable['_']['name'], TColumns>,\n\t): One<\n\t\tTForeignTable['_']['name'],\n\t\tEqual<TColumns[number]['_']['notNull'], true>\n\t> {\n\t\treturn new One(\n\t\t\tsourceTable,\n\t\t\ttable,\n\t\t\tconfig,\n\t\t\t(config?.fields.reduce<boolean>((res, f) => res && f.notNull, true)\n\t\t\t\t?? false) as Equal<TColumns[number]['_']['notNull'], true>,\n\t\t);\n\t};\n}\n\nexport function createMany(sourceTable: Table) {\n\treturn function many<TForeignTable extends Table>(\n\t\treferencedTable: TForeignTable,\n\t\tconfig?: { relationName: string },\n\t): Many<TForeignTable['_']['name']> {\n\t\treturn new Many(sourceTable, referencedTable, config);\n\t};\n}\n\nexport interface NormalizedRelation {\n\tfields: AnyColumn[];\n\treferences: AnyColumn[];\n}\n\nexport function normalizeRelation(\n\tschema: TablesRelationalConfig,\n\ttableNamesMap: Record<string, string>,\n\trelation: Relation,\n): NormalizedRelation {\n\tif (is(relation, One) && relation.config) {\n\t\treturn {\n\t\t\tfields: relation.config.fields,\n\t\t\treferences: relation.config.references,\n\t\t};\n\t}\n\n\tconst referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];\n\tif (!referencedTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${relation.referencedTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst referencedTableConfig = schema[referencedTableTsName];\n\tif (!referencedTableConfig) {\n\t\tthrow new Error(`Table \"${referencedTableTsName}\" not found in schema`);\n\t}\n\n\tconst sourceTable = relation.sourceTable;\n\tconst sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];\n\tif (!sourceTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${sourceTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst reverseRelations: Relation[] = [];\n\tfor (\n\t\tconst referencedTableRelation of Object.values(\n\t\t\treferencedTableConfig.relations,\n\t\t)\n\t) {\n\t\tif (\n\t\t\t(relation.relationName\n\t\t\t\t&& relation !== referencedTableRelation\n\t\t\t\t&& referencedTableRelation.relationName === relation.relationName)\n\t\t\t|| (!relation.relationName\n\t\t\t\t&& referencedTableRelation.referencedTable === relation.sourceTable)\n\t\t) {\n\t\t\treverseRelations.push(referencedTableRelation);\n\t\t}\n\t}\n\n\tif (reverseRelations.length > 1) {\n\t\tthrow relation.relationName\n\t\t\t? new Error(\n\t\t\t\t`There are multiple relations with name \"${relation.relationName}\" in table \"${referencedTableTsName}\"`,\n\t\t\t)\n\t\t\t: new Error(\n\t\t\t\t`There are multiple relations between \"${referencedTableTsName}\" and \"${\n\t\t\t\t\trelation.sourceTable[Table.Symbol.Name]\n\t\t\t\t}\". Please specify relation name`,\n\t\t\t);\n\t}\n\n\tif (\n\t\treverseRelations[0]\n\t\t&& is(reverseRelations[0], One)\n\t\t&& reverseRelations[0].config\n\t) {\n\t\treturn {\n\t\t\tfields: reverseRelations[0].config.references,\n\t\t\treferences: reverseRelations[0].config.fields,\n\t\t};\n\t}\n\n\tthrow new Error(\n\t\t`There is not enough information to infer relation \"${sourceTableTsName}.${relation.fieldName}\"`,\n\t);\n}\n\nexport function createTableRelationsHelpers<TTableName extends string>(\n\tsourceTable: AnyTable<{ name: TTableName }>,\n) {\n\treturn {\n\t\tone: createOne<TTableName>(sourceTable),\n\t\tmany: createMany(sourceTable),\n\t};\n}\n\nexport type TableRelationsHelpers<TTableName extends string> = ReturnType<\n\ttypeof createTableRelationsHelpers<TTableName>\n>;\n\nexport interface BuildRelationalQueryResult<\n\tTTable extends Table = Table,\n\tTColumn extends Column = Column,\n> {\n\ttableTsKey: string;\n\tselection: {\n\t\tdbKey: string;\n\t\ttsKey: string;\n\t\tfield: TColumn | SQL | SQL.Aliased;\n\t\trelationTableTsKey: string | undefined;\n\t\tisJson: boolean;\n\t\tisExtra?: boolean;\n\t\tselection: BuildRelationalQueryResult<TTable>['selection'];\n\t}[];\n\tsql: TTable | SQL;\n}\n\nexport function mapRelationalRow(\n\ttablesConfig: TablesRelationalConfig,\n\ttableConfig: TableRelationalConfig,\n\trow: unknown[],\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue: (value: unknown) => unknown = (value) => value,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (\n\t\tconst [\n\t\t\tselectionItemIndex,\n\t\t\tselectionItem,\n\t\t] of buildQueryResultSelection.entries()\n\t) {\n\t\tif (selectionItem.isJson) {\n\t\t\tconst relation = tableConfig.relations[selectionItem.tsKey]!;\n\t\t\tconst rawSubRows = row[selectionItemIndex] as\n\t\t\t\t| unknown[]\n\t\t\t\t| null\n\t\t\t\t| [null]\n\t\t\t\t| string;\n\t\t\tconst subRows = typeof rawSubRows === 'string'\n\t\t\t\t? (JSON.parse(rawSubRows) as unknown[])\n\t\t\t\t: rawSubRows;\n\t\t\tresult[selectionItem.tsKey] = is(relation, One)\n\t\t\t\t? subRows\n\t\t\t\t\t&& mapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRows,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t: (subRows as unknown[][]).map((subRow) =>\n\t\t\t\t\tmapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRow,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t} else {\n\t\t\tconst value = mapColumnValue(row[selectionItemIndex]);\n\t\t\tconst field = selectionItem.field!;\n\t\t\tlet decoder;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tresult[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);\n\t\t}\n\t}\n\n\treturn result;\n}\n"],"mappings":"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","names":["relations"]}
1
+ {"version":3,"sources":["../src/_relations.ts"],"sourcesContent":["import { type AnyTable, getTableUniqueName, type InferModelFromColumns, Table } from '~/table.ts';\nimport { type AnyColumn, Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { PrimaryKeyBuilder } from './pg-core/primary-keys.ts';\nimport {\n\tand,\n\tasc,\n\tbetween,\n\tdesc,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tisNotNull,\n\tisNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotIlike,\n\tnotInArray,\n\tnotLike,\n\tor,\n} from './sql/expressions/index.ts';\nimport { type Placeholder, SQL, sql } from './sql/sql.ts';\nimport type { Assume, ColumnsWithTable, Equal, Simplify, ValueOrArray } from './utils.ts';\n\nexport abstract class Relation<TTableName extends string = string> {\n\tstatic readonly [entityKind]: string = 'Relation';\n\n\tdeclare readonly $brand: 'Relation';\n\treadonly referencedTableName: TTableName;\n\tfieldName!: string;\n\n\tconstructor(\n\t\treadonly sourceTable: Table,\n\t\treadonly referencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly relationName: string | undefined,\n\t) {\n\t\tthis.referencedTableName = referencedTable[Table.Symbol.Name] as TTableName;\n\t}\n\n\tabstract withFieldName(fieldName: string): Relation<TTableName>;\n}\n\nexport class Relations<\n\tTTableName extends string = string,\n\tTConfig extends Record<string, Relation> = Record<string, Relation>,\n> {\n\tstatic readonly [entityKind]: string = 'Relations';\n\n\tdeclare readonly $brand: 'Relations';\n\n\tconstructor(\n\t\treadonly table: AnyTable<{ name: TTableName }>,\n\t\treadonly config: (helpers: TableRelationsHelpers<TTableName>) => TConfig,\n\t) {}\n}\n\nexport class One<\n\tTTableName extends string = string,\n\tTIsNullable extends boolean = boolean,\n> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'One';\n\n\tdeclare protected $relationBrand: 'One';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config:\n\t\t\t| RelationConfig<\n\t\t\t\tTTableName,\n\t\t\t\tstring,\n\t\t\t\tAnyColumn<{ tableName: TTableName }>[]\n\t\t\t>\n\t\t\t| undefined,\n\t\treadonly isNullable: TIsNullable,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): One<TTableName> {\n\t\tconst relation = new One(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t\tthis.isNullable,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport class Many<TTableName extends string> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'Many';\n\n\tdeclare protected $relationBrand: 'Many';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config: { relationName: string } | undefined,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): Many<TTableName> {\n\t\tconst relation = new Many(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport type TableRelationsKeysOnly<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n\tK extends keyof TSchema,\n> = TSchema[K] extends Relations<TTableName> ? K : never;\n\nexport type ExtractTableRelationsFromSchema<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TableRelationsKeysOnly<\n\t\t\t\tTSchema,\n\t\t\t\tTTableName,\n\t\t\t\tK\n\t\t\t>\n\t\t]: TSchema[K] extends Relations<TTableName, infer TConfig> ? TConfig : never;\n\t}\n>;\n\nexport type ExtractObjectValues<T> = T[keyof T];\n\nexport type ExtractRelationsFromTableExtraConfigSchema<\n\tTConfig extends unknown[],\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TConfig as TConfig[K] extends Relations<any> ? K\n\t\t\t\t: never\n\t\t]: TConfig[K] extends Relations<infer TRelationConfig> ? TRelationConfig\n\t\t\t: never;\n\t}\n>;\n\nexport function getOperators() {\n\treturn {\n\t\tand,\n\t\tbetween,\n\t\teq,\n\t\texists,\n\t\tgt,\n\t\tgte,\n\t\tilike,\n\t\tinArray,\n\t\tisNull,\n\t\tisNotNull,\n\t\tlike,\n\t\tlt,\n\t\tlte,\n\t\tne,\n\t\tnot,\n\t\tnotBetween,\n\t\tnotExists,\n\t\tnotLike,\n\t\tnotIlike,\n\t\tnotInArray,\n\t\tor,\n\t\tsql,\n\t};\n}\n\nexport type Operators = ReturnType<typeof getOperators>;\n\nexport function getOrderByOperators() {\n\treturn {\n\t\tsql,\n\t\tasc,\n\t\tdesc,\n\t};\n}\n\nexport type OrderByOperators = ReturnType<typeof getOrderByOperators>;\n\nexport type FindTableByDBName<\n\tTSchema extends TablesRelationalConfig,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TSchema[K]['dbName'] extends TTableName ? K\n\t\t\t\t: never\n\t\t]: TSchema[K];\n\t}\n>;\n\nexport type DBQueryConfig<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTIsRoot extends boolean = boolean,\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> =\n\t& {\n\t\tcolumns?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['columns']]?: boolean;\n\t\t\t}\n\t\t\t| undefined;\n\t\twith?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['relations']]?:\n\t\t\t\t\t| true\n\t\t\t\t\t| DBQueryConfig<\n\t\t\t\t\t\tTTableConfig['relations'][K] extends One ? 'one' : 'many',\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\tFindTableByDBName<\n\t\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\t\tTTableConfig['relations'][K]['referencedTableName']\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\t| undefined;\n\t\t\t}\n\t\t\t| undefined;\n\t\textras?:\n\t\t\t| Record<string, SQL.Aliased>\n\t\t\t| ((\n\t\t\t\tfields: Simplify<\n\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t>,\n\t\t\t\toperators: { sql: Operators['sql'] },\n\t\t\t) => Record<string, SQL.Aliased>)\n\t\t\t| undefined;\n\t}\n\t& (TRelationType extends 'many' ?\n\t\t\t& {\n\t\t\t\twhere?:\n\t\t\t\t\t| SQL\n\t\t\t\t\t| undefined\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: Operators,\n\t\t\t\t\t) => SQL | undefined);\n\t\t\t\torderBy?:\n\t\t\t\t\t| ValueOrArray<AnyColumn | SQL>\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: OrderByOperators,\n\t\t\t\t\t) => ValueOrArray<AnyColumn | SQL>)\n\t\t\t\t\t| undefined;\n\t\t\t\tlimit?: number | Placeholder | undefined;\n\t\t\t}\n\t\t\t& (TIsRoot extends true ? {\n\t\t\t\t\toffset?: number | Placeholder | undefined;\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t: {});\n\nexport interface TableRelationalConfig {\n\ttsName: string;\n\tdbName: string;\n\tcolumns: Record<string, Column>;\n\trelations: Record<string, Relation>;\n\tprimaryKey: AnyColumn[];\n\tschema?: string;\n}\n\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\nexport interface RelationalSchemaConfig<\n\tTSchema extends TablesRelationalConfig,\n> {\n\tfullSchema: Record<string, unknown>;\n\tschema: TSchema;\n\ttableNamesMap: Record<string, string>;\n}\n\nexport type ExtractTablesWithRelations<\n\tTSchema extends Record<string, unknown>,\n> = {\n\t[\n\t\tK in keyof TSchema as TSchema[K] extends Table ? K\n\t\t\t: never\n\t]: TSchema[K] extends Table ? {\n\t\t\ttsName: K & string;\n\t\t\tdbName: TSchema[K]['_']['name'];\n\t\t\tcolumns: TSchema[K]['_']['columns'];\n\t\t\trelations: ExtractTableRelationsFromSchema<\n\t\t\t\tTSchema,\n\t\t\t\tTSchema[K]['_']['name']\n\t\t\t>;\n\t\t\tprimaryKey: AnyColumn[];\n\t\t}\n\t\t: never;\n};\n\nexport type ReturnTypeOrValue<T> = T extends (...args: any[]) => infer R ? R\n\t: T;\n\nexport type BuildRelationResult<\n\tTSchema extends TablesRelationalConfig,\n\tTInclude,\n\tTRelations extends Record<string, Relation>,\n> = {\n\t[\n\t\tK in\n\t\t\t& NonUndefinedKeysOnly<TInclude>\n\t\t\t& keyof TRelations\n\t]: TRelations[K] extends infer TRel extends Relation ? BuildQueryResult<\n\t\t\tTSchema,\n\t\t\tFindTableByDBName<TSchema, TRel['referencedTableName']>,\n\t\t\tAssume<TInclude[K], true | Record<string, unknown>>\n\t\t> extends infer TResult ? TRel extends One ?\n\t\t\t\t\t| TResult\n\t\t\t\t\t| (Equal<TRel['isNullable'], false> extends true ? null : never)\n\t\t\t: TResult[]\n\t\t: never\n\t\t: never;\n};\n\nexport type NonUndefinedKeysOnly<T> =\n\t& ExtractObjectValues<\n\t\t{\n\t\t\t[K in keyof T as T[K] extends undefined ? never : K]: K;\n\t\t}\n\t>\n\t& keyof T;\n\nexport type BuildQueryResult<\n\tTSchema extends TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig,\n\tTFullSelection extends true | Record<string, unknown>,\n> = Equal<TFullSelection, true> extends true ? InferModelFromColumns<TTableConfig['columns']>\n\t: TFullSelection extends Record<string, unknown> ? Simplify<\n\t\t\t& (TFullSelection['columns'] extends Record<string, unknown> ? InferModelFromColumns<\n\t\t\t\t\t{\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tK in Equal<\n\t\t\t\t\t\t\t\tExclude<\n\t\t\t\t\t\t\t\t\tTFullSelection['columns'][\n\t\t\t\t\t\t\t\t\t\t& keyof TFullSelection['columns']\n\t\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t> extends true ? Exclude<\n\t\t\t\t\t\t\t\t\tkeyof TTableConfig['columns'],\n\t\t\t\t\t\t\t\t\tNonUndefinedKeysOnly<TFullSelection['columns']>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\t\t\t[K in keyof TFullSelection['columns']]: Equal<\n\t\t\t\t\t\t\t\t\t\t\tTFullSelection['columns'][K],\n\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t> extends true ? K\n\t\t\t\t\t\t\t\t\t\t\t: never;\n\t\t\t\t\t\t\t\t\t}[keyof TFullSelection['columns']]\n\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t]: TTableConfig['columns'][K];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t: InferModelFromColumns<TTableConfig['columns']>)\n\t\t\t& (TFullSelection['extras'] extends\n\t\t\t\t| Record<string, unknown>\n\t\t\t\t| ((...args: any[]) => Record<string, unknown>) ? {\n\t\t\t\t\t[\n\t\t\t\t\t\tK in NonUndefinedKeysOnly<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>\n\t\t\t\t\t\t>\n\t\t\t\t\t]: Assume<\n\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>[K],\n\t\t\t\t\t\tSQL.Aliased\n\t\t\t\t\t>['_']['type'];\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t\t& (TFullSelection['with'] extends Record<string, unknown> ? BuildRelationResult<\n\t\t\t\t\tTSchema,\n\t\t\t\t\tTFullSelection['with'],\n\t\t\t\t\tTTableConfig['relations']\n\t\t\t\t>\n\t\t\t\t: {})\n\t\t>\n\t: never;\n\nexport interface RelationConfig<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> {\n\trelationName?: string;\n\tfields: TColumns;\n\treferences: ColumnsWithTable<TTableName, TForeignTableName, TColumns>;\n}\n\nexport function extractTablesRelationalConfig<\n\tTTables extends TablesRelationalConfig,\n>(\n\tschema: Record<string, unknown>,\n\tconfigHelpers: (table: Table) => any,\n): { tables: TTables; tableNamesMap: Record<string, string> } {\n\tif (\n\t\tObject.keys(schema).length === 1\n\t\t&& 'default' in schema\n\t\t&& !is(schema['default'], Table)\n\t) {\n\t\tschema = schema['default'] as Record<string, unknown>;\n\t}\n\n\t// table DB name -> schema table key\n\tconst tableNamesMap: Record<string, string> = {};\n\t// Table relations found before their tables - need to buffer them until we know the schema table key\n\tconst relationsBuffer: Record<\n\t\tstring,\n\t\t{ relations: Record<string, Relation>; primaryKey?: AnyColumn[] }\n\t> = {};\n\tconst tablesConfig: TablesRelationalConfig = {};\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (is(value, Table)) {\n\t\t\tconst dbName = getTableUniqueName(value);\n\t\t\tconst bufferedRelations = relationsBuffer[dbName];\n\t\t\ttableNamesMap[dbName] = key;\n\t\t\ttablesConfig[key] = {\n\t\t\t\ttsName: key,\n\t\t\t\tdbName: value[Table.Symbol.Name],\n\t\t\t\tschema: value[Table.Symbol.Schema],\n\t\t\t\tcolumns: value[Table.Symbol.Columns],\n\t\t\t\trelations: bufferedRelations?.relations ?? {},\n\t\t\t\tprimaryKey: bufferedRelations?.primaryKey ?? [],\n\t\t\t};\n\n\t\t\t// Fill in primary keys\n\t\t\tfor (\n\t\t\t\tconst column of Object.values(\n\t\t\t\t\t(value as Table)[Table.Symbol.Columns],\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif (column.primary) {\n\t\t\t\t\ttablesConfig[key]!.primaryKey.push(column);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst extraConfig = value[Table.Symbol.ExtraConfigBuilder]?.((value as Table)[Table.Symbol.ExtraConfigColumns]);\n\t\t\tif (extraConfig) {\n\t\t\t\tfor (const configEntry of Object.values(extraConfig)) {\n\t\t\t\t\tif (is(configEntry, PrimaryKeyBuilder)) {\n\t\t\t\t\t\ttablesConfig[key]!.primaryKey.push(...configEntry.columns);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (is(value, Relations)) {\n\t\t\tconst dbName = getTableUniqueName(value.table);\n\t\t\tconst tableName = tableNamesMap[dbName];\n\t\t\tconst relations: Record<string, Relation> = value.config(\n\t\t\t\tconfigHelpers(value.table),\n\t\t\t);\n\t\t\tlet primaryKey: AnyColumn[] | undefined;\n\n\t\t\tfor (const [relationName, relation] of Object.entries(relations)) {\n\t\t\t\tif (tableName) {\n\t\t\t\t\tconst tableConfig = tablesConfig[tableName]!;\n\t\t\t\t\ttableConfig.relations[relationName] = relation;\n\t\t\t\t\tif (primaryKey) {\n\t\t\t\t\t\ttableConfig.primaryKey.push(...primaryKey);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!(dbName in relationsBuffer)) {\n\t\t\t\t\t\trelationsBuffer[dbName] = {\n\t\t\t\t\t\t\trelations: {},\n\t\t\t\t\t\t\tprimaryKey,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\trelationsBuffer[dbName]!.relations[relationName] = relation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { tables: tablesConfig as TTables, tableNamesMap };\n}\n\nexport function relations<\n\tTTableName extends string,\n\tTRelations extends Record<string, Relation<any>>,\n>(\n\ttable: AnyTable<{ name: TTableName }>,\n\trelations: (helpers: TableRelationsHelpers<TTableName>) => TRelations,\n): Relations<TTableName, TRelations> {\n\treturn new Relations<TTableName, TRelations>(\n\t\ttable,\n\t\t(helpers: TableRelationsHelpers<TTableName>) =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries(relations(helpers)).map(([key, value]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue.withFieldName(key),\n\t\t\t\t]),\n\t\t\t) as TRelations,\n\t);\n}\n\nexport function createOne<TTableName extends string>(sourceTable: Table) {\n\treturn function one<\n\t\tTForeignTable extends Table,\n\t\tTColumns extends [\n\t\t\tAnyColumn<{ tableName: TTableName }>,\n\t\t\t...AnyColumn<{ tableName: TTableName }>[],\n\t\t],\n\t>(\n\t\ttable: TForeignTable,\n\t\tconfig?: RelationConfig<TTableName, TForeignTable['_']['name'], TColumns>,\n\t): One<\n\t\tTForeignTable['_']['name'],\n\t\tEqual<TColumns[number]['_']['notNull'], true>\n\t> {\n\t\treturn new One(\n\t\t\tsourceTable,\n\t\t\ttable,\n\t\t\tconfig,\n\t\t\t(config?.fields.reduce<boolean>((res, f) => res && f.notNull, true)\n\t\t\t\t?? false) as Equal<TColumns[number]['_']['notNull'], true>,\n\t\t);\n\t};\n}\n\nexport function createMany(sourceTable: Table) {\n\treturn function many<TForeignTable extends Table>(\n\t\treferencedTable: TForeignTable,\n\t\tconfig?: { relationName: string },\n\t): Many<TForeignTable['_']['name']> {\n\t\treturn new Many(sourceTable, referencedTable, config);\n\t};\n}\n\nexport interface NormalizedRelation {\n\tfields: AnyColumn[];\n\treferences: AnyColumn[];\n}\n\nexport function normalizeRelation(\n\tschema: TablesRelationalConfig,\n\ttableNamesMap: Record<string, string>,\n\trelation: Relation,\n): NormalizedRelation {\n\tif (is(relation, One) && relation.config) {\n\t\treturn {\n\t\t\tfields: relation.config.fields,\n\t\t\treferences: relation.config.references,\n\t\t};\n\t}\n\n\tconst referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];\n\tif (!referencedTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${relation.referencedTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst referencedTableConfig = schema[referencedTableTsName];\n\tif (!referencedTableConfig) {\n\t\tthrow new Error(`Table \"${referencedTableTsName}\" not found in schema`);\n\t}\n\n\tconst sourceTable = relation.sourceTable;\n\tconst sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];\n\tif (!sourceTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${sourceTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst reverseRelations: Relation[] = [];\n\tfor (\n\t\tconst referencedTableRelation of Object.values(\n\t\t\treferencedTableConfig.relations,\n\t\t)\n\t) {\n\t\tif (\n\t\t\t(relation.relationName\n\t\t\t\t&& relation !== referencedTableRelation\n\t\t\t\t&& referencedTableRelation.relationName === relation.relationName)\n\t\t\t|| (!relation.relationName\n\t\t\t\t&& referencedTableRelation.referencedTable === relation.sourceTable)\n\t\t) {\n\t\t\treverseRelations.push(referencedTableRelation);\n\t\t}\n\t}\n\n\tif (reverseRelations.length > 1) {\n\t\tthrow relation.relationName\n\t\t\t? new Error(\n\t\t\t\t`There are multiple relations with name \"${relation.relationName}\" in table \"${referencedTableTsName}\"`,\n\t\t\t)\n\t\t\t: new Error(\n\t\t\t\t`There are multiple relations between \"${referencedTableTsName}\" and \"${\n\t\t\t\t\trelation.sourceTable[Table.Symbol.Name]\n\t\t\t\t}\". Please specify relation name`,\n\t\t\t);\n\t}\n\n\tif (\n\t\treverseRelations[0]\n\t\t&& is(reverseRelations[0], One)\n\t\t&& reverseRelations[0].config\n\t) {\n\t\treturn {\n\t\t\tfields: reverseRelations[0].config.references,\n\t\t\treferences: reverseRelations[0].config.fields,\n\t\t};\n\t}\n\n\tthrow new Error(\n\t\t`There is not enough information to infer relation \"${sourceTableTsName}.${relation.fieldName}\"`,\n\t);\n}\n\nexport function createTableRelationsHelpers<TTableName extends string>(\n\tsourceTable: AnyTable<{ name: TTableName }>,\n) {\n\treturn {\n\t\tone: createOne<TTableName>(sourceTable),\n\t\tmany: createMany(sourceTable),\n\t};\n}\n\nexport type TableRelationsHelpers<TTableName extends string> = ReturnType<\n\ttypeof createTableRelationsHelpers<TTableName>\n>;\n\nexport interface BuildRelationalQueryResult<\n\tTTable extends Table = Table,\n\tTColumn extends Column = Column,\n> {\n\ttableTsKey: string;\n\tselection: {\n\t\tdbKey: string;\n\t\ttsKey: string;\n\t\tfield: TColumn | SQL | SQL.Aliased;\n\t\trelationTableTsKey: string | undefined;\n\t\tisJson: boolean;\n\t\tisExtra?: boolean;\n\t\tselection: BuildRelationalQueryResult<TTable>['selection'];\n\t}[];\n\tsql: TTable | SQL;\n}\n\nexport function mapRelationalRow(\n\ttablesConfig: TablesRelationalConfig,\n\ttableConfig: TableRelationalConfig,\n\trow: unknown[],\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue: (value: unknown) => unknown = (value) => value,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (\n\t\tconst [\n\t\t\tselectionItemIndex,\n\t\t\tselectionItem,\n\t\t] of buildQueryResultSelection.entries()\n\t) {\n\t\tif (selectionItem.isJson) {\n\t\t\tconst relation = tableConfig.relations[selectionItem.tsKey]!;\n\t\t\tconst rawSubRows = row[selectionItemIndex] as\n\t\t\t\t| unknown[]\n\t\t\t\t| null\n\t\t\t\t| [null]\n\t\t\t\t| string;\n\t\t\tconst subRows = typeof rawSubRows === 'string'\n\t\t\t\t? (JSON.parse(rawSubRows) as unknown[])\n\t\t\t\t: rawSubRows;\n\t\t\tresult[selectionItem.tsKey] = is(relation, One)\n\t\t\t\t? subRows\n\t\t\t\t\t&& mapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRows,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t: (subRows as unknown[][]).map((subRow) =>\n\t\t\t\t\tmapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRow,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t} else {\n\t\t\tconst value = mapColumnValue(row[selectionItemIndex]);\n\t\t\tconst field = selectionItem.field!;\n\t\t\tlet decoder;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tresult[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function mapRelationalRowFromObj(\n\ttablesConfig: TablesRelationalConfig,\n\ttableConfig: TableRelationalConfig,\n\trow: unknown[],\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue: (value: unknown) => unknown = (value) => value,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (\n\t\tconst [\n\t\t\tselectionItemIndex,\n\t\t\tselectionItem,\n\t\t] of buildQueryResultSelection.entries()\n\t) {\n\t\tif (selectionItem.isJson) {\n\t\t\tconst relation = tableConfig.relations[selectionItem.tsKey]!;\n\t\t\tconst isOne = is(relation, One);\n\t\t\tconst rawSubRows = row[selectionItemIndex] as unknown[] | null | [null] | string;\n\n\t\t\tlet subRows = rawSubRows as unknown[] | null;\n\t\t\tif (subRows || Array.isArray(subRows)) {\n\t\t\t\tsubRows = (typeof rawSubRows === 'string' ? JSON.parse(rawSubRows) : rawSubRows) as unknown[];\n\n\t\t\t\tsubRows = isOne\n\t\t\t\t\t? subRows.flatMap((r) => Array.isArray(r) ? r : Object.values(r as any))\n\t\t\t\t\t: subRows.map((r) => Array.isArray(r) ? r : Object.values(r as any));\n\t\t\t}\n\n\t\t\tresult[selectionItem.tsKey] = isOne\n\t\t\t\t? subRows\n\t\t\t\t\t&& mapRelationalRowFromObj(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRows,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t: ((subRows ?? []) as unknown[][]).map((subRow) =>\n\t\t\t\t\tmapRelationalRowFromObj(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRow,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t} else {\n\t\t\tconst value = mapColumnValue(row[selectionItemIndex]);\n\t\t\tconst field = selectionItem.field!;\n\t\t\tlet decoder;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tresult[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);\n\t\t}\n\t}\n\n\treturn result;\n}\n"],"mappings":"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","names":["relations"]}
package/_relations.d.cts CHANGED
@@ -213,3 +213,4 @@ export interface BuildRelationalQueryResult<TTable extends Table = Table, TColum
213
213
  sql: TTable | SQL;
214
214
  }
215
215
  export declare function mapRelationalRow(tablesConfig: TablesRelationalConfig, tableConfig: TableRelationalConfig, row: unknown[], buildQueryResultSelection: BuildRelationalQueryResult['selection'], mapColumnValue?: (value: unknown) => unknown): Record<string, unknown>;
216
+ export declare function mapRelationalRowFromObj(tablesConfig: TablesRelationalConfig, tableConfig: TableRelationalConfig, row: unknown[], buildQueryResultSelection: BuildRelationalQueryResult['selection'], mapColumnValue?: (value: unknown) => unknown): Record<string, unknown>;
package/_relations.d.ts CHANGED
@@ -213,3 +213,4 @@ export interface BuildRelationalQueryResult<TTable extends Table = Table, TColum
213
213
  sql: TTable | SQL;
214
214
  }
215
215
  export declare function mapRelationalRow(tablesConfig: TablesRelationalConfig, tableConfig: TableRelationalConfig, row: unknown[], buildQueryResultSelection: BuildRelationalQueryResult['selection'], mapColumnValue?: (value: unknown) => unknown): Record<string, unknown>;
216
+ export declare function mapRelationalRowFromObj(tablesConfig: TablesRelationalConfig, tableConfig: TableRelationalConfig, row: unknown[], buildQueryResultSelection: BuildRelationalQueryResult['selection'], mapColumnValue?: (value: unknown) => unknown): Record<string, unknown>;
package/_relations.js CHANGED
@@ -298,6 +298,52 @@ function mapRelationalRow(tablesConfig, tableConfig, row, buildQueryResultSelect
298
298
  }
299
299
  return result;
300
300
  }
301
+ function mapRelationalRowFromObj(tablesConfig, tableConfig, row, buildQueryResultSelection, mapColumnValue = (value) => value) {
302
+ const result = {};
303
+ for (const [
304
+ selectionItemIndex,
305
+ selectionItem
306
+ ] of buildQueryResultSelection.entries()) {
307
+ if (selectionItem.isJson) {
308
+ const relation = tableConfig.relations[selectionItem.tsKey];
309
+ const isOne = is(relation, One);
310
+ const rawSubRows = row[selectionItemIndex];
311
+ let subRows = rawSubRows;
312
+ if (subRows || Array.isArray(subRows)) {
313
+ subRows = typeof rawSubRows === "string" ? JSON.parse(rawSubRows) : rawSubRows;
314
+ subRows = isOne ? subRows.flatMap((r) => Array.isArray(r) ? r : Object.values(r)) : subRows.map((r) => Array.isArray(r) ? r : Object.values(r));
315
+ }
316
+ result[selectionItem.tsKey] = isOne ? subRows && mapRelationalRowFromObj(
317
+ tablesConfig,
318
+ tablesConfig[selectionItem.relationTableTsKey],
319
+ subRows,
320
+ selectionItem.selection,
321
+ mapColumnValue
322
+ ) : (subRows ?? []).map(
323
+ (subRow) => mapRelationalRowFromObj(
324
+ tablesConfig,
325
+ tablesConfig[selectionItem.relationTableTsKey],
326
+ subRow,
327
+ selectionItem.selection,
328
+ mapColumnValue
329
+ )
330
+ );
331
+ } else {
332
+ const value = mapColumnValue(row[selectionItemIndex]);
333
+ const field = selectionItem.field;
334
+ let decoder;
335
+ if (is(field, Column)) {
336
+ decoder = field;
337
+ } else if (is(field, SQL)) {
338
+ decoder = field.decoder;
339
+ } else {
340
+ decoder = field.sql.decoder;
341
+ }
342
+ result[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);
343
+ }
344
+ }
345
+ return result;
346
+ }
301
347
  export {
302
348
  Many,
303
349
  One,
@@ -310,6 +356,7 @@ export {
310
356
  getOperators,
311
357
  getOrderByOperators,
312
358
  mapRelationalRow,
359
+ mapRelationalRowFromObj,
313
360
  normalizeRelation,
314
361
  relations
315
362
  };
package/_relations.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/_relations.ts"],"sourcesContent":["import { type AnyTable, getTableUniqueName, type InferModelFromColumns, Table } from '~/table.ts';\nimport { type AnyColumn, Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { PrimaryKeyBuilder } from './pg-core/primary-keys.ts';\nimport {\n\tand,\n\tasc,\n\tbetween,\n\tdesc,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tisNotNull,\n\tisNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotIlike,\n\tnotInArray,\n\tnotLike,\n\tor,\n} from './sql/expressions/index.ts';\nimport { type Placeholder, SQL, sql } from './sql/sql.ts';\nimport type { Assume, ColumnsWithTable, Equal, Simplify, ValueOrArray } from './utils.ts';\n\nexport abstract class Relation<TTableName extends string = string> {\n\tstatic readonly [entityKind]: string = 'Relation';\n\n\tdeclare readonly $brand: 'Relation';\n\treadonly referencedTableName: TTableName;\n\tfieldName!: string;\n\n\tconstructor(\n\t\treadonly sourceTable: Table,\n\t\treadonly referencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly relationName: string | undefined,\n\t) {\n\t\tthis.referencedTableName = referencedTable[Table.Symbol.Name] as TTableName;\n\t}\n\n\tabstract withFieldName(fieldName: string): Relation<TTableName>;\n}\n\nexport class Relations<\n\tTTableName extends string = string,\n\tTConfig extends Record<string, Relation> = Record<string, Relation>,\n> {\n\tstatic readonly [entityKind]: string = 'Relations';\n\n\tdeclare readonly $brand: 'Relations';\n\n\tconstructor(\n\t\treadonly table: AnyTable<{ name: TTableName }>,\n\t\treadonly config: (helpers: TableRelationsHelpers<TTableName>) => TConfig,\n\t) {}\n}\n\nexport class One<\n\tTTableName extends string = string,\n\tTIsNullable extends boolean = boolean,\n> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'One';\n\n\tdeclare protected $relationBrand: 'One';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config:\n\t\t\t| RelationConfig<\n\t\t\t\tTTableName,\n\t\t\t\tstring,\n\t\t\t\tAnyColumn<{ tableName: TTableName }>[]\n\t\t\t>\n\t\t\t| undefined,\n\t\treadonly isNullable: TIsNullable,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): One<TTableName> {\n\t\tconst relation = new One(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t\tthis.isNullable,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport class Many<TTableName extends string> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'Many';\n\n\tdeclare protected $relationBrand: 'Many';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config: { relationName: string } | undefined,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): Many<TTableName> {\n\t\tconst relation = new Many(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport type TableRelationsKeysOnly<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n\tK extends keyof TSchema,\n> = TSchema[K] extends Relations<TTableName> ? K : never;\n\nexport type ExtractTableRelationsFromSchema<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TableRelationsKeysOnly<\n\t\t\t\tTSchema,\n\t\t\t\tTTableName,\n\t\t\t\tK\n\t\t\t>\n\t\t]: TSchema[K] extends Relations<TTableName, infer TConfig> ? TConfig : never;\n\t}\n>;\n\nexport type ExtractObjectValues<T> = T[keyof T];\n\nexport type ExtractRelationsFromTableExtraConfigSchema<\n\tTConfig extends unknown[],\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TConfig as TConfig[K] extends Relations<any> ? K\n\t\t\t\t: never\n\t\t]: TConfig[K] extends Relations<infer TRelationConfig> ? TRelationConfig\n\t\t\t: never;\n\t}\n>;\n\nexport function getOperators() {\n\treturn {\n\t\tand,\n\t\tbetween,\n\t\teq,\n\t\texists,\n\t\tgt,\n\t\tgte,\n\t\tilike,\n\t\tinArray,\n\t\tisNull,\n\t\tisNotNull,\n\t\tlike,\n\t\tlt,\n\t\tlte,\n\t\tne,\n\t\tnot,\n\t\tnotBetween,\n\t\tnotExists,\n\t\tnotLike,\n\t\tnotIlike,\n\t\tnotInArray,\n\t\tor,\n\t\tsql,\n\t};\n}\n\nexport type Operators = ReturnType<typeof getOperators>;\n\nexport function getOrderByOperators() {\n\treturn {\n\t\tsql,\n\t\tasc,\n\t\tdesc,\n\t};\n}\n\nexport type OrderByOperators = ReturnType<typeof getOrderByOperators>;\n\nexport type FindTableByDBName<\n\tTSchema extends TablesRelationalConfig,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TSchema[K]['dbName'] extends TTableName ? K\n\t\t\t\t: never\n\t\t]: TSchema[K];\n\t}\n>;\n\nexport type DBQueryConfig<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTIsRoot extends boolean = boolean,\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> =\n\t& {\n\t\tcolumns?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['columns']]?: boolean;\n\t\t\t}\n\t\t\t| undefined;\n\t\twith?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['relations']]?:\n\t\t\t\t\t| true\n\t\t\t\t\t| DBQueryConfig<\n\t\t\t\t\t\tTTableConfig['relations'][K] extends One ? 'one' : 'many',\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\tFindTableByDBName<\n\t\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\t\tTTableConfig['relations'][K]['referencedTableName']\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\t| undefined;\n\t\t\t}\n\t\t\t| undefined;\n\t\textras?:\n\t\t\t| Record<string, SQL.Aliased>\n\t\t\t| ((\n\t\t\t\tfields: Simplify<\n\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t>,\n\t\t\t\toperators: { sql: Operators['sql'] },\n\t\t\t) => Record<string, SQL.Aliased>)\n\t\t\t| undefined;\n\t}\n\t& (TRelationType extends 'many' ?\n\t\t\t& {\n\t\t\t\twhere?:\n\t\t\t\t\t| SQL\n\t\t\t\t\t| undefined\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: Operators,\n\t\t\t\t\t) => SQL | undefined);\n\t\t\t\torderBy?:\n\t\t\t\t\t| ValueOrArray<AnyColumn | SQL>\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: OrderByOperators,\n\t\t\t\t\t) => ValueOrArray<AnyColumn | SQL>)\n\t\t\t\t\t| undefined;\n\t\t\t\tlimit?: number | Placeholder | undefined;\n\t\t\t}\n\t\t\t& (TIsRoot extends true ? {\n\t\t\t\t\toffset?: number | Placeholder | undefined;\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t: {});\n\nexport interface TableRelationalConfig {\n\ttsName: string;\n\tdbName: string;\n\tcolumns: Record<string, Column>;\n\trelations: Record<string, Relation>;\n\tprimaryKey: AnyColumn[];\n\tschema?: string;\n}\n\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\nexport interface RelationalSchemaConfig<\n\tTSchema extends TablesRelationalConfig,\n> {\n\tfullSchema: Record<string, unknown>;\n\tschema: TSchema;\n\ttableNamesMap: Record<string, string>;\n}\n\nexport type ExtractTablesWithRelations<\n\tTSchema extends Record<string, unknown>,\n> = {\n\t[\n\t\tK in keyof TSchema as TSchema[K] extends Table ? K\n\t\t\t: never\n\t]: TSchema[K] extends Table ? {\n\t\t\ttsName: K & string;\n\t\t\tdbName: TSchema[K]['_']['name'];\n\t\t\tcolumns: TSchema[K]['_']['columns'];\n\t\t\trelations: ExtractTableRelationsFromSchema<\n\t\t\t\tTSchema,\n\t\t\t\tTSchema[K]['_']['name']\n\t\t\t>;\n\t\t\tprimaryKey: AnyColumn[];\n\t\t}\n\t\t: never;\n};\n\nexport type ReturnTypeOrValue<T> = T extends (...args: any[]) => infer R ? R\n\t: T;\n\nexport type BuildRelationResult<\n\tTSchema extends TablesRelationalConfig,\n\tTInclude,\n\tTRelations extends Record<string, Relation>,\n> = {\n\t[\n\t\tK in\n\t\t\t& NonUndefinedKeysOnly<TInclude>\n\t\t\t& keyof TRelations\n\t]: TRelations[K] extends infer TRel extends Relation ? BuildQueryResult<\n\t\t\tTSchema,\n\t\t\tFindTableByDBName<TSchema, TRel['referencedTableName']>,\n\t\t\tAssume<TInclude[K], true | Record<string, unknown>>\n\t\t> extends infer TResult ? TRel extends One ?\n\t\t\t\t\t| TResult\n\t\t\t\t\t| (Equal<TRel['isNullable'], false> extends true ? null : never)\n\t\t\t: TResult[]\n\t\t: never\n\t\t: never;\n};\n\nexport type NonUndefinedKeysOnly<T> =\n\t& ExtractObjectValues<\n\t\t{\n\t\t\t[K in keyof T as T[K] extends undefined ? never : K]: K;\n\t\t}\n\t>\n\t& keyof T;\n\nexport type BuildQueryResult<\n\tTSchema extends TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig,\n\tTFullSelection extends true | Record<string, unknown>,\n> = Equal<TFullSelection, true> extends true ? InferModelFromColumns<TTableConfig['columns']>\n\t: TFullSelection extends Record<string, unknown> ? Simplify<\n\t\t\t& (TFullSelection['columns'] extends Record<string, unknown> ? InferModelFromColumns<\n\t\t\t\t\t{\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tK in Equal<\n\t\t\t\t\t\t\t\tExclude<\n\t\t\t\t\t\t\t\t\tTFullSelection['columns'][\n\t\t\t\t\t\t\t\t\t\t& keyof TFullSelection['columns']\n\t\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t> extends true ? Exclude<\n\t\t\t\t\t\t\t\t\tkeyof TTableConfig['columns'],\n\t\t\t\t\t\t\t\t\tNonUndefinedKeysOnly<TFullSelection['columns']>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\t\t\t[K in keyof TFullSelection['columns']]: Equal<\n\t\t\t\t\t\t\t\t\t\t\tTFullSelection['columns'][K],\n\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t> extends true ? K\n\t\t\t\t\t\t\t\t\t\t\t: never;\n\t\t\t\t\t\t\t\t\t}[keyof TFullSelection['columns']]\n\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t]: TTableConfig['columns'][K];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t: InferModelFromColumns<TTableConfig['columns']>)\n\t\t\t& (TFullSelection['extras'] extends\n\t\t\t\t| Record<string, unknown>\n\t\t\t\t| ((...args: any[]) => Record<string, unknown>) ? {\n\t\t\t\t\t[\n\t\t\t\t\t\tK in NonUndefinedKeysOnly<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>\n\t\t\t\t\t\t>\n\t\t\t\t\t]: Assume<\n\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>[K],\n\t\t\t\t\t\tSQL.Aliased\n\t\t\t\t\t>['_']['type'];\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t\t& (TFullSelection['with'] extends Record<string, unknown> ? BuildRelationResult<\n\t\t\t\t\tTSchema,\n\t\t\t\t\tTFullSelection['with'],\n\t\t\t\t\tTTableConfig['relations']\n\t\t\t\t>\n\t\t\t\t: {})\n\t\t>\n\t: never;\n\nexport interface RelationConfig<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> {\n\trelationName?: string;\n\tfields: TColumns;\n\treferences: ColumnsWithTable<TTableName, TForeignTableName, TColumns>;\n}\n\nexport function extractTablesRelationalConfig<\n\tTTables extends TablesRelationalConfig,\n>(\n\tschema: Record<string, unknown>,\n\tconfigHelpers: (table: Table) => any,\n): { tables: TTables; tableNamesMap: Record<string, string> } {\n\tif (\n\t\tObject.keys(schema).length === 1\n\t\t&& 'default' in schema\n\t\t&& !is(schema['default'], Table)\n\t) {\n\t\tschema = schema['default'] as Record<string, unknown>;\n\t}\n\n\t// table DB name -> schema table key\n\tconst tableNamesMap: Record<string, string> = {};\n\t// Table relations found before their tables - need to buffer them until we know the schema table key\n\tconst relationsBuffer: Record<\n\t\tstring,\n\t\t{ relations: Record<string, Relation>; primaryKey?: AnyColumn[] }\n\t> = {};\n\tconst tablesConfig: TablesRelationalConfig = {};\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (is(value, Table)) {\n\t\t\tconst dbName = getTableUniqueName(value);\n\t\t\tconst bufferedRelations = relationsBuffer[dbName];\n\t\t\ttableNamesMap[dbName] = key;\n\t\t\ttablesConfig[key] = {\n\t\t\t\ttsName: key,\n\t\t\t\tdbName: value[Table.Symbol.Name],\n\t\t\t\tschema: value[Table.Symbol.Schema],\n\t\t\t\tcolumns: value[Table.Symbol.Columns],\n\t\t\t\trelations: bufferedRelations?.relations ?? {},\n\t\t\t\tprimaryKey: bufferedRelations?.primaryKey ?? [],\n\t\t\t};\n\n\t\t\t// Fill in primary keys\n\t\t\tfor (\n\t\t\t\tconst column of Object.values(\n\t\t\t\t\t(value as Table)[Table.Symbol.Columns],\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif (column.primary) {\n\t\t\t\t\ttablesConfig[key]!.primaryKey.push(column);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst extraConfig = value[Table.Symbol.ExtraConfigBuilder]?.((value as Table)[Table.Symbol.ExtraConfigColumns]);\n\t\t\tif (extraConfig) {\n\t\t\t\tfor (const configEntry of Object.values(extraConfig)) {\n\t\t\t\t\tif (is(configEntry, PrimaryKeyBuilder)) {\n\t\t\t\t\t\ttablesConfig[key]!.primaryKey.push(...configEntry.columns);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (is(value, Relations)) {\n\t\t\tconst dbName = getTableUniqueName(value.table);\n\t\t\tconst tableName = tableNamesMap[dbName];\n\t\t\tconst relations: Record<string, Relation> = value.config(\n\t\t\t\tconfigHelpers(value.table),\n\t\t\t);\n\t\t\tlet primaryKey: AnyColumn[] | undefined;\n\n\t\t\tfor (const [relationName, relation] of Object.entries(relations)) {\n\t\t\t\tif (tableName) {\n\t\t\t\t\tconst tableConfig = tablesConfig[tableName]!;\n\t\t\t\t\ttableConfig.relations[relationName] = relation;\n\t\t\t\t\tif (primaryKey) {\n\t\t\t\t\t\ttableConfig.primaryKey.push(...primaryKey);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!(dbName in relationsBuffer)) {\n\t\t\t\t\t\trelationsBuffer[dbName] = {\n\t\t\t\t\t\t\trelations: {},\n\t\t\t\t\t\t\tprimaryKey,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\trelationsBuffer[dbName]!.relations[relationName] = relation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { tables: tablesConfig as TTables, tableNamesMap };\n}\n\nexport function relations<\n\tTTableName extends string,\n\tTRelations extends Record<string, Relation<any>>,\n>(\n\ttable: AnyTable<{ name: TTableName }>,\n\trelations: (helpers: TableRelationsHelpers<TTableName>) => TRelations,\n): Relations<TTableName, TRelations> {\n\treturn new Relations<TTableName, TRelations>(\n\t\ttable,\n\t\t(helpers: TableRelationsHelpers<TTableName>) =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries(relations(helpers)).map(([key, value]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue.withFieldName(key),\n\t\t\t\t]),\n\t\t\t) as TRelations,\n\t);\n}\n\nexport function createOne<TTableName extends string>(sourceTable: Table) {\n\treturn function one<\n\t\tTForeignTable extends Table,\n\t\tTColumns extends [\n\t\t\tAnyColumn<{ tableName: TTableName }>,\n\t\t\t...AnyColumn<{ tableName: TTableName }>[],\n\t\t],\n\t>(\n\t\ttable: TForeignTable,\n\t\tconfig?: RelationConfig<TTableName, TForeignTable['_']['name'], TColumns>,\n\t): One<\n\t\tTForeignTable['_']['name'],\n\t\tEqual<TColumns[number]['_']['notNull'], true>\n\t> {\n\t\treturn new One(\n\t\t\tsourceTable,\n\t\t\ttable,\n\t\t\tconfig,\n\t\t\t(config?.fields.reduce<boolean>((res, f) => res && f.notNull, true)\n\t\t\t\t?? false) as Equal<TColumns[number]['_']['notNull'], true>,\n\t\t);\n\t};\n}\n\nexport function createMany(sourceTable: Table) {\n\treturn function many<TForeignTable extends Table>(\n\t\treferencedTable: TForeignTable,\n\t\tconfig?: { relationName: string },\n\t): Many<TForeignTable['_']['name']> {\n\t\treturn new Many(sourceTable, referencedTable, config);\n\t};\n}\n\nexport interface NormalizedRelation {\n\tfields: AnyColumn[];\n\treferences: AnyColumn[];\n}\n\nexport function normalizeRelation(\n\tschema: TablesRelationalConfig,\n\ttableNamesMap: Record<string, string>,\n\trelation: Relation,\n): NormalizedRelation {\n\tif (is(relation, One) && relation.config) {\n\t\treturn {\n\t\t\tfields: relation.config.fields,\n\t\t\treferences: relation.config.references,\n\t\t};\n\t}\n\n\tconst referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];\n\tif (!referencedTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${relation.referencedTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst referencedTableConfig = schema[referencedTableTsName];\n\tif (!referencedTableConfig) {\n\t\tthrow new Error(`Table \"${referencedTableTsName}\" not found in schema`);\n\t}\n\n\tconst sourceTable = relation.sourceTable;\n\tconst sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];\n\tif (!sourceTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${sourceTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst reverseRelations: Relation[] = [];\n\tfor (\n\t\tconst referencedTableRelation of Object.values(\n\t\t\treferencedTableConfig.relations,\n\t\t)\n\t) {\n\t\tif (\n\t\t\t(relation.relationName\n\t\t\t\t&& relation !== referencedTableRelation\n\t\t\t\t&& referencedTableRelation.relationName === relation.relationName)\n\t\t\t|| (!relation.relationName\n\t\t\t\t&& referencedTableRelation.referencedTable === relation.sourceTable)\n\t\t) {\n\t\t\treverseRelations.push(referencedTableRelation);\n\t\t}\n\t}\n\n\tif (reverseRelations.length > 1) {\n\t\tthrow relation.relationName\n\t\t\t? new Error(\n\t\t\t\t`There are multiple relations with name \"${relation.relationName}\" in table \"${referencedTableTsName}\"`,\n\t\t\t)\n\t\t\t: new Error(\n\t\t\t\t`There are multiple relations between \"${referencedTableTsName}\" and \"${\n\t\t\t\t\trelation.sourceTable[Table.Symbol.Name]\n\t\t\t\t}\". Please specify relation name`,\n\t\t\t);\n\t}\n\n\tif (\n\t\treverseRelations[0]\n\t\t&& is(reverseRelations[0], One)\n\t\t&& reverseRelations[0].config\n\t) {\n\t\treturn {\n\t\t\tfields: reverseRelations[0].config.references,\n\t\t\treferences: reverseRelations[0].config.fields,\n\t\t};\n\t}\n\n\tthrow new Error(\n\t\t`There is not enough information to infer relation \"${sourceTableTsName}.${relation.fieldName}\"`,\n\t);\n}\n\nexport function createTableRelationsHelpers<TTableName extends string>(\n\tsourceTable: AnyTable<{ name: TTableName }>,\n) {\n\treturn {\n\t\tone: createOne<TTableName>(sourceTable),\n\t\tmany: createMany(sourceTable),\n\t};\n}\n\nexport type TableRelationsHelpers<TTableName extends string> = ReturnType<\n\ttypeof createTableRelationsHelpers<TTableName>\n>;\n\nexport interface BuildRelationalQueryResult<\n\tTTable extends Table = Table,\n\tTColumn extends Column = Column,\n> {\n\ttableTsKey: string;\n\tselection: {\n\t\tdbKey: string;\n\t\ttsKey: string;\n\t\tfield: TColumn | SQL | SQL.Aliased;\n\t\trelationTableTsKey: string | undefined;\n\t\tisJson: boolean;\n\t\tisExtra?: boolean;\n\t\tselection: BuildRelationalQueryResult<TTable>['selection'];\n\t}[];\n\tsql: TTable | SQL;\n}\n\nexport function mapRelationalRow(\n\ttablesConfig: TablesRelationalConfig,\n\ttableConfig: TableRelationalConfig,\n\trow: unknown[],\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue: (value: unknown) => unknown = (value) => value,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (\n\t\tconst [\n\t\t\tselectionItemIndex,\n\t\t\tselectionItem,\n\t\t] of buildQueryResultSelection.entries()\n\t) {\n\t\tif (selectionItem.isJson) {\n\t\t\tconst relation = tableConfig.relations[selectionItem.tsKey]!;\n\t\t\tconst rawSubRows = row[selectionItemIndex] as\n\t\t\t\t| unknown[]\n\t\t\t\t| null\n\t\t\t\t| [null]\n\t\t\t\t| string;\n\t\t\tconst subRows = typeof rawSubRows === 'string'\n\t\t\t\t? (JSON.parse(rawSubRows) as unknown[])\n\t\t\t\t: rawSubRows;\n\t\t\tresult[selectionItem.tsKey] = is(relation, One)\n\t\t\t\t? subRows\n\t\t\t\t\t&& mapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRows,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t: (subRows as unknown[][]).map((subRow) =>\n\t\t\t\t\tmapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRow,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t} else {\n\t\t\tconst value = mapColumnValue(row[selectionItemIndex]);\n\t\t\tconst field = selectionItem.field!;\n\t\t\tlet decoder;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tresult[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);\n\t\t}\n\t}\n\n\treturn result;\n}\n"],"mappings":"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","names":["relations"]}
1
+ {"version":3,"sources":["../src/_relations.ts"],"sourcesContent":["import { type AnyTable, getTableUniqueName, type InferModelFromColumns, Table } from '~/table.ts';\nimport { type AnyColumn, Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { PrimaryKeyBuilder } from './pg-core/primary-keys.ts';\nimport {\n\tand,\n\tasc,\n\tbetween,\n\tdesc,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tisNotNull,\n\tisNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotIlike,\n\tnotInArray,\n\tnotLike,\n\tor,\n} from './sql/expressions/index.ts';\nimport { type Placeholder, SQL, sql } from './sql/sql.ts';\nimport type { Assume, ColumnsWithTable, Equal, Simplify, ValueOrArray } from './utils.ts';\n\nexport abstract class Relation<TTableName extends string = string> {\n\tstatic readonly [entityKind]: string = 'Relation';\n\n\tdeclare readonly $brand: 'Relation';\n\treadonly referencedTableName: TTableName;\n\tfieldName!: string;\n\n\tconstructor(\n\t\treadonly sourceTable: Table,\n\t\treadonly referencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly relationName: string | undefined,\n\t) {\n\t\tthis.referencedTableName = referencedTable[Table.Symbol.Name] as TTableName;\n\t}\n\n\tabstract withFieldName(fieldName: string): Relation<TTableName>;\n}\n\nexport class Relations<\n\tTTableName extends string = string,\n\tTConfig extends Record<string, Relation> = Record<string, Relation>,\n> {\n\tstatic readonly [entityKind]: string = 'Relations';\n\n\tdeclare readonly $brand: 'Relations';\n\n\tconstructor(\n\t\treadonly table: AnyTable<{ name: TTableName }>,\n\t\treadonly config: (helpers: TableRelationsHelpers<TTableName>) => TConfig,\n\t) {}\n}\n\nexport class One<\n\tTTableName extends string = string,\n\tTIsNullable extends boolean = boolean,\n> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'One';\n\n\tdeclare protected $relationBrand: 'One';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config:\n\t\t\t| RelationConfig<\n\t\t\t\tTTableName,\n\t\t\t\tstring,\n\t\t\t\tAnyColumn<{ tableName: TTableName }>[]\n\t\t\t>\n\t\t\t| undefined,\n\t\treadonly isNullable: TIsNullable,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): One<TTableName> {\n\t\tconst relation = new One(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t\tthis.isNullable,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport class Many<TTableName extends string> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'Many';\n\n\tdeclare protected $relationBrand: 'Many';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config: { relationName: string } | undefined,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): Many<TTableName> {\n\t\tconst relation = new Many(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport type TableRelationsKeysOnly<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n\tK extends keyof TSchema,\n> = TSchema[K] extends Relations<TTableName> ? K : never;\n\nexport type ExtractTableRelationsFromSchema<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TableRelationsKeysOnly<\n\t\t\t\tTSchema,\n\t\t\t\tTTableName,\n\t\t\t\tK\n\t\t\t>\n\t\t]: TSchema[K] extends Relations<TTableName, infer TConfig> ? TConfig : never;\n\t}\n>;\n\nexport type ExtractObjectValues<T> = T[keyof T];\n\nexport type ExtractRelationsFromTableExtraConfigSchema<\n\tTConfig extends unknown[],\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TConfig as TConfig[K] extends Relations<any> ? K\n\t\t\t\t: never\n\t\t]: TConfig[K] extends Relations<infer TRelationConfig> ? TRelationConfig\n\t\t\t: never;\n\t}\n>;\n\nexport function getOperators() {\n\treturn {\n\t\tand,\n\t\tbetween,\n\t\teq,\n\t\texists,\n\t\tgt,\n\t\tgte,\n\t\tilike,\n\t\tinArray,\n\t\tisNull,\n\t\tisNotNull,\n\t\tlike,\n\t\tlt,\n\t\tlte,\n\t\tne,\n\t\tnot,\n\t\tnotBetween,\n\t\tnotExists,\n\t\tnotLike,\n\t\tnotIlike,\n\t\tnotInArray,\n\t\tor,\n\t\tsql,\n\t};\n}\n\nexport type Operators = ReturnType<typeof getOperators>;\n\nexport function getOrderByOperators() {\n\treturn {\n\t\tsql,\n\t\tasc,\n\t\tdesc,\n\t};\n}\n\nexport type OrderByOperators = ReturnType<typeof getOrderByOperators>;\n\nexport type FindTableByDBName<\n\tTSchema extends TablesRelationalConfig,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TSchema[K]['dbName'] extends TTableName ? K\n\t\t\t\t: never\n\t\t]: TSchema[K];\n\t}\n>;\n\nexport type DBQueryConfig<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTIsRoot extends boolean = boolean,\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> =\n\t& {\n\t\tcolumns?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['columns']]?: boolean;\n\t\t\t}\n\t\t\t| undefined;\n\t\twith?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['relations']]?:\n\t\t\t\t\t| true\n\t\t\t\t\t| DBQueryConfig<\n\t\t\t\t\t\tTTableConfig['relations'][K] extends One ? 'one' : 'many',\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\tFindTableByDBName<\n\t\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\t\tTTableConfig['relations'][K]['referencedTableName']\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\t| undefined;\n\t\t\t}\n\t\t\t| undefined;\n\t\textras?:\n\t\t\t| Record<string, SQL.Aliased>\n\t\t\t| ((\n\t\t\t\tfields: Simplify<\n\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t>,\n\t\t\t\toperators: { sql: Operators['sql'] },\n\t\t\t) => Record<string, SQL.Aliased>)\n\t\t\t| undefined;\n\t}\n\t& (TRelationType extends 'many' ?\n\t\t\t& {\n\t\t\t\twhere?:\n\t\t\t\t\t| SQL\n\t\t\t\t\t| undefined\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: Operators,\n\t\t\t\t\t) => SQL | undefined);\n\t\t\t\torderBy?:\n\t\t\t\t\t| ValueOrArray<AnyColumn | SQL>\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: OrderByOperators,\n\t\t\t\t\t) => ValueOrArray<AnyColumn | SQL>)\n\t\t\t\t\t| undefined;\n\t\t\t\tlimit?: number | Placeholder | undefined;\n\t\t\t}\n\t\t\t& (TIsRoot extends true ? {\n\t\t\t\t\toffset?: number | Placeholder | undefined;\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t: {});\n\nexport interface TableRelationalConfig {\n\ttsName: string;\n\tdbName: string;\n\tcolumns: Record<string, Column>;\n\trelations: Record<string, Relation>;\n\tprimaryKey: AnyColumn[];\n\tschema?: string;\n}\n\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\nexport interface RelationalSchemaConfig<\n\tTSchema extends TablesRelationalConfig,\n> {\n\tfullSchema: Record<string, unknown>;\n\tschema: TSchema;\n\ttableNamesMap: Record<string, string>;\n}\n\nexport type ExtractTablesWithRelations<\n\tTSchema extends Record<string, unknown>,\n> = {\n\t[\n\t\tK in keyof TSchema as TSchema[K] extends Table ? K\n\t\t\t: never\n\t]: TSchema[K] extends Table ? {\n\t\t\ttsName: K & string;\n\t\t\tdbName: TSchema[K]['_']['name'];\n\t\t\tcolumns: TSchema[K]['_']['columns'];\n\t\t\trelations: ExtractTableRelationsFromSchema<\n\t\t\t\tTSchema,\n\t\t\t\tTSchema[K]['_']['name']\n\t\t\t>;\n\t\t\tprimaryKey: AnyColumn[];\n\t\t}\n\t\t: never;\n};\n\nexport type ReturnTypeOrValue<T> = T extends (...args: any[]) => infer R ? R\n\t: T;\n\nexport type BuildRelationResult<\n\tTSchema extends TablesRelationalConfig,\n\tTInclude,\n\tTRelations extends Record<string, Relation>,\n> = {\n\t[\n\t\tK in\n\t\t\t& NonUndefinedKeysOnly<TInclude>\n\t\t\t& keyof TRelations\n\t]: TRelations[K] extends infer TRel extends Relation ? BuildQueryResult<\n\t\t\tTSchema,\n\t\t\tFindTableByDBName<TSchema, TRel['referencedTableName']>,\n\t\t\tAssume<TInclude[K], true | Record<string, unknown>>\n\t\t> extends infer TResult ? TRel extends One ?\n\t\t\t\t\t| TResult\n\t\t\t\t\t| (Equal<TRel['isNullable'], false> extends true ? null : never)\n\t\t\t: TResult[]\n\t\t: never\n\t\t: never;\n};\n\nexport type NonUndefinedKeysOnly<T> =\n\t& ExtractObjectValues<\n\t\t{\n\t\t\t[K in keyof T as T[K] extends undefined ? never : K]: K;\n\t\t}\n\t>\n\t& keyof T;\n\nexport type BuildQueryResult<\n\tTSchema extends TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig,\n\tTFullSelection extends true | Record<string, unknown>,\n> = Equal<TFullSelection, true> extends true ? InferModelFromColumns<TTableConfig['columns']>\n\t: TFullSelection extends Record<string, unknown> ? Simplify<\n\t\t\t& (TFullSelection['columns'] extends Record<string, unknown> ? InferModelFromColumns<\n\t\t\t\t\t{\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tK in Equal<\n\t\t\t\t\t\t\t\tExclude<\n\t\t\t\t\t\t\t\t\tTFullSelection['columns'][\n\t\t\t\t\t\t\t\t\t\t& keyof TFullSelection['columns']\n\t\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t> extends true ? Exclude<\n\t\t\t\t\t\t\t\t\tkeyof TTableConfig['columns'],\n\t\t\t\t\t\t\t\t\tNonUndefinedKeysOnly<TFullSelection['columns']>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\t\t\t[K in keyof TFullSelection['columns']]: Equal<\n\t\t\t\t\t\t\t\t\t\t\tTFullSelection['columns'][K],\n\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t> extends true ? K\n\t\t\t\t\t\t\t\t\t\t\t: never;\n\t\t\t\t\t\t\t\t\t}[keyof TFullSelection['columns']]\n\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t]: TTableConfig['columns'][K];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t: InferModelFromColumns<TTableConfig['columns']>)\n\t\t\t& (TFullSelection['extras'] extends\n\t\t\t\t| Record<string, unknown>\n\t\t\t\t| ((...args: any[]) => Record<string, unknown>) ? {\n\t\t\t\t\t[\n\t\t\t\t\t\tK in NonUndefinedKeysOnly<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>\n\t\t\t\t\t\t>\n\t\t\t\t\t]: Assume<\n\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>[K],\n\t\t\t\t\t\tSQL.Aliased\n\t\t\t\t\t>['_']['type'];\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t\t& (TFullSelection['with'] extends Record<string, unknown> ? BuildRelationResult<\n\t\t\t\t\tTSchema,\n\t\t\t\t\tTFullSelection['with'],\n\t\t\t\t\tTTableConfig['relations']\n\t\t\t\t>\n\t\t\t\t: {})\n\t\t>\n\t: never;\n\nexport interface RelationConfig<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> {\n\trelationName?: string;\n\tfields: TColumns;\n\treferences: ColumnsWithTable<TTableName, TForeignTableName, TColumns>;\n}\n\nexport function extractTablesRelationalConfig<\n\tTTables extends TablesRelationalConfig,\n>(\n\tschema: Record<string, unknown>,\n\tconfigHelpers: (table: Table) => any,\n): { tables: TTables; tableNamesMap: Record<string, string> } {\n\tif (\n\t\tObject.keys(schema).length === 1\n\t\t&& 'default' in schema\n\t\t&& !is(schema['default'], Table)\n\t) {\n\t\tschema = schema['default'] as Record<string, unknown>;\n\t}\n\n\t// table DB name -> schema table key\n\tconst tableNamesMap: Record<string, string> = {};\n\t// Table relations found before their tables - need to buffer them until we know the schema table key\n\tconst relationsBuffer: Record<\n\t\tstring,\n\t\t{ relations: Record<string, Relation>; primaryKey?: AnyColumn[] }\n\t> = {};\n\tconst tablesConfig: TablesRelationalConfig = {};\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (is(value, Table)) {\n\t\t\tconst dbName = getTableUniqueName(value);\n\t\t\tconst bufferedRelations = relationsBuffer[dbName];\n\t\t\ttableNamesMap[dbName] = key;\n\t\t\ttablesConfig[key] = {\n\t\t\t\ttsName: key,\n\t\t\t\tdbName: value[Table.Symbol.Name],\n\t\t\t\tschema: value[Table.Symbol.Schema],\n\t\t\t\tcolumns: value[Table.Symbol.Columns],\n\t\t\t\trelations: bufferedRelations?.relations ?? {},\n\t\t\t\tprimaryKey: bufferedRelations?.primaryKey ?? [],\n\t\t\t};\n\n\t\t\t// Fill in primary keys\n\t\t\tfor (\n\t\t\t\tconst column of Object.values(\n\t\t\t\t\t(value as Table)[Table.Symbol.Columns],\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif (column.primary) {\n\t\t\t\t\ttablesConfig[key]!.primaryKey.push(column);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst extraConfig = value[Table.Symbol.ExtraConfigBuilder]?.((value as Table)[Table.Symbol.ExtraConfigColumns]);\n\t\t\tif (extraConfig) {\n\t\t\t\tfor (const configEntry of Object.values(extraConfig)) {\n\t\t\t\t\tif (is(configEntry, PrimaryKeyBuilder)) {\n\t\t\t\t\t\ttablesConfig[key]!.primaryKey.push(...configEntry.columns);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (is(value, Relations)) {\n\t\t\tconst dbName = getTableUniqueName(value.table);\n\t\t\tconst tableName = tableNamesMap[dbName];\n\t\t\tconst relations: Record<string, Relation> = value.config(\n\t\t\t\tconfigHelpers(value.table),\n\t\t\t);\n\t\t\tlet primaryKey: AnyColumn[] | undefined;\n\n\t\t\tfor (const [relationName, relation] of Object.entries(relations)) {\n\t\t\t\tif (tableName) {\n\t\t\t\t\tconst tableConfig = tablesConfig[tableName]!;\n\t\t\t\t\ttableConfig.relations[relationName] = relation;\n\t\t\t\t\tif (primaryKey) {\n\t\t\t\t\t\ttableConfig.primaryKey.push(...primaryKey);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!(dbName in relationsBuffer)) {\n\t\t\t\t\t\trelationsBuffer[dbName] = {\n\t\t\t\t\t\t\trelations: {},\n\t\t\t\t\t\t\tprimaryKey,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\trelationsBuffer[dbName]!.relations[relationName] = relation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { tables: tablesConfig as TTables, tableNamesMap };\n}\n\nexport function relations<\n\tTTableName extends string,\n\tTRelations extends Record<string, Relation<any>>,\n>(\n\ttable: AnyTable<{ name: TTableName }>,\n\trelations: (helpers: TableRelationsHelpers<TTableName>) => TRelations,\n): Relations<TTableName, TRelations> {\n\treturn new Relations<TTableName, TRelations>(\n\t\ttable,\n\t\t(helpers: TableRelationsHelpers<TTableName>) =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries(relations(helpers)).map(([key, value]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue.withFieldName(key),\n\t\t\t\t]),\n\t\t\t) as TRelations,\n\t);\n}\n\nexport function createOne<TTableName extends string>(sourceTable: Table) {\n\treturn function one<\n\t\tTForeignTable extends Table,\n\t\tTColumns extends [\n\t\t\tAnyColumn<{ tableName: TTableName }>,\n\t\t\t...AnyColumn<{ tableName: TTableName }>[],\n\t\t],\n\t>(\n\t\ttable: TForeignTable,\n\t\tconfig?: RelationConfig<TTableName, TForeignTable['_']['name'], TColumns>,\n\t): One<\n\t\tTForeignTable['_']['name'],\n\t\tEqual<TColumns[number]['_']['notNull'], true>\n\t> {\n\t\treturn new One(\n\t\t\tsourceTable,\n\t\t\ttable,\n\t\t\tconfig,\n\t\t\t(config?.fields.reduce<boolean>((res, f) => res && f.notNull, true)\n\t\t\t\t?? false) as Equal<TColumns[number]['_']['notNull'], true>,\n\t\t);\n\t};\n}\n\nexport function createMany(sourceTable: Table) {\n\treturn function many<TForeignTable extends Table>(\n\t\treferencedTable: TForeignTable,\n\t\tconfig?: { relationName: string },\n\t): Many<TForeignTable['_']['name']> {\n\t\treturn new Many(sourceTable, referencedTable, config);\n\t};\n}\n\nexport interface NormalizedRelation {\n\tfields: AnyColumn[];\n\treferences: AnyColumn[];\n}\n\nexport function normalizeRelation(\n\tschema: TablesRelationalConfig,\n\ttableNamesMap: Record<string, string>,\n\trelation: Relation,\n): NormalizedRelation {\n\tif (is(relation, One) && relation.config) {\n\t\treturn {\n\t\t\tfields: relation.config.fields,\n\t\t\treferences: relation.config.references,\n\t\t};\n\t}\n\n\tconst referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];\n\tif (!referencedTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${relation.referencedTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst referencedTableConfig = schema[referencedTableTsName];\n\tif (!referencedTableConfig) {\n\t\tthrow new Error(`Table \"${referencedTableTsName}\" not found in schema`);\n\t}\n\n\tconst sourceTable = relation.sourceTable;\n\tconst sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];\n\tif (!sourceTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${sourceTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst reverseRelations: Relation[] = [];\n\tfor (\n\t\tconst referencedTableRelation of Object.values(\n\t\t\treferencedTableConfig.relations,\n\t\t)\n\t) {\n\t\tif (\n\t\t\t(relation.relationName\n\t\t\t\t&& relation !== referencedTableRelation\n\t\t\t\t&& referencedTableRelation.relationName === relation.relationName)\n\t\t\t|| (!relation.relationName\n\t\t\t\t&& referencedTableRelation.referencedTable === relation.sourceTable)\n\t\t) {\n\t\t\treverseRelations.push(referencedTableRelation);\n\t\t}\n\t}\n\n\tif (reverseRelations.length > 1) {\n\t\tthrow relation.relationName\n\t\t\t? new Error(\n\t\t\t\t`There are multiple relations with name \"${relation.relationName}\" in table \"${referencedTableTsName}\"`,\n\t\t\t)\n\t\t\t: new Error(\n\t\t\t\t`There are multiple relations between \"${referencedTableTsName}\" and \"${\n\t\t\t\t\trelation.sourceTable[Table.Symbol.Name]\n\t\t\t\t}\". Please specify relation name`,\n\t\t\t);\n\t}\n\n\tif (\n\t\treverseRelations[0]\n\t\t&& is(reverseRelations[0], One)\n\t\t&& reverseRelations[0].config\n\t) {\n\t\treturn {\n\t\t\tfields: reverseRelations[0].config.references,\n\t\t\treferences: reverseRelations[0].config.fields,\n\t\t};\n\t}\n\n\tthrow new Error(\n\t\t`There is not enough information to infer relation \"${sourceTableTsName}.${relation.fieldName}\"`,\n\t);\n}\n\nexport function createTableRelationsHelpers<TTableName extends string>(\n\tsourceTable: AnyTable<{ name: TTableName }>,\n) {\n\treturn {\n\t\tone: createOne<TTableName>(sourceTable),\n\t\tmany: createMany(sourceTable),\n\t};\n}\n\nexport type TableRelationsHelpers<TTableName extends string> = ReturnType<\n\ttypeof createTableRelationsHelpers<TTableName>\n>;\n\nexport interface BuildRelationalQueryResult<\n\tTTable extends Table = Table,\n\tTColumn extends Column = Column,\n> {\n\ttableTsKey: string;\n\tselection: {\n\t\tdbKey: string;\n\t\ttsKey: string;\n\t\tfield: TColumn | SQL | SQL.Aliased;\n\t\trelationTableTsKey: string | undefined;\n\t\tisJson: boolean;\n\t\tisExtra?: boolean;\n\t\tselection: BuildRelationalQueryResult<TTable>['selection'];\n\t}[];\n\tsql: TTable | SQL;\n}\n\nexport function mapRelationalRow(\n\ttablesConfig: TablesRelationalConfig,\n\ttableConfig: TableRelationalConfig,\n\trow: unknown[],\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue: (value: unknown) => unknown = (value) => value,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (\n\t\tconst [\n\t\t\tselectionItemIndex,\n\t\t\tselectionItem,\n\t\t] of buildQueryResultSelection.entries()\n\t) {\n\t\tif (selectionItem.isJson) {\n\t\t\tconst relation = tableConfig.relations[selectionItem.tsKey]!;\n\t\t\tconst rawSubRows = row[selectionItemIndex] as\n\t\t\t\t| unknown[]\n\t\t\t\t| null\n\t\t\t\t| [null]\n\t\t\t\t| string;\n\t\t\tconst subRows = typeof rawSubRows === 'string'\n\t\t\t\t? (JSON.parse(rawSubRows) as unknown[])\n\t\t\t\t: rawSubRows;\n\t\t\tresult[selectionItem.tsKey] = is(relation, One)\n\t\t\t\t? subRows\n\t\t\t\t\t&& mapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRows,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t: (subRows as unknown[][]).map((subRow) =>\n\t\t\t\t\tmapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRow,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t} else {\n\t\t\tconst value = mapColumnValue(row[selectionItemIndex]);\n\t\t\tconst field = selectionItem.field!;\n\t\t\tlet decoder;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tresult[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function mapRelationalRowFromObj(\n\ttablesConfig: TablesRelationalConfig,\n\ttableConfig: TableRelationalConfig,\n\trow: unknown[],\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue: (value: unknown) => unknown = (value) => value,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (\n\t\tconst [\n\t\t\tselectionItemIndex,\n\t\t\tselectionItem,\n\t\t] of buildQueryResultSelection.entries()\n\t) {\n\t\tif (selectionItem.isJson) {\n\t\t\tconst relation = tableConfig.relations[selectionItem.tsKey]!;\n\t\t\tconst isOne = is(relation, One);\n\t\t\tconst rawSubRows = row[selectionItemIndex] as unknown[] | null | [null] | string;\n\n\t\t\tlet subRows = rawSubRows as unknown[] | null;\n\t\t\tif (subRows || Array.isArray(subRows)) {\n\t\t\t\tsubRows = (typeof rawSubRows === 'string' ? JSON.parse(rawSubRows) : rawSubRows) as unknown[];\n\n\t\t\t\tsubRows = isOne\n\t\t\t\t\t? subRows.flatMap((r) => Array.isArray(r) ? r : Object.values(r as any))\n\t\t\t\t\t: subRows.map((r) => Array.isArray(r) ? r : Object.values(r as any));\n\t\t\t}\n\n\t\t\tresult[selectionItem.tsKey] = isOne\n\t\t\t\t? subRows\n\t\t\t\t\t&& mapRelationalRowFromObj(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRows,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t: ((subRows ?? []) as unknown[][]).map((subRow) =>\n\t\t\t\t\tmapRelationalRowFromObj(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRow,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t} else {\n\t\t\tconst value = mapColumnValue(row[selectionItemIndex]);\n\t\t\tconst field = selectionItem.field!;\n\t\t\tlet decoder;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tresult[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);\n\t\t}\n\t}\n\n\treturn result;\n}\n"],"mappings":"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","names":["relations"]}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var driver_exports = {};
30
+ __export(driver_exports, {
31
+ NodeCockroachDatabase: () => NodeCockroachDatabase,
32
+ NodeCockroachDriver: () => NodeCockroachDriver,
33
+ drizzle: () => drizzle
34
+ });
35
+ module.exports = __toCommonJS(driver_exports);
36
+ var import_pg = __toESM(require("pg"), 1);
37
+ var V1 = __toESM(require("../_relations.cjs"), 1);
38
+ var import_db = require("../cockroach-core/db.cjs");
39
+ var import_dialect = require("../cockroach-core/dialect.cjs");
40
+ var import_entity = require("../entity.cjs");
41
+ var import_logger = require("../logger.cjs");
42
+ var import_utils = require("../utils.cjs");
43
+ var import_session = require("./session.cjs");
44
+ class NodeCockroachDriver {
45
+ constructor(client, dialect, options = {}) {
46
+ this.client = client;
47
+ this.dialect = dialect;
48
+ this.options = options;
49
+ }
50
+ static [import_entity.entityKind] = "NodeCockroachDriver";
51
+ createSession(schema) {
52
+ return new import_session.NodeCockroachSession(this.client, this.dialect, schema, { logger: this.options.logger });
53
+ }
54
+ }
55
+ class NodeCockroachDatabase extends import_db.CockroachDatabase {
56
+ static [import_entity.entityKind] = "NodeCockroachDatabase";
57
+ }
58
+ function construct(client, config = {}) {
59
+ const dialect = new import_dialect.CockroachDialect({ casing: config.casing });
60
+ let logger;
61
+ if (config.logger === true) {
62
+ logger = new import_logger.DefaultLogger();
63
+ } else if (config.logger !== false) {
64
+ logger = config.logger;
65
+ }
66
+ let schema;
67
+ if (config.schema) {
68
+ const tablesConfig = V1.extractTablesRelationalConfig(
69
+ config.schema,
70
+ V1.createTableRelationsHelpers
71
+ );
72
+ schema = {
73
+ fullSchema: config.schema,
74
+ schema: tablesConfig.tables,
75
+ tableNamesMap: tablesConfig.tableNamesMap
76
+ };
77
+ }
78
+ const driver = new NodeCockroachDriver(client, dialect, { logger });
79
+ const session = driver.createSession(schema);
80
+ const db = new NodeCockroachDatabase(dialect, session, schema);
81
+ db.$client = client;
82
+ return db;
83
+ }
84
+ function drizzle(...params) {
85
+ if (typeof params[0] === "string") {
86
+ const instance = new import_pg.default.Pool({
87
+ connectionString: params[0]
88
+ });
89
+ return construct(instance, params[1]);
90
+ }
91
+ if ((0, import_utils.isConfig)(params[0])) {
92
+ const { connection, client, ...drizzleConfig } = params[0];
93
+ if (client) return construct(client, drizzleConfig);
94
+ const instance = typeof connection === "string" ? new import_pg.default.Pool({
95
+ connectionString: connection
96
+ }) : new import_pg.default.Pool(connection);
97
+ return construct(instance, drizzleConfig);
98
+ }
99
+ return construct(params[0], params[1]);
100
+ }
101
+ ((drizzle2) => {
102
+ function mock(config) {
103
+ return construct({}, config);
104
+ }
105
+ drizzle2.mock = mock;
106
+ })(drizzle || (drizzle = {}));
107
+ // Annotate the CommonJS export names for ESM import in node:
108
+ 0 && (module.exports = {
109
+ NodeCockroachDatabase,
110
+ NodeCockroachDriver,
111
+ drizzle
112
+ });
113
+ //# sourceMappingURL=driver.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cockroach/driver.ts"],"sourcesContent":["import pg, { type Pool, type PoolConfig } from 'pg';\nimport * as V1 from '~/_relations.ts';\nimport { CockroachDatabase } from '~/cockroach-core/db.ts';\nimport { CockroachDialect } from '~/cockroach-core/dialect.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport type { NodeCockroachClient, NodeCockroachQueryResultHKT } from './session.ts';\nimport { NodeCockroachSession } from './session.ts';\n\nexport interface CockroachDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NodeCockroachDriver {\n\tstatic readonly [entityKind]: string = 'NodeCockroachDriver';\n\n\tconstructor(\n\t\tprivate client: NodeCockroachClient,\n\t\tprivate dialect: CockroachDialect,\n\t\tprivate options: CockroachDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\tschema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined,\n\t): NodeCockroachSession<Record<string, unknown>, V1.TablesRelationalConfig> {\n\t\treturn new NodeCockroachSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n}\n\nexport class NodeCockroachDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends CockroachDatabase<NodeCockroachQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NodeCockroachDatabase';\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NodeCockroachClient = NodeCockroachClient,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NodeCockroachDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new CockroachDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new NodeCockroachDriver(client, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\tconst db = new NodeCockroachDatabase(dialect, session, schema as any) as NodeCockroachDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NodeCockroachClient = Pool,\n>(\n\t...params:\n\t\t| [\n\t\t\tTClient | string,\n\t\t]\n\t\t| [\n\t\t\tTClient | string,\n\t\t\tDrizzleConfig<TSchema>,\n\t\t]\n\t\t| [\n\t\t\t(\n\t\t\t\t& DrizzleConfig<TSchema>\n\t\t\t\t& ({\n\t\t\t\t\tconnection: string | PoolConfig;\n\t\t\t\t} | {\n\t\t\t\t\tclient: TClient;\n\t\t\t\t})\n\t\t\t),\n\t\t]\n): NodeCockroachDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = new pg.Pool({\n\t\t\tconnectionString: params[0],\n\t\t});\n\n\t\treturn construct(instance, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as (\n\t\t\t& ({ connection?: PoolConfig | string; client?: TClient })\n\t\t\t& DrizzleConfig<TSchema>\n\t\t);\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tconst instance = typeof connection === 'string'\n\t\t\t? new pg.Pool({\n\t\t\t\tconnectionString: connection,\n\t\t\t})\n\t\t\t: new pg.Pool(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NodeCockroachDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAA+C;AAC/C,SAAoB;AACpB,gBAAkC;AAClC,qBAAiC;AACjC,oBAA2B;AAE3B,oBAA8B;AAC9B,mBAA6C;AAE7C,qBAAqC;AAM9B,MAAM,oBAAoB;AAAA,EAGhC,YACS,QACA,SACA,UAAkC,CAAC,GAC1C;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,wBAAU,IAAY;AAAA,EASvC,cACC,QAC2E;AAC3E,WAAO,IAAI,oCAAqB,KAAK,QAAQ,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,QAAQ,OAAO,CAAC;AAAA,EACnG;AACD;AAEO,MAAM,8BAEH,4BAAwD;AAAA,EACjE,QAA0B,wBAAU,IAAY;AACjD;AAEA,SAAS,UAIR,QACA,SAAiC,CAAC,GAGjC;AACD,QAAM,UAAU,IAAI,gCAAiB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAC9D,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,4BAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,eAAe,GAAG;AAAA,MACvB,OAAO;AAAA,MACP,GAAG;AAAA,IACJ;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,SAAS,IAAI,oBAAoB,QAAQ,SAAS,EAAE,OAAO,CAAC;AAClE,QAAM,UAAU,OAAO,cAAc,MAAM;AAC3C,QAAM,KAAK,IAAI,sBAAsB,SAAS,SAAS,MAAa;AACpE,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;AAEO,SAAS,WAIZ,QAoBF;AACD,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,WAAW,IAAI,UAAAA,QAAG,KAAK;AAAA,MAC5B,kBAAkB,OAAO,CAAC;AAAA,IAC3B,CAAC;AAED,WAAO,UAAU,UAAU,OAAO,CAAC,CAAuC;AAAA,EAC3E;AAEA,UAAI,uBAAS,OAAO,CAAC,CAAC,GAAG;AACxB,UAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAKzD,QAAI,OAAQ,QAAO,UAAU,QAAQ,aAAa;AAElD,UAAM,WAAW,OAAO,eAAe,WACpC,IAAI,UAAAA,QAAG,KAAK;AAAA,MACb,kBAAkB;AAAA,IACnB,CAAC,IACC,IAAI,UAAAA,QAAG,KAAK,UAAW;AAE1B,WAAO,UAAU,UAAU,aAAa;AAAA,EACzC;AAEA,SAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAAuC;AACvF;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KACf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AANO,EAAAA,SAAS;AAAA,GADA;","names":["pg","drizzle"]}
@@ -0,0 +1,42 @@
1
+ import { type Pool, type PoolConfig } from 'pg';
2
+ import * as V1 from "../_relations.cjs";
3
+ import { CockroachDatabase } from "../cockroach-core/db.cjs";
4
+ import { CockroachDialect } from "../cockroach-core/dialect.cjs";
5
+ import { entityKind } from "../entity.cjs";
6
+ import type { Logger } from "../logger.cjs";
7
+ import { type DrizzleConfig } from "../utils.cjs";
8
+ import type { NodeCockroachClient, NodeCockroachQueryResultHKT } from "./session.cjs";
9
+ import { NodeCockroachSession } from "./session.cjs";
10
+ export interface CockroachDriverOptions {
11
+ logger?: Logger;
12
+ }
13
+ export declare class NodeCockroachDriver {
14
+ private client;
15
+ private dialect;
16
+ private options;
17
+ static readonly [entityKind]: string;
18
+ constructor(client: NodeCockroachClient, dialect: CockroachDialect, options?: CockroachDriverOptions);
19
+ createSession(schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined): NodeCockroachSession<Record<string, unknown>, V1.TablesRelationalConfig>;
20
+ }
21
+ export declare class NodeCockroachDatabase<TSchema extends Record<string, unknown> = Record<string, never>> extends CockroachDatabase<NodeCockroachQueryResultHKT, TSchema> {
22
+ static readonly [entityKind]: string;
23
+ }
24
+ export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TClient extends NodeCockroachClient = Pool>(...params: [
25
+ TClient | string
26
+ ] | [
27
+ TClient | string,
28
+ DrizzleConfig<TSchema>
29
+ ] | [
30
+ (DrizzleConfig<TSchema> & ({
31
+ connection: string | PoolConfig;
32
+ } | {
33
+ client: TClient;
34
+ }))
35
+ ]): NodeCockroachDatabase<TSchema> & {
36
+ $client: TClient;
37
+ };
38
+ export declare namespace drizzle {
39
+ function mock<TSchema extends Record<string, unknown> = Record<string, never>>(config?: DrizzleConfig<TSchema>): NodeCockroachDatabase<TSchema> & {
40
+ $client: '$client is not available on drizzle.mock()';
41
+ };
42
+ }