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.
Files changed (58) hide show
  1. package/dist/cjs/cli/commands/pull.cjs +2 -2
  2. package/dist/cjs/cli/utils/ast-codegen.cjs +1 -1
  3. package/dist/cjs/condition/condition-collector.cjs +35 -27
  4. package/dist/cjs/core/helpers/ConnectedAggregateBuilder.cjs +128 -0
  5. package/dist/cjs/core/helpers/ConnectedCTEBuilder.cjs +53 -0
  6. package/dist/cjs/core/helpers/ConnectedCountBuilder.cjs +68 -0
  7. package/dist/cjs/core/helpers/ConnectedDeleteBuilder.cjs +33 -0
  8. package/dist/cjs/core/helpers/ConnectedInsertBuilder.cjs +56 -0
  9. package/dist/cjs/core/helpers/ConnectedQueryBuilder.cjs +200 -0
  10. package/dist/cjs/core/helpers/ConnectedRawQueryBuilder.cjs +46 -0
  11. package/dist/cjs/core/helpers/ConnectedSelectBuilder.cjs +495 -0
  12. package/dist/cjs/core/helpers/ConnectedTransactionBuilder.cjs +44 -0
  13. package/dist/cjs/core/helpers/ConnectedUpdateBuilder.cjs +34 -0
  14. package/dist/cjs/core/helpers/PaginateBuilder.cjs +178 -0
  15. package/dist/cjs/core/helpers/ReturningExecutor.cjs +34 -0
  16. package/dist/cjs/core/helpers/index.cjs +30 -0
  17. package/dist/cjs/core/helpers/methods.cjs +10 -0
  18. package/dist/cjs/core/relq-client.cjs +35 -1157
  19. package/dist/cjs/core/types/core.types.cjs +2 -0
  20. package/dist/cjs/select/index.cjs +12 -1
  21. package/dist/cjs/select/join-builder.cjs +192 -0
  22. package/dist/cjs/select/join-condition-builder.cjs +189 -0
  23. package/dist/cjs/select/join-internals.cjs +5 -0
  24. package/dist/cjs/select/join-many-condition-builder.cjs +153 -0
  25. package/dist/cjs/select/select-builder.cjs +133 -10
  26. package/dist/cjs/select/table-proxy.cjs +99 -0
  27. package/dist/cjs/utils/fk-resolver.cjs +162 -0
  28. package/dist/cjs/utils/index.cjs +7 -1
  29. package/dist/esm/cli/commands/pull.js +2 -2
  30. package/dist/esm/cli/utils/ast-codegen.js +1 -1
  31. package/dist/esm/condition/condition-collector.js +35 -27
  32. package/dist/esm/core/helpers/ConnectedAggregateBuilder.js +124 -0
  33. package/dist/esm/core/helpers/ConnectedCTEBuilder.js +49 -0
  34. package/dist/esm/core/helpers/ConnectedCountBuilder.js +64 -0
  35. package/dist/esm/core/helpers/ConnectedDeleteBuilder.js +29 -0
  36. package/dist/esm/core/helpers/ConnectedInsertBuilder.js +52 -0
  37. package/dist/esm/core/helpers/ConnectedQueryBuilder.js +196 -0
  38. package/dist/esm/core/helpers/ConnectedRawQueryBuilder.js +42 -0
  39. package/dist/esm/core/helpers/ConnectedSelectBuilder.js +488 -0
  40. package/dist/esm/core/helpers/ConnectedTransactionBuilder.js +40 -0
  41. package/dist/esm/core/helpers/ConnectedUpdateBuilder.js +30 -0
  42. package/dist/esm/core/helpers/PaginateBuilder.js +174 -0
  43. package/dist/esm/core/helpers/ReturningExecutor.js +30 -0
  44. package/dist/esm/core/helpers/index.js +13 -0
  45. package/dist/esm/core/helpers/methods.js +6 -0
  46. package/dist/esm/core/relq-client.js +20 -1139
  47. package/dist/esm/core/types/core.types.js +1 -0
  48. package/dist/esm/select/index.js +3 -0
  49. package/dist/esm/select/join-builder.js +184 -0
  50. package/dist/esm/select/join-condition-builder.js +181 -0
  51. package/dist/esm/select/join-internals.js +2 -0
  52. package/dist/esm/select/join-many-condition-builder.js +145 -0
  53. package/dist/esm/select/select-builder.js +133 -10
  54. package/dist/esm/select/table-proxy.js +91 -0
  55. package/dist/esm/utils/fk-resolver.js +154 -0
  56. package/dist/esm/utils/index.js +1 -0
  57. package/dist/index.d.ts +1852 -966
  58. 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
