@relq/orm 0.1.3 → 0.1.5

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 (412) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +33 -224
  3. package/dist/cjs/addon/cursor.cjs +2 -1407
  4. package/dist/cjs/addon/mysql2.cjs +21143 -0
  5. package/dist/cjs/addon/pg.cjs +5 -5
  6. package/dist/cjs/cache/query-cache.cjs +1 -4
  7. package/dist/cjs/core/cte/cte-accessor.cjs +80 -0
  8. package/dist/cjs/core/cte/cte-types.cjs +24 -0
  9. package/dist/cjs/core/cte/native-cte-builder.cjs +254 -0
  10. package/dist/cjs/core/helpers/index.cjs +14 -14
  11. package/dist/cjs/core/relq-base.cjs +4 -88
  12. package/dist/cjs/core/relq-client.cjs +59 -41
  13. package/dist/cjs/core/shared/column-mapping.cjs +1 -1
  14. package/dist/cjs/core/shared/table-accessor.cjs +1 -1
  15. package/dist/cjs/core/shared/where.cjs +15 -0
  16. package/dist/cjs/index.cjs +40 -5
  17. package/dist/cjs/mysql/clients/index.cjs +17 -0
  18. package/dist/cjs/mysql/clients/mariadb-client/capabilities.cjs +31 -0
  19. package/dist/cjs/mysql/clients/mariadb-client/index.cjs +7 -0
  20. package/dist/cjs/mysql/clients/mariadb-client/relq-mariadb.cjs +14 -0
  21. package/dist/cjs/mysql/clients/mysql-client/capabilities.cjs +31 -0
  22. package/dist/cjs/mysql/clients/mysql-client/index.cjs +7 -0
  23. package/dist/cjs/mysql/clients/mysql-client/relq-mysql.cjs +14 -0
  24. package/dist/cjs/mysql/clients/planetscale-client/capabilities.cjs +31 -0
  25. package/dist/cjs/mysql/clients/planetscale-client/index.cjs +7 -0
  26. package/dist/cjs/mysql/clients/planetscale-client/relq-planetscale.cjs +32 -0
  27. package/dist/cjs/mysql/clients/shared/index.cjs +32 -0
  28. package/dist/cjs/mysql/clients/shared/mysql-base.cjs +362 -0
  29. package/dist/cjs/mysql/clients/shared/mysql-dialect.cjs +141 -0
  30. package/dist/cjs/mysql/clients/shared/mysql-error-parser.cjs +195 -0
  31. package/dist/cjs/mysql/clients/shared/mysql-format.cjs +95 -0
  32. package/dist/cjs/mysql/clients/shared/mysql-type-coercion.cjs +14 -0
  33. package/dist/cjs/mysql/condition/condition-collector.cjs +377 -0
  34. package/dist/cjs/mysql/condition/fulltext-condition-builder.cjs +63 -0
  35. package/dist/cjs/mysql/condition/index.cjs +16 -0
  36. package/dist/cjs/mysql/condition/json-condition-builder.cjs +144 -0
  37. package/dist/cjs/mysql/condition/json-path-proxy.cjs +520 -0
  38. package/dist/cjs/mysql/count/count-builder.cjs +109 -0
  39. package/dist/cjs/mysql/count/index.cjs +5 -0
  40. package/dist/cjs/mysql/delete/delete-builder.cjs +105 -0
  41. package/dist/cjs/mysql/delete/index.cjs +5 -0
  42. package/dist/cjs/mysql/explain/explain-builder.cjs +43 -0
  43. package/dist/cjs/mysql/explain/index.cjs +5 -0
  44. package/dist/cjs/mysql/helpers/MysqlConnectedAggregateBuilder.cjs +132 -0
  45. package/dist/cjs/mysql/helpers/MysqlConnectedCountBuilder.cjs +83 -0
  46. package/dist/cjs/mysql/helpers/MysqlConnectedDeleteBuilder.cjs +91 -0
  47. package/dist/cjs/mysql/helpers/MysqlConnectedInsertBuilder.cjs +75 -0
  48. package/dist/cjs/mysql/helpers/MysqlConnectedInsertFromSelectBuilder.cjs +57 -0
  49. package/dist/cjs/mysql/helpers/MysqlConnectedQueryBuilder.cjs +141 -0
  50. package/dist/cjs/mysql/helpers/MysqlConnectedRawQueryBuilder.cjs +60 -0
  51. package/dist/cjs/mysql/helpers/MysqlConnectedSelectBuilder.cjs +398 -0
  52. package/dist/cjs/mysql/helpers/MysqlConnectedTransactionBuilder.cjs +128 -0
  53. package/dist/cjs/mysql/helpers/MysqlConnectedUpdateBuilder.cjs +92 -0
  54. package/dist/cjs/mysql/helpers/MysqlPaginateBuilder.cjs +186 -0
  55. package/dist/cjs/mysql/helpers/MysqlReturningExecutor.cjs +69 -0
  56. package/dist/cjs/mysql/helpers/index.cjs +45 -0
  57. package/dist/cjs/mysql/helpers/query-convenience.cjs +210 -0
  58. package/dist/cjs/mysql/helpers/select-joins.cjs +465 -0
  59. package/dist/cjs/mysql/helpers/select-pagination.cjs +190 -0
  60. package/dist/cjs/mysql/index.cjs +154 -0
  61. package/dist/cjs/mysql/insert/duplicate-key-builder.cjs +185 -0
  62. package/dist/cjs/mysql/insert/index.cjs +13 -0
  63. package/dist/cjs/mysql/insert/insert-builder.cjs +169 -0
  64. package/dist/cjs/mysql/insert/insert-from-select-builder.cjs +74 -0
  65. package/dist/cjs/mysql/raw/index.cjs +8 -0
  66. package/dist/cjs/mysql/raw/raw-query-builder.cjs +27 -0
  67. package/dist/cjs/mysql/raw/sql-template.cjs +65 -0
  68. package/dist/cjs/mysql/select/aggregate-builder.cjs +211 -0
  69. package/dist/cjs/mysql/select/index.cjs +32 -0
  70. package/dist/cjs/mysql/select/join-builder.cjs +206 -0
  71. package/dist/cjs/mysql/select/join-condition-builder.cjs +205 -0
  72. package/dist/cjs/mysql/select/join-internals.cjs +5 -0
  73. package/dist/cjs/mysql/select/scalar-query-builder.cjs +164 -0
  74. package/dist/cjs/mysql/select/scalar-select-builder.cjs +78 -0
  75. package/dist/cjs/mysql/select/select-builder.cjs +414 -0
  76. package/dist/cjs/mysql/select/sql-expression.cjs +56 -0
  77. package/dist/cjs/mysql/select/table-proxy.cjs +99 -0
  78. package/dist/cjs/mysql/shared/mysql-table-accessor.cjs +22 -0
  79. package/dist/cjs/mysql/transaction/index.cjs +6 -0
  80. package/dist/cjs/mysql/transaction/transaction-builder.cjs +64 -0
  81. package/dist/cjs/mysql/update/column-expression-builder.cjs +49 -0
  82. package/dist/cjs/mysql/update/index.cjs +7 -0
  83. package/dist/cjs/mysql/update/mysql-json-update-builder.cjs +200 -0
  84. package/dist/cjs/mysql/update/update-builder.cjs +167 -0
  85. package/dist/cjs/mysql/utils/addon/mysql/mysql2.cjs +23 -0
  86. package/dist/cjs/mysql/utils/fk-resolver.cjs +187 -0
  87. package/dist/cjs/mysql/utils/index.cjs +16 -0
  88. package/dist/cjs/mysql/utils/type-coercion.cjs +158 -0
  89. package/dist/cjs/mysql/window/index.cjs +5 -0
  90. package/dist/cjs/mysql/window/window-builder.cjs +80 -0
  91. package/dist/cjs/pg/clients/alloydb-client/capabilities.cjs +31 -0
  92. package/dist/cjs/pg/clients/alloydb-client/index.cjs +7 -0
  93. package/dist/cjs/pg/clients/alloydb-client/relq-alloydb.cjs +43 -0
  94. package/dist/cjs/pg/clients/aurora-client/capabilities.cjs +31 -0
  95. package/dist/cjs/pg/clients/aurora-client/index.cjs +7 -0
  96. package/dist/cjs/pg/clients/aurora-client/relq-aurora.cjs +43 -0
  97. package/dist/cjs/pg/clients/citus-client/capabilities.cjs +31 -0
  98. package/dist/cjs/pg/clients/citus-client/index.cjs +7 -0
  99. package/dist/cjs/pg/clients/citus-client/relq-citus.cjs +43 -0
  100. package/dist/cjs/pg/clients/neon-client/capabilities.cjs +31 -0
  101. package/dist/cjs/pg/clients/neon-client/index.cjs +7 -0
  102. package/dist/cjs/pg/clients/neon-client/relq-neon.cjs +43 -0
  103. package/dist/cjs/pg/clients/pg-client/relq-postgres.cjs +56 -0
  104. package/dist/cjs/{core/pg-family → pg/clients}/shared/pg-base.cjs +64 -7
  105. package/dist/cjs/{core/pg-family → pg/clients}/shared/pg-type-coercion.cjs +1 -1
  106. package/dist/cjs/pg/clients/supabase-client/capabilities.cjs +31 -0
  107. package/dist/cjs/pg/clients/supabase-client/index.cjs +7 -0
  108. package/dist/cjs/{core/pg-family/pg-client/relq-postgres.cjs → pg/clients/supabase-client/relq-supabase.cjs} +9 -9
  109. package/dist/cjs/pg/clients/timescale-client/capabilities.cjs +31 -0
  110. package/dist/cjs/pg/clients/timescale-client/index.cjs +7 -0
  111. package/dist/cjs/pg/clients/timescale-client/relq-timescale.cjs +43 -0
  112. package/dist/cjs/pg/clients/yugabytedb-client/capabilities.cjs +31 -0
  113. package/dist/cjs/pg/clients/yugabytedb-client/index.cjs +7 -0
  114. package/dist/cjs/pg/clients/yugabytedb-client/relq-yugabytedb.cjs +16 -0
  115. package/dist/cjs/{condition → pg/condition}/array-condition-builder.cjs +1 -1
  116. package/dist/cjs/pg/condition/array-path-proxy.cjs +379 -0
  117. package/dist/cjs/{condition → pg/condition}/condition-collector.cjs +18 -9
  118. package/dist/cjs/{condition → pg/condition}/fulltext-condition-builder.cjs +1 -1
  119. package/dist/cjs/{condition → pg/condition}/geometric-condition-builder.cjs +1 -1
  120. package/dist/cjs/pg/condition/json-path-proxy.cjs +480 -0
  121. package/dist/cjs/{condition → pg/condition}/jsonb-condition-builder.cjs +1 -1
  122. package/dist/cjs/{condition → pg/condition}/network-condition-builder.cjs +1 -1
  123. package/dist/cjs/{condition → pg/condition}/postgis-condition-builder.cjs +1 -1
  124. package/dist/cjs/{condition → pg/condition}/range-condition-builder.cjs +1 -1
  125. package/dist/cjs/{count → pg/count}/count-builder.cjs +10 -5
  126. package/dist/cjs/{delete → pg/delete}/delete-builder.cjs +10 -5
  127. package/dist/cjs/{core → pg}/helpers/ConnectedAggregateBuilder.cjs +16 -3
  128. package/dist/cjs/{core → pg}/helpers/ConnectedCountBuilder.cjs +16 -3
  129. package/dist/cjs/{core → pg}/helpers/ConnectedDeleteBuilder.cjs +27 -7
  130. package/dist/cjs/{core → pg}/helpers/ConnectedInsertBuilder.cjs +16 -8
  131. package/dist/cjs/{core → pg}/helpers/ConnectedInsertFromSelectBuilder.cjs +9 -5
  132. package/dist/cjs/{core → pg}/helpers/ConnectedQueryBuilder.cjs +14 -19
  133. package/dist/cjs/pg/helpers/ConnectedRawQueryBuilder.cjs +67 -0
  134. package/dist/cjs/{core → pg}/helpers/ConnectedSelectBuilder.cjs +121 -25
  135. package/dist/cjs/{core → pg}/helpers/ConnectedTransactionBuilder.cjs +34 -4
  136. package/dist/cjs/{core → pg}/helpers/ConnectedUpdateBuilder.cjs +27 -7
  137. package/dist/cjs/{core → pg}/helpers/PaginateBuilder.cjs +3 -3
  138. package/dist/cjs/{core → pg}/helpers/ReturningExecutor.cjs +3 -3
  139. package/dist/cjs/{core → pg}/helpers/query-convenience.cjs +11 -12
  140. package/dist/cjs/{core → pg}/helpers/select-joins.cjs +17 -14
  141. package/dist/cjs/{core → pg}/helpers/select-pagination.cjs +1 -1
  142. package/dist/cjs/{insert → pg/insert}/conflict-builder.cjs +2 -2
  143. package/dist/cjs/{insert → pg/insert}/insert-builder.cjs +8 -5
  144. package/dist/cjs/{insert → pg/insert}/insert-from-select-builder.cjs +1 -1
  145. package/dist/cjs/{pubsub → pg/pubsub}/listen-notify-builder.cjs +1 -1
  146. package/dist/cjs/{pubsub → pg/pubsub}/listener-connection.cjs +2 -2
  147. package/dist/cjs/{raw → pg/raw}/raw-query-builder.cjs +2 -2
  148. package/dist/cjs/{raw → pg/raw}/sql-template.cjs +1 -6
  149. package/dist/cjs/{select → pg/select}/aggregate-builder.cjs +10 -5
  150. package/dist/cjs/{select → pg/select}/join-builder.cjs +2 -2
  151. package/dist/cjs/{select → pg/select}/join-condition-builder.cjs +11 -1
  152. package/dist/cjs/{select → pg/select}/join-many-condition-builder.cjs +3 -4
  153. package/dist/cjs/{select → pg/select}/scalar-query-builder.cjs +31 -1
  154. package/dist/cjs/{select → pg/select}/scalar-select-builder.cjs +1 -1
  155. package/dist/cjs/{select → pg/select}/select-builder.cjs +40 -7
  156. package/dist/cjs/pg/select/sql-expression.cjs +56 -0
  157. package/dist/cjs/{transaction → pg/transaction}/transaction-builder.cjs +1 -1
  158. package/dist/cjs/{update → pg/update}/array-update-builder.cjs +2 -5
  159. package/dist/cjs/pg/update/column-expression-builder.cjs +49 -0
  160. package/dist/cjs/{update → pg/update}/jsonb-update-builder.cjs +1 -1
  161. package/dist/cjs/{update → pg/update}/update-builder.cjs +14 -7
  162. package/dist/cjs/{utils → pg/utils}/addon/pg/cursor.cjs +1 -1
  163. package/dist/cjs/{utils → pg/utils}/addon/pg/pg.cjs +2 -2
  164. package/dist/cjs/{utils → pg/utils}/fk-resolver.cjs +47 -30
  165. package/dist/cjs/{window → pg/window}/window-builder.cjs +1 -1
  166. package/dist/cjs/shared/errors/relq-errors.cjs +496 -35
  167. package/dist/cjs/shared/types/config-types.cjs +2 -2
  168. package/dist/cjs/utils/env-resolver.cjs +76 -13
  169. package/dist/cjs/utils/index.cjs +1 -1
  170. package/dist/esm/addon/cursor.js +1 -1438
  171. package/dist/esm/addon/mysql2.js +21129 -0
  172. package/dist/esm/addon/pg.js +5 -5
  173. package/dist/esm/cache/query-cache.js +1 -4
  174. package/dist/esm/core/cte/cte-accessor.js +75 -0
  175. package/dist/esm/core/cte/cte-types.js +20 -0
  176. package/dist/esm/core/cte/native-cte-builder.js +250 -0
  177. package/dist/esm/core/helpers/index.js +12 -12
  178. package/dist/esm/core/relq-base.js +5 -56
  179. package/dist/esm/core/relq-client.js +54 -32
  180. package/dist/esm/core/shared/column-mapping.js +1 -1
  181. package/dist/esm/core/shared/table-accessor.js +1 -1
  182. package/dist/esm/core/shared/where.js +12 -0
  183. package/dist/esm/index.js +17 -5
  184. package/dist/esm/mysql/clients/index.js +5 -0
  185. package/dist/esm/mysql/clients/mariadb-client/capabilities.js +28 -0
  186. package/dist/esm/mysql/clients/mariadb-client/index.js +2 -0
  187. package/dist/esm/mysql/clients/mariadb-client/relq-mariadb.js +10 -0
  188. package/dist/esm/mysql/clients/mysql-client/capabilities.js +28 -0
  189. package/dist/esm/mysql/clients/mysql-client/index.js +2 -0
  190. package/dist/esm/mysql/clients/mysql-client/relq-mysql.js +10 -0
  191. package/dist/esm/mysql/clients/planetscale-client/capabilities.js +28 -0
  192. package/dist/esm/mysql/clients/planetscale-client/index.js +2 -0
  193. package/dist/esm/mysql/clients/planetscale-client/relq-planetscale.js +28 -0
  194. package/dist/esm/mysql/clients/shared/index.js +7 -0
  195. package/dist/esm/mysql/clients/shared/mysql-base.js +321 -0
  196. package/dist/esm/mysql/clients/shared/mysql-dialect.js +136 -0
  197. package/dist/esm/mysql/clients/shared/mysql-error-parser.js +188 -0
  198. package/dist/esm/mysql/clients/shared/mysql-format.js +92 -0
  199. package/dist/esm/mysql/clients/shared/mysql-type-coercion.js +6 -0
  200. package/dist/esm/mysql/condition/condition-collector.js +368 -0
  201. package/dist/esm/mysql/condition/fulltext-condition-builder.js +55 -0
  202. package/dist/esm/mysql/condition/index.js +4 -0
  203. package/dist/esm/mysql/condition/json-condition-builder.js +136 -0
  204. package/dist/esm/mysql/condition/json-path-proxy.js +513 -0
  205. package/dist/esm/mysql/count/count-builder.js +102 -0
  206. package/dist/esm/mysql/count/index.js +1 -0
  207. package/dist/esm/mysql/delete/delete-builder.js +98 -0
  208. package/dist/esm/mysql/delete/index.js +1 -0
  209. package/dist/esm/mysql/explain/explain-builder.js +39 -0
  210. package/dist/esm/mysql/explain/index.js +1 -0
  211. package/dist/esm/mysql/helpers/MysqlConnectedAggregateBuilder.js +128 -0
  212. package/dist/esm/{core/helpers/ConnectedCountBuilder.js → mysql/helpers/MysqlConnectedCountBuilder.js} +15 -5
  213. package/dist/esm/mysql/helpers/MysqlConnectedDeleteBuilder.js +87 -0
  214. package/dist/esm/mysql/helpers/MysqlConnectedInsertBuilder.js +71 -0
  215. package/dist/esm/mysql/helpers/MysqlConnectedInsertFromSelectBuilder.js +53 -0
  216. package/dist/esm/mysql/helpers/MysqlConnectedQueryBuilder.js +137 -0
  217. package/dist/esm/mysql/helpers/MysqlConnectedRawQueryBuilder.js +56 -0
  218. package/dist/esm/mysql/helpers/MysqlConnectedSelectBuilder.js +391 -0
  219. package/dist/esm/mysql/helpers/MysqlConnectedTransactionBuilder.js +123 -0
  220. package/dist/esm/mysql/helpers/MysqlConnectedUpdateBuilder.js +88 -0
  221. package/dist/esm/mysql/helpers/MysqlPaginateBuilder.js +182 -0
  222. package/dist/esm/mysql/helpers/MysqlReturningExecutor.js +65 -0
  223. package/dist/esm/mysql/helpers/index.js +15 -0
  224. package/dist/esm/mysql/helpers/query-convenience.js +199 -0
  225. package/dist/esm/mysql/helpers/select-joins.js +455 -0
  226. package/dist/esm/mysql/helpers/select-pagination.js +186 -0
  227. package/dist/esm/mysql/index.js +47 -0
  228. package/dist/esm/mysql/insert/duplicate-key-builder.js +174 -0
  229. package/dist/esm/mysql/insert/index.js +3 -0
  230. package/dist/esm/mysql/insert/insert-builder.js +162 -0
  231. package/dist/esm/mysql/insert/insert-from-select-builder.js +67 -0
  232. package/dist/esm/mysql/raw/index.js +2 -0
  233. package/dist/esm/mysql/raw/raw-query-builder.js +20 -0
  234. package/dist/esm/mysql/raw/sql-template.js +58 -0
  235. package/dist/esm/mysql/select/aggregate-builder.js +204 -0
  236. package/dist/esm/mysql/select/index.js +9 -0
  237. package/dist/esm/mysql/select/join-builder.js +198 -0
  238. package/dist/esm/mysql/select/join-condition-builder.js +197 -0
  239. package/dist/esm/mysql/select/join-internals.js +2 -0
  240. package/dist/esm/mysql/select/scalar-query-builder.js +156 -0
  241. package/dist/esm/mysql/select/scalar-select-builder.js +70 -0
  242. package/dist/esm/mysql/select/select-builder.js +407 -0
  243. package/dist/esm/mysql/select/sql-expression.js +51 -0
  244. package/dist/esm/mysql/select/table-proxy.js +91 -0
  245. package/dist/esm/mysql/shared/mysql-table-accessor.js +19 -0
  246. package/dist/esm/mysql/transaction/index.js +1 -0
  247. package/dist/esm/mysql/transaction/transaction-builder.js +56 -0
  248. package/dist/esm/mysql/update/column-expression-builder.js +42 -0
  249. package/dist/esm/mysql/update/index.js +2 -0
  250. package/dist/esm/mysql/update/mysql-json-update-builder.js +193 -0
  251. package/dist/esm/mysql/update/update-builder.js +160 -0
  252. package/dist/esm/mysql/utils/addon/mysql/mysql2.js +2 -0
  253. package/dist/esm/mysql/utils/fk-resolver.js +179 -0
  254. package/dist/esm/mysql/utils/index.js +2 -0
  255. package/dist/esm/mysql/utils/type-coercion.js +150 -0
  256. package/dist/esm/mysql/window/index.js +1 -0
  257. package/dist/esm/mysql/window/window-builder.js +73 -0
  258. package/dist/esm/pg/clients/alloydb-client/capabilities.js +28 -0
  259. package/dist/esm/pg/clients/alloydb-client/index.js +2 -0
  260. package/dist/esm/{core/pg-family/pg-client/relq-postgres.js → pg/clients/alloydb-client/relq-alloydb.js} +8 -8
  261. package/dist/esm/pg/clients/aurora-client/capabilities.js +28 -0
  262. package/dist/esm/pg/clients/aurora-client/index.js +2 -0
  263. package/dist/esm/pg/clients/aurora-client/relq-aurora.js +39 -0
  264. package/dist/esm/pg/clients/citus-client/capabilities.js +28 -0
  265. package/dist/esm/pg/clients/citus-client/index.js +2 -0
  266. package/dist/esm/pg/clients/citus-client/relq-citus.js +39 -0
  267. package/dist/esm/pg/clients/neon-client/capabilities.js +28 -0
  268. package/dist/esm/pg/clients/neon-client/index.js +2 -0
  269. package/dist/esm/pg/clients/neon-client/relq-neon.js +39 -0
  270. package/dist/esm/pg/clients/pg-client/relq-postgres.js +52 -0
  271. package/dist/esm/{core/pg-family → pg/clients}/shared/pg-base.js +64 -7
  272. package/dist/esm/{core/pg-family → pg/clients}/shared/pg-type-coercion.js +1 -1
  273. package/dist/esm/pg/clients/supabase-client/capabilities.js +28 -0
  274. package/dist/esm/pg/clients/supabase-client/index.js +2 -0
  275. package/dist/esm/pg/clients/supabase-client/relq-supabase.js +39 -0
  276. package/dist/esm/pg/clients/timescale-client/capabilities.js +28 -0
  277. package/dist/esm/pg/clients/timescale-client/index.js +2 -0
  278. package/dist/esm/pg/clients/timescale-client/relq-timescale.js +39 -0
  279. package/dist/esm/pg/clients/yugabytedb-client/capabilities.js +28 -0
  280. package/dist/esm/pg/clients/yugabytedb-client/index.js +2 -0
  281. package/dist/esm/pg/clients/yugabytedb-client/relq-yugabytedb.js +12 -0
  282. package/dist/esm/{condition → pg/condition}/array-condition-builder.js +1 -1
  283. package/dist/esm/pg/condition/array-path-proxy.js +372 -0
  284. package/dist/esm/{condition → pg/condition}/condition-collector.js +20 -11
  285. package/dist/esm/{condition → pg/condition}/fulltext-condition-builder.js +1 -1
  286. package/dist/esm/{condition → pg/condition}/geometric-condition-builder.js +1 -1
  287. package/dist/esm/pg/condition/json-path-proxy.js +473 -0
  288. package/dist/esm/{condition → pg/condition}/jsonb-condition-builder.js +1 -1
  289. package/dist/esm/{condition → pg/condition}/network-condition-builder.js +1 -1
  290. package/dist/esm/{condition → pg/condition}/postgis-condition-builder.js +1 -1
  291. package/dist/esm/{condition → pg/condition}/range-condition-builder.js +1 -1
  292. package/dist/esm/{count → pg/count}/count-builder.js +10 -5
  293. package/dist/esm/{delete → pg/delete}/delete-builder.js +10 -5
  294. package/dist/esm/{core → pg}/helpers/ConnectedAggregateBuilder.js +16 -3
  295. package/dist/esm/pg/helpers/ConnectedCountBuilder.js +82 -0
  296. package/dist/esm/{core → pg}/helpers/ConnectedDeleteBuilder.js +27 -7
  297. package/dist/esm/{core → pg}/helpers/ConnectedInsertBuilder.js +16 -8
  298. package/dist/esm/{core → pg}/helpers/ConnectedInsertFromSelectBuilder.js +9 -5
  299. package/dist/esm/{core → pg}/helpers/ConnectedQueryBuilder.js +15 -20
  300. package/dist/esm/pg/helpers/ConnectedRawQueryBuilder.js +63 -0
  301. package/dist/esm/{core → pg}/helpers/ConnectedSelectBuilder.js +118 -25
  302. package/dist/esm/{core → pg}/helpers/ConnectedTransactionBuilder.js +34 -4
  303. package/dist/esm/{core → pg}/helpers/ConnectedUpdateBuilder.js +27 -7
  304. package/dist/esm/{core → pg}/helpers/PaginateBuilder.js +3 -3
  305. package/dist/esm/{core → pg}/helpers/ReturningExecutor.js +3 -3
  306. package/dist/esm/{core → pg}/helpers/query-convenience.js +11 -12
  307. package/dist/esm/{core → pg}/helpers/select-joins.js +18 -15
  308. package/dist/esm/{core → pg}/helpers/select-pagination.js +1 -1
  309. package/dist/esm/{insert → pg/insert}/conflict-builder.js +2 -2
  310. package/dist/esm/{insert → pg/insert}/insert-builder.js +8 -5
  311. package/dist/esm/{insert → pg/insert}/insert-from-select-builder.js +1 -1
  312. package/dist/esm/{pubsub → pg/pubsub}/listen-notify-builder.js +1 -1
  313. package/dist/esm/{pubsub → pg/pubsub}/listener-connection.js +2 -2
  314. package/dist/esm/{raw → pg/raw}/raw-query-builder.js +2 -2
  315. package/dist/esm/{raw → pg/raw}/sql-template.js +1 -6
  316. package/dist/esm/{select → pg/select}/aggregate-builder.js +10 -5
  317. package/dist/esm/{select → pg/select}/join-builder.js +2 -2
  318. package/dist/esm/{select → pg/select}/join-condition-builder.js +11 -1
  319. package/dist/esm/{select → pg/select}/join-many-condition-builder.js +3 -4
  320. package/dist/esm/{select → pg/select}/scalar-query-builder.js +31 -1
  321. package/dist/esm/{select → pg/select}/scalar-select-builder.js +1 -1
  322. package/dist/esm/{select → pg/select}/select-builder.js +40 -7
  323. package/dist/esm/pg/select/sql-expression.js +51 -0
  324. package/dist/esm/{transaction → pg/transaction}/transaction-builder.js +1 -1
  325. package/dist/esm/{update → pg/update}/array-update-builder.js +2 -5
  326. package/dist/esm/pg/update/column-expression-builder.js +42 -0
  327. package/dist/esm/{update → pg/update}/jsonb-update-builder.js +1 -1
  328. package/dist/esm/{update → pg/update}/update-builder.js +14 -7
  329. package/dist/esm/pg/utils/addon/pg/cursor.js +1 -0
  330. package/dist/esm/pg/utils/addon/pg/pg.js +2 -0
  331. package/dist/esm/{utils → pg/utils}/fk-resolver.js +47 -30
  332. package/dist/esm/{window → pg/window}/window-builder.js +1 -1
  333. package/dist/esm/shared/errors/relq-errors.js +486 -34
  334. package/dist/esm/shared/types/config-types.js +2 -2
  335. package/dist/esm/utils/env-resolver.js +74 -13
  336. package/dist/esm/utils/index.js +1 -1
  337. package/dist/index.d.ts +9629 -3974
  338. package/package.json +6 -3
  339. package/dist/cjs/core/helpers/ConnectedCTEBuilder.cjs +0 -53
  340. package/dist/cjs/core/helpers/ConnectedRawQueryBuilder.cjs +0 -46
  341. package/dist/cjs/select/sql-expression.cjs +0 -38
  342. package/dist/esm/core/helpers/ConnectedCTEBuilder.js +0 -49
  343. package/dist/esm/core/helpers/ConnectedRawQueryBuilder.js +0 -42
  344. package/dist/esm/select/sql-expression.js +0 -33
  345. package/dist/esm/utils/addon/pg/cursor.js +0 -1
  346. package/dist/esm/utils/addon/pg/pg.js +0 -2
  347. /package/dist/cjs/{core/pg-family → pg/clients}/cockroachdb-client/capabilities.cjs +0 -0
  348. /package/dist/cjs/{core/pg-family → pg/clients}/cockroachdb-client/index.cjs +0 -0
  349. /package/dist/cjs/{core/pg-family → pg/clients}/cockroachdb-client/relq-cockroach.cjs +0 -0
  350. /package/dist/cjs/{core/pg-family → pg/clients}/dsql-client/capabilities.cjs +0 -0
  351. /package/dist/cjs/{core/pg-family → pg/clients}/dsql-client/index.cjs +0 -0
  352. /package/dist/cjs/{core/pg-family → pg/clients}/dsql-client/relq-dsql.cjs +0 -0
  353. /package/dist/cjs/{core/pg-family → pg/clients}/index.cjs +0 -0
  354. /package/dist/cjs/{core/pg-family → pg/clients}/nile-client/capabilities.cjs +0 -0
  355. /package/dist/cjs/{core/pg-family → pg/clients}/nile-client/index.cjs +0 -0
  356. /package/dist/cjs/{core/pg-family → pg/clients}/nile-client/relq-nile.cjs +0 -0
  357. /package/dist/cjs/{core/pg-family → pg/clients}/nile-client/tenant-context.cjs +0 -0
  358. /package/dist/cjs/{core/pg-family → pg/clients}/pg-client/capabilities.cjs +0 -0
  359. /package/dist/cjs/{core/pg-family → pg/clients}/pg-client/index.cjs +0 -0
  360. /package/dist/cjs/{core/pg-family → pg/clients}/shared/pg-dialect.cjs +0 -0
  361. /package/dist/cjs/{core/pg-family → pg/clients}/shared/pg-error-parser.cjs +0 -0
  362. /package/dist/cjs/{condition → pg/condition}/array-numeric-condition-builder.cjs +0 -0
  363. /package/dist/cjs/{condition → pg/condition}/array-specialized-condition-builder.cjs +0 -0
  364. /package/dist/cjs/{condition → pg/condition}/array-string-condition-builder.cjs +0 -0
  365. /package/dist/cjs/{condition → pg/condition}/index.cjs +0 -0
  366. /package/dist/cjs/{count → pg/count}/index.cjs +0 -0
  367. /package/dist/cjs/{delete → pg/delete}/index.cjs +0 -0
  368. /package/dist/cjs/{explain → pg/explain}/explain-builder.cjs +0 -0
  369. /package/dist/cjs/{explain → pg/explain}/index.cjs +0 -0
  370. /package/dist/cjs/{insert → pg/insert}/index.cjs +0 -0
  371. /package/dist/cjs/{pubsub → pg/pubsub}/index.cjs +0 -0
  372. /package/dist/cjs/{raw → pg/raw}/index.cjs +0 -0
  373. /package/dist/cjs/{select → pg/select}/index.cjs +0 -0
  374. /package/dist/cjs/{select → pg/select}/join-internals.cjs +0 -0
  375. /package/dist/cjs/{select → pg/select}/table-proxy.cjs +0 -0
  376. /package/dist/cjs/{transaction → pg/transaction}/index.cjs +0 -0
  377. /package/dist/cjs/{update → pg/update}/index.cjs +0 -0
  378. /package/dist/cjs/{utils → pg/utils}/type-coercion.cjs +0 -0
  379. /package/dist/cjs/{window → pg/window}/index.cjs +0 -0
  380. /package/dist/esm/{core/pg-family → pg/clients}/cockroachdb-client/capabilities.js +0 -0
  381. /package/dist/esm/{core/pg-family → pg/clients}/cockroachdb-client/index.js +0 -0
  382. /package/dist/esm/{core/pg-family → pg/clients}/cockroachdb-client/relq-cockroach.js +0 -0
  383. /package/dist/esm/{core/pg-family → pg/clients}/dsql-client/capabilities.js +0 -0
  384. /package/dist/esm/{core/pg-family → pg/clients}/dsql-client/index.js +0 -0
  385. /package/dist/esm/{core/pg-family → pg/clients}/dsql-client/relq-dsql.js +0 -0
  386. /package/dist/esm/{core/pg-family → pg/clients}/index.js +0 -0
  387. /package/dist/esm/{core/pg-family → pg/clients}/nile-client/capabilities.js +0 -0
  388. /package/dist/esm/{core/pg-family → pg/clients}/nile-client/index.js +0 -0
  389. /package/dist/esm/{core/pg-family → pg/clients}/nile-client/relq-nile.js +0 -0
  390. /package/dist/esm/{core/pg-family → pg/clients}/nile-client/tenant-context.js +0 -0
  391. /package/dist/esm/{core/pg-family → pg/clients}/pg-client/capabilities.js +0 -0
  392. /package/dist/esm/{core/pg-family → pg/clients}/pg-client/index.js +0 -0
  393. /package/dist/esm/{core/pg-family → pg/clients}/shared/pg-dialect.js +0 -0
  394. /package/dist/esm/{core/pg-family → pg/clients}/shared/pg-error-parser.js +0 -0
  395. /package/dist/esm/{condition → pg/condition}/array-numeric-condition-builder.js +0 -0
  396. /package/dist/esm/{condition → pg/condition}/array-specialized-condition-builder.js +0 -0
  397. /package/dist/esm/{condition → pg/condition}/array-string-condition-builder.js +0 -0
  398. /package/dist/esm/{condition → pg/condition}/index.js +0 -0
  399. /package/dist/esm/{count → pg/count}/index.js +0 -0
  400. /package/dist/esm/{delete → pg/delete}/index.js +0 -0
  401. /package/dist/esm/{explain → pg/explain}/explain-builder.js +0 -0
  402. /package/dist/esm/{explain → pg/explain}/index.js +0 -0
  403. /package/dist/esm/{insert → pg/insert}/index.js +0 -0
  404. /package/dist/esm/{pubsub → pg/pubsub}/index.js +0 -0
  405. /package/dist/esm/{raw → pg/raw}/index.js +0 -0
  406. /package/dist/esm/{select → pg/select}/index.js +0 -0
  407. /package/dist/esm/{select → pg/select}/join-internals.js +0 -0
  408. /package/dist/esm/{select → pg/select}/table-proxy.js +0 -0
  409. /package/dist/esm/{transaction → pg/transaction}/index.js +0 -0
  410. /package/dist/esm/{update → pg/update}/index.js +0 -0
  411. /package/dist/esm/{utils → pg/utils}/type-coercion.js +0 -0
  412. /package/dist/esm/{window → pg/window}/index.js +0 -0
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConnectedDeleteBuilder = void 0;
4
- const methods_1 = require("./methods.cjs");
4
+ const condition_collector_1 = require("../condition/condition-collector.cjs");
5
+ const methods_1 = require("../../core/helpers/methods.cjs");
5
6
  const ReturningExecutor_1 = require("./ReturningExecutor.cjs");
