drizzle-orm 0.10.5 → 0.10.9

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 (97) hide show
  1. package/README.md +12 -2
  2. package/builders/aggregators/deleteAggregator.d.ts +5 -1
  3. package/builders/aggregators/deleteAggregator.js +5 -2
  4. package/builders/aggregators/insertAggregator.d.ts +5 -1
  5. package/builders/aggregators/insertAggregator.js +18 -9
  6. package/builders/aggregators/selectAggregator.d.ts +6 -1
  7. package/builders/aggregators/selectAggregator.js +10 -6
  8. package/builders/aggregators/updateAggregator.d.ts +5 -1
  9. package/builders/aggregators/updateAggregator.js +9 -3
  10. package/builders/highLvlBuilders/deleteRequestBuilder.js +5 -2
  11. package/builders/highLvlBuilders/insertRequestBuilder.js +5 -2
  12. package/builders/highLvlBuilders/selectRequestBuilder.js +7 -2
  13. package/builders/highLvlBuilders/updateRequestBuilder.js +6 -2
  14. package/builders/joinBuilders/builders/abstractJoinBuilder.js +7 -3
  15. package/builders/lowLvlBuilders/delets/deleteFilter.d.ts +4 -1
  16. package/builders/lowLvlBuilders/delets/deleteFrom.d.ts +4 -1
  17. package/builders/lowLvlBuilders/inserts/insertInto.d.ts +4 -1
  18. package/builders/lowLvlBuilders/inserts/onConflictInsert.d.ts +4 -1
  19. package/builders/lowLvlBuilders/inserts/valuesInsert.d.ts +4 -1
  20. package/builders/lowLvlBuilders/selects/selectFrom.d.ts +4 -1
  21. package/builders/lowLvlBuilders/selects/selectJoined.d.ts +4 -1
  22. package/builders/lowLvlBuilders/selects/whereSelect.d.ts +4 -1
  23. package/builders/lowLvlBuilders/updates/updateIn.d.ts +4 -1
  24. package/builders/lowLvlBuilders/updates/whereSelect.d.ts +4 -1
  25. package/builders/lowLvlBuilders/updates/whereSet.d.ts +4 -1
  26. package/builders/requestBuilders/updates/combine.d.ts +4 -1
  27. package/builders/requestBuilders/updates/combine.js +8 -3
  28. package/builders/requestBuilders/updates/increment.d.ts +4 -1
  29. package/builders/requestBuilders/updates/increment.js +4 -1
  30. package/builders/requestBuilders/updates/setObjects.d.ts +4 -1
  31. package/builders/requestBuilders/updates/setObjects.js +5 -1
  32. package/builders/requestBuilders/updates/updates.d.ts +4 -1
  33. package/builders/requestBuilders/where/and.d.ts +6 -1
  34. package/builders/requestBuilders/where/and.js +9 -3
  35. package/builders/requestBuilders/where/const.d.ts +4 -1
  36. package/builders/requestBuilders/where/const.js +6 -4
  37. package/builders/requestBuilders/where/constArray.d.ts +4 -1
  38. package/builders/requestBuilders/where/constArray.js +11 -5
  39. package/builders/requestBuilders/where/eqWhere.d.ts +6 -1
  40. package/builders/requestBuilders/where/eqWhere.js +6 -1
  41. package/builders/requestBuilders/where/greater.d.ts +6 -1
  42. package/builders/requestBuilders/where/greater.js +6 -1
  43. package/builders/requestBuilders/where/greaterEq.d.ts +6 -1
  44. package/builders/requestBuilders/where/greaterEq.js +6 -1
  45. package/builders/requestBuilders/where/in.d.ts +6 -1
  46. package/builders/requestBuilders/where/in.js +6 -1
  47. package/builders/requestBuilders/where/isNull.d.ts +6 -1
  48. package/builders/requestBuilders/where/isNull.js +5 -1
  49. package/builders/requestBuilders/where/less.d.ts +6 -1
  50. package/builders/requestBuilders/where/less.js +6 -1
  51. package/builders/requestBuilders/where/lessEq.d.ts +6 -1
  52. package/builders/requestBuilders/where/lessEq.js +6 -1
  53. package/builders/requestBuilders/where/like.d.ts +6 -1
  54. package/builders/requestBuilders/where/like.js +6 -1
  55. package/builders/requestBuilders/where/notEqWhere.d.ts +6 -1
  56. package/builders/requestBuilders/where/notEqWhere.js +6 -1
  57. package/builders/requestBuilders/where/or.d.ts +6 -1
  58. package/builders/requestBuilders/where/or.js +9 -3
  59. package/builders/requestBuilders/where/rawWhere.d.ts +4 -1
  60. package/builders/requestBuilders/where/rawWhere.js +2 -1
  61. package/builders/requestBuilders/where/var.d.ts +6 -1
  62. package/builders/requestBuilders/where/var.js +4 -1
  63. package/builders/requestBuilders/where/where.d.ts +6 -1
  64. package/builders/requestBuilders/where/where.js +1 -0
  65. package/columns/types/pgEnum.js +1 -1
  66. package/columns/types/pgJsonb.js +3 -1
  67. package/columns/types/pgText.js +1 -1
  68. package/columns/types/pgTimestamp.js +1 -1
  69. package/columns/types/pgTimestamptz.js +1 -1
  70. package/columns/types/pgVarChar.js +1 -1
  71. package/db/session.d.ts +2 -2
  72. package/db/session.js +2 -2
  73. package/docs/cases/simple_delete.js +5 -3
  74. package/docs/cases/simple_insert.js +7 -9
  75. package/docs/cases/simple_join.js +9 -7
  76. package/docs/cases/simple_select.js +4 -2
  77. package/docs/cases/simple_update.js +5 -2
  78. package/docs/tables/usersTable.d.ts +11 -10
  79. package/docs/tables/usersTable.js +5 -4
  80. package/package.json +1 -1
  81. package/serializer/serializer.js +4 -1
  82. package/tables/abstractTable.d.ts +2 -2
  83. package/tables/aggregators.d.ts +27 -0
  84. package/tables/aggregators.js +56 -0
  85. package/tables/migrationsTable.d.ts +1 -1
  86. package/test.d.ts +0 -1
  87. package/test.js +44 -224
  88. package/data/tables/citiesTable.d.ts +0 -14
  89. package/data/tables/citiesTable.js +0 -17
  90. package/data/tables/userGroupsTable.d.ts +0 -7
  91. package/data/tables/userGroupsTable.js +0 -15
  92. package/data/tables/usersTable.d.ts +0 -16
  93. package/data/tables/usersTable.js +0 -31
  94. package/data/tables/usersToUserGroups.d.ts +0 -7
  95. package/data/tables/usersToUserGroups.js +0 -17
  96. package/data/types/rolesType.d.ts +0 -1
  97. package/data/types/rolesType.js +0 -6