- console.log(`Applying ${typesWithUsages.length} type(s) to schema...`);
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
- console.log(`Updated ${cli_utils_1.colors.cyan(schemaPath)} with type annotations`);
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)('%I IN %L', column, values);
212
+ return `${col} IN ${(0, pg_format_1.default)('%L', values)}`;
205
213
  }
206
- return (0, pg_format_1.default)('%I = %L', column, Array.isArray(values) ? values[0] : values);
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)('%I NOT IN %L', column, values);
217
+ return `${col} NOT IN ${(0, pg_format_1.default)('%L', values)}`;
210
218
  }
211
- return (0, pg_format_1.default)('%I != %L', column, Array.isArray(values) ? values[0] : values);
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)('%I < %L', column, Array.isArray(values) ? values[0] : values);
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)('%I <= %L', column, Array.isArray(values) ? values[0] : values);
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)('%I > %L', column, Array.isArray(values) ? values[0] : values);
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)('%I >= %L', column, Array.isArray(values) ? values[0] : values);
227
+ return `${col} >= ${(0, pg_format_1.default)('%L', Array.isArray(values) ? values[0] : values)}`;
220
228
  case 'isNull':
221
- return (0, pg_format_1.default)('%I IS NULL', column);
229
+ return `${col} IS NULL`;
222
230
  case 'isNotNull':
223
- return (0, pg_format_1.default)('%I IS NOT NULL', column);
231
+ return `${col} IS NOT NULL`;
224
232
  case 'between': {
225
233
  const [start, end] = values;
226
- return (0, pg_format_1.default)('%I BETWEEN %L AND %L', column, start, end);
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)('%I NOT BETWEEN %L AND %L', column, notStart, notEnd);
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)('%I LIKE %L', column, `${values}%`);
241
+ return `${col} LIKE ${(0, pg_format_1.default)('%L', `${values}%`)}`;
234
242
  case 'notStartsWith':
235
- return (0, pg_format_1.default)('%I NOT LIKE %L', column, `${values}%`);
243
+ return `${col} NOT LIKE ${(0, pg_format_1.default)('%L', `${values}%`)}`;
236
244
  case 'endsWith':
237
- return (0, pg_format_1.default)('%I LIKE %L', column, `%${values}`);
245
+ return `${col} LIKE ${(0, pg_format_1.default)('%L', `%${values}`)}`;
238
246
  case 'notEndsWith':
239
- return (0, pg_format_1.default)('%I NOT LIKE %L', column, `%${values}`);
247
+ return `${col} NOT LIKE ${(0, pg_format_1.default)('%L', `%${values}`)}`;
240
248
  case 'contains':
241
- return (0, pg_format_1.default)('%I LIKE %L', column, `%${values}%`);
249
+ return `${col} LIKE ${(0, pg_format_1.default)('%L', `%${values}%`)}`;
242
250
  case 'notContains':
243
- return (0, pg_format_1.default)('%I NOT LIKE %L', column, `%${values}%`);
251
+ return `${col} NOT LIKE ${(0, pg_format_1.default)('%L', `%${values}%`)}`;
244
252
  case 'like':
245
- return (0, pg_format_1.default)('%I LIKE %L', column, values);
253
+ return `${col} LIKE ${(0, pg_format_1.default)('%L', values)}`;
246
254
  case 'notLike':
247
- return (0, pg_format_1.default)('%I NOT LIKE %L', column, values);
255
+ return `${col} NOT LIKE ${(0, pg_format_1.default)('%L', values)}`;
248
256
  case 'ilike':
249
- return (0, pg_format_1.default)('%I ILIKE %L', column, values);
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 (0, pg_format_1.default)('%I IN (%s)', column, formattedValues);
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 (0, pg_format_1.default)('%I NOT IN (%s)', column, formattedValues);
266
+ return `${col} NOT IN (${formattedValues})`;
259
267
  }
260
268
  case 'exists':
261
- return (0, pg_format_1.default)('EXISTS (%s)', values);
269
+ return `EXISTS (${values})`;
262
270
  case 'notExists':
263
- return (0, pg_format_1.default)('NOT EXISTS (%s)', values);
271
+ return `NOT EXISTS (${values})`;
264
272
  case 'search':
265
- return (0, pg_format_1.default)('to_tsvector(%I) @@ plainto_tsquery(%L)', column, values);
273
+ return `to_tsvector(${col}) @@ plainto_tsquery(${(0, pg_format_1.default)('%L', values)})`;
266
274
  case 'notSearch':
267
- return (0, pg_format_1.default)('NOT (to_tsvector(%I) @@ plainto_tsquery(%L))', column, values);
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;