relq 1.0.36 → 1.0.38
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.
- package/dist/cjs/cli/commands/pull.cjs +2 -2
- package/dist/cjs/cli/utils/ast-codegen.cjs +1 -1
- package/dist/cjs/condition/condition-collector.cjs +35 -27
- package/dist/cjs/core/helpers/ConnectedAggregateBuilder.cjs +128 -0
- package/dist/cjs/core/helpers/ConnectedCTEBuilder.cjs +53 -0
- package/dist/cjs/core/helpers/ConnectedCountBuilder.cjs +68 -0
- package/dist/cjs/core/helpers/ConnectedDeleteBuilder.cjs +33 -0
- package/dist/cjs/core/helpers/ConnectedInsertBuilder.cjs +56 -0
- package/dist/cjs/core/helpers/ConnectedQueryBuilder.cjs +200 -0
- package/dist/cjs/core/helpers/ConnectedRawQueryBuilder.cjs +46 -0
- package/dist/cjs/core/helpers/ConnectedSelectBuilder.cjs +495 -0
- package/dist/cjs/core/helpers/ConnectedTransactionBuilder.cjs +44 -0
- package/dist/cjs/core/helpers/ConnectedUpdateBuilder.cjs +34 -0
- package/dist/cjs/core/helpers/PaginateBuilder.cjs +178 -0
- package/dist/cjs/core/helpers/ReturningExecutor.cjs +34 -0
- package/dist/cjs/core/helpers/index.cjs +30 -0
- package/dist/cjs/core/helpers/methods.cjs +10 -0
- package/dist/cjs/core/relq-client.cjs +35 -1157
- package/dist/cjs/core/types/core.types.cjs +2 -0
- package/dist/cjs/select/index.cjs +12 -1
- package/dist/cjs/select/join-builder.cjs +192 -0
- package/dist/cjs/select/join-condition-builder.cjs +189 -0
- package/dist/cjs/select/join-internals.cjs +5 -0
- package/dist/cjs/select/join-many-condition-builder.cjs +153 -0
- package/dist/cjs/select/select-builder.cjs +133 -10
- package/dist/cjs/select/table-proxy.cjs +99 -0
- package/dist/cjs/utils/fk-resolver.cjs +162 -0
- package/dist/cjs/utils/index.cjs +7 -1
- package/dist/esm/cli/commands/pull.js +2 -2
- package/dist/esm/cli/utils/ast-codegen.js +1 -1
- package/dist/esm/condition/condition-collector.js +35 -27
- package/dist/esm/core/helpers/ConnectedAggregateBuilder.js +124 -0
- package/dist/esm/core/helpers/ConnectedCTEBuilder.js +49 -0
- package/dist/esm/core/helpers/ConnectedCountBuilder.js +64 -0
- package/dist/esm/core/helpers/ConnectedDeleteBuilder.js +29 -0
- package/dist/esm/core/helpers/ConnectedInsertBuilder.js +52 -0
- package/dist/esm/core/helpers/ConnectedQueryBuilder.js +196 -0
- package/dist/esm/core/helpers/ConnectedRawQueryBuilder.js +42 -0
- package/dist/esm/core/helpers/ConnectedSelectBuilder.js +488 -0
- package/dist/esm/core/helpers/ConnectedTransactionBuilder.js +40 -0
- package/dist/esm/core/helpers/ConnectedUpdateBuilder.js +30 -0
- package/dist/esm/core/helpers/PaginateBuilder.js +174 -0
- package/dist/esm/core/helpers/ReturningExecutor.js +30 -0
- package/dist/esm/core/helpers/index.js +13 -0
- package/dist/esm/core/helpers/methods.js +6 -0
- package/dist/esm/core/relq-client.js +20 -1139
- package/dist/esm/core/types/core.types.js +1 -0
- package/dist/esm/select/index.js +3 -0
- package/dist/esm/select/join-builder.js +184 -0
- package/dist/esm/select/join-condition-builder.js +181 -0
- package/dist/esm/select/join-internals.js +2 -0
- package/dist/esm/select/join-many-condition-builder.js +145 -0
- package/dist/esm/select/select-builder.js +133 -10
- package/dist/esm/select/table-proxy.js +91 -0
- package/dist/esm/utils/fk-resolver.js +154 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/index.d.ts +1852 -966
- package/package.json +1 -1
|
@@ -574,7 +574,7 @@ async function pullCommand(context) {
|
|
|
574
574
|
const hasTypesImport = typesImportPattern.test(schemaContent);
|
|
575
575
|
const typesWithUsages = typesForProgress.filter(t => t.usages && t.usages.length > 0);
|
|
576
576
|
if (typesWithUsages.length > 0 && !hasTypesImport) {
|
|
577
|
-
|
|
577
|
+
spinner.start(`Applying ${typesWithUsages.length} type(s) to schema...`);
|
|
578
578
|
const columnTypeMap = {};
|
|
579
579
|
for (const typeDef of typesForProgress) {
|
|
580
580
|
if (typeDef.usages) {
|
|
@@ -595,7 +595,7 @@ async function pullCommand(context) {
|
|
|
595
595
|
typesImportPath,
|
|
596
596
|
});
|
|
597
597
|
fs.writeFileSync(schemaPath, typescript, 'utf-8');
|
|
598
|
-
|
|
598
|
+
spinner.succeed(`Updated ${cli_utils_1.colors.cyan(schemaPath)} with type annotations`);
|
|
599
599
|
hasSynced = true;
|
|
600
600
|
}
|
|
601
601
|
}
|
|
@@ -819,7 +819,7 @@ function generateTypeScriptFromAST(schema, options = {}) {
|
|
|
819
819
|
const usedTypeNames = new Set(Object.values(columnTypeMap));
|
|
820
820
|
if (usedTypeNames.size > 0 && typesImportPath) {
|
|
821
821
|
const typeNames = Array.from(usedTypeNames).sort();
|
|
822
|
-
parts.push(`import { ${typeNames.join(', ')} } from '${typesImportPath}';`);
|
|
822
|
+
parts.push(`import type { ${typeNames.join(', ')} } from '${typesImportPath}';`);
|
|
823
823
|
}
|
|
824
824
|
parts.push('');
|
|
825
825
|
if (needsPgExtensions) {
|
|
@@ -178,6 +178,13 @@ class ConditionCollector {
|
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
exports.ConditionCollector = ConditionCollector;
|
|
181
|
+
function formatColumn(column) {
|
|
182
|
+
if (column.includes('.')) {
|
|
183
|
+
const parts = column.split('.');
|
|
184
|
+
return parts.map(p => pg_format_1.default.ident(p)).join('.');
|
|
185
|
+
}
|
|
186
|
+
return pg_format_1.default.ident(column);
|
|
187
|
+
}
|
|
181
188
|
function buildConditionSQL(condition) {
|
|
182
189
|
const { method, column, values } = condition;
|
|
183
190
|
if (method.startsWith('jsonb_')) {
|
|
@@ -198,73 +205,74 @@ function buildConditionSQL(condition) {
|
|
|
198
205
|
if (method.startsWith('network_')) {
|
|
199
206
|
return (0, network_condition_builder_1.buildNetworkConditionSQL)(condition);
|
|
200
207
|
}
|
|
208
|
+
const col = column ? formatColumn(column) : '';
|
|
201
209
|
switch (method) {
|
|
202
210
|
case 'equal':
|
|
203
211
|
if (Array.isArray(values) && values.length > 1) {
|
|
204
|
-
return (0, pg_format_1.default)('%
|
|
212
|
+
return `${col} IN ${(0, pg_format_1.default)('%L', values)}`;
|
|
205
213
|
}
|
|
206
|
-
return (0, pg_format_1.default)('%
|
|
214
|
+
return `${col} = ${(0, pg_format_1.default)('%L', Array.isArray(values) ? values[0] : values)}`;
|
|
207
215
|
case 'notEqual':
|
|
208
216
|
if (Array.isArray(values) && values.length > 1) {
|
|
209
|
-
return (0, pg_format_1.default)('%
|
|
217
|
+
return `${col} NOT IN ${(0, pg_format_1.default)('%L', values)}`;
|
|
210
218
|
}
|
|
211
|
-
return (0, pg_format_1.default)('%
|
|
219
|
+
return `${col} != ${(0, pg_format_1.default)('%L', Array.isArray(values) ? values[0] : values)}`;
|
|
212
220
|
case 'lessThan':
|
|
213
|
-
return (0, pg_format_1.default)('%
|
|
221
|
+
return `${col} < ${(0, pg_format_1.default)('%L', Array.isArray(values) ? values[0] : values)}`;
|
|
214
222
|
case 'lessThanEqual':
|
|
215
|
-
return (0, pg_format_1.default)('%
|
|
223
|
+
return `${col} <= ${(0, pg_format_1.default)('%L', Array.isArray(values) ? values[0] : values)}`;
|
|
216
224
|
case 'greaterThan':
|
|
217
|
-
return (0, pg_format_1.default)('%
|
|
225
|
+
return `${col} > ${(0, pg_format_1.default)('%L', Array.isArray(values) ? values[0] : values)}`;
|
|
218
226
|
case 'greaterThanEqual':
|
|
219
|
-
return (0, pg_format_1.default)('%
|
|
227
|
+
return `${col} >= ${(0, pg_format_1.default)('%L', Array.isArray(values) ? values[0] : values)}`;
|
|
220
228
|
case 'isNull':
|
|
221
|
-
return
|
|
229
|
+
return `${col} IS NULL`;
|
|
222
230
|
case 'isNotNull':
|
|
223
|
-
return
|
|
231
|
+
return `${col} IS NOT NULL`;
|
|
224
232
|
case 'between': {
|
|
225
233
|
const [start, end] = values;
|
|
226
|
-
return (0, pg_format_1.default)('%
|
|
234
|
+
return `${col} BETWEEN ${(0, pg_format_1.default)('%L', start)} AND ${(0, pg_format_1.default)('%L', end)}`;
|
|
227
235
|
}
|
|
228
236
|
case 'notBetween': {
|
|
229
237
|
const [notStart, notEnd] = values;
|
|
230
|
-
return (0, pg_format_1.default)('%
|
|
238
|
+
return `${col} NOT BETWEEN ${(0, pg_format_1.default)('%L', notStart)} AND ${(0, pg_format_1.default)('%L', notEnd)}`;
|
|
231
239
|
}
|
|
232
240
|
case 'startsWith':
|
|
233
|
-
return (0, pg_format_1.default)('%
|
|
241
|
+
return `${col} LIKE ${(0, pg_format_1.default)('%L', `${values}%`)}`;
|
|
234
242
|
case 'notStartsWith':
|
|
235
|
-
return (0, pg_format_1.default)('%
|
|
243
|
+
return `${col} NOT LIKE ${(0, pg_format_1.default)('%L', `${values}%`)}`;
|
|
236
244
|
case 'endsWith':
|
|
237
|
-
return (0, pg_format_1.default)('%
|
|
245
|
+
return `${col} LIKE ${(0, pg_format_1.default)('%L', `%${values}`)}`;
|
|
238
246
|
case 'notEndsWith':
|
|
239
|
-
return (0, pg_format_1.default)('%
|
|
247
|
+
return `${col} NOT LIKE ${(0, pg_format_1.default)('%L', `%${values}`)}`;
|
|
240
248
|
case 'contains':
|
|
241
|
-
return (0, pg_format_1.default)('%
|
|
249
|
+
return `${col} LIKE ${(0, pg_format_1.default)('%L', `%${values}%`)}`;
|
|
242
250
|
case 'notContains':
|
|
243
|
-
return (0, pg_format_1.default)('%
|
|
251
|
+
return `${col} NOT LIKE ${(0, pg_format_1.default)('%L', `%${values}%`)}`;
|
|
244
252
|
case 'like':
|
|
245
|
-
return (0, pg_format_1.default)('%
|
|
253
|
+
return `${col} LIKE ${(0, pg_format_1.default)('%L', values)}`;
|
|
246
254
|
case 'notLike':
|
|
247
|
-
return (0, pg_format_1.default)('%
|
|
255
|
+
return `${col} NOT LIKE ${(0, pg_format_1.default)('%L', values)}`;
|
|
248
256
|
case 'ilike':
|
|
249
|
-
return (0, pg_format_1.default)('%
|
|
257
|
+
return `${col} ILIKE ${(0, pg_format_1.default)('%L', values)}`;
|
|
250
258
|
case 'in': {
|
|
251
259
|
const valueList = Array.isArray(values) ? values : [values];
|
|
252
260
|
const formattedValues = valueList.map(v => (0, pg_format_1.default)('%L', v)).join(', ');
|
|
253
|
-
return
|
|
261
|
+
return `${col} IN (${formattedValues})`;
|
|
254
262
|
}
|
|
255
263
|
case 'notIn': {
|
|
256
264
|
const valueList = Array.isArray(values) ? values : [values];
|
|
257
265
|
const formattedValues = valueList.map(v => (0, pg_format_1.default)('%L', v)).join(', ');
|
|
258
|
-
return
|
|
266
|
+
return `${col} NOT IN (${formattedValues})`;
|
|
259
267
|
}
|
|
260
268
|
case 'exists':
|
|
261
|
-
return
|
|
269
|
+
return `EXISTS (${values})`;
|
|
262
270
|
case 'notExists':
|
|
263
|
-
return
|
|
271
|
+
return `NOT EXISTS (${values})`;
|
|
264
272
|
case 'search':
|
|
265
|
-
return (0, pg_format_1.default)('
|
|
273
|
+
return `to_tsvector(${col}) @@ plainto_tsquery(${(0, pg_format_1.default)('%L', values)})`;
|
|
266
274
|
case 'notSearch':
|
|
267
|
-
return
|
|
275
|
+
return `NOT (to_tsvector(${col}) @@ plainto_tsquery(${(0, pg_format_1.default)('%L', values)}))`;
|
|
268
276
|
case 'or': {
|
|
269
277
|
const orConditions = values;
|
|
270
278
|
return `(${orConditions.map(c => buildConditionSQL(c)).join(' OR ')})`;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConnectedAggregateBuilder = void 0;
|
|
4
|
+
const methods_1 = require("./methods.cjs");
|
|
5
|
+
class ConnectedAggregateBuilder {
|
|
6
|
+
builder;
|
|
7
|
+
relq;
|
|
8
|
+
tableName;
|
|
9
|
+
constructor(builder, relq, tableName) {
|
|
10
|
+
this.builder = builder;
|
|
11
|
+
this.relq = relq;
|
|
12
|
+
this.tableName = tableName;
|
|
13
|
+
}
|
|
14
|
+
mapColumn(column) {
|
|
15
|
+
const transformed = this.relq[methods_1.INTERNAL].transformToDbColumns(this.tableName, { [column]: true });
|
|
16
|
+
return Object.keys(transformed)[0] || column;
|
|
17
|
+
}
|
|
18
|
+
groupBy(...columns) {
|
|
19
|
+
const dbColumns = columns.map(col => this.mapColumn(col));
|
|
20
|
+
this.builder.groupBy(...dbColumns);
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
count(alias) {
|
|
24
|
+
this.builder.count(alias);
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
countColumn(column, alias) {
|
|
28
|
+
this.builder.countColumn(this.mapColumn(column), alias);
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
countDistinct(column, alias) {
|
|
32
|
+
this.builder.countDistinct(this.mapColumn(column), alias);
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
sum(column, alias) {
|
|
36
|
+
this.builder.sum(this.mapColumn(column), alias);
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
avg(column, alias) {
|
|
40
|
+
this.builder.avg(this.mapColumn(column), alias);
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
min(column, alias) {
|
|
44
|
+
this.builder.min(this.mapColumn(column), alias);
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
max(column, alias) {
|
|
48
|
+
this.builder.max(this.mapColumn(column), alias);
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
arrayAgg(column, alias) {
|
|
52
|
+
this.builder.arrayAgg(this.mapColumn(column), alias);
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
stringAgg(column, delimiter, alias) {
|
|
56
|
+
this.builder.stringAgg(this.mapColumn(column), delimiter || ', ', alias);
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
jsonAgg(column, alias) {
|
|
60
|
+
this.builder.jsonAgg(this.mapColumn(column), alias);
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
jsonbAgg(column, alias) {
|
|
64
|
+
this.builder.jsonbAgg(this.mapColumn(column), alias);
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
boolAnd(column, alias) {
|
|
68
|
+
this.builder.boolAnd(this.mapColumn(column), alias);
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
boolOr(column, alias) {
|
|
72
|
+
this.builder.boolOr(this.mapColumn(column), alias);
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
where(callback) {
|
|
76
|
+
this.builder.where(callback);
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
having(callback) {
|
|
80
|
+
this.builder.having(callback);
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
orderBy(column, direction = 'ASC') {
|
|
84
|
+
this.builder.orderBy(this.mapColumn(column), direction);
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
limit(count) {
|
|
88
|
+
this.builder.limit(count);
|
|
89
|
+
return this;
|
|
90
|
+
}
|
|
91
|
+
offset(count) {
|
|
92
|
+
this.builder.offset(count);
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
toString() {
|
|
96
|
+
return this.builder.toString();
|
|
97
|
+
}
|
|
98
|
+
async all() {
|
|
99
|
+
const sql = this.builder.toString();
|
|
100
|
+
const result = await this.relq[methods_1.INTERNAL].executeSelect(sql, this.tableName);
|
|
101
|
+
const numericAliases = this.builder.getNumericAliases();
|
|
102
|
+
if (numericAliases.length > 0) {
|
|
103
|
+
for (const row of result.data) {
|
|
104
|
+
for (const alias of numericAliases) {
|
|
105
|
+
if (alias in row && typeof row[alias] === 'string') {
|
|
106
|
+
row[alias] = Number(row[alias]);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return result.data;
|
|
112
|
+
}
|
|
113
|
+
async get() {
|
|
114
|
+
this.builder.limit(1);
|
|
115
|
+
const sql = this.builder.toString();
|
|
116
|
+
const result = await this.relq[methods_1.INTERNAL].executeSelectOne(sql, this.tableName);
|
|
117
|
+
const numericAliases = this.builder.getNumericAliases();
|
|
118
|
+
if (numericAliases.length > 0 && result.data) {
|
|
119
|
+
for (const alias of numericAliases) {
|
|
120
|
+
if (alias in result.data && typeof result.data[alias] === 'string') {
|
|
121
|
+
result.data[alias] = Number(result.data[alias]);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return result.data;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.ConnectedAggregateBuilder = ConnectedAggregateBuilder;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConnectedCTEBuilder = void 0;
|
|
4
|
+
const methods_1 = require("./methods.cjs");
|
|
5
|
+
class ConnectedCTEBuilder {
|
|
6
|
+
relq;
|
|
7
|
+
ctes = [];
|
|
8
|
+
constructor(relq) {
|
|
9
|
+
this.relq = relq;
|
|
10
|
+
}
|
|
11
|
+
with(name, query) {
|
|
12
|
+
const queryStr = typeof query === 'string' ? query : query.toString();
|
|
13
|
+
this.ctes.push({ name, query: queryStr });
|
|
14
|
+
return this;
|
|
15
|
+
}
|
|
16
|
+
withMaterialized(name, query) {
|
|
17
|
+
const queryStr = typeof query === 'string' ? query : query.toString();
|
|
18
|
+
this.ctes.push({ name, query: `MATERIALIZED (${queryStr})` });
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
async query(sql) {
|
|
22
|
+
const cteClause = this.buildCTEClause();
|
|
23
|
+
const fullSql = `${cteClause} ${sql}`;
|
|
24
|
+
const result = await this.relq[methods_1.INTERNAL].executeQuery(fullSql);
|
|
25
|
+
return {
|
|
26
|
+
data: result.result.rows,
|
|
27
|
+
rowCount: result.result.rowCount ?? 0
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async all(sql) {
|
|
31
|
+
const result = await this.query(sql);
|
|
32
|
+
return result.data;
|
|
33
|
+
}
|
|
34
|
+
async get(sql) {
|
|
35
|
+
const result = await this.query(sql);
|
|
36
|
+
return result.data[0] ?? null;
|
|
37
|
+
}
|
|
38
|
+
buildCTEClause() {
|
|
39
|
+
if (this.ctes.length === 0)
|
|
40
|
+
return '';
|
|
41
|
+
const cteStrings = this.ctes.map(cte => {
|
|
42
|
+
if (cte.query.startsWith('MATERIALIZED')) {
|
|
43
|
+
return `"${cte.name}" AS ${cte.query}`;
|
|
44
|
+
}
|
|
45
|
+
return `"${cte.name}" AS (${cte.query})`;
|
|
46
|
+
});
|
|
47
|
+
return `WITH ${cteStrings.join(', ')}`;
|
|
48
|
+
}
|
|
49
|
+
toSQL(mainQuery) {
|
|
50
|
+
return `${this.buildCTEClause()} ${mainQuery}`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.ConnectedCTEBuilder = ConnectedCTEBuilder;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConnectedCountBuilder = void 0;
|
|
4
|
+
const methods_1 = require("./methods.cjs");
|
|
5
|
+
class ConnectedCountBuilder {
|
|
6
|
+
builder;
|
|
7
|
+
relq;
|
|
8
|
+
tableName;
|
|
9
|
+
groupNames = [];
|
|
10
|
+
constructor(builder, relq, tableName) {
|
|
11
|
+
this.builder = builder;
|
|
12
|
+
this.relq = relq;
|
|
13
|
+
this.tableName = tableName;
|
|
14
|
+
}
|
|
15
|
+
group(name, callback, options) {
|
|
16
|
+
this.groupNames.push(name);
|
|
17
|
+
this.builder.group(name, (q) => {
|
|
18
|
+
const wrapped = this.wrapConditionBuilder(q);
|
|
19
|
+
return callback(wrapped);
|
|
20
|
+
}, options);
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
where(callback) {
|
|
24
|
+
this.builder.where((q) => {
|
|
25
|
+
const wrapped = this.wrapConditionBuilder(q);
|
|
26
|
+
return callback(wrapped);
|
|
27
|
+
});
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
wrapConditionBuilder(originalBuilder) {
|
|
31
|
+
const relq = this.relq;
|
|
32
|
+
const tableName = this.tableName;
|
|
33
|
+
return new Proxy(originalBuilder, {
|
|
34
|
+
get(target, prop) {
|
|
35
|
+
const original = target[prop];
|
|
36
|
+
if (typeof original === 'function') {
|
|
37
|
+
return function (column, ...args) {
|
|
38
|
+
const transformed = relq[methods_1.INTERNAL].transformToDbColumns(tableName, { [column]: true });
|
|
39
|
+
const dbColumn = Object.keys(transformed)[0] || column;
|
|
40
|
+
return original.call(target, dbColumn, ...args);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return original;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
toString() {
|
|
48
|
+
return this.builder.toString();
|
|
49
|
+
}
|
|
50
|
+
async execute() {
|
|
51
|
+
const sql = this.builder.toString();
|
|
52
|
+
return this.relq[methods_1.INTERNAL].executeCount(sql);
|
|
53
|
+
}
|
|
54
|
+
async get() {
|
|
55
|
+
const sql = this.builder.toString();
|
|
56
|
+
const result = await this.relq[methods_1.INTERNAL].executeQuery(sql);
|
|
57
|
+
const row = result.result.rows[0];
|
|
58
|
+
if (this.groupNames.length === 0) {
|
|
59
|
+
return (Number(row?.count) ?? 0);
|
|
60
|
+
}
|
|
61
|
+
const counts = {};
|
|
62
|
+
for (const name of this.groupNames) {
|
|
63
|
+
counts[name] = Number(row?.[name] ?? 0);
|
|
64
|
+
}
|
|
65
|
+
return counts;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.ConnectedCountBuilder = ConnectedCountBuilder;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConnectedDeleteBuilder = void 0;
|
|
4
|
+
const methods_1 = require("./methods.cjs");
|
|
5
|
+
const ReturningExecutor_1 = require("./ReturningExecutor.cjs");
|
|
6
|
+
class ConnectedDeleteBuilder {
|
|
7
|
+
builder;
|
|
8
|
+
relq;
|
|
9
|
+
constructor(builder, relq) {
|
|
10
|
+
this.builder = builder;
|
|
11
|
+
this.relq = relq;
|
|
12
|
+
}
|
|
13
|
+
where(callback) {
|
|
14
|
+
this.builder.where(callback);
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
toString() {
|
|
18
|
+
return this.builder.toString();
|
|
19
|
+
}
|
|
20
|
+
async run(withMetadata) {
|
|
21
|
+
const sql = this.builder.toString();
|
|
22
|
+
const result = await this.relq[methods_1.INTERNAL].executeRun(sql);
|
|
23
|
+
if (withMetadata) {
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
return result.metadata.rowCount ?? 0;
|
|
27
|
+
}
|
|
28
|
+
returning(columns) {
|
|
29
|
+
this.builder.returning(columns);
|
|
30
|
+
return new ReturningExecutor_1.ReturningExecutor(this.builder, this.relq);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.ConnectedDeleteBuilder = ConnectedDeleteBuilder;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConnectedInsertBuilder = void 0;
|
|
4
|
+
const methods_1 = require("./methods.cjs");
|
|
5
|
+
const ReturningExecutor_1 = require("./ReturningExecutor.cjs");
|
|
6
|
+
class ConnectedInsertBuilder {
|
|
7
|
+
builder;
|
|
8
|
+
relq;
|
|
9
|
+
constructor(builder, relq) {
|
|
10
|
+
this.builder = builder;
|
|
11
|
+
this.relq = relq;
|
|
12
|
+
}
|
|
13
|
+
addRow(row) {
|
|
14
|
+
this.builder.addRow(row);
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
addRows(rows) {
|
|
18
|
+
this.builder.addRows(rows);
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
clear() {
|
|
22
|
+
this.builder.clear();
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
get total() {
|
|
26
|
+
return this.builder.total;
|
|
27
|
+
}
|
|
28
|
+
onConflict(columns, callback) {
|
|
29
|
+
const cols = Array.isArray(columns) ? columns : [columns];
|
|
30
|
+
this.builder.onConflict(cols, (conflictBuilder) => {
|
|
31
|
+
callback(conflictBuilder);
|
|
32
|
+
});
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
toString() {
|
|
36
|
+
return this.builder.toString();
|
|
37
|
+
}
|
|
38
|
+
async run(withMetadata) {
|
|
39
|
+
(0, methods_1.debugLog)(this.relq[methods_1.INTERNAL]?.config, `ConnectedInsertBuilder.run called for table: ${this.builder.tableName}`);
|
|
40
|
+
const internalRelq = this.relq[methods_1.INTERNAL];
|
|
41
|
+
for (const row of this.builder.insertData) {
|
|
42
|
+
internalRelq.validateData(this.builder.tableName, row, 'insert');
|
|
43
|
+
}
|
|
44
|
+
const sql = this.builder.toString();
|
|
45
|
+
const result = await internalRelq.executeRun(sql);
|
|
46
|
+
if (withMetadata) {
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
return result.metadata.rowCount ?? 0;
|
|
50
|
+
}
|
|
51
|
+
returning(columns) {
|
|
52
|
+
this.builder.returning(columns);
|
|
53
|
+
return new ReturningExecutor_1.ReturningExecutor(this.builder, this.relq);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.ConnectedInsertBuilder = ConnectedInsertBuilder;
|