drizzle-orm 0.11.0 → 0.11.1
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 +11 -11
- package/builders/aggregators/selectAggregator.d.ts +1 -9
- package/builders/aggregators/selectAggregator.js +1 -55
- package/builders/aggregators/selectAggregatorV1.d.ts +39 -0
- package/builders/aggregators/selectAggregatorV1.js +143 -0
- package/builders/highLvlBuilders/joins/selectJoinBuilder.d.ts +1 -0
- package/builders/highLvlBuilders/joins/selectJoinBuilder.js +5 -1
- package/builders/highLvlBuilders/selectRequestBuilder.d.ts +5 -5
- package/builders/joinBuilders/builders/abstractJoinBuilder.js +1 -1
- package/builders/lowLvlBuilders/selects/select.d.ts +4 -1
- package/builders/lowLvlBuilders/selects/select.js +27 -1
- package/builders/lowLvlBuilders/selects/selectFrom.d.ts +25 -11
- package/builders/lowLvlBuilders/selects/selectFrom.js +48 -5
- package/builders/lowLvlBuilders/selects/selectJoined.d.ts +22 -9
- package/builders/lowLvlBuilders/selects/selectJoined.js +44 -7
- package/builders/lowLvlBuilders/selects/whereSelect.d.ts +13 -0
- package/builders/lowLvlBuilders/selects/whereSelect.js +24 -0
- package/builders/requestBuilders/where/and.d.ts +10 -0
- package/builders/requestBuilders/where/and.js +17 -0
- package/builders/requestBuilders/where/const.d.ts +7 -0
- package/builders/requestBuilders/where/const.js +10 -0
- package/builders/requestBuilders/where/constArray.d.ts +7 -0
- package/builders/requestBuilders/where/constArray.js +25 -0
- package/builders/requestBuilders/where/eqWhere.d.ts +10 -0
- package/builders/requestBuilders/where/eqWhere.js +5 -0
- package/builders/requestBuilders/where/greater.d.ts +10 -0
- package/builders/requestBuilders/where/greater.js +5 -0
- package/builders/requestBuilders/where/greaterEq.d.ts +10 -0
- package/builders/requestBuilders/where/greaterEq.js +5 -0
- package/builders/requestBuilders/where/in.d.ts +10 -0
- package/builders/requestBuilders/where/in.js +5 -0
- package/builders/requestBuilders/where/isNotNull.d.ts +10 -0
- package/builders/requestBuilders/where/isNotNull.js +4 -0
- package/builders/requestBuilders/where/isNull.d.ts +10 -0
- package/builders/requestBuilders/where/isNull.js +4 -0
- package/builders/requestBuilders/where/less.d.ts +10 -0
- package/builders/requestBuilders/where/less.js +5 -0
- package/builders/requestBuilders/where/lessEq.d.ts +10 -0
- package/builders/requestBuilders/where/lessEq.js +5 -0
- package/builders/requestBuilders/where/like.d.ts +10 -0
- package/builders/requestBuilders/where/like.js +5 -0
- package/builders/requestBuilders/where/notEqWhere.d.ts +10 -0
- package/builders/requestBuilders/where/notEqWhere.js +5 -0
- package/builders/requestBuilders/where/or.d.ts +10 -0
- package/builders/requestBuilders/where/or.js +17 -0
- package/builders/requestBuilders/where/rawWhere.d.ts +10 -0
- package/builders/requestBuilders/where/rawWhere.js +1 -0
- package/builders/requestBuilders/where/static.d.ts +4 -1
- package/builders/requestBuilders/where/static.js +9 -4
- package/builders/requestBuilders/where/static.spec.d.ts +1 -0
- package/builders/requestBuilders/where/static.spec.js +59 -0
- package/builders/requestBuilders/where/var.d.ts +10 -0
- package/builders/requestBuilders/where/var.js +4 -0
- package/builders/requestBuilders/where/where.d.ts +10 -0
- package/docs/cases/simple_join.js +2 -2
- package/package.json +4 -4
- package/test.d.ts +0 -1
- package/test.js +176 -165
package/README.md
CHANGED
|
@@ -343,8 +343,8 @@ const usersTable = new UsersTable(db);
|
|
|
343
343
|
const citiesTable = new CitiesTable(db);
|
|
344
344
|
|
|
345
345
|
const userWithCities = await citiesTable.select()
|
|
346
|
-
.
|
|
347
|
-
.
|
|
346
|
+
.leftJoin(usersTable, (cities, users) => eq(cities.userId, users.id))
|
|
347
|
+
.where((cities, users) => eq(cities.id, 1))
|
|
348
348
|
.execute();
|
|
349
349
|
|
|
350
350
|
const citiesWithUserObject = userWithCities.map((city, user) => ({ ...city, user }));
|
|
@@ -353,11 +353,11 @@ const citiesWithUserObject = userWithCities.map((city, user) => ({ ...city, user
|
|
|
353
353
|
### Join Many-To-Many Tables
|
|
354
354
|
##### Join User Groups with Users, using many-to-many table
|
|
355
355
|
```typescript
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
356
|
+
const usersWithUserGroups = await usersToUserGroupsTable.select()
|
|
357
|
+
.leftJoin(usersTable, (usersToUserGroups, users) => eq(usersToUserGroups.userId, users.id))
|
|
358
|
+
.leftJoin(userGroupsTable, (usersToUserGroups, _users, userGroups) => eq(usersToUserGroups.groupId, userGroups.id))
|
|
359
|
+
.where((usersToUserGroups, _users, userGroups) => eq(userGroups.id, 1))
|
|
360
|
+
.execute();
|
|
361
361
|
```
|
|
362
362
|
### Join using partial field select
|
|
363
363
|
##### Join Cities with Users getting only needed fields form request
|
|
@@ -366,8 +366,8 @@ const citiesWithUserObject = userWithCities.map((city, user) => ({ ...city, user
|
|
|
366
366
|
id: citiesTable.id,
|
|
367
367
|
userId: citiesTable.userId,
|
|
368
368
|
})
|
|
369
|
-
.
|
|
370
|
-
.
|
|
369
|
+
.leftJoin(usersTable, (cities, users) => eq(cities.userId, users.id))
|
|
370
|
+
.where((cities, users) => eq(cities.id, 1))
|
|
371
371
|
.execute();
|
|
372
372
|
|
|
373
373
|
const citiesWithUserObject = userWithCities.map((city, user) => ({ ...city, user }));
|
|
@@ -375,8 +375,8 @@ const citiesWithUserObject = userWithCities.map((city, user) => ({ ...city, user
|
|
|
375
375
|
### Another join examples with different callback ON statements
|
|
376
376
|
```typescript
|
|
377
377
|
await citiesTable.select()
|
|
378
|
-
.where(eq(citiesTable.location, 'q'))
|
|
379
378
|
.leftJoin(usersTable, (cities, _users) => eq(cities.id, 13))
|
|
379
|
+
.where((cities, _users) => eq(cities.location, 'q'))
|
|
380
380
|
.execute();
|
|
381
381
|
// Join statement generated from query
|
|
382
382
|
// LEFT JOIN users AS users_1
|
|
@@ -397,8 +397,8 @@ await citiesTable.select()
|
|
|
397
397
|
// Values: [13, 14]
|
|
398
398
|
|
|
399
399
|
await citiesTable.select()
|
|
400
|
-
.where(eq(citiesTable.location, 'location'))
|
|
401
400
|
.leftJoin(usersTable, (_cities, _users) => raw('<custom expression after ON statement>'))
|
|
401
|
+
.where((cities, _users) => eq(cities.location, 'location'))
|
|
402
402
|
.execute();
|
|
403
403
|
// Join statement generated from query
|
|
404
404
|
// LEFT JOIN users AS users_1
|
|
@@ -3,7 +3,6 @@ import ColumnType from '../../columns/types/columnType';
|
|
|
3
3
|
import { AbstractTable } from '../../tables';
|
|
4
4
|
import { JoinType } from '../highLvlBuilders/joins/selectJoinBuilder';
|
|
5
5
|
import Order from '../highLvlBuilders/order';
|
|
6
|
-
import Join from '../joinBuilders/join';
|
|
7
6
|
import Expr from '../requestBuilders/where/where';
|
|
8
7
|
import Aggregator from './abstractAggregator';
|
|
9
8
|
export default class SelectAggregator extends Aggregator {
|
|
@@ -26,14 +25,7 @@ export default class SelectAggregator extends Aggregator {
|
|
|
26
25
|
orderBy: (column?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined, order?: Order | undefined) => SelectAggregator;
|
|
27
26
|
distinct: (column?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined) => SelectAggregator;
|
|
28
27
|
appendFrom: (tableName: string) => SelectAggregator;
|
|
29
|
-
|
|
30
|
-
join: (joins: {
|
|
31
|
-
join: Join<any>;
|
|
32
|
-
partial?: {
|
|
33
|
-
[name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, any>;
|
|
34
|
-
} | undefined;
|
|
35
|
-
id?: number | undefined;
|
|
36
|
-
}[]) => SelectAggregator;
|
|
28
|
+
join: (joins: Array<JoinType<AbstractTable<any>>>) => SelectAggregator;
|
|
37
29
|
buildQuery: () => {
|
|
38
30
|
query: string;
|
|
39
31
|
values: Array<any>;
|
|
@@ -7,8 +7,6 @@ const ecranate_1 = require("../../utils/ecranate");
|
|
|
7
7
|
const order_1 = __importDefault(require("../highLvlBuilders/order"));
|
|
8
8
|
const abstractAggregator_1 = __importDefault(require("./abstractAggregator"));
|
|
9
9
|
class SelectAggregator extends abstractAggregator_1.default {
|
|
10
|
-
// public constructor(table: AbstractTable<any>);
|
|
11
|
-
// public constructor(table: AbstractTable<any>, partial: {[name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, AbstractTable<any>>})
|
|
12
10
|
constructor(table, partial) {
|
|
13
11
|
super(table, partial);
|
|
14
12
|
this._from = [];
|
|
@@ -67,7 +65,7 @@ class SelectAggregator extends abstractAggregator_1.default {
|
|
|
67
65
|
// this._joinCache[tableName] = tableName;
|
|
68
66
|
return this;
|
|
69
67
|
};
|
|
70
|
-
this.
|
|
68
|
+
this.join = (joins) => {
|
|
71
69
|
const tableFrom = this._table.tableName();
|
|
72
70
|
for (const [index, join] of joins.entries()) {
|
|
73
71
|
const { table: tableToName, originalName, onExpression, type, columns, } = join;
|
|
@@ -88,58 +86,6 @@ class SelectAggregator extends abstractAggregator_1.default {
|
|
|
88
86
|
}
|
|
89
87
|
return this;
|
|
90
88
|
};
|
|
91
|
-
// Add select generator for second table also
|
|
92
|
-
this.join = (joins) => {
|
|
93
|
-
// const cache: {[tableName: string]: string} = {};
|
|
94
|
-
joins.forEach((joinObject) => {
|
|
95
|
-
if (joinObject) {
|
|
96
|
-
const tableFrom = joinObject.join.fromColumn.getParentName();
|
|
97
|
-
const tableTo = joinObject.join.toColumn.getParentName();
|
|
98
|
-
const { type } = joinObject.join;
|
|
99
|
-
let fromAlias = '';
|
|
100
|
-
if (this._joinCache[tableFrom]) {
|
|
101
|
-
fromAlias = this._joinCache[tableFrom];
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
fromAlias = `${tableFrom}${joinObject.id ? `_${joinObject.id}` : ''}`;
|
|
105
|
-
this._joinCache[tableFrom] = fromAlias;
|
|
106
|
-
}
|
|
107
|
-
let selectString;
|
|
108
|
-
if (joinObject.partial) {
|
|
109
|
-
selectString = this.generateSelectArray(`${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`, Object.values(joinObject.partial), joinObject.id).join('');
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
selectString = this.generateSelectArray(`${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`, Object.values(joinObject.join.mappedServiceToDb), joinObject.id).join('');
|
|
113
|
-
}
|
|
114
|
-
this._fields.push(', ');
|
|
115
|
-
this._fields.push(selectString);
|
|
116
|
-
this._join.push('\n');
|
|
117
|
-
this._join.push(type);
|
|
118
|
-
this._join.push(' ');
|
|
119
|
-
this._join.push(tableTo);
|
|
120
|
-
this._join.push(' ');
|
|
121
|
-
this._join.push(`AS ${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`);
|
|
122
|
-
this._joinCache[tableTo] = `${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`;
|
|
123
|
-
this._join.push('\n');
|
|
124
|
-
this._join.push('ON ');
|
|
125
|
-
this._join.push(fromAlias);
|
|
126
|
-
// if (this._joinCache[tableFrom]) {
|
|
127
|
-
// this._join.push(this._joinCache[tableFrom]);
|
|
128
|
-
// } else {
|
|
129
|
-
// this._join.push(tableFrom);
|
|
130
|
-
// this._joinCache[tableFrom] = `${tableFrom}${joinObject.id ? `_${joinObject.id}` : ''}`;
|
|
131
|
-
// }
|
|
132
|
-
this._join.push('.');
|
|
133
|
-
this._join.push(joinObject.join.fromColumn.getColumnName());
|
|
134
|
-
this._join.push(' = ');
|
|
135
|
-
this._join.push(`${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`);
|
|
136
|
-
// this._join.push(toAlias);
|
|
137
|
-
this._join.push('.');
|
|
138
|
-
this._join.push(joinObject.join.toColumn.getColumnName());
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
return this;
|
|
142
|
-
};
|
|
143
89
|
this.buildQuery = () => {
|
|
144
90
|
this._select.push(this._distinct.join(''));
|
|
145
91
|
this._select.push(this._fields.join(''));
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AbstractColumn } from '../../columns/column';
|
|
2
|
+
import ColumnType from '../../columns/types/columnType';
|
|
3
|
+
import { AbstractTable } from '../../tables';
|
|
4
|
+
import Order from '../highLvlBuilders/order';
|
|
5
|
+
import Join from '../joinBuilders/join';
|
|
6
|
+
import Expr from '../requestBuilders/where/where';
|
|
7
|
+
import Aggregator from './abstractAggregator';
|
|
8
|
+
export default class SelectAggregatorV1 extends Aggregator {
|
|
9
|
+
private _from;
|
|
10
|
+
private _filters;
|
|
11
|
+
private _select;
|
|
12
|
+
private _join;
|
|
13
|
+
private _limit;
|
|
14
|
+
private _offset;
|
|
15
|
+
private _distinct;
|
|
16
|
+
private _orderBy;
|
|
17
|
+
private _values;
|
|
18
|
+
private _joinCache;
|
|
19
|
+
constructor(table: AbstractTable<any>, partial?: {
|
|
20
|
+
[name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, AbstractTable<any>>;
|
|
21
|
+
});
|
|
22
|
+
filters: (filters: Expr) => SelectAggregatorV1;
|
|
23
|
+
limit: (limit?: number | undefined) => SelectAggregatorV1;
|
|
24
|
+
offset: (offset?: number | undefined) => SelectAggregatorV1;
|
|
25
|
+
orderBy: (column?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined, order?: Order | undefined) => SelectAggregatorV1;
|
|
26
|
+
distinct: (column?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined) => SelectAggregatorV1;
|
|
27
|
+
appendFrom: (tableName: string) => SelectAggregatorV1;
|
|
28
|
+
join: (joins: {
|
|
29
|
+
join: Join<any>;
|
|
30
|
+
partial?: {
|
|
31
|
+
[name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, any>;
|
|
32
|
+
} | undefined;
|
|
33
|
+
id?: number | undefined;
|
|
34
|
+
}[]) => SelectAggregatorV1;
|
|
35
|
+
buildQuery: () => {
|
|
36
|
+
query: string;
|
|
37
|
+
values: Array<any>;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ecranate_1 = require("../../utils/ecranate");
|
|
7
|
+
const order_1 = __importDefault(require("../highLvlBuilders/order"));
|
|
8
|
+
const abstractAggregator_1 = __importDefault(require("./abstractAggregator"));
|
|
9
|
+
class SelectAggregatorV1 extends abstractAggregator_1.default {
|
|
10
|
+
// public constructor(table: AbstractTable<any>);
|
|
11
|
+
// public constructor(table: AbstractTable<any>, partial: {[name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, AbstractTable<any>>})
|
|
12
|
+
constructor(table, partial) {
|
|
13
|
+
super(table, partial);
|
|
14
|
+
this._from = [];
|
|
15
|
+
this._filters = [];
|
|
16
|
+
this._select = ['SELECT'];
|
|
17
|
+
this._join = [];
|
|
18
|
+
this._limit = [];
|
|
19
|
+
this._offset = [];
|
|
20
|
+
this._distinct = [];
|
|
21
|
+
// private _groupBy: Array<string> = [];
|
|
22
|
+
this._orderBy = [];
|
|
23
|
+
this._values = [];
|
|
24
|
+
this._joinCache = {};
|
|
25
|
+
this.filters = (filters) => {
|
|
26
|
+
if (filters) {
|
|
27
|
+
const queryBuilder = filters.toQueryV1({ position: 1, tableCache: this._joinCache, session: this._table.db.session() });
|
|
28
|
+
this._filters.push('WHERE ');
|
|
29
|
+
this._filters.push(queryBuilder.query);
|
|
30
|
+
this._values = queryBuilder.values;
|
|
31
|
+
}
|
|
32
|
+
return this;
|
|
33
|
+
};
|
|
34
|
+
this.limit = (limit) => {
|
|
35
|
+
if (limit) {
|
|
36
|
+
this._limit.push('LIMIT ');
|
|
37
|
+
this._limit.push(limit.toString());
|
|
38
|
+
}
|
|
39
|
+
return this;
|
|
40
|
+
};
|
|
41
|
+
this.offset = (offset) => {
|
|
42
|
+
if (offset) {
|
|
43
|
+
this._offset.push('OFFSET ');
|
|
44
|
+
this._offset.push(offset.toString());
|
|
45
|
+
}
|
|
46
|
+
return this;
|
|
47
|
+
};
|
|
48
|
+
this.orderBy = (column, order) => {
|
|
49
|
+
if (column !== null && column !== undefined) {
|
|
50
|
+
this._orderBy.push('ORDER BY ');
|
|
51
|
+
const columnParent = this._joinCache[column.getParent().tableName()] ? this._joinCache[column.getParent().tableName()] : column.getParent().tableName();
|
|
52
|
+
this._orderBy.push(`${columnParent}.${ecranate_1.ecranate(column.getColumnName())} `);
|
|
53
|
+
this._orderBy.push(order_1.default[order]);
|
|
54
|
+
}
|
|
55
|
+
return this;
|
|
56
|
+
};
|
|
57
|
+
this.distinct = (column) => {
|
|
58
|
+
if (column) {
|
|
59
|
+
this._distinct.push(` DISTINCT ON(${column.getParent().tableName()}.${ecranate_1.ecranate(column.getColumnName())}) `);
|
|
60
|
+
}
|
|
61
|
+
return this;
|
|
62
|
+
};
|
|
63
|
+
this.appendFrom = (tableName) => {
|
|
64
|
+
this._from.push('FROM ');
|
|
65
|
+
this._from.push(tableName);
|
|
66
|
+
// this._from.push(`${tableName} AS ${tableName}_0`);
|
|
67
|
+
this._joinCache[tableName] = tableName;
|
|
68
|
+
return this;
|
|
69
|
+
};
|
|
70
|
+
// Add select generator for second table also
|
|
71
|
+
this.join = (joins) => {
|
|
72
|
+
// const cache: {[tableName: string]: string} = {};
|
|
73
|
+
joins.forEach((joinObject) => {
|
|
74
|
+
if (joinObject) {
|
|
75
|
+
const tableFrom = joinObject.join.fromColumn.getParentName();
|
|
76
|
+
const tableTo = joinObject.join.toColumn.getParentName();
|
|
77
|
+
const { type } = joinObject.join;
|
|
78
|
+
let fromAlias = '';
|
|
79
|
+
if (this._joinCache[tableFrom]) {
|
|
80
|
+
fromAlias = this._joinCache[tableFrom];
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
fromAlias = `${tableFrom}${joinObject.id ? `_${joinObject.id}` : ''}`;
|
|
84
|
+
this._joinCache[tableFrom] = fromAlias;
|
|
85
|
+
}
|
|
86
|
+
let selectString;
|
|
87
|
+
if (joinObject.partial) {
|
|
88
|
+
selectString = this.generateSelectArray(`${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`, Object.values(joinObject.partial), joinObject.id).join('');
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
selectString = this.generateSelectArray(`${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`, Object.values(joinObject.join.mappedServiceToDb), joinObject.id).join('');
|
|
92
|
+
}
|
|
93
|
+
this._fields.push(', ');
|
|
94
|
+
this._fields.push(selectString);
|
|
95
|
+
this._join.push('\n');
|
|
96
|
+
this._join.push(type);
|
|
97
|
+
this._join.push(' ');
|
|
98
|
+
this._join.push(tableTo);
|
|
99
|
+
this._join.push(' ');
|
|
100
|
+
this._join.push(`AS ${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`);
|
|
101
|
+
this._joinCache[tableTo] = `${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`;
|
|
102
|
+
this._join.push('\n');
|
|
103
|
+
this._join.push('ON ');
|
|
104
|
+
this._join.push(fromAlias);
|
|
105
|
+
// if (this._joinCache[tableFrom]) {
|
|
106
|
+
// this._join.push(this._joinCache[tableFrom]);
|
|
107
|
+
// } else {
|
|
108
|
+
// this._join.push(tableFrom);
|
|
109
|
+
// this._joinCache[tableFrom] = `${tableFrom}${joinObject.id ? `_${joinObject.id}` : ''}`;
|
|
110
|
+
// }
|
|
111
|
+
this._join.push('.');
|
|
112
|
+
this._join.push(joinObject.join.fromColumn.getColumnName());
|
|
113
|
+
this._join.push(' = ');
|
|
114
|
+
this._join.push(`${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`);
|
|
115
|
+
// this._join.push(toAlias);
|
|
116
|
+
this._join.push('.');
|
|
117
|
+
this._join.push(joinObject.join.toColumn.getColumnName());
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
return this;
|
|
121
|
+
};
|
|
122
|
+
this.buildQuery = () => {
|
|
123
|
+
this._select.push(this._distinct.join(''));
|
|
124
|
+
this._select.push(this._fields.join(''));
|
|
125
|
+
this._select.push('\n');
|
|
126
|
+
this._select.push(this._from.join(''));
|
|
127
|
+
this._select.push('\n');
|
|
128
|
+
this._select.push(this._join.join(''));
|
|
129
|
+
if (this._join.length > 0) {
|
|
130
|
+
this._select.push('\n');
|
|
131
|
+
}
|
|
132
|
+
this._select.push(this._filters.join(''));
|
|
133
|
+
this._select.push('\n');
|
|
134
|
+
this._select.push(this._orderBy.join(''));
|
|
135
|
+
this._select.push('\n');
|
|
136
|
+
this._select.push(this._limit.join(''));
|
|
137
|
+
this._select.push('\n');
|
|
138
|
+
this._select.push(this._offset.join(''));
|
|
139
|
+
return { query: this._select.join(''), values: this._values };
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.default = SelectAggregatorV1;
|
|
@@ -38,6 +38,7 @@ export default class JoinBuilder<TJoins extends {
|
|
|
38
38
|
leftJoin<TJoinedTable extends AbstractTable<TJoinedTable>, TPartial extends EmptyPartial<TJoinedTable> = undefined>(value: TJoinedTable, callback: (...args: [...TJoins, TableIfPartialIsUndefined<TPartial, ExtractPartialObjectFromColumns<TJoinedTable>>]) => Expr, partial?: TPartial): JoinBuilder<[...TJoins, TableIfPartialIsUndefined<TPartial, ExtractPartialObjectFromColumns<TJoinedTable>>], [...TJoinsResponses, FullOrPartial<TJoinedTable, TPartial>]>;
|
|
39
39
|
rightJoin<TJoinedTable extends AbstractTable<TJoinedTable>, TPartial extends EmptyPartial<TJoinedTable> = undefined>(value: TJoinedTable, callback: (...args: [...TJoins, TableIfPartialIsUndefined<TPartial, ExtractPartialObjectFromColumns<TJoinedTable>>]) => Expr, partial?: TPartial): JoinBuilder<[...TJoins, TableIfPartialIsUndefined<TPartial, ExtractPartialObjectFromColumns<TJoinedTable>>], [...TJoinsResponses, FullOrPartial<TJoinedTable, TPartial>]>;
|
|
40
40
|
fullJoin<TJoinedTable extends AbstractTable<TJoinedTable>, TPartial extends EmptyPartial<TJoinedTable> = undefined>(value: TJoinedTable, callback: (...args: [...TJoins, TableIfPartialIsUndefined<TPartial, ExtractPartialObjectFromColumns<TJoinedTable>>]) => Expr, partial?: TPartial): JoinBuilder<[...TJoins, TableIfPartialIsUndefined<TPartial, ExtractPartialObjectFromColumns<TJoinedTable>>], [...TJoinsResponses, FullOrPartial<TJoinedTable, TPartial>]>;
|
|
41
|
+
where: (callback: (...args_0: TJoins) => Expr) => this;
|
|
41
42
|
execute(): Promise<JoinBuilderResponses<TJoinsResponses>>;
|
|
42
43
|
private join;
|
|
43
44
|
}
|
|
@@ -40,6 +40,10 @@ class JoinBuilder {
|
|
|
40
40
|
this._partial = _partial;
|
|
41
41
|
this._logger = _logger;
|
|
42
42
|
this.joinedTables = [];
|
|
43
|
+
this.where = (callback) => {
|
|
44
|
+
this._filter = callback(...this.joins);
|
|
45
|
+
return this;
|
|
46
|
+
};
|
|
43
47
|
this.joinedTables.push({
|
|
44
48
|
table: onTable.tableName(),
|
|
45
49
|
columns: joins[1],
|
|
@@ -64,7 +68,7 @@ class JoinBuilder {
|
|
|
64
68
|
const queryBuilder = select_1.default
|
|
65
69
|
.from(this.rootTable, this._partial)
|
|
66
70
|
.distinct(this._distinct)
|
|
67
|
-
.
|
|
71
|
+
.joined(this.joinedTables)
|
|
68
72
|
.limit(this._props.limit)
|
|
69
73
|
.offset(this._props.offset)
|
|
70
74
|
.filteredBy(this._filter)
|
|
@@ -29,7 +29,7 @@ export default class SelectTRB<TTable extends AbstractTable<TTable>, TPartial ex
|
|
|
29
29
|
leftJoin<TJoinedTable extends AbstractTable<TJoinedTable>, TJoinedPartial extends EmptyPartial<TJoinedTable> = undefined>(value: TJoinedTable, callback: (...args: [TableIfPartialIsUndefined<TPartial, ExtractPartialObjectFromColumns<TTable>>, TableIfPartialIsUndefined<TJoinedPartial, ExtractPartialObjectFromColumns<TJoinedTable>>]) => Expr, partial?: TJoinedPartial): JoinBuilder<[TableIfPartialIsUndefined<TPartial, ExtractPartialObjectFromColumns<TTable>>, TableIfPartialIsUndefined<TJoinedPartial, ExtractPartialObjectFromColumns<TJoinedTable>>], [FullOrPartial<TTable, TPartial>, FullOrPartial<TJoinedTable, TJoinedPartial>]>;
|
|
30
30
|
rightJoin<TJoinedTable extends AbstractTable<TJoinedTable>, TJoinedPartial extends EmptyPartial<TJoinedTable> = undefined>(value: TJoinedTable, callback: (...args: [TableIfPartialIsUndefined<TPartial, ExtractPartialObjectFromColumns<TTable>>, TableIfPartialIsUndefined<TJoinedPartial, ExtractPartialObjectFromColumns<TJoinedTable>>]) => Expr, partial?: TJoinedPartial): JoinBuilder<[TableIfPartialIsUndefined<TPartial, ExtractPartialObjectFromColumns<TTable>>, TableIfPartialIsUndefined<TJoinedPartial, ExtractPartialObjectFromColumns<TJoinedTable>>], [FullOrPartial<TTable, TPartial>, FullOrPartial<TJoinedTable, TJoinedPartial>]>;
|
|
31
31
|
fullJoin<TJoinedTable extends AbstractTable<TJoinedTable>, TJoinedPartial extends EmptyPartial<TJoinedTable> = undefined>(value: TJoinedTable, callback: (...args: [TableIfPartialIsUndefined<TPartial, ExtractPartialObjectFromColumns<TTable>>, TableIfPartialIsUndefined<TJoinedPartial, ExtractPartialObjectFromColumns<TJoinedTable>>]) => Expr, partial?: TJoinedPartial): JoinBuilder<[TableIfPartialIsUndefined<TPartial, ExtractPartialObjectFromColumns<TTable>>, TableIfPartialIsUndefined<TJoinedPartial, ExtractPartialObjectFromColumns<TJoinedTable>>], [FullOrPartial<TTable, TPartial>, FullOrPartial<TJoinedTable, TJoinedPartial>]>;
|
|
32
|
-
where: (expr: Expr) =>
|
|
32
|
+
where: (expr: Expr) => Omit<this, 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'>;
|
|
33
33
|
orderBy<TColumnType extends ColumnType>(callback: (table: TTable) => AbstractColumn<TColumnType, boolean, boolean>, order: Order): SelectTRB<TTable, TPartial>;
|
|
34
34
|
distinct: (column: AbstractColumn<ColumnType<any>, boolean, boolean>) => SelectTRB<TTable, TPartial>;
|
|
35
35
|
limit: (limit: number) => SelectTRB<TTable, TPartial>;
|
|
@@ -39,25 +39,25 @@ export default class SelectTRB<TTable extends AbstractTable<TTable>, TPartial ex
|
|
|
39
39
|
*/
|
|
40
40
|
innerJoinV1<TColumn extends ColumnType, TToColumn extends ColumnType, IToTable extends AbstractTable<IToTable>, IToPartial extends PartialFor<IToTable>>(table: {
|
|
41
41
|
new (db: DB): IToTable;
|
|
42
|
-
}, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TToColumn, boolean, boolean>, partial?: IToPartial): SelectTRBWithJoin<TTable, IToTable,
|
|
42
|
+
}, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TToColumn, boolean, boolean>, partial?: IToPartial): SelectTRBWithJoin<TTable, IToTable, TPartial extends undefined ? {} : TPartial, IToPartial>;
|
|
43
43
|
/**
|
|
44
44
|
* @deprecated Since version 0.11.0. Will be deleted in version 0.12.0. Use {@link leftJoin()} instead
|
|
45
45
|
*/
|
|
46
46
|
leftJoinV1<TColumn extends ColumnType<any>, IToColumn extends ColumnType<any>, IToTable extends AbstractTable<IToTable>, IToPartial extends PartialFor<IToTable> = {}>(table: {
|
|
47
47
|
new (db: DB): IToTable;
|
|
48
|
-
}, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean, TTable>, to: (table: IToTable) => AbstractColumn<IToColumn, boolean, boolean, IToTable>, partial?: IToPartial): SelectTRBWithJoin<TTable, IToTable,
|
|
48
|
+
}, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean, TTable>, to: (table: IToTable) => AbstractColumn<IToColumn, boolean, boolean, IToTable>, partial?: IToPartial): SelectTRBWithJoin<TTable, IToTable, TPartial extends undefined ? {} : TPartial, IToPartial>;
|
|
49
49
|
/**
|
|
50
50
|
* @deprecated Since version 0.11.0. Will be deleted in version 0.12.0. Use {@link rightJoin()} instead
|
|
51
51
|
*/
|
|
52
52
|
rightJoinV1<TColumn extends ColumnType, TToColumn extends ColumnType, IToTable extends AbstractTable<IToTable>, IToPartial extends PartialFor<IToTable> = {}>(table: {
|
|
53
53
|
new (db: DB): IToTable;
|
|
54
|
-
}, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TToColumn, boolean, boolean>, partial?: IToPartial): SelectTRBWithJoin<TTable, IToTable,
|
|
54
|
+
}, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TToColumn, boolean, boolean>, partial?: IToPartial): SelectTRBWithJoin<TTable, IToTable, TPartial extends undefined ? {} : TPartial, IToPartial>;
|
|
55
55
|
/**
|
|
56
56
|
* @deprecated Since version 0.11.0. Will be deleted in version 0.12.0. Use {@link fullJoin()} instead
|
|
57
57
|
*/
|
|
58
58
|
fullJoinV1<TColumn extends ColumnType, TToColumn extends ColumnType, IToTable extends AbstractTable<IToTable>, IToPartial extends PartialFor<IToTable> = {}>(table: {
|
|
59
59
|
new (db: DB): IToTable;
|
|
60
|
-
}, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TToColumn, boolean, boolean>, partial?: IToPartial): SelectTRBWithJoin<TTable, IToTable,
|
|
60
|
+
}, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TToColumn, boolean, boolean>, partial?: IToPartial): SelectTRBWithJoin<TTable, IToTable, TPartial extends undefined ? {} : TPartial, IToPartial>;
|
|
61
61
|
execute: () => Promise<([keyof TPartial] extends [never] ? ExtractModel<TTable> : ExtractModel<TPartial>)[]>;
|
|
62
62
|
protected _execute: () => Promise<Array<[keyof TPartial] extends [never] ? ExtractModel<TTable> : ExtractModel<TPartial>>>;
|
|
63
63
|
}
|
|
@@ -37,7 +37,7 @@ class AbstractJoined {
|
|
|
37
37
|
};
|
|
38
38
|
this.execute = async () => {
|
|
39
39
|
const queryBuilder = select_1.default
|
|
40
|
-
.
|
|
40
|
+
.fromV1(this._table, this._partial)
|
|
41
41
|
.distinct(this._distinct)
|
|
42
42
|
.joined(this.joins())
|
|
43
43
|
.limit(this._props.limit)
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { AbstractColumn } from '../../../columns/column';
|
|
2
2
|
import ColumnType from '../../../columns/types/columnType';
|
|
3
3
|
import { AbstractTable } from '../../../tables';
|
|
4
|
-
import SelectFrom from './selectFrom';
|
|
4
|
+
import SelectFrom, { SelectFromV1 } from './selectFrom';
|
|
5
5
|
export default class Select {
|
|
6
6
|
static from: <TTable extends AbstractTable<TTable>, TType extends ColumnType<any>, TColumn extends AbstractColumn<TType, boolean, boolean, TTable>, T extends {
|
|
7
7
|
[name: string]: TColumn;
|
|
8
8
|
} = {}>(table: AbstractTable<TTable>, partial?: T | undefined) => SelectFrom;
|
|
9
|
+
static fromV1: <TTable extends AbstractTable<TTable>, TType extends ColumnType<any>, TColumn extends AbstractColumn<TType, boolean, boolean, TTable>, T extends {
|
|
10
|
+
[name: string]: TColumn;
|
|
11
|
+
} = {}>(table: AbstractTable<TTable>, partial?: T | undefined) => SelectFromV1;
|
|
9
12
|
}
|
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
2
21
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
23
|
};
|
|
5
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
const selectAggregatorV1_1 = __importDefault(require("../../aggregators/selectAggregatorV1"));
|
|
6
26
|
const selectAggregator_1 = __importDefault(require("../../aggregators/selectAggregator"));
|
|
7
|
-
const selectFrom_1 =
|
|
27
|
+
const selectFrom_1 = __importStar(require("./selectFrom"));
|
|
8
28
|
class Select {
|
|
9
29
|
}
|
|
10
30
|
exports.default = Select;
|
|
@@ -14,3 +34,9 @@ Select.from = (table, partial) => {
|
|
|
14
34
|
aggregator.appendFrom(table.tableName());
|
|
15
35
|
return new selectFrom_1.default(aggregator);
|
|
16
36
|
};
|
|
37
|
+
// eslint-disable-next-line max-len
|
|
38
|
+
Select.fromV1 = (table, partial) => {
|
|
39
|
+
const aggregator = new selectAggregatorV1_1.default(table, partial);
|
|
40
|
+
aggregator.appendFrom(table.tableName());
|
|
41
|
+
return new selectFrom_1.SelectFromV1(aggregator);
|
|
42
|
+
};
|
|
@@ -1,29 +1,43 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import AbstractTable from '../../../tables/abstractTable';
|
|
2
|
+
import SelectAggregatorV1 from '../../aggregators/selectAggregatorV1';
|
|
3
|
+
import { JoinType } from '../../highLvlBuilders/joins/selectJoinBuilder';
|
|
3
4
|
import { AbstractColumn } from '../../../columns/column';
|
|
4
5
|
import ColumnType from '../../../columns/types/columnType';
|
|
5
6
|
import SelectAggregator from '../../aggregators/selectAggregator';
|
|
6
7
|
import Order from '../../highLvlBuilders/order';
|
|
7
8
|
import Join from '../../joinBuilders/join';
|
|
8
9
|
import Expr from '../../requestBuilders/where/where';
|
|
9
|
-
import SelectJoined from './selectJoined';
|
|
10
|
-
import WhereSelect from './whereSelect';
|
|
10
|
+
import SelectJoined, { SelectJoinedV1 } from './selectJoined';
|
|
11
|
+
import WhereSelect, { WhereSelectV1 } from './whereSelect';
|
|
11
12
|
export default class SelectFrom {
|
|
12
13
|
private _aggregator;
|
|
13
14
|
constructor(aggregator: SelectAggregator);
|
|
15
|
+
joined: (joins: Array<JoinType<AbstractTable<any>>>) => SelectJoined;
|
|
16
|
+
limit: (limit?: number | undefined) => SelectFrom;
|
|
17
|
+
offset: (offset?: number | undefined) => SelectFrom;
|
|
18
|
+
orderBy: (orderBy?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined, order?: Order | undefined) => SelectFrom;
|
|
19
|
+
distinct: (column?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined) => SelectFrom;
|
|
20
|
+
filteredBy: (filters: Expr) => WhereSelect;
|
|
21
|
+
build: () => {
|
|
22
|
+
query: string;
|
|
23
|
+
values: any[];
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export declare class SelectFromV1 {
|
|
27
|
+
private _aggregator;
|
|
28
|
+
constructor(aggregator: SelectAggregatorV1);
|
|
14
29
|
joined: (joins: {
|
|
15
30
|
join: Join<any>;
|
|
16
31
|
partial?: {
|
|
17
32
|
[name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, any>;
|
|
18
33
|
} | undefined;
|
|
19
34
|
id?: number | undefined;
|
|
20
|
-
}[]) =>
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
filteredBy: (filters: Expr) => WhereSelect;
|
|
35
|
+
}[]) => SelectJoinedV1;
|
|
36
|
+
limit: (limit?: number | undefined) => SelectFromV1;
|
|
37
|
+
offset: (offset?: number | undefined) => SelectFromV1;
|
|
38
|
+
orderBy: (orderBy?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined, order?: Order | undefined) => SelectFromV1;
|
|
39
|
+
distinct: (column?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined) => SelectFromV1;
|
|
40
|
+
filteredBy: (filters: Expr) => WhereSelectV1;
|
|
27
41
|
build: () => {
|
|
28
42
|
query: string;
|
|
29
43
|
values: any[];
|
|
@@ -1,14 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
4
20
|
};
|
|
5
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
|
|
7
|
-
const
|
|
22
|
+
exports.SelectFromV1 = void 0;
|
|
23
|
+
const selectJoined_1 = __importStar(require("./selectJoined"));
|
|
24
|
+
const whereSelect_1 = __importStar(require("./whereSelect"));
|
|
8
25
|
class SelectFrom {
|
|
9
26
|
constructor(aggregator) {
|
|
10
27
|
this.joined = (joins) => new selectJoined_1.default(this._aggregator).apply(joins);
|
|
11
|
-
this.joined2 = (joins) => new selectJoined_1.default(this._aggregator).apply2(joins);
|
|
12
28
|
this.limit = (limit) => {
|
|
13
29
|
this._aggregator.limit(limit);
|
|
14
30
|
return this;
|
|
@@ -33,3 +49,30 @@ class SelectFrom {
|
|
|
33
49
|
}
|
|
34
50
|
}
|
|
35
51
|
exports.default = SelectFrom;
|
|
52
|
+
class SelectFromV1 {
|
|
53
|
+
constructor(aggregator) {
|
|
54
|
+
this.joined = (joins) => new selectJoined_1.SelectJoinedV1(this._aggregator).apply(joins);
|
|
55
|
+
this.limit = (limit) => {
|
|
56
|
+
this._aggregator.limit(limit);
|
|
57
|
+
return this;
|
|
58
|
+
};
|
|
59
|
+
this.offset = (offset) => {
|
|
60
|
+
this._aggregator.offset(offset);
|
|
61
|
+
return this;
|
|
62
|
+
};
|
|
63
|
+
this.orderBy = (orderBy, order) => {
|
|
64
|
+
this._aggregator.orderBy(orderBy, order);
|
|
65
|
+
return this;
|
|
66
|
+
};
|
|
67
|
+
this.distinct = (column) => {
|
|
68
|
+
if (column) {
|
|
69
|
+
this._aggregator.distinct(column);
|
|
70
|
+
}
|
|
71
|
+
return this;
|
|
72
|
+
};
|
|
73
|
+
this.filteredBy = (filters) => new whereSelect_1.WhereSelectV1(this._aggregator).apply(filters);
|
|
74
|
+
this.build = () => this._aggregator.buildQuery();
|
|
75
|
+
this._aggregator = aggregator;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.SelectFromV1 = SelectFromV1;
|