6
- const capability_guard_1 = require("./capability-guard.cjs");
7
- const table_accessor_1 = require("../shared/table-accessor.cjs");
7
+ const capability_guard_1 = require("../../core/helpers/capability-guard.cjs");
8
+ const table_accessor_1 = require("../../core/shared/table-accessor.cjs");
9
+ const relq_errors_1 = require("../../shared/errors/relq-errors.cjs");
8
10
  class ConnectedDeleteBuilder {
9
11
  builder;
10
12
  relq;
@@ -35,7 +37,21 @@ class ConnectedDeleteBuilder {
35
37
  return column;
36
38
  });
37
39
  }
38
- where(callback) {
40
+ where(callbackOrCondition) {
41
+ if (callbackOrCondition instanceof condition_collector_1.ConditionCollector) {
42
+ const conditionTable = callbackOrCondition._tableName;
43
+ if (conditionTable) {
44
+ const matches = conditionTable === this.schemaKey || conditionTable === this.tableName;
45
+ if (!matches) {
46
+ const queryTable = this.schemaKey || this.tableName;
47
+ throw new relq_errors_1.RelqBuilderError(`Condition was created for table '${conditionTable}' but is being used on '${queryTable}'. ` +
48
+ `Create the condition with db.where('${queryTable}') instead.`);
49
+ }
50
+ }
51
+ this.builder.where(callbackOrCondition);
52
+ return this;
53
+ }
54
+ const callback = callbackOrCondition;
39
55
  this.builder.where((q) => {
40
56
  q._tables = (0, table_accessor_1.createTableAccessor)(this.relq, this.relq.schema);
41
57
  return callback(q);
@@ -53,9 +69,13 @@ class ConnectedDeleteBuilder {
53
69
  }
54
70
  return result.metadata.rowCount ?? 0;
55
71
  }
56
- returning(columns) {
57
- if (columns === null) {
58
- return this;
72
+ returning(...args) {
73
+ let columns;
74
+ if (args.length === 1) {
75
+ columns = args[0];
76
+ }
77
+ else {
78
+ columns = args;
59
79
  }
60
80
  (0, capability_guard_1.requireCapability)(this.relq, 'returning', 'RETURNING clause', 'Use a SELECT query after the DELETE to retrieve deleted data');
61
81
  this.builder.returning(columns);
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConnectedInsertBuilder = void 0;
4
- const condition_collector_1 = require("../../condition/condition-collector.cjs");
5
- const methods_1 = require("./methods.cjs");
4
+ const condition_collector_1 = require("../condition/condition-collector.cjs");
5
+ const methods_1 = require("../../core/helpers/methods.cjs");
6
6
  const ReturningExecutor_1 = require("./ReturningExecutor.cjs");
7
- const capability_guard_1 = require("./capability-guard.cjs");
7
+ const capability_guard_1 = require("../../core/helpers/capability-guard.cjs");
8
8
  class ConnectedInsertBuilder {
9
9
  builder;
10
10
  relq;
@@ -90,8 +90,12 @@ class ConnectedInsertBuilder {
90
90
  async run(withMetadata) {
91
91
  (0, methods_1.debugLog)(this.relq[methods_1.INTERNAL]?.config, `ConnectedInsertBuilder.run called for table: ${this.builder.tableName}`);
92
92
  const internalRelq = this.relq[methods_1.INTERNAL];
93
- for (const row of this.builder.insertData) {
94
- internalRelq.validateData(this.builder.tableName, row, 'insert');
93
+ const rows = this.builder.insertData;
94
+ if (rows.length > 0) {
95
+ internalRelq.validateData(this.builder.tableName, rows[0], 'insert');
96
+ if (rows.length > 1) {
97
+ internalRelq.validateData(this.builder.tableName, rows[rows.length - 1], 'insert');
98
+ }
95
99
  }
96
100
  const sql = this.builder.toString();
97
101
  const result = await internalRelq.executeRun(sql);
@@ -100,9 +104,13 @@ class ConnectedInsertBuilder {
100
104
  }
101
105
  return result.metadata.rowCount ?? 0;
102
106
  }
103
- returning(columns) {
104
- if (columns === null) {
105
- return this;
107
+ returning(...args) {
108
+ let columns;
109
+ if (args.length === 1) {
110
+ columns = args[0];
111
+ }
112
+ else {
113
+ columns = args;
106
114
  }
107
115
  (0, capability_guard_1.requireCapability)(this.relq, 'returning', 'RETURNING clause', 'Use a SELECT query after the INSERT to retrieve inserted data');
108
116
  this.builder.returning(columns);
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConnectedInsertFromSelectBuilder = void 0;
4
- const methods_1 = require("./methods.cjs");
4
+ const methods_1 = require("../../core/helpers/methods.cjs");
5
5
  const ReturningExecutor_1 = require("./ReturningExecutor.cjs");
6
- const capability_guard_1 = require("./capability-guard.cjs");
6
+ const capability_guard_1 = require("../../core/helpers/capability-guard.cjs");
7
7
  class ConnectedInsertFromSelectBuilder {
8
8
  builder;
9
9
  relq;
@@ -54,9 +54,13 @@ class ConnectedInsertFromSelectBuilder {
54
54
  }
55
55
  return result.metadata.rowCount ?? 0;
56
56
  }
57
- returning(columns) {
58
- if (columns === null) {
59
- return this;
57
+ returning(...args) {
58
+ let columns;
59
+ if (args.length === 1) {
60
+ columns = args[0];
61
+ }
62
+ else {
63
+ columns = args;
60
64
  }
61
65
  (0, capability_guard_1.requireCapability)(this.relq, 'returning', 'RETURNING clause', 'Use a SELECT query after the INSERT to retrieve inserted data');
62
66
  this.builder.returning(columns);
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConnectedQueryBuilder = void 0;
4
- const count_builder_1 = require("../../count/count-builder.cjs");
5
- const delete_builder_1 = require("../../delete/delete-builder.cjs");
6
- const insert_builder_1 = require("../../insert/insert-builder.cjs");
7
- const insert_from_select_builder_1 = require("../../insert/insert-from-select-builder.cjs");
8
- const aggregate_builder_1 = require("../../select/aggregate-builder.cjs");
9
- const select_builder_1 = require("../../select/select-builder.cjs");
10
- const update_builder_1 = require("../../update/update-builder.cjs");
4
+ const count_builder_1 = require("../count/count-builder.cjs");
5
+ const delete_builder_1 = require("../delete/delete-builder.cjs");
6
+ const insert_builder_1 = require("../insert/insert-builder.cjs");
7
+ const insert_from_select_builder_1 = require("../insert/insert-from-select-builder.cjs");
8
+ const aggregate_builder_1 = require("../select/aggregate-builder.cjs");
9
+ const select_builder_1 = require("../select/select-builder.cjs");
10
+ const update_builder_1 = require("../update/update-builder.cjs");
11
11
  const ConnectedAggregateBuilder_1 = require("./ConnectedAggregateBuilder.cjs");
12
12
  const ConnectedCountBuilder_1 = require("./ConnectedCountBuilder.cjs");
13
13
  const ConnectedDeleteBuilder_1 = require("./ConnectedDeleteBuilder.cjs");
@@ -15,9 +15,10 @@ const ConnectedInsertBuilder_1 = require("./ConnectedInsertBuilder.cjs");
15
15
  const ConnectedInsertFromSelectBuilder_1 = require("./ConnectedInsertFromSelectBuilder.cjs");
16
16
  const ConnectedSelectBuilder_1 = require("./ConnectedSelectBuilder.cjs");
17
17
  const ConnectedUpdateBuilder_1 = require("./ConnectedUpdateBuilder.cjs");
18
- const methods_1 = require("./methods.cjs");
18
+ const methods_1 = require("../../core/helpers/methods.cjs");
19
19
  const PaginateBuilder_1 = require("./PaginateBuilder.cjs");
20
- const table_accessor_1 = require("../shared/table-accessor.cjs");
20
+ const table_accessor_1 = require("../../core/shared/table-accessor.cjs");
21
+ const relq_errors_1 = require("../../shared/errors/relq-errors.cjs");
21
22
  const query_convenience_1 = require("./query-convenience.cjs");
22
23
  class ConnectedQueryBuilder {
23
24
  tableName;
@@ -45,12 +46,12 @@ class ConnectedQueryBuilder {
45
46
  if (columns !== undefined) {
46
47
  if (Array.isArray(columns)) {
47
48
  if (columns.length === 0) {
48
- throw new Error('select() requires at least one column. Use .select() without arguments for SELECT *');
49
+ throw new relq_errors_1.RelqBuilderError('select() requires at least one column', { builder: 'select', hint: 'Use .select() without arguments for SELECT *' });
49
50
  }
50
51
  }
51
52
  else if (typeof columns === 'string') {
52
53
  if (columns === '' || columns === '*') {
53
- throw new Error(`Invalid column name: "${columns}". Use .select() without arguments for SELECT *, or specify column names`);
54
+ throw new relq_errors_1.RelqBuilderError(`Invalid column name: "${columns}"`, { builder: 'select', hint: 'Use .select() without arguments for SELECT *, or pass valid column names' });
54
55
  }
55
56
  }
56
57
  }
@@ -84,8 +85,8 @@ class ConnectedQueryBuilder {
84
85
  return new ConnectedInsertBuilder_1.ConnectedInsertBuilder(builder, this.relq, this.tableName, this.schemaKey);
85
86
  }
86
87
  const builder = new insert_builder_1.InsertBuilder(this.tableName, rows[0]);
87
- for (let i = 1; i < rows.length; i++) {
88
- builder.addRow(rows[i]);
88
+ if (rows.length > 1) {
89
+ builder.addRows(rows.slice(1));
89
90
  }
90
91
  return new ConnectedInsertBuilder_1.ConnectedInsertBuilder(builder, this.relq, this.tableName, this.schemaKey);
91
92
  }
@@ -136,11 +137,5 @@ class ConnectedQueryBuilder {
136
137
  async createWith(options) {
137
138
  return (0, query_convenience_1.executeCreateWith)(this.ctx, options.data, options.with);
138
139
  }
139
- async softDelete(filter) {
140
- return (0, query_convenience_1.executeSoftDelete)(this.ctx, filter);
141
- }
142
- async restore(filter) {
143
- return (0, query_convenience_1.executeRestore)(this.ctx, filter);
144
- }
145
140
  }
146
141
  exports.ConnectedQueryBuilder = ConnectedQueryBuilder;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConnectedRawQueryBuilder = void 0;
4
+ const raw_1 = require("../raw/index.cjs");
5
+ const methods_1 = require("../../core/helpers/methods.cjs");
6
+ class ConnectedRawQueryBuilder {
7
+ params;
8
+ relq;
9
+ builder;
10
+ constructor(query, params, relq) {
11
+ this.params = params;
12
+ this.relq = relq;
13
+ const convertedQuery = this.convertPlaceholders(query);
14
+ this.builder = new raw_1.RawQueryBuilder(convertedQuery, this.params);
15
+ }
16
+ convertPlaceholders(query) {
17
+ let index = 0;
18
+ return query.replace(/\?/g, () => `$${++index}`);
19
+ }
20
+ async all() {
21
+ const sql = this.builder.toString();
22
+ const { result, duration } = await this.relq[methods_1.INTERNAL].executeRawQuery(sql);
23
+ return {
24
+ data: result.rows,
25
+ metadata: { rowCount: result.rowCount, command: result.command, duration, fields: result.fields },
26
+ };
27
+ }
28
+ async get() {
29
+ const sql = this.builder.toString();
30
+ const { result, duration } = await this.relq[methods_1.INTERNAL].executeRawQuery(sql);
31
+ const row = result.rows[0] || null;
32
+ return {
33
+ data: row,
34
+ metadata: { rowCount: result.rowCount, command: result.command, duration, fields: result.fields },
35
+ };
36
+ }
37
+ async getMany(count) {
38
+ const sql = this.builder.toString();
39
+ const limitedSql = sql.toUpperCase().includes('LIMIT')
40
+ ? sql
41
+ : `${sql} LIMIT ${count}`;
42
+ const { result, duration } = await this.relq[methods_1.INTERNAL].executeRawQuery(limitedSql);
43
+ return {
44
+ data: result.rows,
45
+ metadata: { rowCount: result.rowCount, command: result.command, duration, fields: result.fields },
46
+ };
47
+ }
48
+ async run() {
49
+ const sql = this.builder.toString();
50
+ const { result, duration } = await this.relq[methods_1.INTERNAL].executeRawQuery(sql);
51
+ return {
52
+ success: true,
53
+ metadata: { rowCount: result.rowCount, command: result.command, duration, fields: result.fields },
54
+ };
55
+ }
56
+ async count() {
57
+ const sql = this.builder.toString();
58
+ const { result, duration } = await this.relq[methods_1.INTERNAL].executeRawQuery(sql);
59
+ const row = result.rows[0];
60
+ const count = row ? Number(Object.values(row)[0]) || 0 : 0;
61
+ return {
62
+ count,
63
+ metadata: { rowCount: result.rowCount, command: result.command, duration, fields: result.fields },
64
+ };
65
+ }
66
+ }
67
+ exports.ConnectedRawQueryBuilder = ConnectedRawQueryBuilder;
@@ -1,28 +1,35 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.ConnectedSelectBuilder = void 0;
4
- const methods_1 = require("./methods.cjs");
7
+ const condition_collector_1 = require("../condition/condition-collector.cjs");
8
+ const methods_1 = require("../../core/helpers/methods.cjs");
5
9
  const select_joins_1 = require("./select-joins.cjs");
6
10
  const select_pagination_1 = require("./select-pagination.cjs");
7
- const capability_guard_1 = require("./capability-guard.cjs");
8
- const table_accessor_1 = require("../shared/table-accessor.cjs");
9
- const sql_expression_1 = require("../../select/sql-expression.cjs");
10
- const table_proxy_1 = require("../../select/table-proxy.cjs");
11
- const fk_resolver_1 = require("../../utils/fk-resolver.cjs");
11
+ const capability_guard_1 = require("../../core/helpers/capability-guard.cjs");
12
+ const table_accessor_1 = require("../../core/shared/table-accessor.cjs");
13
+ const sql_expression_1 = require("../select/sql-expression.cjs");
14
+ const table_proxy_1 = require("../select/table-proxy.cjs");
15
+ const fk_resolver_1 = require("../utils/fk-resolver.cjs");
16
+ const relq_errors_1 = require("../../shared/errors/relq-errors.cjs");
17
+ const pg_format_1 = __importDefault(require("../../shared/pg-format.cjs"));
12
18
  class ConnectedSelectBuilder {
13
19
  builder;
14
20
  relq;
15
21
  tableName;
16
- columns;
17
22
  schemaKey;
18
- constructor(builder, relq, tableName, columns, schemaKey) {
23
+ constructor(builder, relq, tableName, _columns, schemaKey) {
19
24
  this.builder = builder;
20
25
  this.relq = relq;
21
26
  this.tableName = tableName;
22
- this.columns = columns;
23
27
  this.schemaKey = schemaKey;
24
28
  this.setupColumnResolver();
25
29
  }
30
+ get _sourceTableKey() {
31
+ return this.schemaKey || this.tableName;
32
+ }
26
33
  get joinCtx() {
27
34
  return { relq: this.relq, builder: this.builder, tableName: this.tableName, schemaKey: this.schemaKey };
28
35
  }
@@ -57,6 +64,24 @@ class ConnectedSelectBuilder {
57
64
  const transformed = { ...row };
58
65
  for (const join of joins) {
59
66
  const alias = join.alias;
67
+ if (join.flat && join.selectColumns) {
68
+ const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
69
+ const prefix = join.flat.prefix || alias;
70
+ const joinedTableDef = internal.getTableDef(join.schemaKey || alias) || internal.getTableDef(join.table);
71
+ const tableColumns = joinedTableDef ? (joinedTableDef.$columns || joinedTableDef) : null;
72
+ for (const col of join.selectColumns) {
73
+ const flatKey = `${prefix}${capitalize(col.property)}`;
74
+ if (transformed[flatKey] != null && tableColumns) {
75
+ const colDef = tableColumns[col.property];
76
+ const sqlType = colDef?.$sqlType || (typeof colDef?.$type === 'string' ? colDef.$type : undefined);
77
+ if (sqlType) {
78
+ transformed[flatKey] = this.coerceValue(transformed[flatKey], sqlType.toLowerCase());
79
+ }
80
+ }
81
+ }
82
+ delete transformed[alias];
83
+ continue;
84
+ }
60
85
  const nestedData = transformed[alias];
61
86
  if (nestedData === null || nestedData === undefined) {
62
87
  continue;
@@ -116,7 +141,21 @@ class ConnectedSelectBuilder {
116
141
  return value;
117
142
  }
118
143
  }
119
- where(callback) {
144
+ where(callbackOrCondition) {
145
+ if (callbackOrCondition instanceof condition_collector_1.ConditionCollector) {
146
+ const conditionTable = callbackOrCondition._tableName;
147
+ if (conditionTable) {
148
+ const matches = conditionTable === this.schemaKey || conditionTable === this.tableName;
149
+ if (!matches) {
150
+ const queryTable = this.schemaKey || this.tableName;
151
+ throw new relq_errors_1.RelqBuilderError(`Condition was created for table '${conditionTable}' but is being used on '${queryTable}'. ` +
152
+ `Create the condition with db.where('${queryTable}') instead.`);
153
+ }
154
+ }
155
+ this.builder.where(callbackOrCondition);
156
+ return this;
157
+ }
158
+ const callback = callbackOrCondition;
120
159
  this.builder.where((q) => {
121
160
  q._tables = (0, table_accessor_1.createTableAccessor)(this.relq, this.relq.schema);
122
161
  return callback(q);
@@ -160,21 +199,73 @@ class ConnectedSelectBuilder {
160
199
  const agg = new sql_expression_1.AggregateFunctions();
161
200
  const internal = this.relq[methods_1.INTERNAL];
162
201
  const schema = internal.getSchema() || {};
202
+ const relations = internal.getRelations();
163
203
  const sourceSchemaKey = this.schemaKey || this.tableName;
164
204
  const sourceAlias = this.builder.getTableIdentifier();
205
+ const accessedTables = new Set();
165
206
  const tableProxies = new Proxy({}, {
166
207
  get(_, tableKey) {
167
208
  if (typeof tableKey === 'symbol')
168
209
  return undefined;
169
- const tableDef = schema[tableKey];
170
- const tableName = tableDef?.$name || tableKey;
171
- const alias = tableKey === sourceSchemaKey ? sourceAlias : tableKey;
172
- return (0, table_proxy_1.createTableProxy)(tableName, alias, tableDef);
210
+ const key = tableKey;
211
+ const tableDef = schema[key];
212
+ const tableName = tableDef?.$name || key;
213
+ if (key === sourceSchemaKey) {
214
+ return (0, table_proxy_1.createTableProxy)(tableName, sourceAlias, tableDef);
215
+ }
216
+ accessedTables.add(key);
217
+ return (0, table_proxy_1.createTableProxy)(tableName, key, tableDef);
173
218
  }
174
219
  });
175
220
  const expressions = callback(agg, tableProxies);
221
+ const sourceExprs = [];
222
+ const externalExprs = new Map();
176
223
  for (const [alias, expr] of Object.entries(expressions)) {
177
- this.builder.addIncludeExpression(alias, expr.sql);
224
+ let targetTable = null;
225
+ for (const tableKey of accessedTables) {
226
+ if (expr.sql.includes(`"${tableKey}".`)) {
227
+ targetTable = tableKey;
228
+ break;
229
+ }
230
+ }
231
+ if (targetTable) {
232
+ if (!externalExprs.has(targetTable)) {
233
+ externalExprs.set(targetTable, []);
234
+ }
235
+ externalExprs.get(targetTable).push({ alias, sql: expr.sql });
236
+ }
237
+ else {
238
+ sourceExprs.push({ alias, sql: expr.sql });
239
+ }
240
+ }
241
+ for (const e of sourceExprs) {
242
+ this.builder.addIncludeExpression(e.alias, e.sql);
243
+ }
244
+ for (const [tableKey, exprs] of externalExprs) {
245
+ const tableDef = schema[tableKey];
246
+ const sqlTableName = tableDef?.$name || tableKey;
247
+ const existingJoins = this.builder.getStructuredJoins();
248
+ const alreadyJoined = existingJoins.some(j => j.table === sqlTableName || j.schemaKey === tableKey || j.alias === tableKey);
249
+ if (alreadyJoined) {
250
+ for (const e of exprs) {
251
+ this.builder.addIncludeExpression(e.alias, e.sql);
252
+ }
253
+ continue;
254
+ }
255
+ const fk = (0, fk_resolver_1.resolveForeignKey)(relations, schema, sourceSchemaKey, tableKey);
256
+ if (!fk) {
257
+ throw new relq_errors_1.RelqBuilderError(`include() references table "${tableKey}" but no foreign key relationship exists between "${sourceSchemaKey}" and "${tableKey}". Define the relationship in your relations config.`, { builder: 'include', hint: `Add a relation from "${sourceSchemaKey}" to "${tableKey}" in pgRelations().` });
258
+ }
259
+ const lateralAlias = `${tableKey}_agg`;
260
+ const innerSelects = exprs.map(e => {
261
+ const unqualifiedSql = e.sql.replace(new RegExp(`"${tableKey}"\\.`, 'g'), '');
262
+ return `${unqualifiedSql} AS ${pg_format_1.default.ident(e.alias)}`;
263
+ }).join(', ');
264
+ const lateralSql = `LEFT JOIN LATERAL (SELECT ${innerSelects} FROM ${pg_format_1.default.ident(sqlTableName)} WHERE ${pg_format_1.default.ident(fk.toColumn)} = ${pg_format_1.default.ident(sourceAlias)}.${pg_format_1.default.ident(fk.fromColumn)}) AS ${pg_format_1.default.ident(lateralAlias)} ON true`;
265
+ this.builder.addRawJoin(lateralSql);
266
+ for (const e of exprs) {
267
+ this.builder.addIncludeExpression(e.alias, `(ARRAY_AGG(${pg_format_1.default.ident(lateralAlias)}.${pg_format_1.default.ident(e.alias)}))[1]`);
268
+ }
178
269
  }
179
270
  return this;
180
271
  }
@@ -194,6 +285,15 @@ class ConnectedSelectBuilder {
194
285
  (0, select_joins_1.executeTypeSafeJoin)(this.joinCtx, 'INNER JOIN', tableOrAlias, callback);
195
286
  return this;
196
287
  }
288
+ crossJoin(tableOrAlias) {
289
+ const [tableKey, alias] = Array.isArray(tableOrAlias) ? tableOrAlias : [tableOrAlias, tableOrAlias];
290
+ const internal = this.relq[methods_1.INTERNAL];
291
+ const tableDef = internal.getTableDef(tableKey);
292
+ const tableSqlName = tableDef?.$name || tableKey;
293
+ this.builder.crossJoin(tableSqlName);
294
+ this.builder.addStructuredJoin({ table: tableSqlName, alias, type: 'CROSS JOIN', schemaKey: tableKey });
295
+ return this;
296
+ }
197
297
  joinSubquery(alias, subquery, onClause) {
198
298
  const subquerySQL = typeof subquery === 'string' ? subquery : subquery.toString();
199
299
  this.builder.addRawJoin(`JOIN (${subquerySQL}) AS "${alias}" ON ${onClause}`);
@@ -238,14 +338,12 @@ class ConnectedSelectBuilder {
238
338
  const schema = internal.getSchema();
239
339
  const relations = internal.getRelations();
240
340
  if (!schema || !relations) {
241
- throw new Error(`Cannot use .withMany('${table}') without schema and relations config. ` +
242
- `Use .leftJoinMany() with an explicit callback instead.`);
341
+ throw new relq_errors_1.RelqBuilderError(`Cannot use .withMany('${table}') without schema and relations config. Pass relations when creating Relq: new Relq(schema, dialect, { relations }).`, { builder: 'withMany', hint: `Use .leftJoinMany() with an explicit callback instead.` });
243
342
  }
244
343
  const sourceKey = this.schemaKey || this.tableName;
245
344
  const fk = (0, fk_resolver_1.resolveForeignKey)(relations, schema, sourceKey, table);
246
345
  if (!fk) {
247
- throw new Error(`No FK relationship found between "${sourceKey}" and "${table}". ` +
248
- `Use .leftJoinMany() with explicit join conditions instead.`);
346
+ throw new relq_errors_1.RelqBuilderError(`No foreign key relationship found between "${sourceKey}" and "${table}". Define the relationship in your relations config.`, { builder: 'withMany', hint: `Use .leftJoinMany() with explicit join conditions instead.` });
249
347
  }
250
348
  (0, select_joins_1.executeTypeSafeJoinMany)(this.joinCtx, 'LEFT JOIN', table, (on, right, left) => {
251
349
  const rightCol = right[fk.toColumn];
@@ -288,6 +386,10 @@ class ConnectedSelectBuilder {
288
386
  this.builder.forUpdateSkipLocked();
289
387
  return this;
290
388
  }
389
+ forUpdateNoWait() {
390
+ this.builder.forUpdateNoWait();
391
+ return this;
392
+ }
291
393
  forShare() {
292
394
  this.builder.forShare();
293
395
  return this;
@@ -314,12 +416,6 @@ class ConnectedSelectBuilder {
314
416
  }
315
417
  return transformedData;
316
418
  }
317
- async value(column) {
318
- this.builder.limit(1);
319
- const sql = this.builder.toString();
320
- const result = await this.relq[methods_1.INTERNAL].executeSelectOne(sql, this.tableName);
321
- return result.data?.[column] ?? null;
322
- }
323
419
  async each(callback, options = {}) {
324
420
  (0, capability_guard_1.requireCapability)(this.relq, 'cursors', 'Cursor-based iteration (each)', 'Use pagination() instead of each() for row-by-row processing');
325
421
  return (0, select_pagination_1.executeCursorEach)(this.paginationCtx, callback, options);
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TransactionClient = void 0;
4
4
  exports.executeTransaction = executeTransaction;
5
5
  const ConnectedRawQueryBuilder_1 = require("./ConnectedRawQueryBuilder.cjs");
6
- const table_accessor_1 = require("../shared/table-accessor.cjs");
7
- const methods_1 = require("./methods.cjs");
6
+ const table_accessor_1 = require("../../core/shared/table-accessor.cjs");
7
+ const methods_1 = require("../../core/helpers/methods.cjs");
8
8
  class TransactionClient {
9
9
  client;
10
10
  relq;
@@ -23,6 +23,15 @@ class TransactionClient {
23
23
  raw(query, ...params) {
24
24
  return new ConnectedRawQueryBuilder_1.ConnectedRawQueryBuilder(query, params, this);
25
25
  }
26
+ async savepoint(name) {
27
+ await this.client.query(`SAVEPOINT "${name}"`);
28
+ }
29
+ async rollbackTo(name) {
30
+ await this.client.query(`ROLLBACK TO SAVEPOINT "${name}"`);
31
+ }
32
+ async releaseSavepoint(name) {
33
+ await this.client.query(`RELEASE SAVEPOINT "${name}"`);
34
+ }
26
35
  get [methods_1.INTERNAL]() {
27
36
  const parentInternal = this.relq[methods_1.INTERNAL];
28
37
  const queryViaClient = async (sql) => {
@@ -70,6 +79,7 @@ class TransactionClient {
70
79
  return { success: true, metadata: buildMetadata(result, duration) };
71
80
  },
72
81
  transformToDbColumns: parentInternal.transformToDbColumns,
82
+ executeRawQuery: queryViaClient,
73
83
  transformFromDbColumns: parentInternal.transformFromDbColumns,
74
84
  transformResultsFromDb: parentInternal.transformResultsFromDb,
75
85
  hasColumnMapping: parentInternal.hasColumnMapping,
@@ -82,11 +92,31 @@ class TransactionClient {
82
92
  }
83
93
  }
84
94
  exports.TransactionClient = TransactionClient;
85
- async function executeTransaction(relq, callback) {
95
+ async function executeTransaction(relq, callback, options) {
86
96
  await relq.ensureInitialized();
87
97
  const { client, release } = await relq[methods_1.INTERNAL].getClientForCursor();
88
98
  try {
89
- await client.query('BEGIN');
99
+ let beginSql = 'BEGIN';
100
+ const parts = [];
101
+ if (options?.isolation) {
102
+ parts.push(`ISOLATION LEVEL ${options.isolation}`);
103
+ }
104
+ if (options?.readOnly === true) {
105
+ parts.push('READ ONLY');
106
+ }
107
+ else if (options?.readOnly === false) {
108
+ parts.push('READ WRITE');
109
+ }
110
+ if (options?.deferrable === true) {
111
+ parts.push('DEFERRABLE');
112
+ }
113
+ else if (options?.deferrable === false) {
114
+ parts.push('NOT DEFERRABLE');
115
+ }
116
+ if (parts.length > 0) {
117
+ beginSql += ' ' + parts.join(' ');
118
+ }
119
+ await client.query(beginSql);
90
120
  const tx = new TransactionClient(client, relq);
91
121
  const result = await callback(tx);
92
122
  await client.query('COMMIT');
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConnectedUpdateBuilder = void 0;
4
- const methods_1 = require("./methods.cjs");
4
+ const condition_collector_1 = require("../condition/condition-collector.cjs");
5
+ const methods_1 = require("../../core/helpers/methods.cjs");
5
6
  const ReturningExecutor_1 = require("./ReturningExecutor.cjs");
6
- const capability_guard_1 = require("./capability-guard.cjs");
7
- const table_accessor_1 = require("../shared/table-accessor.cjs");
7
+ const capability_guard_1 = require("../../core/helpers/capability-guard.cjs");
8
+ const table_accessor_1 = require("../../core/shared/table-accessor.cjs");
9
+ const relq_errors_1 = require("../../shared/errors/relq-errors.cjs");
8
10
  class ConnectedUpdateBuilder {
9
11
  builder;
10
12
  relq;
@@ -48,7 +50,21 @@ class ConnectedUpdateBuilder {
48
50
  return { type: baseType, isArray };
49
51
  });
50
52
  }
51
- where(callback) {
53
+ where(callbackOrCondition) {
54
+ if (callbackOrCondition instanceof condition_collector_1.ConditionCollector) {
55
+ const conditionTable = callbackOrCondition._tableName;
56
+ if (conditionTable) {
57
+ const matches = conditionTable === this.schemaKey || conditionTable === this.tableName;
58
+ if (!matches) {
59
+ const queryTable = this.schemaKey || this.tableName;
60
+ throw new relq_errors_1.RelqBuilderError(`Condition was created for table '${conditionTable}' but is being used on '${queryTable}'. ` +
61
+ `Create the condition with db.where('${queryTable}') instead.`);
62
+ }
63
+ }
64
+ this.builder.where(callbackOrCondition);
65
+ return this;
66
+ }
67
+ const callback = callbackOrCondition;
52
68
  this.builder.where((q) => {
53
69
  q._tables = (0, table_accessor_1.createTableAccessor)(this.relq, this.relq.schema);
54
70
  return callback(q);
@@ -67,9 +83,13 @@ class ConnectedUpdateBuilder {
67
83
  }
68
84
  return result.metadata.rowCount ?? 0;
69
85
  }
70
- returning(columns) {
71
- if (columns === null) {
72
- return this;
86
+ returning(...args) {
87
+ let columns;
88
+ if (args.length === 1) {
89
+ columns = args[0];
90
+ }
91
+ else {
92
+ columns = args;
73
93
  }
74
94
  (0, capability_guard_1.requireCapability)(this.relq, 'returning', 'RETURNING clause', 'Use a SELECT query after the UPDATE to retrieve modified data');
75
95
  this.builder.returning(columns);
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PaginateBuilder = void 0;
4
- const count_builder_1 = require("../../count/count-builder.cjs");
4
+ const count_builder_1 = require("../count/count-builder.cjs");
5
5
  const relq_errors_1 = require("../../shared/errors/relq-errors.cjs");
6
- const select_builder_1 = require("../../select/select-builder.cjs");
7
- const methods_1 = require("./methods.cjs");
6
+ const select_builder_1 = require("../select/select-builder.cjs");
7
+ const methods_1 = require("../../core/helpers/methods.cjs");
8
8
  class PaginateBuilder {
9
9
  relq;
10
10
  tableName;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ReturningExecutor = void 0;
4
- const insert_builder_1 = require("../../insert/insert-builder.cjs");
5
- const update_builder_1 = require("../../update/update-builder.cjs");
6
- const methods_1 = require("./methods.cjs");
4
+ const insert_builder_1 = require("../insert/insert-builder.cjs");
5
+ const update_builder_1 = require("../update/update-builder.cjs");
6
+ const methods_1 = require("../../core/helpers/methods.cjs");
7
7
  class ReturningExecutor {
8
8
  builder;
9
9
  relq;