package/README.md CHANGED
@@ -235,8 +235,8 @@ const ordered = await usersTable.select().orderBy((table) => table.phone, Order.
235
235
  #### **Partial Selecting**
236
236
  ```typescript
237
237
  const partialSelect = await usersTable.select({
238
- id: usersTable.id,
239
- phone: usersTable.phone,
238
+ mappedId: usersTable.id,
239
+ mappedPhone: usersTable.phone,
240
240
  }).all();
241
241
 
242
242
  // Usage
@@ -426,4 +426,14 @@ await drizzle.migrator(db).migrate('src/drizzle.config.yaml');
426
426
  ##### Another possibility is to provide object with path to folder with migrations
427
427
  ```typescript
428
428
  await drizzle.migrator(db).migrate({ migrationFolder: 'drizzle' });
429
+ ```
430
+
431
+
432
+ ## Raw query usage
433
+ #### If you have some complex queries to execute and drizzle-orm can't handle them yet, then you could use `rawQuery` execution
434
+
435
+
436
+ ##### Execute custom raw query
437
+ ```typescript
438
+ const res: QueryResult<any> = await db.session().execute('SELECT * FROM users WHERE user.id = $1', [1]);
429
439
  ```
@@ -4,9 +4,13 @@ import Aggregator from './abstractAggregator';
4
4
  export default class DeleteAggregator extends Aggregator {
5
5
  private _from;
6
6
  private _filters;
7
+ private _values;
7
8
  private _delete;
8
9
  constructor(table: AbstractTable<any>);
9
10
  filters: (filters: Expr) => DeleteAggregator;
10
11
  appendFrom: (tableName: string) => DeleteAggregator;
11
- buildQuery: () => string;
12
+ buildQuery: () => {
13
+ query: string;
14
+ values: Array<any>;
15
+ };
12
16
  }
@@ -6,11 +6,14 @@ class DeleteAggregator extends abstractAggregator_1.default {
6
6
  super(table);
7
7
  this._from = [];
8
8
  this._filters = [];
9
+ this._values = [];
9
10
  this._delete = ['DELETE'];
10
11
  this.filters = (filters) => {
11
12
  if (filters) {
13
+ const filterQuery = filters.toQuery();
12
14
  this._filters.push('WHERE ');
13
- this._filters.push(filters.toQuery());
15
+ this._filters.push(filterQuery.query);
16
+ this._values = filterQuery.values;
14
17
  }
15
18
  return this;
16
19
  };
@@ -29,7 +32,7 @@ class DeleteAggregator extends abstractAggregator_1.default {
29
32
  this._delete.push('RETURNING');
30
33
  this._delete.push('\n');
31
34
  this._delete.push(this._fields.join(''));
32
- return this._delete.join('');
35
+ return { query: this._delete.join(''), values: this._values };
33
36
  };
34
37
  }
35
38
  }
@@ -5,6 +5,7 @@ import Aggregator from './abstractAggregator';
5
5
  export default class InsertAggregator extends Aggregator {
6
6
  private _onConflict;
7
7
  private _columns;
8
+ private _query;
8
9
  private _values;
9
10
  private _from;
10
11
  private _insert;
@@ -14,5 +15,8 @@ export default class InsertAggregator extends Aggregator {
14
15
  [name: string]: any;
15
16
  }[]) => void;
16
17
  appendOnConflict: (column: Indexing, updates?: UpdateExpr | undefined) => this;
17
- buildQuery: () => string;
18
+ buildQuery: () => {
19
+ query: string;
20
+ values: Array<any>;
21
+ };
18
22
  }
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable @typescript-eslint/no-loop-func */
3
4
  const column_1 = require("../../columns/column");
4
5
  const abstractAggregator_1 = require("./abstractAggregator");
5
6
  class InsertAggregator extends abstractAggregator_1.default {
@@ -7,6 +8,7 @@ class InsertAggregator extends abstractAggregator_1.default {
7
8
  super(table);
8
9
  this._onConflict = [];
9
10
  this._columns = [];
11
+ this._query = [];
10
12
  this._values = [];
11
13
  this._from = [];
12
14
  this._insert = ['INSERT INTO'];
@@ -26,9 +28,10 @@ class InsertAggregator extends abstractAggregator_1.default {
26
28
  this.appendValues = (values) => {
27
29
  // @TODO Check if values not empty
28
30
  const mapper = this._table.mapServiceToDb();
31
+ let position = 0;
29
32
  for (let i = 0; i < values.length; i += 1) {
30
33
  const value = values[i];
31
- this._values.push('(');
34
+ this._query.push('(');
32
35
  const entries = Object.entries(mapper);
33
36
  entries.forEach(([key], index) => {
34
37
  const valueToInsert = value[key];
@@ -36,24 +39,26 @@ class InsertAggregator extends abstractAggregator_1.default {
36
39
  const column = mapper[key];
37
40
  if (isKeyExistsInValue) {
38
41
  if (valueToInsert !== undefined && valueToInsert !== null) {
42
+ position += 1;
43
+ this._query.push(`$${position}`);
39
44
  this._values.push(column.getColumnType().insertStrategy(valueToInsert));
40
45
  }
41
46
  else {
42
- this._values.push('null');
47
+ this._query.push('null');
43
48
  }
44
49
  }
45
50
  else {
46
- this._values.push('DEFAULT');
51
+ this._query.push('DEFAULT');
47
52
  }
48
53
  if (index < entries.length - 1) {
49
- this._values.push(', ');
54
+ this._query.push(', ');
50
55
  }
51
56
  });
52
57
  if (i < values.length - 1) {
53
- this._values.push('),\n');
58
+ this._query.push('),\n');
54
59
  }
55
60
  else {
56
- this._values.push(')\n');
61
+ this._query.push(')\n');
57
62
  }
58
63
  }
59
64
  };
@@ -63,8 +68,12 @@ class InsertAggregator extends abstractAggregator_1.default {
63
68
  ? column.getColumnName() : column.getColumns().map((it) => it.getColumnName()).join(',');
64
69
  this._onConflict.push(`ON CONFLICT (${indexName})\n`);
65
70
  if (updates) {
71
+ const currentPointerPosition = this._values.length > 0
72
+ ? this._values.length + 1 : undefined;
73
+ const updatesQuery = updates.toQuery(currentPointerPosition);
66
74
  this._onConflict.push('DO UPDATE\n');
67
- this._onConflict.push(`SET ${updates.toQuery()}`);
75
+ this._onConflict.push(`SET ${updatesQuery.query}`);
76
+ this._values.push(...updatesQuery.values);
68
77
  }
69
78
  else {
70
79
  this._onConflict.push('DO NOTHING\n');
@@ -78,14 +87,14 @@ class InsertAggregator extends abstractAggregator_1.default {
78
87
  this._insert.push(this._columns.join(''));
79
88
  this._insert.push(') ');
80
89
  this._insert.push('VALUES\n');
81
- this._insert.push(this._values.join(''));
90
+ this._insert.push(this._query.join(''));
82
91
  this._insert.push('\n');
83
92
  this._insert.push(this._onConflict.join(''));
84
93
  this._insert.push('\n');
85
94
  this._insert.push('RETURNING');
86
95
  this._insert.push('\n');
87
96
  this._insert.push(this._fields.join(''));
88
- return this._insert.join('');
97
+ return { query: this._insert.join(''), values: this._values };
89
98
  };
90
99
  this._from.push(' ');
91
100
  this._from.push(table.tableName());
@@ -14,6 +14,8 @@ export default class SelectAggregator extends Aggregator {
14
14
  private _offset;
15
15
  private _distinct;
16
16
  private _orderBy;
17
+ private _values;
18
+ private _joinCache;
17
19
  constructor(table: AbstractTable<any>, partial?: {
18
20
  [name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, AbstractTable<any>>;
19
21
  });
@@ -30,5 +32,8 @@ export default class SelectAggregator extends Aggregator {
30
32
  } | undefined;
31
33
  id?: number | undefined;
32
34
  }[]) => SelectAggregator;
33
- buildQuery: () => string;
35
+ buildQuery: () => {
36
+ query: string;
37
+ values: Array<any>;
38
+ };
34
39
  }
@@ -17,10 +17,14 @@ class SelectAggregator extends abstractAggregator_1.default {
17
17
  this._distinct = [];
18
18
  // private _groupBy: Array<string> = [];
19
19
  this._orderBy = [];
20
+ this._values = [];
21
+ this._joinCache = {};
20
22
  this.filters = (filters) => {
21
23
  if (filters) {
24
+ const queryBuilder = filters.toQuery(1, this._joinCache);
22
25
  this._filters.push('WHERE ');
23
- this._filters.push(filters.toQuery());
26
+ this._filters.push(queryBuilder.query);
27
+ this._values = queryBuilder.values;
24
28
  }
25
29
  return this;
26
30
  };
@@ -59,7 +63,7 @@ class SelectAggregator extends abstractAggregator_1.default {
59
63
  };
60
64
  // Add select generator for second table also
61
65
  this.join = (joins) => {
62
- const cache = {};
66
+ // const cache: {[tableName: string]: string} = {};
63
67
  joins.forEach((joinObject) => {
64
68
  if (joinObject) {
65
69
  const tableFrom = joinObject.join.fromColumn.getParentName();
@@ -82,12 +86,12 @@ class SelectAggregator extends abstractAggregator_1.default {
82
86
  this._join.push(`AS ${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`);
83
87
  this._join.push('\n');
84
88
  this._join.push('ON ');
85
- if (cache[tableFrom]) {
86
- this._join.push(cache[tableFrom]);
89
+ if (this._joinCache[tableFrom]) {
90
+ this._join.push(this._joinCache[tableFrom]);
87
91
  }
88
92
  else {
89
93
  this._join.push(tableFrom);
90
- cache[tableTo] = `${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`;
94
+ this._joinCache[tableTo] = `${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`;
91
95
  }
92
96
  this._join.push('.');
93
97
  this._join.push(joinObject.join.fromColumn.getColumnName());
@@ -116,7 +120,7 @@ class SelectAggregator extends abstractAggregator_1.default {
116
120
  this._select.push(this._limit.join(''));
117
121
  this._select.push('\n');
118
122
  this._select.push(this._offset.join(''));
119
- return this._select.join('');
123
+ return { query: this._select.join(''), values: this._values };
120
124
  };
121
125
  }
122
126
  }
@@ -6,10 +6,14 @@ export default class UpdateAggregator extends Aggregator {
6
6
  private _updates;
7
7
  private _filters;
8
8
  private _from;
9
+ private _values;
9
10
  private _update;
10
11
  constructor(table: AbstractTable<any>);
11
12
  where: (filters: Expr) => UpdateAggregator;
12
13
  appendFrom: (tableName: string) => UpdateAggregator;
13
14
  set: (updates: UpdateExpr) => UpdateAggregator;
14
- buildQuery: () => string;
15
+ buildQuery: () => {
16
+ query: string;
17
+ values: Array<any>;
18
+ };
15
19
  }
@@ -7,11 +7,15 @@ class UpdateAggregator extends abstractAggregator_1.default {
7
7
  this._updates = [];
8
8
  this._filters = [];
9
9
  this._from = [];
10
+ this._values = [];
10
11
  this._update = ['UPDATE'];
11
12
  this.where = (filters) => {
12
13
  if (filters) {
14
+ const currentPointerPosition = this._values.length > 0 ? this._values.length + 1 : undefined;
15
+ const filterQuery = filters.toQuery(currentPointerPosition);
13
16
  this._filters.push('WHERE ');
14
- this._filters.push(filters.toQuery());
17
+ this._filters.push(filterQuery.query);
18
+ this._values.push(...filterQuery.values);
15
19
  }
16
20
  return this;
17
21
  };
@@ -21,7 +25,9 @@ class UpdateAggregator extends abstractAggregator_1.default {
21
25
  return this;
22
26
  };
23
27
  this.set = (updates) => {
24
- this._updates.push(`\nSET ${updates.toQuery()}`);
28
+ const setQuery = updates.toQuery();
29
+ this._updates.push(`\nSET ${setQuery.query}`);
30
+ this._values.push(...setQuery.values);
25
31
  return this;
26
32
  };
27
33
  this.buildQuery = () => {
@@ -34,7 +40,7 @@ class UpdateAggregator extends abstractAggregator_1.default {
34
40
  this._update.push('RETURNING');
35
41
  this._update.push('\n');
36
42
  this._update.push(this._fields.join(''));
37
- return this._update.join('');
43
+ return { query: this._update.join(''), values: this._values };
38
44
  };
39
45
  }
40
46
  }
@@ -19,8 +19,11 @@ class DeleteTRB extends abstractRequestBuilder_1.default {
19
19
  .from(this._table)
20
20
  .filteredBy(this._filter);
21
21
  let query = '';
22
+ let values = [];
22
23
  try {
23
- query = queryBuilder.build();
24
+ const builderResult = queryBuilder.build();
25
+ query = builderResult.query;
26
+ values = builderResult.values;
24
27
  }
25
28
  catch (e) {
26
29
  throw new builderError_1.default(builderError_1.BuilderType.DELETE, this._table.tableName(), this._columns, e, this._filter);
@@ -28,7 +31,7 @@ class DeleteTRB extends abstractRequestBuilder_1.default {
28
31
  if (this._logger) {
29
32
  this._logger.info(`Deleting from ${this._table.tableName()} using query:\n ${query}`);
30
33
  }
31
- const result = await this._session.execute(query);
34
+ const result = await this._session.execute(query, values);
32
35
  return responseMapper_1.default.map(this._mappedServiceToDb, result);
33
36
  };
34
37
  }
@@ -30,8 +30,11 @@ class InsertTRB extends abstractRequestBuilder_1.default {
30
30
  .values(this._values)
31
31
  .onConflict(this._onConflict, this._onConflictField);
32
32
  let query = '';
33
+ let values = [];
33
34
  try {
34
- query = queryBuilder.build();
35
+ const builderResult = queryBuilder.build();
36
+ query = builderResult.query;
37
+ values = builderResult.values;
35
38
  }
36
39
  catch (e) {
37
40
  throw new builderError_1.default(builderError_1.BuilderType.INSERT, this._table.tableName(), this._columns, e);
@@ -39,7 +42,7 @@ class InsertTRB extends abstractRequestBuilder_1.default {
39
42
  if (this._logger) {
40
43
  this._logger.info(`Inserting to ${this._table.tableName()} using query:\n ${query}`);
41
44
  }
42
- const result = await this._session.execute(query);
45
+ const result = await this._session.execute(query, values);
43
46
  return responseMapper_1.default.map(this._mappedServiceToDb, result);
44
47
  };
45
48
  this._values = values;
@@ -39,16 +39,21 @@ class SelectTRB extends abstractRequestBuilder_1.default {
39
39
  .offset(this.props.offset)
40
40
  .orderBy(this.__orderBy, this.__order);
41
41
  let query = '';
42
+ let values = [];
42
43
  try {
43
- query = queryBuilder.build();
44
+ const builderResult = queryBuilder.build();
45
+ query = builderResult.query;
46
+ values = builderResult.values;
44
47
  }
45
48
  catch (e) {
46
49
  throw new builderError_1.default(builderError_1.BuilderType.SELECT, this._table.tableName(), this._columns, e, this._filter);
47
50
  }
51
+ console.log(query);
52
+ console.log(values);
48
53
  if (this._logger) {
49
54
  this._logger.info(`Selecting from ${this._table.tableName()} using query:\n ${query}`);
50
55
  }
51
- const result = await this._session.execute(query);
56
+ const result = await this._session.execute(query, values);
52
57
  if (this.__partial) {
53
58
  return responseMapper_1.default.partialMap(this.__partial, result);
54
59
  }
@@ -33,20 +33,24 @@ class UpdateTRB extends abstractRequestBuilder_1.default {
33
33
  };
34
34
  this._execute = async () => {
35
35
  let query = '';
36
+ let values = [];
36
37
  try {
37
- query = update_1.default.in(this._table)
38
+ const builderResult = update_1.default.in(this._table)
38
39
  .columns()
39
40
  .set(this._update)
40
41
  .filteredBy(this._filter)
41
42
  .build();
43
+ query = builderResult.query;
44
+ values = builderResult.values;
42
45
  }
43
46
  catch (e) {
44
47
  throw new builderError_1.default(builderError_1.BuilderType.UPDATE, this._table.tableName(), this._columns, e, this._filter);
45
48
  }
46
49
  if (this._logger) {
47
50
  this._logger.info(`Updating ${this._table.tableName()} using query:\n ${query}`);
51
+ console.log(values);
48
52
  }
49
- const result = await this._session.execute(query);
53
+ const result = await this._session.execute(query, values);
50
54
  return responseMapper_1.default.map(this._mappedServiceToDb, result);
51
55
  };
52
56
  }
@@ -23,14 +23,18 @@ class AbstractJoined {
23
23
  .filteredBy(this._filter)
24
24
  .orderBy(this._orderBy, this._order);
25
25
  let query = '';
26
+ let values = [];
26
27
  try {
27
- query = queryBuilder.build();
28
- console.log(query);
28
+ const builderResult = queryBuilder.build();
29
+ query = builderResult.query;
30
+ values = builderResult.values;
29
31
  }
30
32
  catch (e) {
31
33
  throw new builderError_1.default(builderError_1.BuilderType.JOINED_SELECT, this._table.tableName(), Object.values(this._table.mapServiceToDb()), e, this._filter);
32
34
  }
33
- const result = await this._session.execute(query);
35
+ console.log(query);
36
+ console.log(values);
37
+ const result = await this._session.execute(query, values);
34
38
  return this.mapResponse(result);
35
39
  };
36
40
  this._table = table;
@@ -4,5 +4,8 @@ export default class DeleteFilter<SERVICE, DB> {
4
4
  private _aggregator;
5
5
  constructor(aggregator: DeleteAggregator);
6
6
  apply: (filters: Expr) => DeleteFilter<SERVICE, DB>;
7
- build: () => string;
7
+ build: () => {
8
+ query: string;
9
+ values: any[];
10
+ };
8
11
  }
@@ -4,6 +4,9 @@ import DeleteFilter from './deleteFilter';
4
4
  export default class DeleteFrom {
5
5
  private _aggregator;
6
6
  constructor(aggregator: DeleteAggregator);
7
- build: () => string;
7
+ build: () => {
8
+ query: string;
9
+ values: any[];
10
+ };
8
11
  filteredBy: (filters: Expr) => DeleteFilter<unknown, unknown>;
9
12
  }
@@ -6,5 +6,8 @@ export default class InsertInto {
6
6
  values: (values: {
7
7
  [name: string]: any;
8
8
  }[]) => ValuesInsert;
9
- build: () => string;
9
+ build: () => {
10
+ query: string;
11
+ values: any[];
12
+ };
10
13
  }
@@ -5,5 +5,8 @@ export default class OnConflictInsert {
5
5
  private _aggregator;
6
6
  constructor(aggregator: InsertAggregator);
7
7
  apply: (updates: UpdateExpr, column: Indexing) => OnConflictInsert;
8
- build: () => string;
8
+ build: () => {
9
+ query: string;
10
+ values: any[];
11
+ };
9
12
  }
@@ -9,5 +9,8 @@ export default class ValuesInsert {
9
9
  [name: string]: any;
10
10
  }[]) => ValuesInsert;
11
11
  onConflict: (updates: UpdateExpr, column: Indexing) => OnConflictInsert;
12
- build: () => string;
12
+ build: () => {
13
+ query: string;
14
+ values: any[];
15
+ };
13
16
  }
@@ -21,5 +21,8 @@ export default class SelectFrom {
21
21
  orderBy: (orderBy?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined, order?: Order | undefined) => SelectFrom;
22
22
  distinct: (column?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined) => SelectFrom;
23
23
  filteredBy: (filters: Expr) => WhereSelect;
24
- build: () => string;
24
+ build: () => {
25
+ query: string;
26
+ values: any[];
27
+ };
25
28
  }
@@ -19,5 +19,8 @@ export default class SelectJoined {
19
19
  offset: (offset?: number | undefined) => SelectJoined;
20
20
  orderBy: (orderBy?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined, order?: Order | undefined) => SelectJoined;
21
21
  filteredBy: (filters: Expr) => WhereSelect;
22
- build: () => string;
22
+ build: () => {
23
+ query: string;
24
+ values: any[];
25
+ };
23
26
  }
@@ -10,5 +10,8 @@ export default class WhereSelect {
10
10
  offset: (offset?: number | undefined) => WhereSelect;
11
11
  orderBy: (orderBy?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined, order?: Order | undefined) => WhereSelect;
12
12
  apply: (filters: Expr) => WhereSelect;
13
- build: () => string;
13
+ build: () => {
14
+ query: string;
15
+ values: any[];
16
+ };
14
17
  }
@@ -6,5 +6,8 @@ export default class UpdateIn {
6
6
  constructor(aggregator: UpdateAggregator);
7
7
  columns: () => UpdateIn;
8
8
  set: (updates: UpdateExpr) => WhereSet<unknown, unknown>;
9
- build: () => string;
9
+ build: () => {
10
+ query: string;
11
+ values: any[];
12
+ };
10
13
  }
@@ -4,5 +4,8 @@ export default class WhereSelect<SERVICE, DB> {
4
4
  private _aggregator;
5
5
  constructor(aggregator: UpdateAggregator);
6
6
  apply: (filters: Expr) => WhereSelect<SERVICE, DB>;
7
- build: () => string;
7
+ build: () => {
8
+ query: string;
9
+ values: any[];
10
+ };
8
11
  }
@@ -7,5 +7,8 @@ export default class WhereSet<SERVICE, DB> {
7
7
  constructor(aggregator: UpdateAggregator);
8
8
  apply: (updates: UpdateExpr) => WhereSet<SERVICE, DB>;
9
9
  filteredBy: (filters: Expr) => WhereSelect<unknown, unknown>;
10
- build: () => string;
10
+ build: () => {
11
+ query: string;
12
+ values: any[];
13
+ };
11
14
  }
@@ -2,5 +2,8 @@ import { UpdateExpr } from './updates';
2
2
  export default class Combine extends UpdateExpr {
3
3
  private _setters;
4
4
  constructor(setters: Array<UpdateExpr>);
5
- toQuery: () => string;
5
+ toQuery: (position?: number | undefined) => {
6
+ query: string;
7
+ values: Array<any>;
8
+ };
6
9
  }
@@ -4,16 +4,21 @@ const updates_1 = require("./updates");
4
4
  class Combine extends updates_1.UpdateExpr {
5
5
  constructor(setters) {
6
6
  super();
7
- this.toQuery = () => {
7
+ this.toQuery = (position) => {
8
+ let nextPosition = position || 1;
8
9
  const response = [];
10
+ const valuesResult = [];
9
11
  for (let index = 0; index < this._setters.length; index += 1) {
10
12
  const setter = this._setters[index];
11
- response.push(setter.toQuery());
13
+ const expressionResult = setter.toQuery(nextPosition);
14
+ valuesResult.push(...expressionResult.values);
15
+ response.push(expressionResult.query);
16
+ nextPosition += expressionResult.values.length;
12
17
  if (index !== this._setters.length - 1) {
13
18
  response.push(', ');
14
19
  }
15
20
  }
16
- return response.join('');
21
+ return { query: response.join(''), values: valuesResult };
17
22
  };
18
23
  this._setters = setters;
19
24
  }
@@ -6,5 +6,8 @@ export default class Increment<T extends AbstractColumn<ColumnType<any>, boolean
6
6
  private _value;
7
7
  constructor(value: number);
8
8
  setColumn: (column: T) => UpdateCustomExpr<T>;
9
- toQuery: () => string;
9
+ toQuery: () => {
10
+ query: string;
11
+ values: Array<any>;
12
+ };
10
13
  }
@@ -8,7 +8,10 @@ class Increment extends updates_1.UpdateCustomExpr {
8
8
  this._column = column;
9
9
  return this;
10
10
  };
11
- this.toQuery = () => `${this._column.getColumnName()} = ${this._column.getColumnName()} + ${this._value}`;
11
+ this.toQuery = () => {
12
+ const query = `${this._column.getColumnName()} = ${this._column.getColumnName()} + ${this._value}`;
13
+ return { query, values: [] };
14
+ };
12
15
  this._value = value;
13
16
  }
14
17
  }
@@ -5,5 +5,8 @@ export default class SetObject<T extends AbstractColumn<ColumnType<any>, boolean
5
5
  private _column;
6
6
  private _value;
7
7
  constructor(column: T, value: any);
8
- toQuery: () => string;
8
+ toQuery: (position?: number | undefined) => {
9
+ query: string;
10
+ values: Array<any>;
11
+ };
9
12
  }
@@ -4,7 +4,11 @@ const updates_1 = require("./updates");
4
4
  class SetObject extends updates_1.UpdateExpr {
5
5
  constructor(column, value) {
6
6
  super();
7
- this.toQuery = () => `"${this._column.getColumnName()}"=${this._value === null || this._value === undefined ? 'null' : this._column.getColumnType().insertStrategy(this._value)}`;
7
+ this.toQuery = (position) => {
8
+ const nextPosition = position || 1;
9
+ const query = `"${this._column.getColumnName()}"=${this._value === null || this._value === undefined ? 'null' : `$${nextPosition}`}`;
10
+ return { query, values: [this._column.getColumnType().insertStrategy(this._value)] };
11
+ };
8
12
  this._column = column;
9
13
  this._value = value;
10
14
  }
@@ -1,5 +1,8 @@
1
1
  export declare abstract class UpdateExpr {
2
- abstract toQuery(): string;
2
+ abstract toQuery(position?: number): {
3
+ query: string;
4
+ values: Array<any>;
5
+ };
3
6
  }
4
7
  export declare abstract class UpdateCustomExpr<T> extends UpdateExpr {
5
8
  abstract setColumn(column: T): UpdateCustomExpr<T>;
@@ -2,5 +2,10 @@ import Expr from './where';
2
2
  export default class And extends Expr {
3
3
  private expressions;
4
4
  constructor(expressions: Expr[]);
5
- toQuery: () => string;
5
+ toQuery: (position?: number | undefined, tableCache?: {
6
+ [tableName: string]: string;
7
+ } | undefined) => {
8
+ query: string;
9
+ values: Array<any>;
10
+ };
6
11
  }