@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,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
+ }
package/dist/esm/index.js CHANGED
@@ -1,7 +1,19 @@
1
1
  export { Relq } from "./core/relq-client.js";
2
- export { RelqPostgres } from "./core/pg-family/pg-client/index.js";
3
- export { RelqNile } from "./core/pg-family/nile-client/index.js";
4
- export { RelqDsql } from "./core/pg-family/dsql-client/index.js";
5
- export { RelqCockroachDB } from "./core/pg-family/cockroachdb-client/index.js";
6
- export { RelqError, RelqConnectionError, RelqQueryError, RelqTransactionError, RelqConfigError, RelqTimeoutError, RelqPoolError, isRelqError, isRelqConnectionError, isRelqQueryError, } from "./shared/errors/relq-errors.js";
2
+ export { RelqPostgres } from "./pg/clients/pg-client/index.js";
3
+ export { RelqNile } from "./pg/clients/nile-client/index.js";
4
+ export { RelqDsql } from "./pg/clients/dsql-client/index.js";
5
+ export { RelqCockroachDB } from "./pg/clients/cockroachdb-client/index.js";
6
+ export { RelqSupabase } from "./pg/clients/supabase-client/index.js";
7
+ export { RelqNeon } from "./pg/clients/neon-client/index.js";
8
+ export { RelqAlloyDB } from "./pg/clients/alloydb-client/index.js";
9
+ export { RelqAurora } from "./pg/clients/aurora-client/index.js";
10
+ export { RelqYugabyteDB } from "./pg/clients/yugabytedb-client/index.js";
11
+ export { RelqCitus } from "./pg/clients/citus-client/index.js";
12
+ export { RelqTimescale } from "./pg/clients/timescale-client/index.js";
13
+ export { RelqMysql } from "./mysql/clients/mysql-client/index.js";
14
+ export { RelqMariaDB } from "./mysql/clients/mariadb-client/index.js";
15
+ export { RelqPlanetScale } from "./mysql/clients/planetscale-client/index.js";
16
+ export { RelqError, RelqConnectionError, RelqQueryError, RelqTransactionError, RelqConfigError, RelqTimeoutError, RelqPoolError, RelqConstraintError, RelqSchemaError, RelqDataError, RelqLockError, RelqBuilderError, isRelqError, isRelqConnectionError, isRelqQueryError, isRelqConstraintError, isRelqSchemaError, isRelqDataError, isRelqLockError, isRelqBuilderError, getOriginalError, } from "./shared/errors/relq-errors.js";
17
+ export { Where } from "./core/shared/where.js";
18
+ export { sql } from "./pg/raw/sql-template.js";
7
19
  export { format as pg_format } from "./utils/index.js";
