@relq/orm 0.1.0

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 (254) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +236 -0
  3. package/dist/cjs/__test-types.cjs +17 -0
  4. package/dist/cjs/addon/cursor.cjs +1473 -0
  5. package/dist/cjs/addon/pg.cjs +4969 -0
  6. package/dist/cjs/cache/index.cjs +9 -0
  7. package/dist/cjs/cache/query-cache.cjs +311 -0
  8. package/dist/cjs/condition/array-condition-builder.cjs +527 -0
  9. package/dist/cjs/condition/array-numeric-condition-builder.cjs +186 -0
  10. package/dist/cjs/condition/array-specialized-condition-builder.cjs +206 -0
  11. package/dist/cjs/condition/array-string-condition-builder.cjs +146 -0
  12. package/dist/cjs/condition/base-condition-builder.cjs +2 -0
  13. package/dist/cjs/condition/condition-collector.cjs +461 -0
  14. package/dist/cjs/condition/fulltext-condition-builder.cjs +61 -0
  15. package/dist/cjs/condition/geometric-condition-builder.cjs +228 -0
  16. package/dist/cjs/condition/index.cjs +29 -0
  17. package/dist/cjs/condition/jsonb-condition-builder.cjs +448 -0
  18. package/dist/cjs/condition/network-condition-builder.cjs +237 -0
  19. package/dist/cjs/condition/postgis-condition-builder.cjs +188 -0
  20. package/dist/cjs/condition/range-condition-builder.cjs +98 -0
  21. package/dist/cjs/core/helpers/ConnectedAggregateBuilder.cjs +132 -0
  22. package/dist/cjs/core/helpers/ConnectedCTEBuilder.cjs +53 -0
  23. package/dist/cjs/core/helpers/ConnectedCountBuilder.cjs +73 -0
  24. package/dist/cjs/core/helpers/ConnectedDeleteBuilder.cjs +65 -0
  25. package/dist/cjs/core/helpers/ConnectedInsertBuilder.cjs +112 -0
  26. package/dist/cjs/core/helpers/ConnectedInsertFromSelectBuilder.cjs +66 -0
  27. package/dist/cjs/core/helpers/ConnectedQueryBuilder.cjs +146 -0
  28. package/dist/cjs/core/helpers/ConnectedRawQueryBuilder.cjs +46 -0
  29. package/dist/cjs/core/helpers/ConnectedSelectBuilder.cjs +331 -0
  30. package/dist/cjs/core/helpers/ConnectedTransactionBuilder.cjs +105 -0
  31. package/dist/cjs/core/helpers/ConnectedUpdateBuilder.cjs +79 -0
  32. package/dist/cjs/core/helpers/PaginateBuilder.cjs +178 -0
  33. package/dist/cjs/core/helpers/ReturningExecutor.cjs +70 -0
  34. package/dist/cjs/core/helpers/capability-guard.cjs +10 -0
  35. package/dist/cjs/core/helpers/index.cjs +31 -0
  36. package/dist/cjs/core/helpers/methods.cjs +10 -0
  37. package/dist/cjs/core/helpers/query-convenience.cjs +238 -0
  38. package/dist/cjs/core/helpers/select-joins.cjs +251 -0
  39. package/dist/cjs/core/helpers/select-pagination.cjs +233 -0
  40. package/dist/cjs/core/helpers/select-types.cjs +2 -0
  41. package/dist/cjs/core/pg-family/cockroachdb-client/capabilities.cjs +31 -0
  42. package/dist/cjs/core/pg-family/cockroachdb-client/index.cjs +7 -0
  43. package/dist/cjs/core/pg-family/cockroachdb-client/relq-cockroach.cjs +16 -0
  44. package/dist/cjs/core/pg-family/dsql-client/capabilities.cjs +31 -0
  45. package/dist/cjs/core/pg-family/dsql-client/index.cjs +7 -0
  46. package/dist/cjs/core/pg-family/dsql-client/relq-dsql.cjs +16 -0
  47. package/dist/cjs/core/pg-family/index.cjs +19 -0
  48. package/dist/cjs/core/pg-family/nile-client/capabilities.cjs +31 -0
  49. package/dist/cjs/core/pg-family/nile-client/index.cjs +7 -0
  50. package/dist/cjs/core/pg-family/nile-client/relq-nile.cjs +36 -0
  51. package/dist/cjs/core/pg-family/nile-client/tenant-context.cjs +44 -0
  52. package/dist/cjs/core/pg-family/pg-client/capabilities.cjs +31 -0
  53. package/dist/cjs/core/pg-family/pg-client/index.cjs +7 -0
  54. package/dist/cjs/core/pg-family/pg-client/relq-postgres.cjs +43 -0
  55. package/dist/cjs/core/pg-family/shared/pg-base.cjs +385 -0
  56. package/dist/cjs/core/pg-family/shared/pg-dialect.cjs +67 -0
  57. package/dist/cjs/core/pg-family/shared/pg-error-parser.cjs +34 -0
  58. package/dist/cjs/core/pg-family/shared/pg-type-coercion.cjs +14 -0
  59. package/dist/cjs/core/relq-base.cjs +307 -0
  60. package/dist/cjs/core/relq-client.cjs +56 -0
  61. package/dist/cjs/core/shared/cleanup.cjs +36 -0
  62. package/dist/cjs/core/shared/column-mapping.cjs +97 -0
  63. package/dist/cjs/core/shared/errors.cjs +17 -0
  64. package/dist/cjs/core/shared/index.cjs +24 -0
  65. package/dist/cjs/core/shared/table-accessor.cjs +22 -0
  66. package/dist/cjs/core/shared/transform.cjs +35 -0
  67. package/dist/cjs/core/shared/types.cjs +2 -0
  68. package/dist/cjs/core/shared/validation.cjs +140 -0
  69. package/dist/cjs/core/types/core.types.cjs +2 -0
  70. package/dist/cjs/count/count-builder.cjs +88 -0
  71. package/dist/cjs/count/index.cjs +5 -0
  72. package/dist/cjs/delete/delete-builder.cjs +176 -0
  73. package/dist/cjs/delete/index.cjs +5 -0
  74. package/dist/cjs/explain/explain-builder.cjs +99 -0
  75. package/dist/cjs/explain/index.cjs +5 -0
  76. package/dist/cjs/index.cjs +26 -0
  77. package/dist/cjs/insert/conflict-builder.cjs +213 -0
  78. package/dist/cjs/insert/index.cjs +5 -0
  79. package/dist/cjs/insert/insert-builder.cjs +320 -0
  80. package/dist/cjs/insert/insert-from-select-builder.cjs +86 -0
  81. package/dist/cjs/pubsub/index.cjs +7 -0
  82. package/dist/cjs/pubsub/listen-notify-builder.cjs +57 -0
  83. package/dist/cjs/pubsub/listener-connection.cjs +180 -0
  84. package/dist/cjs/raw/index.cjs +8 -0
  85. package/dist/cjs/raw/raw-query-builder.cjs +27 -0
  86. package/dist/cjs/raw/sql-template.cjs +73 -0
  87. package/dist/cjs/select/aggregate-builder.cjs +179 -0
  88. package/dist/cjs/select/index.cjs +16 -0
  89. package/dist/cjs/select/join-builder.cjs +192 -0
  90. package/dist/cjs/select/join-condition-builder.cjs +189 -0
  91. package/dist/cjs/select/join-internals.cjs +5 -0
  92. package/dist/cjs/select/join-many-condition-builder.cjs +159 -0
  93. package/dist/cjs/select/scalar-query-builder.cjs +134 -0
  94. package/dist/cjs/select/scalar-select-builder.cjs +78 -0
  95. package/dist/cjs/select/select-builder.cjs +426 -0
  96. package/dist/cjs/select/sql-expression.cjs +38 -0
  97. package/dist/cjs/select/table-proxy.cjs +99 -0
  98. package/dist/cjs/shared/aws-dsql.cjs +181 -0
  99. package/dist/cjs/shared/errors/relq-errors.cjs +361 -0
  100. package/dist/cjs/shared/pg-format.cjs +383 -0
  101. package/dist/cjs/shared/types/config-types.cjs +51 -0
  102. package/dist/cjs/transaction/index.cjs +6 -0
  103. package/dist/cjs/transaction/transaction-builder.cjs +78 -0
  104. package/dist/cjs/types/aggregate-types.cjs +2 -0
  105. package/dist/cjs/types/inference-types.cjs +18 -0
  106. package/dist/cjs/types/pagination-types.cjs +7 -0
  107. package/dist/cjs/types/result-types.cjs +2 -0
  108. package/dist/cjs/types/scalar-types.cjs +2 -0
  109. package/dist/cjs/types/schema-types.cjs +2 -0
  110. package/dist/cjs/types/subscription-types.cjs +2 -0
  111. package/dist/cjs/types.cjs +2 -0
  112. package/dist/cjs/update/array-update-builder.cjs +232 -0
  113. package/dist/cjs/update/index.cjs +16 -0
  114. package/dist/cjs/update/jsonb-update-builder.cjs +219 -0
  115. package/dist/cjs/update/update-builder.cjs +274 -0
  116. package/dist/cjs/utils/addon/pg/cursor.cjs +8 -0
  117. package/dist/cjs/utils/addon/pg/pg.cjs +23 -0
  118. package/dist/cjs/utils/case-converter.cjs +58 -0
  119. package/dist/cjs/utils/env-resolver.cjs +226 -0
  120. package/dist/cjs/utils/environment-detection.cjs +124 -0
  121. package/dist/cjs/utils/fk-resolver.cjs +186 -0
  122. package/dist/cjs/utils/index.cjs +25 -0
  123. package/dist/cjs/utils/pool-defaults.cjs +91 -0
  124. package/dist/cjs/utils/type-coercion.cjs +120 -0
  125. package/dist/cjs/window/index.cjs +5 -0
  126. package/dist/cjs/window/window-builder.cjs +80 -0
  127. package/dist/esm/__test-types.js +15 -0
  128. package/dist/esm/addon/cursor.js +1440 -0
  129. package/dist/esm/addon/pg.js +4931 -0
  130. package/dist/esm/cache/index.js +1 -0
  131. package/dist/esm/cache/query-cache.js +303 -0
  132. package/dist/esm/condition/array-condition-builder.js +519 -0
  133. package/dist/esm/condition/array-numeric-condition-builder.js +182 -0
  134. package/dist/esm/condition/array-specialized-condition-builder.js +200 -0
  135. package/dist/esm/condition/array-string-condition-builder.js +142 -0
  136. package/dist/esm/condition/base-condition-builder.js +1 -0
  137. package/dist/esm/condition/condition-collector.js +452 -0
  138. package/dist/esm/condition/fulltext-condition-builder.js +53 -0
  139. package/dist/esm/condition/geometric-condition-builder.js +220 -0
  140. package/dist/esm/condition/index.js +8 -0
  141. package/dist/esm/condition/jsonb-condition-builder.js +439 -0
  142. package/dist/esm/condition/network-condition-builder.js +229 -0
  143. package/dist/esm/condition/postgis-condition-builder.js +180 -0
  144. package/dist/esm/condition/range-condition-builder.js +90 -0
  145. package/dist/esm/core/helpers/ConnectedAggregateBuilder.js +128 -0
  146. package/dist/esm/core/helpers/ConnectedCTEBuilder.js +49 -0
  147. package/dist/esm/core/helpers/ConnectedCountBuilder.js +69 -0
  148. package/dist/esm/core/helpers/ConnectedDeleteBuilder.js +61 -0
  149. package/dist/esm/core/helpers/ConnectedInsertBuilder.js +108 -0
  150. package/dist/esm/core/helpers/ConnectedInsertFromSelectBuilder.js +62 -0
  151. package/dist/esm/core/helpers/ConnectedQueryBuilder.js +142 -0
  152. package/dist/esm/core/helpers/ConnectedRawQueryBuilder.js +42 -0
  153. package/dist/esm/core/helpers/ConnectedSelectBuilder.js +327 -0
  154. package/dist/esm/core/helpers/ConnectedTransactionBuilder.js +100 -0
  155. package/dist/esm/core/helpers/ConnectedUpdateBuilder.js +75 -0
  156. package/dist/esm/core/helpers/PaginateBuilder.js +174 -0
  157. package/dist/esm/core/helpers/ReturningExecutor.js +66 -0
  158. package/dist/esm/core/helpers/capability-guard.js +7 -0
  159. package/dist/esm/core/helpers/index.js +13 -0
  160. package/dist/esm/core/helpers/methods.js +6 -0
  161. package/dist/esm/core/helpers/query-convenience.js +194 -0
  162. package/dist/esm/core/helpers/select-joins.js +246 -0
  163. package/dist/esm/core/helpers/select-pagination.js +226 -0
  164. package/dist/esm/core/helpers/select-types.js +1 -0
  165. package/dist/esm/core/pg-family/cockroachdb-client/capabilities.js +28 -0
  166. package/dist/esm/core/pg-family/cockroachdb-client/index.js +2 -0
  167. package/dist/esm/core/pg-family/cockroachdb-client/relq-cockroach.js +12 -0
  168. package/dist/esm/core/pg-family/dsql-client/capabilities.js +28 -0
  169. package/dist/esm/core/pg-family/dsql-client/index.js +2 -0
  170. package/dist/esm/core/pg-family/dsql-client/relq-dsql.js +12 -0
  171. package/dist/esm/core/pg-family/index.js +6 -0
  172. package/dist/esm/core/pg-family/nile-client/capabilities.js +28 -0
  173. package/dist/esm/core/pg-family/nile-client/index.js +2 -0
  174. package/dist/esm/core/pg-family/nile-client/relq-nile.js +32 -0
  175. package/dist/esm/core/pg-family/nile-client/tenant-context.js +40 -0
  176. package/dist/esm/core/pg-family/pg-client/capabilities.js +28 -0
  177. package/dist/esm/core/pg-family/pg-client/index.js +2 -0
  178. package/dist/esm/core/pg-family/pg-client/relq-postgres.js +39 -0
  179. package/dist/esm/core/pg-family/shared/pg-base.js +347 -0
  180. package/dist/esm/core/pg-family/shared/pg-dialect.js +63 -0
  181. package/dist/esm/core/pg-family/shared/pg-error-parser.js +29 -0
  182. package/dist/esm/core/pg-family/shared/pg-type-coercion.js +6 -0
  183. package/dist/esm/core/relq-base.js +270 -0
  184. package/dist/esm/core/relq-client.js +48 -0
  185. package/dist/esm/core/shared/cleanup.js +27 -0
  186. package/dist/esm/core/shared/column-mapping.js +90 -0
  187. package/dist/esm/core/shared/errors.js +13 -0
  188. package/dist/esm/core/shared/index.js +6 -0
  189. package/dist/esm/core/shared/table-accessor.js +19 -0
  190. package/dist/esm/core/shared/transform.js +30 -0
  191. package/dist/esm/core/shared/types.js +1 -0
  192. package/dist/esm/core/shared/validation.js +136 -0
  193. package/dist/esm/core/types/core.types.js +1 -0
  194. package/dist/esm/count/count-builder.js +81 -0
  195. package/dist/esm/count/index.js +1 -0
  196. package/dist/esm/delete/delete-builder.js +169 -0
  197. package/dist/esm/delete/index.js +1 -0
  198. package/dist/esm/explain/explain-builder.js +95 -0
  199. package/dist/esm/explain/index.js +1 -0
  200. package/dist/esm/index.js +7 -0
  201. package/dist/esm/insert/conflict-builder.js +202 -0
  202. package/dist/esm/insert/index.js +1 -0
  203. package/dist/esm/insert/insert-builder.js +313 -0
  204. package/dist/esm/insert/insert-from-select-builder.js +79 -0
  205. package/dist/esm/pubsub/index.js +1 -0
  206. package/dist/esm/pubsub/listen-notify-builder.js +48 -0
  207. package/dist/esm/pubsub/listener-connection.js +173 -0
  208. package/dist/esm/raw/index.js +2 -0
  209. package/dist/esm/raw/raw-query-builder.js +20 -0
  210. package/dist/esm/raw/sql-template.js +66 -0
  211. package/dist/esm/select/aggregate-builder.js +172 -0
  212. package/dist/esm/select/index.js +4 -0
  213. package/dist/esm/select/join-builder.js +184 -0
  214. package/dist/esm/select/join-condition-builder.js +181 -0
  215. package/dist/esm/select/join-internals.js +2 -0
  216. package/dist/esm/select/join-many-condition-builder.js +151 -0
  217. package/dist/esm/select/scalar-query-builder.js +126 -0
  218. package/dist/esm/select/scalar-select-builder.js +70 -0
  219. package/dist/esm/select/select-builder.js +419 -0
  220. package/dist/esm/select/sql-expression.js +33 -0
  221. package/dist/esm/select/table-proxy.js +91 -0
  222. package/dist/esm/shared/aws-dsql.js +140 -0
  223. package/dist/esm/shared/errors/relq-errors.js +339 -0
  224. package/dist/esm/shared/pg-format.js +375 -0
  225. package/dist/esm/shared/types/config-types.js +46 -0
  226. package/dist/esm/transaction/index.js +1 -0
  227. package/dist/esm/transaction/transaction-builder.js +70 -0
  228. package/dist/esm/types/aggregate-types.js +1 -0
  229. package/dist/esm/types/inference-types.js +12 -0
  230. package/dist/esm/types/pagination-types.js +4 -0
  231. package/dist/esm/types/result-types.js +1 -0
  232. package/dist/esm/types/scalar-types.js +1 -0
  233. package/dist/esm/types/schema-types.js +1 -0
  234. package/dist/esm/types/subscription-types.js +1 -0
  235. package/dist/esm/types.js +1 -0
  236. package/dist/esm/update/array-update-builder.js +219 -0
  237. package/dist/esm/update/index.js +3 -0
  238. package/dist/esm/update/jsonb-update-builder.js +211 -0
  239. package/dist/esm/update/update-builder.js +267 -0
  240. package/dist/esm/utils/addon/pg/cursor.js +1 -0
  241. package/dist/esm/utils/addon/pg/pg.js +2 -0
  242. package/dist/esm/utils/case-converter.js +55 -0
  243. package/dist/esm/utils/env-resolver.js +213 -0
  244. package/dist/esm/utils/environment-detection.js +114 -0
  245. package/dist/esm/utils/fk-resolver.js +178 -0
  246. package/dist/esm/utils/index.js +4 -0
  247. package/dist/esm/utils/pool-defaults.js +85 -0
  248. package/dist/esm/utils/type-coercion.js +112 -0
  249. package/dist/esm/window/index.js +1 -0
  250. package/dist/esm/window/window-builder.js +73 -0
  251. package/dist/index.cjs +1 -0
  252. package/dist/index.d.ts +7281 -0
  253. package/dist/index.js +1 -0
  254. package/package.json +52 -0
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.JoinConditionBuilder = void 0;
7
+ exports.createJoinConditionBuilder = createJoinConditionBuilder;
8
+ const table_proxy_1 = require("./table-proxy.cjs");
9
+ const condition_collector_1 = require("../condition/condition-collector.cjs");
10
+ const pg_format_1 = __importDefault(require("../shared/pg-format.cjs"));
11
+ const join_internals_1 = require("./join-internals.cjs");
12
+ class JoinConditionBuilder {
13
+ conditions = [];
14
+ whereConditions = [];
15
+ selectedColumns;
16
+ equal(left, right) {
17
+ this.conditions.push({
18
+ type: 'equal',
19
+ left,
20
+ right,
21
+ operator: '='
22
+ });
23
+ return this;
24
+ }
25
+ notEqual(left, right) {
26
+ this.conditions.push({
27
+ type: 'notEqual',
28
+ left,
29
+ right,
30
+ operator: '!='
31
+ });
32
+ return this;
33
+ }
34
+ greaterThan(left, right) {
35
+ this.conditions.push({
36
+ type: 'greaterThan',
37
+ left,
38
+ right,
39
+ operator: '>'
40
+ });
41
+ return this;
42
+ }
43
+ lessThan(left, right) {
44
+ this.conditions.push({
45
+ type: 'lessThan',
46
+ left,
47
+ right,
48
+ operator: '<'
49
+ });
50
+ return this;
51
+ }
52
+ greaterThanOrEqual(left, right) {
53
+ this.conditions.push({
54
+ type: 'greaterThanOrEqual',
55
+ left,
56
+ right,
57
+ operator: '>='
58
+ });
59
+ return this;
60
+ }
61
+ lessThanOrEqual(left, right) {
62
+ this.conditions.push({
63
+ type: 'lessThanOrEqual',
64
+ left,
65
+ right,
66
+ operator: '<='
67
+ });
68
+ return this;
69
+ }
70
+ like(left, right) {
71
+ this.conditions.push({
72
+ type: 'like',
73
+ left,
74
+ right,
75
+ operator: 'LIKE'
76
+ });
77
+ return this;
78
+ }
79
+ ilike(left, right) {
80
+ this.conditions.push({
81
+ type: 'ilike',
82
+ left,
83
+ right,
84
+ operator: 'ILIKE'
85
+ });
86
+ return this;
87
+ }
88
+ using(...columns) {
89
+ this.conditions.push({
90
+ type: 'using',
91
+ columns: columns
92
+ });
93
+ return this;
94
+ }
95
+ where(callback) {
96
+ const collector = new condition_collector_1.ConditionCollector();
97
+ callback(collector);
98
+ this.whereConditions.push(...collector.getConditions());
99
+ return this;
100
+ }
101
+ select(...args) {
102
+ if (args.length === 1 && Array.isArray(args[0])) {
103
+ this.selectedColumns = args[0];
104
+ }
105
+ else {
106
+ this.selectedColumns = args;
107
+ }
108
+ return this;
109
+ }
110
+ get [join_internals_1.JOIN_INTERNAL]() {
111
+ return {
112
+ toSQL: () => this.internalToSQL(),
113
+ isUsingJoin: () => this.internalIsUsingJoin(),
114
+ getUsingColumns: () => this.internalGetUsingColumns(),
115
+ toUsingSQL: () => this.internalToUsingSQL(),
116
+ getConditions: () => [...this.conditions],
117
+ getWhereConditions: () => [...this.whereConditions],
118
+ hasConditions: () => this.conditions.length > 0,
119
+ hasWhereConditions: () => this.whereConditions.length > 0,
120
+ getSelectedColumns: () => this.selectedColumns ?? null,
121
+ };
122
+ }
123
+ internalToSQL() {
124
+ const parts = [];
125
+ for (const cond of this.conditions) {
126
+ switch (cond.type) {
127
+ case 'using':
128
+ break;
129
+ case 'raw':
130
+ parts.push(cond.raw);
131
+ break;
132
+ default:
133
+ const leftSQL = (0, table_proxy_1.columnRefToSQL)(cond.left);
134
+ const rightSQL = this.formatRightSide(cond.right);
135
+ parts.push(`${leftSQL} ${cond.operator} ${rightSQL}`);
136
+ break;
137
+ }
138
+ }
139
+ if (this.whereConditions.length > 0) {
140
+ const whereSQL = (0, condition_collector_1.buildConditionsSQL)(this.whereConditions);
141
+ if (whereSQL) {
142
+ parts.push(whereSQL);
143
+ }
144
+ }
145
+ return parts.join(' AND ');
146
+ }
147
+ internalIsUsingJoin() {
148
+ return this.conditions.length === 1 && this.conditions[0].type === 'using';
149
+ }
150
+ internalGetUsingColumns() {
151
+ if (!this.internalIsUsingJoin())
152
+ return null;
153
+ return this.conditions[0].columns || null;
154
+ }
155
+ internalToUsingSQL() {
156
+ const columns = this.internalGetUsingColumns();
157
+ if (!columns)
158
+ return null;
159
+ return `USING (${columns.map(c => pg_format_1.default.ident(c)).join(', ')})`;
160
+ }
161
+ formatRightSide(right) {
162
+ if ((0, table_proxy_1.isColumnRef)(right)) {
163
+ return (0, table_proxy_1.columnRefToSQL)(right);
164
+ }
165
+ if (right === null) {
166
+ return 'NULL';
167
+ }
168
+ if (typeof right === 'boolean') {
169
+ return right ? 'true' : 'false';
170
+ }
171
+ if (typeof right === 'number') {
172
+ return String(right);
173
+ }
174
+ if (typeof right === 'string') {
175
+ return pg_format_1.default.literal(right);
176
+ }
177
+ if (right instanceof Date) {
178
+ return pg_format_1.default.literal(right.toISOString());
179
+ }
180
+ if (Array.isArray(right)) {
181
+ return `ARRAY[${right.map(v => this.formatRightSide(v)).join(', ')}]`;
182
+ }
183
+ return pg_format_1.default.literal(JSON.stringify(right));
184
+ }
185
+ }
186
+ exports.JoinConditionBuilder = JoinConditionBuilder;
187
+ function createJoinConditionBuilder() {
188
+ return new JoinConditionBuilder();
189
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JOIN_SETUP = exports.JOIN_INTERNAL = void 0;
4
+ exports.JOIN_INTERNAL = Symbol.for('join-internal');
5
+ exports.JOIN_SETUP = Symbol.for('join-setup');
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.JoinManyConditionBuilder = void 0;
7
+ exports.createJoinManyConditionBuilder = createJoinManyConditionBuilder;
8
+ const table_proxy_1 = require("./table-proxy.cjs");
9
+ const join_condition_builder_1 = require("./join-condition-builder.cjs");
10
+ const join_internals_1 = require("./join-internals.cjs");
11
+ const pg_format_1 = __importDefault(require("../shared/pg-format.cjs"));
12
+ class JoinManyConditionBuilder extends join_condition_builder_1.JoinConditionBuilder {
13
+ orderSpecs = [];
14
+ limitValue;
15
+ offsetValue;
16
+ innerJoins = [];
17
+ proxyCreator;
18
+ rightProxy;
19
+ orderBy(column, direction = 'ASC', nulls) {
20
+ this.orderSpecs.push({ column, direction, nulls });
21
+ return this;
22
+ }
23
+ limit(count) {
24
+ this.limitValue = count;
25
+ return this;
26
+ }
27
+ offset(count) {
28
+ this.offsetValue = count;
29
+ return this;
30
+ }
31
+ get [join_internals_1.JOIN_SETUP]() {
32
+ return (creator, rightProxy) => {
33
+ this.proxyCreator = creator;
34
+ this.rightProxy = rightProxy;
35
+ };
36
+ }
37
+ innerJoin(tableOrAlias, callback) {
38
+ if (!this.proxyCreator) {
39
+ throw new Error('innerJoin requires proxy creator - use raw innerJoinRaw() instead');
40
+ }
41
+ const [tableKey, alias] = Array.isArray(tableOrAlias)
42
+ ? tableOrAlias
43
+ : [tableOrAlias, tableOrAlias];
44
+ const { proxy: innerProxy, tableName } = this.proxyCreator(tableKey, alias);
45
+ const conditionBuilder = new join_condition_builder_1.JoinConditionBuilder();
46
+ callback(conditionBuilder, innerProxy);
47
+ const internals = conditionBuilder[join_internals_1.JOIN_INTERNAL];
48
+ const onClause = internals.toSQL();
49
+ this.innerJoins.push({ type: 'JOIN', table: tableName, alias, onClause });
50
+ return this;
51
+ }
52
+ leftInnerJoin(tableOrAlias, callback) {
53
+ if (!this.proxyCreator) {
54
+ throw new Error('leftInnerJoin requires proxy creator - use raw leftInnerJoinRaw() instead');
55
+ }
56
+ const [tableKey, alias] = Array.isArray(tableOrAlias)
57
+ ? tableOrAlias
58
+ : [tableOrAlias, tableOrAlias];
59
+ const { proxy: innerProxy, tableName } = this.proxyCreator(tableKey, alias);
60
+ const conditionBuilder = new join_condition_builder_1.JoinConditionBuilder();
61
+ callback(conditionBuilder, innerProxy);
62
+ const internals = conditionBuilder[join_internals_1.JOIN_INTERNAL];
63
+ const onClause = internals.toSQL();
64
+ this.innerJoins.push({ type: 'LEFT JOIN', table: tableName, alias, onClause });
65
+ return this;
66
+ }
67
+ innerJoinRaw(table, alias, onClause) {
68
+ this.innerJoins.push({ type: 'JOIN', table, alias, onClause });
69
+ return this;
70
+ }
71
+ leftInnerJoinRaw(table, alias, onClause) {
72
+ this.innerJoins.push({ type: 'LEFT JOIN', table, alias, onClause });
73
+ return this;
74
+ }
75
+ select(...args) {
76
+ if (args.length === 1 && Array.isArray(args[0])) {
77
+ this.selectedColumns = args[0];
78
+ }
79
+ else {
80
+ this.selectedColumns = args;
81
+ }
82
+ return this;
83
+ }
84
+ get [join_internals_1.JOIN_INTERNAL]() {
85
+ return {
86
+ toSQL: () => this.buildSQL(),
87
+ isUsingJoin: () => false,
88
+ getUsingColumns: () => null,
89
+ toUsingSQL: () => null,
90
+ getConditions: () => [...this.conditions],
91
+ getWhereConditions: () => [...this.whereConditions],
92
+ hasConditions: () => this.conditions.length > 0,
93
+ hasWhereConditions: () => this.whereConditions.length > 0,
94
+ getSelectedColumns: () => this.selectedColumns ?? null,
95
+ toSelectSQL: (alias) => this.buildSelectSQL(alias),
96
+ toOrderBySQL: () => this.buildOrderBySQL(),
97
+ toLimitSQL: () => this.buildLimitSQL(),
98
+ toOffsetSQL: () => this.buildOffsetSQL(),
99
+ toWhereSQL: () => this.buildSQL(),
100
+ getInnerJoins: () => [...this.innerJoins],
101
+ };
102
+ }
103
+ buildSQL() {
104
+ const parts = [];
105
+ for (const cond of this.conditions) {
106
+ if (cond.type === 'raw') {
107
+ parts.push(cond.raw);
108
+ }
109
+ else if (cond.type !== 'using') {
110
+ const leftSQL = (0, table_proxy_1.columnRefToSQL)(cond.left);
111
+ const rightSQL = this.formatRightSide(cond.right);
112
+ parts.push(`${leftSQL} ${cond.operator} ${rightSQL}`);
113
+ }
114
+ }
115
+ if (this.whereConditions.length > 0) {
116
+ const { buildConditionsSQL } = require("../condition/condition-collector.cjs");
117
+ const whereSQL = buildConditionsSQL(this.whereConditions);
118
+ if (whereSQL) {
119
+ parts.push(whereSQL);
120
+ }
121
+ }
122
+ return parts.join(' AND ');
123
+ }
124
+ buildSelectSQL(tableAlias) {
125
+ if (!this.selectedColumns || this.selectedColumns.length === 0) {
126
+ return `${pg_format_1.default.ident(tableAlias)}.*`;
127
+ }
128
+ return this.selectedColumns.map(col => `${pg_format_1.default.ident(tableAlias)}.${pg_format_1.default.ident(col)}`).join(', ');
129
+ }
130
+ buildOrderBySQL() {
131
+ if (this.orderSpecs.length === 0) {
132
+ return null;
133
+ }
134
+ return this.orderSpecs.map(spec => {
135
+ const col = pg_format_1.default.ident(spec.column);
136
+ let sql = `${col} ${spec.direction}`;
137
+ if (spec.nulls) {
138
+ sql += ` NULLS ${spec.nulls}`;
139
+ }
140
+ return sql;
141
+ }).join(', ');
142
+ }
143
+ buildLimitSQL() {
144
+ if (this.limitValue === undefined) {
145
+ return null;
146
+ }
147
+ return `LIMIT ${this.limitValue}`;
148
+ }
149
+ buildOffsetSQL() {
150
+ if (this.offsetValue === undefined) {
151
+ return null;
152
+ }
153
+ return `OFFSET ${this.offsetValue}`;
154
+ }
155
+ }
156
+ exports.JoinManyConditionBuilder = JoinManyConditionBuilder;
157
+ function createJoinManyConditionBuilder() {
158
+ return new JoinManyConditionBuilder();
159
+ }
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ScalarQueryBuilderImpl = void 0;
7
+ exports.createScalarTableAccessor = createScalarTableAccessor;
8
+ const pg_format_1 = __importDefault(require("../shared/pg-format.cjs"));
9
+ const condition_collector_1 = require("../condition/condition-collector.cjs");
10
+ class ScalarResultImpl {
11
+ sql;
12
+ params;
13
+ $scalar = true;
14
+ $type;
15
+ constructor(sql, params = []) {
16
+ this.sql = sql;
17
+ this.params = params;
18
+ }
19
+ toSQL() {
20
+ return this.sql;
21
+ }
22
+ getParams() {
23
+ return this.params;
24
+ }
25
+ }
26
+ class ScalarQueryBuilderImpl {
27
+ tableName;
28
+ tableSchema;
29
+ columnResolver;
30
+ whereConditions = [];
31
+ constructor(tableName, tableSchema, columnResolver) {
32
+ this.tableName = tableName;
33
+ this.tableSchema = tableSchema;
34
+ this.columnResolver = columnResolver;
35
+ }
36
+ where(callback) {
37
+ const conditionBuilder = new condition_collector_1.ConditionCollector();
38
+ callback(conditionBuilder);
39
+ this.whereConditions.push(...conditionBuilder.getConditions());
40
+ return this;
41
+ }
42
+ count() {
43
+ const sql = this.buildSQL('COUNT(*)');
44
+ return new ScalarResultImpl(sql);
45
+ }
46
+ sum(column) {
47
+ const sqlColumn = this.resolveColumn(column);
48
+ const sql = this.buildSQL(`COALESCE(SUM(${pg_format_1.default.ident(sqlColumn)}), 0)`);
49
+ return new ScalarResultImpl(sql);
50
+ }
51
+ avg(column) {
52
+ const sqlColumn = this.resolveColumn(column);
53
+ const sql = this.buildSQL(`COALESCE(AVG(${pg_format_1.default.ident(sqlColumn)}), 0)`);
54
+ return new ScalarResultImpl(sql);
55
+ }
56
+ min(column) {
57
+ const sqlColumn = this.resolveColumn(column);
58
+ const sql = this.buildSQL(`MIN(${pg_format_1.default.ident(sqlColumn)})`);
59
+ return new ScalarResultImpl(sql);
60
+ }
61
+ max(column) {
62
+ const sqlColumn = this.resolveColumn(column);
63
+ const sql = this.buildSQL(`MAX(${pg_format_1.default.ident(sqlColumn)})`);
64
+ return new ScalarResultImpl(sql);
65
+ }
66
+ pick(column) {
67
+ const sqlColumn = this.resolveColumn(column);
68
+ const sql = this.buildSQL(pg_format_1.default.ident(sqlColumn), true);
69
+ return new ScalarResultImpl(sql);
70
+ }
71
+ exists() {
72
+ const whereClause = this.buildWhereClause();
73
+ const sql = `(EXISTS(SELECT 1 FROM ${pg_format_1.default.ident(this.tableName)}${whereClause}))`;
74
+ return new ScalarResultImpl(sql);
75
+ }
76
+ resolveColumn(column) {
77
+ if (this.columnResolver) {
78
+ return this.columnResolver(column);
79
+ }
80
+ const columns = this.tableSchema?.$columns || this.tableSchema;
81
+ const columnDef = columns?.[column];
82
+ if (columnDef?.$columnName) {
83
+ return columnDef.$columnName;
84
+ }
85
+ return column.replace(/([A-Z])/g, '_$1').toLowerCase().replace(/^_/, '');
86
+ }
87
+ transformConditions(conditions) {
88
+ if (!this.columnResolver && !this.tableSchema) {
89
+ return conditions;
90
+ }
91
+ return conditions.map(cond => {
92
+ if (!cond.column || cond.method === 'raw') {
93
+ return cond;
94
+ }
95
+ if (cond.method === 'or' || cond.method === 'and') {
96
+ return {
97
+ ...cond,
98
+ values: this.transformConditions(cond.values)
99
+ };
100
+ }
101
+ return {
102
+ ...cond,
103
+ column: this.resolveColumn(cond.column)
104
+ };
105
+ });
106
+ }
107
+ buildWhereClause() {
108
+ if (this.whereConditions.length === 0) {
109
+ return '';
110
+ }
111
+ const transformed = this.transformConditions(this.whereConditions);
112
+ return ` WHERE ${(0, condition_collector_1.buildConditionsSQL)(transformed)}`;
113
+ }
114
+ buildSQL(selectExpr, withLimit = false) {
115
+ const whereClause = this.buildWhereClause();
116
+ const limitClause = withLimit ? ' LIMIT 1' : '';
117
+ return `(SELECT ${selectExpr} FROM ${pg_format_1.default.ident(this.tableName)}${whereClause}${limitClause})`;
118
+ }
119
+ }
120
+ exports.ScalarQueryBuilderImpl = ScalarQueryBuilderImpl;
121
+ function createScalarTableAccessor(schema, getColumnResolver) {
122
+ return new Proxy({}, {
123
+ get(_, prop) {
124
+ if (typeof prop === 'symbol') {
125
+ return undefined;
126
+ }
127
+ const tables = schema?.tables || schema;
128
+ const tableDef = tables?.[prop];
129
+ const sqlTableName = tableDef?.$name || prop;
130
+ const columnResolver = getColumnResolver?.(sqlTableName);
131
+ return new ScalarQueryBuilderImpl(sqlTableName, tableDef, columnResolver);
132
+ }
133
+ });
134
+ }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConnectedScalarSelectBuilder = exports.ScalarSelectBuilder = void 0;
7
+ const pg_format_1 = __importDefault(require("../shared/pg-format.cjs"));
8
+ const scalar_query_builder_1 = require("./scalar-query-builder.cjs");
9
+ class ScalarSelectBuilder {
10
+ executeQuery;
11
+ scalarResults;
12
+ constructor(scalars, schema, executeQuery, getColumnResolver) {
13
+ this.executeQuery = executeQuery;
14
+ const tableAccessor = (0, scalar_query_builder_1.createScalarTableAccessor)(schema, getColumnResolver);
15
+ this.scalarResults = {};
16
+ for (const [key, callback] of Object.entries(scalars)) {
17
+ this.scalarResults[key] = callback(tableAccessor);
18
+ }
19
+ }
20
+ toString() {
21
+ const columns = Object.entries(this.scalarResults)
22
+ .map(([alias, scalar]) => `${scalar.toSQL()} AS ${pg_format_1.default.ident(alias)}`)
23
+ .join(', ');
24
+ return `SELECT ${columns}`;
25
+ }
26
+ async get(withMetadata) {
27
+ const sql = this.toString();
28
+ const { data, metadata } = await this.executeQuery(sql);
29
+ const row = Array.isArray(data) ? data[0] : data;
30
+ const result = this.transformResult(row);
31
+ if (withMetadata) {
32
+ return { data: result, metadata };
33
+ }
34
+ return result;
35
+ }
36
+ transformResult(row) {
37
+ if (!row) {
38
+ const result = {};
39
+ for (const key of Object.keys(this.scalarResults)) {
40
+ result[key] = null;
41
+ }
42
+ return result;
43
+ }
44
+ const result = {};
45
+ for (const [key, value] of Object.entries(row)) {
46
+ if (typeof value === 'string' && /^\d+$/.test(value)) {
47
+ result[key] = parseInt(value, 10);
48
+ }
49
+ else if (typeof value === 'string' && /^\d+\.\d+$/.test(value)) {
50
+ result[key] = parseFloat(value);
51
+ }
52
+ else {
53
+ result[key] = value;
54
+ }
55
+ }
56
+ return result;
57
+ }
58
+ }
59
+ exports.ScalarSelectBuilder = ScalarSelectBuilder;
60
+ class ConnectedScalarSelectBuilder extends ScalarSelectBuilder {
61
+ constructor(scalars, schema, internal) {
62
+ const executeQuery = async (sql) => {
63
+ return internal.executeSelectOne(sql);
64
+ };
65
+ const getColumnResolver = (tableName) => {
66
+ if (internal.hasColumnMapping()) {
67
+ return (column) => {
68
+ const transformed = internal.transformToDbColumns(tableName, { [column]: null });
69
+ const keys = Object.keys(transformed);
70
+ return keys.length > 0 ? keys[0] : column;
71
+ };
72
+ }
73
+ return undefined;
74
+ };
75
+ super(scalars, schema, executeQuery, getColumnResolver);
76
+ }
77
+ }
78
+ exports.ConnectedScalarSelectBuilder = ConnectedScalarSelectBuilder;