@relq/orm 0.1.3 → 0.1.4

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 +4 -3
  4. package/dist/cjs/addon/mysql2.cjs +21144 -0
  5. package/dist/cjs/addon/pg.cjs +4 -3
  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 +52 -25
  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 +4 -3
  171. package/dist/esm/addon/mysql2.js +21132 -0
  172. package/dist/esm/addon/pg.js +4 -3
  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 +44 -24
  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 +5 -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
@@ -30,7 +30,7 @@ var __toESM = (mod, isNodeMode, target) => {
30
30
  return to;
31
31
  };
32
32
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
33
- var __require = /* @__PURE__ */ createRequire(import.meta.url);
33
+ var __require = /* @__PURE__ */ createRequire(import.meta.url ?? "file://" + (typeof __filename !== "undefined" ? __filename : process.argv[1] || process.cwd() + "/"));
34
34
 
35
35
  // node_modules/postgres-array/index.js
36
36
  var require_postgres_array = __commonJS((exports) => {
@@ -338,9 +338,10 @@ var require_postgres_interval = __commonJS((exports, module) => {
338
338
 
339
339
  // node_modules/postgres-bytea/index.js
340
340
  var require_postgres_bytea = __commonJS((exports, module) => {
341
+ var bufferFrom = Buffer.from || Buffer;
341
342
  module.exports = function parseBytea(input) {
342
343
  if (/^\\x/.test(input)) {
343
- return new Buffer(input.substr(2), "hex");
344
+ return bufferFrom(input.substr(2), "hex");
344
345
  }
345
346
  var output = "";
346
347
  var i = 0;
@@ -364,7 +365,7 @@ var require_postgres_bytea = __commonJS((exports, module) => {
364
365
  }
365
366
  }
366
367
  }
367
- return new Buffer(output, "binary");
368
+ return bufferFrom(output, "binary");
368
369
  };
369
370
  });
370
371
 
@@ -143,7 +143,6 @@ export class QueryCache {
143
143
  if (this.cache.size === 0)
144
144
  return;
145
145
  let keyToEvict;
146
- let entryToEvict;
147
146
  switch (this.options.strategy) {
148
147
  case 'lru':
149
148
  keyToEvict = this.cache.keys().next().value;
@@ -154,7 +153,6 @@ export class QueryCache {
154
153
  if (entry.createdAt < oldestTime) {
155
154
  oldestTime = entry.createdAt;
156
155
  keyToEvict = key;
157
- entryToEvict = entry;
158
156
  }
159
157
  });
160
158
  break;
@@ -164,7 +162,6 @@ export class QueryCache {
164
162
  if (entry.size > largestSize) {
165
163
  largestSize = entry.size;
166
164
  keyToEvict = key;
167
- entryToEvict = entry;
168
165
  }
169
166
  });
170
167
  break;
@@ -277,7 +274,7 @@ export function createQueryCacheMiddleware(options) {
277
274
  }
278
275
  };
279
276
  }
280
- export function withCache(cache, key, fn, ttl) {
277
+ export function withCache(cache, key, fn, _ttl) {
281
278
  const cached = cache.get(key);
282
279
  if (cached !== undefined) {
283
280
  return cached;
@@ -0,0 +1,75 @@
1
+ export class CTERefBuilder {
2
+ cteName;
3
+ dialect;
4
+ resolveColumn;
5
+ selectedColumns = [];
6
+ whereConditions = [];
7
+ orderByClauses = [];
8
+ limitCount;
9
+ _sourceTableKey;
10
+ constructor(cteName, dialect, resolveColumn = (c) => c, sourceTableKey) {
11
+ this.cteName = cteName;
12
+ this.dialect = dialect;
13
+ this.resolveColumn = resolveColumn;
14
+ this._sourceTableKey = sourceTableKey;
15
+ }
16
+ select(...columns) {
17
+ this.selectedColumns = columns.map(c => this.resolveColumn(c));
18
+ return this;
19
+ }
20
+ where(callback) {
21
+ const collector = this.dialect.createCollector();
22
+ callback(collector);
23
+ const conditions = collector.getConditions();
24
+ this.whereConditions.push(...this.transformConditions(conditions));
25
+ return this;
26
+ }
27
+ orderBy(column, direction = 'ASC') {
28
+ this.orderByClauses.push(`${this.dialect.quoteIdent(this.resolveColumn(column))} ${direction}`);
29
+ return this;
30
+ }
31
+ limit(count) {
32
+ this.limitCount = count;
33
+ return this;
34
+ }
35
+ toString() {
36
+ const q = this.dialect.quoteIdent;
37
+ const cols = this.selectedColumns.length > 0
38
+ ? this.selectedColumns.map(c => q(c)).join(', ')
39
+ : '*';
40
+ let sql = `SELECT ${cols} FROM ${q(this.cteName)}`;
41
+ if (this.whereConditions.length > 0) {
42
+ sql += ` WHERE ${this.dialect.buildConditionsSQL(this.whereConditions)}`;
43
+ }
44
+ if (this.orderByClauses.length > 0) {
45
+ sql += ` ORDER BY ${this.orderByClauses.join(', ')}`;
46
+ }
47
+ if (this.limitCount !== undefined) {
48
+ sql += ` LIMIT ${this.limitCount}`;
49
+ }
50
+ return sql;
51
+ }
52
+ transformConditions(conditions) {
53
+ return conditions.map((cond) => {
54
+ if (!cond.column)
55
+ return cond;
56
+ if (cond.method === 'or' || cond.method === 'and' || cond.method === 'not') {
57
+ return { ...cond, values: this.transformConditions(cond.values) };
58
+ }
59
+ return { ...cond, column: this.resolveColumn(cond.column) };
60
+ });
61
+ }
62
+ }
63
+ export function createCTEAccessor(cteNames, dialect, cteMetas) {
64
+ return new Proxy({}, {
65
+ get(_, prop) {
66
+ if (typeof prop === 'symbol')
67
+ return undefined;
68
+ if (!cteNames.has(prop)) {
69
+ throw new Error(`CTE "${prop}" is not defined. Available CTEs: ${[...cteNames].join(', ')}.`);
70
+ }
71
+ const meta = cteMetas?.get(prop);
72
+ return new CTERefBuilder(prop, dialect, meta?.columnResolver || ((c) => c), meta?.sourceTableKey);
73
+ }
74
+ });
75
+ }
@@ -0,0 +1,20 @@
1
+ export function createPgCTEDialect() {
2
+ const { ConditionCollector, buildConditionsSQL } = require('../../pg/condition/condition-collector');
3
+ return {
4
+ quoteIdent: (name) => `"${name}"`,
5
+ supportsMaterialized: true,
6
+ supportsRecursive: true,
7
+ createCollector: () => new ConditionCollector(),
8
+ buildConditionsSQL: (conditions) => buildConditionsSQL(conditions),
9
+ };
10
+ }
11
+ export function createMysqlCTEDialect() {
12
+ const { MysqlConditionCollector, buildMysqlConditionsSQL } = require('../../mysql/condition/condition-collector');
13
+ return {
14
+ quoteIdent: (name) => `\`${name}\``,
15
+ supportsMaterialized: false,
16
+ supportsRecursive: true,
17
+ createCollector: () => new MysqlConditionCollector(),
18
+ buildConditionsSQL: (conditions) => buildMysqlConditionsSQL(conditions),
19
+ };
20
+ }
@@ -0,0 +1,250 @@
1
+ import { createCTEAccessor } from "./cte-accessor.js";
2
+ import { INTERNAL } from "../helpers/methods.js";
3
+ import { RelqBuilderError } from "../../shared/errors/relq-errors.js";
4
+ class CTEFromQuery {
5
+ cteName;
6
+ cteDefinitions;
7
+ dialect;
8
+ relq;
9
+ selectedColumns = [];
10
+ whereConditions = [];
11
+ orderByClauses = [];
12
+ limitCount;
13
+ offsetCount;
14
+ sourceTableKey;
15
+ numericAliases;
16
+ constructor(cteName, cteDefinitions, dialect, relq) {
17
+ this.cteName = cteName;
18
+ this.cteDefinitions = cteDefinitions;
19
+ this.dialect = dialect;
20
+ this.relq = relq;
21
+ const cteDef = cteDefinitions.find(c => c.name === cteName);
22
+ this.sourceTableKey = cteDef?.sourceTableKey;
23
+ this.numericAliases = cteDef?.numericAliases;
24
+ }
25
+ select(...columns) {
26
+ this.selectedColumns = columns.map(c => this.resolveColumn(c));
27
+ return this;
28
+ }
29
+ where(callback) {
30
+ const collector = this.dialect.createCollector();
31
+ callback(collector);
32
+ const conditions = collector.getConditions();
33
+ this.whereConditions.push(...this.transformConditions(conditions));
34
+ return this;
35
+ }
36
+ orderBy(column, direction = 'ASC') {
37
+ const dbCol = this.resolveColumn(column);
38
+ this.orderByClauses.push(`${this.dialect.quoteIdent(dbCol)} ${direction}`);
39
+ return this;
40
+ }
41
+ resolveColumn(propName) {
42
+ if (!this.sourceTableKey)
43
+ return propName;
44
+ try {
45
+ const mapped = this.relq[INTERNAL].transformToDbColumns(this.sourceTableKey, { [propName]: true });
46
+ const keys = Object.keys(mapped);
47
+ return keys.length > 0 ? keys[0] : propName;
48
+ }
49
+ catch {
50
+ return propName;
51
+ }
52
+ }
53
+ transformConditions(conditions) {
54
+ if (!this.sourceTableKey)
55
+ return conditions;
56
+ return conditions.map((cond) => {
57
+ if (!cond.column)
58
+ return cond;
59
+ if (cond.method === 'or' || cond.method === 'and' || cond.method === 'not') {
60
+ return { ...cond, values: this.transformConditions(cond.values) };
61
+ }
62
+ return { ...cond, column: this.resolveColumn(cond.column) };
63
+ });
64
+ }
65
+ limit(count) {
66
+ this.limitCount = count;
67
+ return this;
68
+ }
69
+ offset(count) {
70
+ this.offsetCount = count;
71
+ return this;
72
+ }
73
+ toString() {
74
+ return `${this.buildWithClause()} ${this.buildMainQuery()}`;
75
+ }
76
+ async all(withMetadata) {
77
+ const sql = this.toString();
78
+ const result = await this.relq[INTERNAL].executeSelect(sql, this.sourceTableKey);
79
+ this.coerceNumericResults(result.data);
80
+ if (withMetadata)
81
+ return { data: result.data, metadata: result.metadata };
82
+ return result.data;
83
+ }
84
+ async get(withMetadata) {
85
+ const sql = this.toString();
86
+ const result = await this.relq[INTERNAL].executeSelectOne(sql, this.sourceTableKey);
87
+ if (result.data)
88
+ this.coerceNumericResults([result.data]);
89
+ if (withMetadata)
90
+ return { data: result.data, metadata: result.metadata };
91
+ return result.data;
92
+ }
93
+ coerceNumericResults(rows) {
94
+ if (!this.numericAliases || this.numericAliases.length === 0)
95
+ return;
96
+ for (const row of rows) {
97
+ if (!row)
98
+ continue;
99
+ for (const alias of this.numericAliases) {
100
+ if (alias in row && typeof row[alias] === 'string') {
101
+ row[alias] = Number(row[alias]);
102
+ }
103
+ }
104
+ }
105
+ }
106
+ buildWithClause() {
107
+ if (this.cteDefinitions.length === 0)
108
+ return '';
109
+ const hasRecursive = this.cteDefinitions.some(c => c.recursive);
110
+ const keyword = hasRecursive ? 'WITH RECURSIVE' : 'WITH';
111
+ const q = this.dialect.quoteIdent;
112
+ const parts = this.cteDefinitions.map(cte => {
113
+ const name = q(cte.name);
114
+ if (cte.materialized && this.dialect.supportsMaterialized) {
115
+ return `${name} AS MATERIALIZED (${cte.sql})`;
116
+ }
117
+ return `${name} AS (${cte.sql})`;
118
+ });
119
+ return `${keyword} ${parts.join(', ')}`;
120
+ }
121
+ buildMainQuery() {
122
+ const q = this.dialect.quoteIdent;
123
+ const cols = this.selectedColumns.length > 0
124
+ ? this.selectedColumns.map(c => q(c)).join(', ')
125
+ : '*';
126
+ let sql = `SELECT ${cols} FROM ${q(this.cteName)}`;
127
+ if (this.whereConditions.length > 0) {
128
+ sql += ` WHERE ${this.dialect.buildConditionsSQL(this.whereConditions)}`;
129
+ }
130
+ if (this.orderByClauses.length > 0) {
131
+ sql += ` ORDER BY ${this.orderByClauses.join(', ')}`;
132
+ }
133
+ if (this.limitCount !== undefined)
134
+ sql += ` LIMIT ${this.limitCount}`;
135
+ if (this.offsetCount !== undefined)
136
+ sql += ` OFFSET ${this.offsetCount}`;
137
+ return sql;
138
+ }
139
+ }
140
+ export class NativeCTEBuilder {
141
+ relq;
142
+ dialect;
143
+ tableAccessorFactory;
144
+ cteDefinitions = [];
145
+ cteNames = new Set();
146
+ cteMetas = new Map();
147
+ constructor(relq, dialect, tableAccessorFactory) {
148
+ this.relq = relq;
149
+ this.dialect = dialect;
150
+ this.tableAccessorFactory = tableAccessorFactory;
151
+ }
152
+ with(name, callback) {
153
+ this.addCTE(name, callback, false);
154
+ return this;
155
+ }
156
+ withMaterialized(name, callback) {
157
+ if (!this.dialect.supportsMaterialized) {
158
+ throw new RelqBuilderError('MATERIALIZED CTEs are not supported on MySQL.', { builder: 'cte', hint: 'PostgreSQL 12+ only' });
159
+ }
160
+ this.addCTE(name, callback, true);
161
+ return this;
162
+ }
163
+ withRecursive(name, options) {
164
+ if (!this.dialect.supportsRecursive) {
165
+ throw new RelqBuilderError('Recursive CTEs are not supported on this dialect.', { builder: 'cte' });
166
+ }
167
+ this.validateName(name);
168
+ const tableAccessor = this.tableAccessorFactory(this.relq);
169
+ const baseBuilder = options.base(tableAccessor);
170
+ const baseSql = baseBuilder.toString();
171
+ const sourceTableKey = baseBuilder?._sourceTableKey;
172
+ const q = this.dialect.quoteIdent;
173
+ const selfResolve = sourceTableKey
174
+ ? (prop) => {
175
+ try {
176
+ const mapped = this.relq[INTERNAL].transformToDbColumns(sourceTableKey, { [prop]: true });
177
+ const keys = Object.keys(mapped);
178
+ return keys.length > 0 ? keys[0] : prop;
179
+ }
180
+ catch {
181
+ return prop;
182
+ }
183
+ }
184
+ : (prop) => prop;
185
+ const selfRef = {
186
+ select: (...cols) => ({
187
+ toString: () => {
188
+ const colsSql = cols.length > 0 ? cols.map(c => q(selfResolve(c))).join(', ') : '*';
189
+ return `SELECT ${colsSql} FROM ${q(name)}`;
190
+ }
191
+ })
192
+ };
193
+ const recursiveSql = options.recursive(tableAccessor, selfRef).toString();
194
+ let columnResolver;
195
+ if (sourceTableKey) {
196
+ columnResolver = (prop) => {
197
+ try {
198
+ const mapped = this.relq[INTERNAL].transformToDbColumns(sourceTableKey, { [prop]: true });
199
+ const keys = Object.keys(mapped);
200
+ return keys.length > 0 ? keys[0] : prop;
201
+ }
202
+ catch {
203
+ return prop;
204
+ }
205
+ };
206
+ }
207
+ this.cteMetas.set(name, { sourceTableKey, columnResolver });
208
+ this.cteDefinitions.push({ name, sql: `${baseSql} UNION ALL ${recursiveSql}`, materialized: false, recursive: true, sourceTableKey });
209
+ this.cteNames.add(name);
210
+ return this;
211
+ }
212
+ from(cteName) {
213
+ if (!this.cteNames.has(cteName)) {
214
+ throw new RelqBuilderError(`CTE "${cteName}" is not defined.`, { builder: 'cte' });
215
+ }
216
+ return new CTEFromQuery(cteName, [...this.cteDefinitions], this.dialect, this.relq);
217
+ }
218
+ validateName(name) {
219
+ if (this.cteNames.has(name)) {
220
+ throw new RelqBuilderError(`CTE "${name}" is already defined.`, { builder: 'cte' });
221
+ }
222
+ }
223
+ addCTE(name, callback, materialized) {
224
+ this.validateName(name);
225
+ const tableAccessor = this.tableAccessorFactory(this.relq);
226
+ const cteAccessor = createCTEAccessor(this.cteNames, this.dialect, this.cteMetas);
227
+ const builder = callback(tableAccessor, cteAccessor);
228
+ const sourceTableKey = builder?._sourceTableKey;
229
+ const innerBuilder = builder?.builder;
230
+ const numericAliases = typeof innerBuilder?.getNumericAliases === 'function'
231
+ ? innerBuilder.getNumericAliases()
232
+ : undefined;
233
+ let columnResolver;
234
+ if (sourceTableKey) {
235
+ columnResolver = (prop) => {
236
+ try {
237
+ const mapped = this.relq[INTERNAL].transformToDbColumns(sourceTableKey, { [prop]: true });
238
+ const keys = Object.keys(mapped);
239
+ return keys.length > 0 ? keys[0] : prop;
240
+ }
241
+ catch {
242
+ return prop;
243
+ }
244
+ };
245
+ }
246
+ this.cteMetas.set(name, { sourceTableKey, columnResolver });
247
+ this.cteDefinitions.push({ name, sql: builder.toString(), materialized, recursive: false, sourceTableKey, numericAliases });
248
+ this.cteNames.add(name);
249
+ }
250
+ }
@@ -1,13 +1,13 @@
1
- export { ConnectedAggregateBuilder } from "./ConnectedAggregateBuilder.js";
2
- export { ConnectedCTEBuilder } from "./ConnectedCTEBuilder.js";
3
- export { ConnectedSelectBuilder } from "./ConnectedSelectBuilder.js";
4
- export { ConnectedUpdateBuilder } from "./ConnectedUpdateBuilder.js";
5
- export { ConnectedDeleteBuilder } from "./ConnectedDeleteBuilder.js";
6
- export { ConnectedInsertBuilder } from "./ConnectedInsertBuilder.js";
7
- export { ConnectedCountBuilder } from "./ConnectedCountBuilder.js";
8
- export { TransactionClient, executeTransaction } from "./ConnectedTransactionBuilder.js";
9
- export { ConnectedQueryBuilder } from "./ConnectedQueryBuilder.js";
10
- export { ConnectedRawQueryBuilder } from "./ConnectedRawQueryBuilder.js";
11
- export { PaginateBuilder } from "./PaginateBuilder.js";
12
- export { ReturningExecutor } from "./ReturningExecutor.js";
1
+ export { ConnectedAggregateBuilder } from "../../pg/helpers/ConnectedAggregateBuilder.js";
2
+ export { NativeCTEBuilder } from "../cte/native-cte-builder.js";
3
+ export { ConnectedSelectBuilder } from "../../pg/helpers/ConnectedSelectBuilder.js";
4
+ export { ConnectedUpdateBuilder } from "../../pg/helpers/ConnectedUpdateBuilder.js";
5
+ export { ConnectedDeleteBuilder } from "../../pg/helpers/ConnectedDeleteBuilder.js";
6
+ export { ConnectedInsertBuilder } from "../../pg/helpers/ConnectedInsertBuilder.js";
7
+ export { ConnectedCountBuilder } from "../../pg/helpers/ConnectedCountBuilder.js";
8
+ export { TransactionClient, executeTransaction } from "../../pg/helpers/ConnectedTransactionBuilder.js";
9
+ export { ConnectedQueryBuilder } from "../../pg/helpers/ConnectedQueryBuilder.js";
10
+ export { ConnectedRawQueryBuilder } from "../../pg/helpers/ConnectedRawQueryBuilder.js";
11
+ export { PaginateBuilder } from "../../pg/helpers/PaginateBuilder.js";
12
+ export { ReturningExecutor } from "../../pg/helpers/ReturningExecutor.js";
13
13
  export { INTERNAL, debugLog } from "./methods.js";
@@ -1,11 +1,8 @@
1
1
  import { EventEmitter } from 'node:events';
2
2
  import { RelqConnectionError } from "../shared/errors/relq-errors.js";
3
- import { ConditionCollector } from "../condition/condition-collector.js";
4
- import { ConnectedCTEBuilder, ConnectedRawQueryBuilder, INTERNAL, debugLog } from "./helpers/index.js";
5
- import { ConnectedScalarSelectBuilder } from "../select/scalar-select-builder.js";
3
+ import { INTERNAL, debugLog } from "./helpers/index.js";
6
4
  import { buildColumnMappings, transformToDbColumns, transformFromDbColumns, transformResultsFromDb, hasColumnMapping } from "./shared/column-mapping.js";
7
5
  import { validateData } from "./shared/validation.js";
8
- import { createTableAccessor } from "./shared/table-accessor.js";
9
6
  import { registerInstance, unregisterInstance } from "./shared/cleanup.js";
10
7
  export class RelqBase {
11
8
  config;
@@ -75,6 +72,7 @@ export class RelqBase {
75
72
  executeCount: this._executeCount.bind(this),
76
73
  executeRun: this._executeRun.bind(this),
77
74
  executeQuery: this._executeQuery.bind(this),
75
+ executeRawQuery: (sql) => this._executeQuery(sql, false),
78
76
  transformToDbColumns: this._transformToDbColumns.bind(this),
79
77
  transformFromDbColumns: this._transformFromDbColumns.bind(this),
80
78
  transformResultsFromDb: this._transformResultsFromDb.bind(this),
@@ -86,7 +84,7 @@ export class RelqBase {
86
84
  getTableDef: this._getTableDef.bind(this)
87
85
  };
88
86
  }
89
- async _executeQuery(sql) {
87
+ async _executeQuery(sql, isBuilder = true) {
90
88
  if (!sql || typeof sql !== 'string' || sql.trim() === '') {
91
89
  throw new RelqConnectionError(`Invalid SQL query: ${sql === null ? 'null' : sql === undefined ? 'undefined' : 'empty string'}`);
92
90
  }
@@ -94,7 +92,7 @@ export class RelqBase {
94
92
  const startTime = performance.now();
95
93
  const retryConfig = this.config.retry;
96
94
  if (!retryConfig) {
97
- const result = await this._query(sql);
95
+ const result = await this._query(sql, isBuilder);
98
96
  return { result, duration: performance.now() - startTime };
99
97
  }
100
98
  const opts = typeof retryConfig === 'object'
@@ -103,7 +101,7 @@ export class RelqBase {
103
101
  let lastError;
104
102
  for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
105
103
  try {
106
- const result = await this._query(sql);
104
+ const result = await this._query(sql, isBuilder);
107
105
  return { result, duration: performance.now() - startTime };
108
106
  }
109
107
  catch (error) {
@@ -164,55 +162,6 @@ export class RelqBase {
164
162
  metadata: this.buildMetadata(result, duration)
165
163
  };
166
164
  }
167
- get table() {
168
- return createTableAccessor(this, this.schema);
169
- }
170
- raw(query, ...params) {
171
- return new ConnectedRawQueryBuilder(query, params, this);
172
- }
173
- async transaction(callback) {
174
- const { executeTransaction } = await import("./helpers/ConnectedTransactionBuilder.js");
175
- return executeTransaction(this, callback);
176
- }
177
- with(name, query) {
178
- return new ConnectedCTEBuilder(this).with(name, query);
179
- }
180
- async ctAs(tableName, query, options = {}) {
181
- const queryStr = typeof query === 'string' ? query : query.toString();
182
- const temp = options.temporary ? 'TEMPORARY ' : '';
183
- const ifNotExists = options.ifNotExists ? 'IF NOT EXISTS ' : '';
184
- const sql = `CREATE ${temp}TABLE ${ifNotExists}"${tableName}" AS ${queryStr}`;
185
- await this[INTERNAL].executeQuery(sql);
186
- }
187
- async explain(query, options = {}) {
188
- const queryStr = typeof query === 'string' ? query : query.toString();
189
- const parts = ['EXPLAIN'];
190
- if (options.format)
191
- parts.push(`(FORMAT ${options.format.toUpperCase()}`);
192
- if (options.analyze)
193
- parts.push(options.format ? ', ANALYZE' : '(ANALYZE');
194
- if (options.verbose)
195
- parts.push(options.format || options.analyze ? ', VERBOSE' : '(VERBOSE');
196
- if (options.format || options.analyze || options.verbose)
197
- parts.push(')');
198
- const sql = `${parts.join(' ')} ${queryStr}`;
199
- const { result } = await this._executeQuery(sql);
200
- if (options.format === 'json') {
201
- return result.rows;
202
- }
203
- return result.rows.map((r) => r['QUERY PLAN'] || Object.values(r)[0]).join('\n');
204
- }
205
- scalar(scalars) {
206
- const schema = this._getSchema();
207
- return new ConnectedScalarSelectBuilder(scalars, schema, {
208
- executeSelectOne: this[INTERNAL].executeSelect.bind(this),
209
- hasColumnMapping: this._hasColumnMapping.bind(this),
210
- transformToDbColumns: this._transformToDbColumns.bind(this)
211
- });
212
- }
213
- where(_tableName) {
214
- return new ConditionCollector();
215
- }
216
165
  on(event, listener) {
217
166
  this.emitter.on(event, listener);
218
167
  return this;
@@ -1,8 +1,19 @@
1
- import { RelqPostgres } from "./pg-family/pg-client/index.js";
2
- import { RelqNile } from "./pg-family/nile-client/index.js";
3
- import { RelqDsql } from "./pg-family/dsql-client/index.js";
4
- import { RelqCockroachDB } from "./pg-family/cockroachdb-client/index.js";
1
+ import { RelqPostgres } from "../pg/clients/pg-client/index.js";
2
+ import { RelqNile } from "../pg/clients/nile-client/index.js";
3
+ import { RelqDsql } from "../pg/clients/dsql-client/index.js";
4
+ import { RelqCockroachDB } from "../pg/clients/cockroachdb-client/index.js";
5
+ import { RelqSupabase } from "../pg/clients/supabase-client/index.js";
6
+ import { RelqNeon } from "../pg/clients/neon-client/index.js";
7
+ import { RelqAlloyDB } from "../pg/clients/alloydb-client/index.js";
8
+ import { RelqAurora } from "../pg/clients/aurora-client/index.js";
9
+ import { RelqYugabyteDB } from "../pg/clients/yugabytedb-client/index.js";
10
+ import { RelqCitus } from "../pg/clients/citus-client/index.js";
11
+ import { RelqTimescale } from "../pg/clients/timescale-client/index.js";
12
+ import { RelqMysql } from "../mysql/clients/mysql-client/index.js";
13
+ import { RelqMariaDB } from "../mysql/clients/mariadb-client/index.js";
14
+ import { RelqPlanetScale } from "../mysql/clients/planetscale-client/index.js";
5
15
  import { RelqConfigError } from "../shared/errors/relq-errors.js";
16
+ const SUPPORTED_DIALECTS = 'postgres, nile, cockroachdb, awsdsql, supabase, neon, alloydb, aurora, yugabytedb, citus, timescale, mysql, mariadb, planetscale';
6
17
  class RelqImpl {
7
18
  constructor(schema, dialect, options) {
8
19
  const opts = options ?? {};
@@ -15,34 +26,43 @@ class RelqImpl {
15
26
  return new RelqCockroachDB(schema, { ...opts, dialect: 'cockroachdb' });
16
27
  case 'awsdsql':
17
28
  return new RelqDsql(schema, { ...opts, dialect: 'awsdsql' });
18
- case 'sqlite':
19
- throw new RelqConfigError(`Dialect "sqlite" is not yet implemented. ` +
20
- `Currently supported: postgres, nile, cockroachdb, awsdsql`, { field: 'dialect', value: dialect });
21
- case 'turso':
22
- throw new RelqConfigError(`Dialect "turso" is not yet implemented. ` +
23
- `Currently supported: postgres, nile, cockroachdb, awsdsql`, { field: 'dialect', value: dialect });
29
+ case 'supabase':
30
+ return new RelqSupabase(schema, { ...opts, dialect: 'supabase' });
31
+ case 'neon':
32
+ return new RelqNeon(schema, { ...opts, dialect: 'neon' });
33
+ case 'alloydb':
34
+ return new RelqAlloyDB(schema, { ...opts, dialect: 'alloydb' });
35
+ case 'aurora':
36
+ return new RelqAurora(schema, { ...opts, dialect: 'aurora' });
37
+ case 'yugabytedb':
38
+ return new RelqYugabyteDB(schema, { ...opts, dialect: 'yugabytedb' });
39
+ case 'citus':
40
+ return new RelqCitus(schema, { ...opts, dialect: 'citus' });
41
+ case 'timescale':
42
+ return new RelqTimescale(schema, { ...opts, dialect: 'timescale' });
24
43
  case 'mysql':
25
- throw new RelqConfigError(`Dialect "mysql" is not yet implemented. ` +
26
- `Currently supported: postgres, nile, cockroachdb, awsdsql`, { field: 'dialect', value: dialect });
44
+ return new RelqMysql(schema, { ...opts, dialect: 'mysql' });
27
45
  case 'mariadb':
28
- throw new RelqConfigError(`Dialect "mariadb" is not yet implemented. ` +
29
- `Currently supported: postgres, nile, cockroachdb, awsdsql`, { field: 'dialect', value: dialect });
46
+ return new RelqMariaDB(schema, { ...opts, dialect: 'mariadb' });
30
47
  case 'planetscale':
31
- throw new RelqConfigError(`Dialect "planetscale" is not yet implemented. ` +
32
- `Currently supported: postgres, nile, cockroachdb, awsdsql`, { field: 'dialect', value: dialect });
33
- case 'xata':
34
- throw new RelqConfigError(`Dialect "xata" is not yet implemented. ` +
35
- `Currently supported: postgres, nile, cockroachdb, awsdsql`, { field: 'dialect', value: dialect });
48
+ return new RelqPlanetScale(schema, { ...opts, dialect: 'planetscale' });
36
49
  default:
37
50
  throw new RelqConfigError(`Unknown dialect: "${dialect}". ` +
38
- `Supported dialects: postgres, nile, cockroachdb, awsdsql, sqlite, turso, mysql, mariadb, planetscale, xata`, { field: 'dialect', value: dialect });
51
+ `Supported dialects: ${SUPPORTED_DIALECTS}, mysql, mariadb, planetscale`, { field: 'dialect', value: dialect });
39
52
  }
40
53
  }
41
54
  }
42
55
  export const Relq = RelqImpl;
43
- export { RelqPostgres } from "./pg-family/pg-client/index.js";
44
- export { RelqNile } from "./pg-family/nile-client/index.js";
45
- export { RelqDsql } from "./pg-family/dsql-client/index.js";
46
- export { RelqCockroachDB } from "./pg-family/cockroachdb-client/index.js";
56
+ export { RelqPostgres } from "../pg/clients/pg-client/index.js";
57
+ export { RelqNile } from "../pg/clients/nile-client/index.js";
58
+ export { RelqDsql } from "../pg/clients/dsql-client/index.js";
59
+ export { RelqCockroachDB } from "../pg/clients/cockroachdb-client/index.js";
60
+ export { RelqSupabase } from "../pg/clients/supabase-client/index.js";
61
+ export { RelqNeon } from "../pg/clients/neon-client/index.js";
62
+ export { RelqAlloyDB } from "../pg/clients/alloydb-client/index.js";
63
+ export { RelqAurora } from "../pg/clients/aurora-client/index.js";
64
+ export { RelqYugabyteDB } from "../pg/clients/yugabytedb-client/index.js";
65
+ export { RelqCitus } from "../pg/clients/citus-client/index.js";
66
+ export { RelqTimescale } from "../pg/clients/timescale-client/index.js";
47
67
  export { RelqBase } from "./relq-base.js";
48
68
  export default Relq;
@@ -1,4 +1,4 @@
1
- import { serializeValue, deserializeValue } from "../../utils/type-coercion.js";
1
+ import { serializeValue, deserializeValue } from "../../pg/utils/type-coercion.js";
2
2
  export function buildColumnMappings(schema, mappings, debugLog) {
3
3
  if (!schema || typeof schema !== 'object')
4
4
  return;
@@ -1,4 +1,4 @@
1
- import { ConnectedQueryBuilder } from "../helpers/ConnectedQueryBuilder.js";
1
+ import { ConnectedQueryBuilder } from "../../pg/helpers/ConnectedQueryBuilder.js";
2
2
  export function createTableAccessor(relq, schema) {
3
3
  const tableFunction = (tableName) => {
4
4
  return new ConnectedQueryBuilder(tableName, relq);
@@ -0,0 +1,12 @@
1
+ import { ConditionCollector } from "../../pg/condition/condition-collector.js";
2
+ import { MysqlConditionCollector } from "../../mysql/condition/condition-collector.js";
3
+ export function Where(tableDefinition) {
4
+ if (tableDefinition.$family === 'mysql') {
5
+ const collector = new MysqlConditionCollector();
6
+ collector._tableName = tableDefinition.$name;
7
+ return collector;
8
+ }
9
+ const collector = new ConditionCollector();
10
+ collector._tableName = tableDefinition.$name;
11
+ return collector;
12
+ }