@@ -0,0 +1,5 @@
1
+ export { RelqMysql, MYSQL_CAPABILITIES } from "./mysql-client/index.js";
2
+ export { RelqMariaDB, MARIADB_CAPABILITIES } from "./mariadb-client/index.js";
3
+ export { RelqPlanetScale, PLANETSCALE_CAPABILITIES } from "./planetscale-client/index.js";
4
+ export { MysqlBase, loadMysql2 } from "./shared/mysql-base.js";
5
+ export { mysqlDialect } from "./shared/mysql-dialect.js";
@@ -0,0 +1,28 @@
1
+ export const MARIADB_CAPABILITIES = {
2
+ returning: true,
3
+ lateral: false,
4
+ distinctOn: false,
5
+ listenNotify: false,
6
+ pooling: true,
7
+ cursors: false,
8
+ jsonb: false,
9
+ arrays: false,
10
+ ranges: false,
11
+ fullTextSearch: true,
12
+ upsert: true,
13
+ forUpdateSkipLocked: true,
14
+ windowFunctions: true,
15
+ cte: true,
16
+ recursiveCte: true,
17
+ explainAnalyze: true,
18
+ savepoints: true,
19
+ createTableAs: true,
20
+ materializedViews: false,
21
+ storedProcedures: true,
22
+ triggers: true,
23
+ sequences: true,
24
+ copy: false,
25
+ vacuum: false,
26
+ identifierQuote: '`',
27
+ parameterStyle: 'question',
28
+ };
@@ -0,0 +1,2 @@
1
+ export { RelqMariaDB } from "./relq-mariadb.js";
2
+ export { MARIADB_CAPABILITIES } from "./capabilities.js";
@@ -0,0 +1,10 @@
1
+ import { MysqlBase } from "../shared/mysql-base.js";
2
+ import { MARIADB_CAPABILITIES } from "./capabilities.js";
3
+ export class RelqMariaDB extends MysqlBase {
4
+ dialect = 'mariadb';
5
+ capabilities = MARIADB_CAPABILITIES;
6
+ constructor(schema, config = {}) {
7
+ const resolvedConfig = { ...config, dialect: 'mariadb' };
8
+ super(schema, resolvedConfig);
9
+ }
10
+ }
@@ -0,0 +1,28 @@
1
+ export const MYSQL_CAPABILITIES = {
2
+ returning: false,
3
+ lateral: true,
4
+ distinctOn: false,
5
+ listenNotify: false,
6
+ pooling: true,
7
+ cursors: false,
8
+ jsonb: false,
9
+ arrays: false,
10
+ ranges: false,
11
+ fullTextSearch: true,
12
+ upsert: true,
13
+ forUpdateSkipLocked: true,
14
+ windowFunctions: true,
15
+ cte: true,
16
+ recursiveCte: true,
17
+ explainAnalyze: true,
18
+ savepoints: true,
19
+ createTableAs: true,
20
+ materializedViews: false,
21
+ storedProcedures: true,
22
+ triggers: true,
23
+ sequences: false,
24
+ copy: false,
25
+ vacuum: false,
26
+ identifierQuote: '`',
27
+ parameterStyle: 'question',
28
+ };
@@ -0,0 +1,2 @@
1
+ export { RelqMysql } from "./relq-mysql.js";
2
+ export { MYSQL_CAPABILITIES } from "./capabilities.js";
@@ -0,0 +1,10 @@
1
+ import { MysqlBase } from "../shared/mysql-base.js";
2
+ import { MYSQL_CAPABILITIES } from "./capabilities.js";
3
+ export class RelqMysql extends MysqlBase {
4
+ dialect = 'mysql';
5
+ capabilities = MYSQL_CAPABILITIES;
6
+ constructor(schema, config = {}) {
7
+ const resolvedConfig = { ...config, dialect: 'mysql' };
8
+ super(schema, resolvedConfig);
9
+ }
10
+ }
@@ -0,0 +1,28 @@
1
+ export const PLANETSCALE_CAPABILITIES = {
2
+ returning: false,
3
+ lateral: false,
4
+ distinctOn: false,
5
+ listenNotify: false,
6
+ pooling: true,
7
+ cursors: false,
8
+ jsonb: false,
9
+ arrays: false,
10
+ ranges: false,
11
+ fullTextSearch: true,
12
+ upsert: true,
13
+ forUpdateSkipLocked: false,
14
+ windowFunctions: true,
15
+ cte: true,
16
+ recursiveCte: true,
17
+ explainAnalyze: false,
18
+ savepoints: false,
19
+ createTableAs: false,
20
+ materializedViews: false,
21
+ storedProcedures: false,
22
+ triggers: false,
23
+ sequences: false,
24
+ copy: false,
25
+ vacuum: false,
26
+ identifierQuote: '`',
27
+ parameterStyle: 'question',
28
+ };
@@ -0,0 +1,2 @@
1
+ export { RelqPlanetScale } from "./relq-planetscale.js";
2
+ export { PLANETSCALE_CAPABILITIES } from "./capabilities.js";
@@ -0,0 +1,28 @@
1
+ import { MysqlBase } from "../shared/mysql-base.js";
2
+ import { PLANETSCALE_CAPABILITIES } from "./capabilities.js";
3
+ export class RelqPlanetScale extends MysqlBase {
4
+ dialect = 'planetscale';
5
+ capabilities = PLANETSCALE_CAPABILITIES;
6
+ psConfig;
7
+ constructor(schema, config) {
8
+ const resolvedConfig = { ...config, dialect: 'planetscale' };
9
+ super(schema, resolvedConfig);
10
+ this.psConfig = config;
11
+ }
12
+ buildConnectionConfig() {
13
+ return {
14
+ host: this.psConfig.host,
15
+ port: 3306,
16
+ user: this.psConfig.username,
17
+ password: this.psConfig.password,
18
+ database: this.psConfig.database || undefined,
19
+ ssl: {
20
+ rejectUnauthorized: true,
21
+ },
22
+ supportBigNumbers: true,
23
+ bigNumberStrings: true,
24
+ timezone: '+00:00',
25
+ dateStrings: false,
26
+ };
27
+ }
28
+ }
@@ -0,0 +1,7 @@
1
+ export { default as mysqlFormat, mysqlIdent, mysqlLiteral } from "./mysql-format.js";
2
+ export { MysqlDialect, mysqlDialect } from "./mysql-dialect.js";
3
+ export { getMysqlDialectCapabilities } from "./mysql-dialect.js";
4
+ export { isMysqlConnectionError, isMysqlTransientError, isMysqlPoolRecoverableError, parseMysqlError, } from "./mysql-error-parser.js";
5
+ export { mysqlTypeCoercion } from "./mysql-type-coercion.js";
6
+ export { mysqlDeserializeValue, mysqlSerializeValue, mysqlDeserializeRow, mysqlDeserializeRows, mysqlSerializeRow, mysqlExtractSchemaColumns, } from "./mysql-type-coercion.js";
7
+ export { MysqlBase, loadMysql2 } from "./mysql-base.js";
@@ -0,0 +1,321 @@
1
+ import { RelqConfigError, RelqConnectionError } from "../../../shared/errors/relq-errors.js";
2
+ import { RelqBase } from "../../../core/relq-base.js";
3
+ import { debugLog } from "../../../core/helpers/methods.js";
4
+ import { mysqlDialect } from "./mysql-dialect.js";
5
+ import { isMysqlConnectionError, isMysqlPoolRecoverableError, parseMysqlError } from "./mysql-error-parser.js";
6
+ import { createMysqlTableAccessor } from "../../shared/mysql-table-accessor.js";
7
+ import { MysqlConnectedRawQueryBuilder } from "../../helpers/MysqlConnectedRawQueryBuilder.js";
8
+ import { NativeCTEBuilder } from "../../../core/cte/native-cte-builder.js";
9
+ import { createMysqlCTEDialect } from "../../../core/cte/cte-types.js";
10
+ import { MysqlConditionCollector } from "../../condition/condition-collector.js";
11
+ import { INTERNAL } from "../../../core/helpers/methods.js";
12
+ import mysqlFormat from "./mysql-format.js";
13
+ let mysql2Module = null;
14
+ export async function loadMysql2() {
15
+ if (!mysql2Module) {
16
+ try {
17
+ const mod = await import("../../utils/addon/mysql/mysql2.js");
18
+ mysql2Module = (mod.default || mod);
19
+ return mysql2Module;
20
+ }
21
+ catch (error) {
22
+ throw new RelqConfigError('Failed to load "mysql2" module. Install it with:\n' +
23
+ ' npm install mysql2\n' +
24
+ ' # or\n' +
25
+ ' bun add mysql2', { field: 'mysql2', value: error instanceof Error ? error.message : String(error) });
26
+ }
27
+ }
28
+ return mysql2Module;
29
+ }
30
+ export class MysqlBase extends RelqBase {
31
+ sqlDialect = mysqlDialect;
32
+ pool;
33
+ conn;
34
+ usePooling;
35
+ clientConnected = false;
36
+ mysqlConfig;
37
+ poolErrorHandler;
38
+ constructor(schema, config) {
39
+ super(schema, config);
40
+ this.mysqlConfig = config;
41
+ this.usePooling = this.determineMysqlPoolingStrategy();
42
+ }
43
+ async _initialize() {
44
+ const mysql2 = await loadMysql2();
45
+ const connectionConfig = this.buildConnectionConfig();
46
+ if (this.usePooling) {
47
+ this.pool = mysql2.createPool({
48
+ ...connectionConfig,
49
+ waitForConnections: true,
50
+ connectionLimit: 10,
51
+ queueLimit: 0,
52
+ enableKeepAlive: true,
53
+ keepAliveInitialDelay: 10000,
54
+ });
55
+ this.setupPoolErrorHandling();
56
+ debugLog(this.mysqlConfig, 'MySQL pool created', {
57
+ host: connectionConfig.host,
58
+ port: connectionConfig.port,
59
+ database: connectionConfig.database,
60
+ });
61
+ }
62
+ else {
63
+ this.conn = await mysql2.createConnection(connectionConfig);
64
+ this.clientConnected = true;
65
+ this.conn.on('error', (err) => {
66
+ this.clientConnected = false;
67
+ this.emitter.emit('error', err);
68
+ });
69
+ debugLog(this.mysqlConfig, 'MySQL single connection created');
70
+ }
71
+ }
72
+ async _query(sql, isBuilder = true) {
73
+ const executeQuery = async () => {
74
+ if (this.pool) {
75
+ const [rows, fields] = await this.pool.execute(sql);
76
+ return this.toDriverResult(rows, fields, sql);
77
+ }
78
+ else if (this.conn) {
79
+ if (!this.clientConnected) {
80
+ throw new RelqConnectionError('MySQL connection is closed');
81
+ }
82
+ const [rows, fields] = await this.conn.execute(sql);
83
+ return this.toDriverResult(rows, fields, sql);
84
+ }
85
+ else {
86
+ throw new RelqConfigError('No MySQL connection available');
87
+ }
88
+ };
89
+ try {
90
+ return await executeQuery();
91
+ }
92
+ catch (error) {
93
+ if (isMysqlConnectionError(error) && !this.usePooling && this.conn) {
94
+ this.clientConnected = false;
95
+ try {
96
+ await this.reconnectSingleClient();
97
+ const [rows, fields] = await this.conn.execute(sql);
98
+ return this.toDriverResult(rows, fields, sql);
99
+ }
100
+ catch {
101
+ throw parseMysqlError(error, sql, isBuilder);
102
+ }
103
+ }
104
+ throw parseMysqlError(error, sql, isBuilder);
105
+ }
106
+ }
107
+ async _acquireClient() {
108
+ if (this.pool) {
109
+ const conn = await this.pool.getConnection();
110
+ return { client: conn, release: () => conn.release() };
111
+ }
112
+ else if (this.conn) {
113
+ return { client: this.conn, release: () => { } };
114
+ }
115
+ else {
116
+ throw new RelqConnectionError('No MySQL connection available');
117
+ }
118
+ }
119
+ async _close() {
120
+ if (this.pool) {
121
+ if (this.poolErrorHandler) {
122
+ this.pool.removeListener('error', this.poolErrorHandler);
123
+ }
124
+ this.pool.removeAllListeners();
125
+ await this.pool.end();
126
+ this.pool = undefined;
127
+ }
128
+ else if (this.conn) {
129
+ this.conn.removeAllListeners();
130
+ await this.conn.end();
131
+ this.conn = undefined;
132
+ this.clientConnected = false;
133
+ }
134
+ }
135
+ toDriverResult(rows, fields, sql) {
136
+ const command = this.detectCommand(sql);
137
+ if (Array.isArray(rows)) {
138
+ return {
139
+ rows: rows,
140
+ rowCount: rows.length,
141
+ command,
142
+ fields: (fields || []).map((f) => ({
143
+ name: f.name,
144
+ dataTypeID: f.columnType,
145
+ typeName: f.type,
146
+ })),
147
+ };
148
+ }
149
+ const header = rows;
150
+ return {
151
+ rows: [],
152
+ rowCount: header.affectedRows ?? null,
153
+ command,
154
+ fields: [],
155
+ };
156
+ }
157
+ detectCommand(sql) {
158
+ const trimmed = sql.trimStart().toUpperCase();
159
+ if (trimmed.startsWith('SELECT'))
160
+ return 'SELECT';
161
+ if (trimmed.startsWith('INSERT'))
162
+ return 'INSERT';
163
+ if (trimmed.startsWith('UPDATE'))
164
+ return 'UPDATE';
165
+ if (trimmed.startsWith('DELETE'))
166
+ return 'DELETE';
167
+ if (trimmed.startsWith('REPLACE'))
168
+ return 'REPLACE';
169
+ if (trimmed.startsWith('CREATE'))
170
+ return 'CREATE';
171
+ if (trimmed.startsWith('ALTER'))
172
+ return 'ALTER';
173
+ if (trimmed.startsWith('DROP'))
174
+ return 'DROP';
175
+ if (trimmed.startsWith('EXPLAIN'))
176
+ return 'EXPLAIN';
177
+ if (trimmed.startsWith('SHOW'))
178
+ return 'SHOW';
179
+ if (trimmed.startsWith('DESCRIBE') || trimmed.startsWith('DESC'))
180
+ return 'DESCRIBE';
181
+ if (trimmed.startsWith('SET'))
182
+ return 'SET';
183
+ if (trimmed.startsWith('BEGIN') || trimmed.startsWith('START'))
184
+ return 'BEGIN';
185
+ if (trimmed.startsWith('COMMIT'))
186
+ return 'COMMIT';
187
+ if (trimmed.startsWith('ROLLBACK'))
188
+ return 'ROLLBACK';
189
+ return 'UNKNOWN';
190
+ }
191
+ buildConnectionConfig() {
192
+ const config = this.mysqlConfig;
193
+ return {
194
+ host: config.host || process.env['MYSQL_HOST'] || 'localhost',
195
+ port: config.port || Number(process.env['MYSQL_PORT']) || 3306,
196
+ user: config.user || process.env['MYSQL_USER'] || 'root',
197
+ password: config.password || process.env['MYSQL_PASSWORD'] || '',
198
+ database: config.database || process.env['MYSQL_DATABASE'],
199
+ ssl: config.ssl || undefined,
200
+ supportBigNumbers: true,
201
+ bigNumberStrings: true,
202
+ timezone: '+00:00',
203
+ dateStrings: false,
204
+ };
205
+ }
206
+ determineMysqlPoolingStrategy() {
207
+ return true;
208
+ }
209
+ setupPoolErrorHandling() {
210
+ if (!this.pool)
211
+ return;
212
+ this.poolErrorHandler = (err) => {
213
+ this.emitter.emit('error', err);
214
+ if (isMysqlPoolRecoverableError(err)) {
215
+ const logLevel = this.mysqlConfig.logLevel ?? 'info';
216
+ if (logLevel !== 'silent') {
217
+ console.warn('[Relq MySQL Pool] Recoverable connection error (pool will auto-recover):', {
218
+ code: err.errno || err.code,
219
+ message: err.message,
220
+ action: 'Connection removed from pool, will be replaced on next query',
221
+ });
222
+ }
223
+ return;
224
+ }
225
+ const logLevel = this.mysqlConfig.logLevel ?? 'info';
226
+ if (logLevel !== 'silent') {
227
+ console.error('[Relq MySQL Pool] Pool error:', {
228
+ code: err.errno || err.code,
229
+ message: err.message,
230
+ });
231
+ }
232
+ };
233
+ this.pool.on('error', this.poolErrorHandler);
234
+ }
235
+ async reconnectSingleClient() {
236
+ const mysql2 = await loadMysql2();
237
+ const connectionConfig = this.buildConnectionConfig();
238
+ if (this.conn) {
239
+ try {
240
+ this.conn.removeAllListeners();
241
+ this.conn.destroy();
242
+ }
243
+ catch { }
244
+ }
245
+ this.conn = await mysql2.createConnection(connectionConfig);
246
+ this.clientConnected = true;
247
+ this.conn.on('error', (err) => {
248
+ this.clientConnected = false;
249
+ this.emitter.emit('error', err);
250
+ });
251
+ this.emitter.emit('connect', this.conn);
252
+ }
253
+ async lastInsertId() {
254
+ await this.ensureInitialized();
255
+ const result = await this._query('SELECT LAST_INSERT_ID() AS `id`');
256
+ const raw = result.rows[0]?.id;
257
+ return typeof raw === 'string' ? BigInt(raw) : BigInt(raw);
258
+ }
259
+ async executeRaw(sql, params) {
260
+ await this.ensureInitialized();
261
+ const execute = async () => {
262
+ if (this.pool) {
263
+ return await this.pool.execute(sql, params);
264
+ }
265
+ else if (this.conn) {
266
+ return await this.conn.execute(sql, params);
267
+ }
268
+ else {
269
+ throw new RelqConnectionError('No MySQL connection available');
270
+ }
271
+ };
272
+ try {
273
+ const [rows, fields] = await execute();
274
+ return this.toDriverResult(rows, fields, sql);
275
+ }
276
+ catch (error) {
277
+ throw parseMysqlError(error, sql);
278
+ }
279
+ }
280
+ get table() {
281
+ return createMysqlTableAccessor(this, this.schema);
282
+ }
283
+ raw(query, ...params) {
284
+ return new MysqlConnectedRawQueryBuilder(query, params, this);
285
+ }
286
+ async transaction(callback, options) {
287
+ const { executeMysqlTransaction } = await import("../../helpers/MysqlConnectedTransactionBuilder.js");
288
+ return executeMysqlTransaction(this, callback, options);
289
+ }
290
+ cte() {
291
+ return new NativeCTEBuilder(this, createMysqlCTEDialect(), (relq) => createMysqlTableAccessor(relq, this._getSchema()));
292
+ }
293
+ async ctAs(tableName, query, options = {}) {
294
+ const queryStr = typeof query === 'string' ? query : query.toString();
295
+ const temp = options.temporary ? 'TEMPORARY ' : '';
296
+ const ifNotExists = options.ifNotExists ? 'IF NOT EXISTS ' : '';
297
+ const sql = `CREATE ${temp}TABLE ${ifNotExists}${mysqlFormat.ident(tableName)} AS ${queryStr}`;
298
+ await this[INTERNAL].executeQuery(sql);
299
+ }
300
+ async explain(query, options = {}) {
301
+ const queryStr = typeof query === 'string' ? query : query.toString();
302
+ const prefix = options.analyze ? 'EXPLAIN ANALYZE' : 'EXPLAIN';
303
+ const sql = `${prefix} ${queryStr}`;
304
+ const { result } = await this._executeQuery(sql);
305
+ return result.rows;
306
+ }
307
+ scalar(scalars) {
308
+ const { MysqlConnectedScalarSelectBuilder } = require('../../select/scalar-select-builder');
309
+ const schema = this._getSchema();
310
+ return new MysqlConnectedScalarSelectBuilder(scalars, schema, {
311
+ executeSelectOne: this[INTERNAL].executeSelect.bind(this),
312
+ hasColumnMapping: this._hasColumnMapping.bind(this),
313
+ transformToDbColumns: this._transformToDbColumns.bind(this)
314
+ });
315
+ }
316
+ where(tableName) {
317
+ const collector = new MysqlConditionCollector();
318
+ collector._tableName = tableName;
319
+ return collector;
320
+ }
321
+ }
@@ -0,0 +1,136 @@
1
+ const MYSQL_VARIANT_CAPABILITIES = {
2
+ mysql: {
3
+ supportsReturning: false,
4
+ supportsForeignKeys: true,
5
+ supportsCtesRecursive: true,
6
+ supportsWindowFunctions: true,
7
+ supportsJsonTable: true,
8
+ supportsExplainAnalyze: true,
9
+ supportsCheckConstraints: true,
10
+ supportsGeneratedColumns: true,
11
+ supportsInvisibleColumns: true,
12
+ defaultCharset: 'utf8mb4',
13
+ defaultCollation: 'utf8mb4_0900_ai_ci',
14
+ },
15
+ mariadb: {
16
+ supportsReturning: true,
17
+ supportsForeignKeys: true,
18
+ supportsCtesRecursive: true,
19
+ supportsWindowFunctions: true,
20
+ supportsJsonTable: false,
21
+ supportsExplainAnalyze: true,
22
+ supportsCheckConstraints: true,
23
+ supportsGeneratedColumns: true,
24
+ supportsInvisibleColumns: true,
25
+ defaultCharset: 'utf8mb4',
26
+ defaultCollation: 'utf8mb4_uca1400_ai_ci',
27
+ },
28
+ planetscale: {
29
+ supportsReturning: false,
30
+ supportsForeignKeys: false,
31
+ supportsCtesRecursive: true,
32
+ supportsWindowFunctions: true,
33
+ supportsJsonTable: true,
34
+ supportsExplainAnalyze: true,
35
+ supportsCheckConstraints: true,
36
+ supportsGeneratedColumns: true,
37
+ supportsInvisibleColumns: false,
38
+ defaultCharset: 'utf8mb4',
39
+ defaultCollation: 'utf8mb4_0900_ai_ci',
40
+ },
41
+ };
42
+ export function getMysqlDialectCapabilities(variant) {
43
+ return MYSQL_VARIANT_CAPABILITIES[variant];
44
+ }
45
+ export class MysqlDialect {
46
+ name = 'mysql';
47
+ quoteIdentifier(name) {
48
+ if (name === '*')
49
+ return '*';
50
+ if (name.includes('.')) {
51
+ return name.split('.').map(p => p === '*' ? '*' : `\`${p.replace(/`/g, '``')}\``).join('.');
52
+ }
53
+ return `\`${name.replace(/`/g, '``')}\``;
54
+ }
55
+ quoteString(value) {
56
+ return `'${value.replace(/'/g, "''")}'`;
57
+ }
58
+ formatBoolean(value) {
59
+ return value ? 'TRUE' : 'FALSE';
60
+ }
61
+ returning(columns) {
62
+ return `RETURNING ${columns.map(c => c === '*' ? '*' : this.quoteIdentifier(c)).join(', ')}`;
63
+ }
64
+ upsert(_conflictColumns, updateColumns) {
65
+ const sets = Object.keys(updateColumns)
66
+ .map(c => `${this.quoteIdentifier(c)} = VALUES(${this.quoteIdentifier(c)})`)
67
+ .join(', ');
68
+ return `ON DUPLICATE KEY UPDATE ${sets}`;
69
+ }
70
+ distinctOn(_columns) {
71
+ throw new Error('DISTINCT ON is not supported in MySQL. Use GROUP BY with ANY_VALUE() instead.');
72
+ }
73
+ lateralSubquery(_subquery, _alias) {
74
+ throw new Error('LATERAL JOIN is not used in MySQL family. Use correlated subqueries instead.');
75
+ }
76
+ jsonAgg(expression, alias) {
77
+ return `COALESCE(JSON_ARRAYAGG(${expression}), JSON_ARRAY()) AS ${this.quoteIdentifier(alias)}`;
78
+ }
79
+ rowToJson(alias) {
80
+ return `JSON_OBJECT(${alias}.*)`;
81
+ }
82
+ explain(query, options) {
83
+ const parts = ['EXPLAIN'];
84
+ if (options.format) {
85
+ parts.push(`FORMAT = ${options.format.toUpperCase()}`);
86
+ }
87
+ if (options.analyze) {
88
+ parts.push('ANALYZE');
89
+ }
90
+ return `${parts.join(' ')} ${query}`;
91
+ }
92
+ typeCast(expression, targetType) {
93
+ return `CAST(${expression} AS ${targetType})`;
94
+ }
95
+ currentTimestamp() {
96
+ return 'NOW()';
97
+ }
98
+ randomUuid() {
99
+ return 'UUID()';
100
+ }
101
+ supports(capability) {
102
+ return MYSQL_BASE_CAPABILITIES[capability] === true;
103
+ }
104
+ transformSql(sql) {
105
+ return sql;
106
+ }
107
+ }
108
+ export const mysqlDialect = new MysqlDialect();
109
+ const MYSQL_BASE_CAPABILITIES = {
110
+ returning: false,
111
+ lateral: false,
112
+ distinctOn: false,
113
+ listenNotify: false,
114
+ pooling: true,
115
+ cursors: true,
116
+ jsonb: false,
117
+ arrays: false,
118
+ ranges: false,
119
+ fullTextSearch: true,
120
+ upsert: true,
121
+ forUpdateSkipLocked: true,
122
+ windowFunctions: true,
123
+ cte: true,
124
+ recursiveCte: true,
125
+ explainAnalyze: true,
126
+ savepoints: true,
127
+ createTableAs: true,
128
+ materializedViews: false,
129
+ storedProcedures: true,
130
+ triggers: true,
131
+ sequences: false,
132
+ copy: false,
133
+ vacuum: false,
134
+ identifierQuote: '`',
135
+ parameterStyle: 'question',
136
+ };