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.
- package/README.md +12 -2
- package/builders/aggregators/deleteAggregator.d.ts +5 -1
- package/builders/aggregators/deleteAggregator.js +5 -2
- package/builders/aggregators/insertAggregator.d.ts +5 -1
- package/builders/aggregators/insertAggregator.js +18 -9
- package/builders/aggregators/selectAggregator.d.ts +6 -1
- package/builders/aggregators/selectAggregator.js +10 -6
- package/builders/aggregators/updateAggregator.d.ts +5 -1
- package/builders/aggregators/updateAggregator.js +9 -3
- package/builders/highLvlBuilders/deleteRequestBuilder.js +5 -2
- package/builders/highLvlBuilders/insertRequestBuilder.js +5 -2
- package/builders/highLvlBuilders/selectRequestBuilder.js +7 -2
- package/builders/highLvlBuilders/updateRequestBuilder.js +6 -2
- package/builders/joinBuilders/builders/abstractJoinBuilder.js +7 -3
- package/builders/lowLvlBuilders/delets/deleteFilter.d.ts +4 -1
- package/builders/lowLvlBuilders/delets/deleteFrom.d.ts +4 -1
- package/builders/lowLvlBuilders/inserts/insertInto.d.ts +4 -1
- package/builders/lowLvlBuilders/inserts/onConflictInsert.d.ts +4 -1
- package/builders/lowLvlBuilders/inserts/valuesInsert.d.ts +4 -1
- package/builders/lowLvlBuilders/selects/selectFrom.d.ts +4 -1
- package/builders/lowLvlBuilders/selects/selectJoined.d.ts +4 -1
- package/builders/lowLvlBuilders/selects/whereSelect.d.ts +4 -1
- package/builders/lowLvlBuilders/updates/updateIn.d.ts +4 -1
- package/builders/lowLvlBuilders/updates/whereSelect.d.ts +4 -1
- package/builders/lowLvlBuilders/updates/whereSet.d.ts +4 -1
- package/builders/requestBuilders/updates/combine.d.ts +4 -1
- package/builders/requestBuilders/updates/combine.js +8 -3
- package/builders/requestBuilders/updates/increment.d.ts +4 -1
- package/builders/requestBuilders/updates/increment.js +4 -1
- package/builders/requestBuilders/updates/setObjects.d.ts +4 -1
- package/builders/requestBuilders/updates/setObjects.js +5 -1
- package/builders/requestBuilders/updates/updates.d.ts +4 -1
- package/builders/requestBuilders/where/and.d.ts +6 -1
- package/builders/requestBuilders/where/and.js +9 -3
- package/builders/requestBuilders/where/const.d.ts +4 -1
- package/builders/requestBuilders/where/const.js +6 -4
- package/builders/requestBuilders/where/constArray.d.ts +4 -1
- package/builders/requestBuilders/where/constArray.js +11 -5
- package/builders/requestBuilders/where/eqWhere.d.ts +6 -1
- package/builders/requestBuilders/where/eqWhere.js +6 -1
- package/builders/requestBuilders/where/greater.d.ts +6 -1
- package/builders/requestBuilders/where/greater.js +6 -1
- package/builders/requestBuilders/where/greaterEq.d.ts +6 -1
- package/builders/requestBuilders/where/greaterEq.js +6 -1
- package/builders/requestBuilders/where/in.d.ts +6 -1
- package/builders/requestBuilders/where/in.js +6 -1
- package/builders/requestBuilders/where/isNull.d.ts +6 -1
- package/builders/requestBuilders/where/isNull.js +5 -1
- package/builders/requestBuilders/where/less.d.ts +6 -1
- package/builders/requestBuilders/where/less.js +6 -1
- package/builders/requestBuilders/where/lessEq.d.ts +6 -1
- package/builders/requestBuilders/where/lessEq.js +6 -1
- package/builders/requestBuilders/where/like.d.ts +6 -1
- package/builders/requestBuilders/where/like.js +6 -1
- package/builders/requestBuilders/where/notEqWhere.d.ts +6 -1
- package/builders/requestBuilders/where/notEqWhere.js +6 -1
- package/builders/requestBuilders/where/or.d.ts +6 -1
- package/builders/requestBuilders/where/or.js +9 -3
- package/builders/requestBuilders/where/rawWhere.d.ts +4 -1
- package/builders/requestBuilders/where/rawWhere.js +2 -1
- package/builders/requestBuilders/where/var.d.ts +6 -1
- package/builders/requestBuilders/where/var.js +4 -1
- package/builders/requestBuilders/where/where.d.ts +6 -1
- package/builders/requestBuilders/where/where.js +1 -0
- package/columns/types/pgEnum.js +1 -1
- package/columns/types/pgJsonb.js +3 -1
- package/columns/types/pgText.js +1 -1
- package/columns/types/pgTimestamp.js +1 -1
- package/columns/types/pgTimestamptz.js +1 -1
- package/columns/types/pgVarChar.js +1 -1
- package/db/session.d.ts +2 -2
- package/db/session.js +2 -2
- package/docs/cases/simple_delete.js +5 -3
- package/docs/cases/simple_insert.js +7 -9
- package/docs/cases/simple_join.js +9 -7
- package/docs/cases/simple_select.js +4 -2
- package/docs/cases/simple_update.js +5 -2
- package/docs/tables/usersTable.d.ts +11 -10
- package/docs/tables/usersTable.js +5 -4
- package/package.json +1 -1
- package/serializer/serializer.js +4 -1
- package/tables/abstractTable.d.ts +2 -2
- package/tables/aggregators.d.ts +27 -0
- package/tables/aggregators.js +56 -0
- package/tables/migrationsTable.d.ts +1 -1
- package/test.d.ts +0 -1
- package/test.js +44 -224
- package/data/tables/citiesTable.d.ts +0 -14
- package/data/tables/citiesTable.js +0 -17
- package/data/tables/userGroupsTable.d.ts +0 -7
- package/data/tables/userGroupsTable.js +0 -15
- package/data/tables/usersTable.d.ts +0 -16
- package/data/tables/usersTable.js +0 -31
- package/data/tables/usersToUserGroups.d.ts +0 -7
- package/data/tables/usersToUserGroups.js +0 -17
- package/data/types/rolesType.d.ts +0 -1
- 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
|
-
|
|
239
|
-
|
|
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: () =>
|
|
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(
|
|
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: () =>
|
|
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.
|
|
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.
|
|
47
|
+
this._query.push('null');
|
|
43
48
|
}
|
|
44
49
|
}
|
|
45
50
|
else {
|
|
46
|
-
this.
|
|
51
|
+
this._query.push('DEFAULT');
|
|
47
52
|
}
|
|
48
53
|
if (index < entries.length - 1) {
|
|
49
|
-
this.
|
|
54
|
+
this._query.push(', ');
|
|
50
55
|
}
|
|
51
56
|
});
|
|
52
57
|
if (i < values.length - 1) {
|
|
53
|
-
this.
|
|
58
|
+
this._query.push('),\n');
|
|
54
59
|
}
|
|
55
60
|
else {
|
|
56
|
-
this.
|
|
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 ${
|
|
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.
|
|
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: () =>
|
|
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(
|
|
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 (
|
|
86
|
-
this._join.push(
|
|
89
|
+
if (this._joinCache[tableFrom]) {
|
|
90
|
+
this._join.push(this._joinCache[tableFrom]);
|
|
87
91
|
}
|
|
88
92
|
else {
|
|
89
93
|
this._join.push(tableFrom);
|
|
90
|
-
|
|
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: () =>
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
28
|
-
|
|
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
|
-
|
|
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,6 +4,9 @@ import DeleteFilter from './deleteFilter';
|
|
|
4
4
|
export default class DeleteFrom {
|
|
5
5
|
private _aggregator;
|
|
6
6
|
constructor(aggregator: DeleteAggregator);
|
|
7
|
-
build: () =>
|
|
7
|
+
build: () => {
|
|
8
|
+
query: string;
|
|
9
|
+
values: any[];
|
|
10
|
+
};
|
|
8
11
|
filteredBy: (filters: Expr) => DeleteFilter<unknown, unknown>;
|
|
9
12
|
}
|
|
@@ -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: () =>
|
|
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: () =>
|
|
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: () =>
|
|
13
|
+
build: () => {
|
|
14
|
+
query: string;
|
|
15
|
+
values: any[];
|
|
16
|
+
};
|
|
14
17
|
}
|
|
@@ -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: () =>
|
|
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: () =>
|
|
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
|
-
|
|
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: () =>
|
|
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 = () =>
|
|
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: () =>
|
|
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 = () =>
|
|
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():
|
|
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: (
|
|
5
|
+
toQuery: (position?: number | undefined, tableCache?: {
|
|
6
|
+
[tableName: string]: string;
|
|
7
|
+
} | undefined) => {
|
|
8
|
+
query: string;
|
|
9
|
+
values: Array<any>;
|
|
10
|
+
};
|
|
6
11
|
}
|