@stamhoofd/sql 2.13.0 → 2.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/SQL.d.ts +16 -43
- package/dist/src/SQL.d.ts.map +1 -1
- package/dist/src/SQL.js +10 -10
- package/dist/src/SQL.js.map +1 -1
- package/dist/src/SQLDelete.d.ts +15 -15
- package/dist/src/SQLDelete.d.ts.map +1 -1
- package/dist/src/SQLDelete.js +9 -10
- package/dist/src/SQLDelete.js.map +1 -1
- package/dist/src/SQLExpression.js +4 -5
- package/dist/src/SQLExpression.js.map +1 -1
- package/dist/src/SQLExpressions.js +25 -9
- package/dist/src/SQLExpressions.js.map +1 -1
- package/dist/src/SQLJoin.d.ts +16 -14
- package/dist/src/SQLJoin.d.ts.map +1 -1
- package/dist/src/SQLJoin.js +10 -9
- package/dist/src/SQLJoin.js.map +1 -1
- package/dist/src/SQLJsonExpressions.js +14 -0
- package/dist/src/SQLJsonExpressions.js.map +1 -1
- package/dist/src/SQLOrderBy.d.ts +5 -8
- package/dist/src/SQLOrderBy.d.ts.map +1 -1
- package/dist/src/SQLOrderBy.js +11 -9
- package/dist/src/SQLOrderBy.js.map +1 -1
- package/dist/src/SQLSelect.d.ts +32 -29
- package/dist/src/SQLSelect.d.ts.map +1 -1
- package/dist/src/SQLSelect.js +41 -20
- package/dist/src/SQLSelect.js.map +1 -1
- package/dist/src/SQLWhere.d.ts +11 -14
- package/dist/src/SQLWhere.d.ts.map +1 -1
- package/dist/src/SQLWhere.js +46 -28
- package/dist/src/SQLWhere.js.map +1 -1
- package/dist/src/filters/SQLFilter.js +9 -9
- package/dist/src/filters/SQLFilter.js.map +1 -1
- package/dist/src/filters/SQLSorter.js +1 -2
- package/dist/src/filters/SQLSorter.js.map +1 -1
- package/package.json +2 -2
- package/src/SQL.ts +25 -12
- package/src/SQLDelete.ts +3 -8
- package/src/SQLJoin.ts +4 -5
- package/src/SQLOrderBy.ts +14 -12
- package/src/SQLSelect.ts +47 -24
- package/src/SQLWhere.ts +46 -33
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.compileToSQLFilter = exports.baseSQLFilterCompilers =
|
|
3
|
+
exports.compileToSQLFilter = exports.baseSQLFilterCompilers = void 0;
|
|
4
|
+
exports.andSQLFilterCompiler = andSQLFilterCompiler;
|
|
5
|
+
exports.orSQLFilterCompiler = orSQLFilterCompiler;
|
|
6
|
+
exports.notSQLFilterCompiler = notSQLFilterCompiler;
|
|
7
|
+
exports.createSQLRelationFilterCompiler = createSQLRelationFilterCompiler;
|
|
8
|
+
exports.createSQLFilterNamespace = createSQLFilterNamespace;
|
|
9
|
+
exports.createSQLExpressionFilterCompiler = createSQLExpressionFilterCompiler;
|
|
10
|
+
exports.createSQLColumnFilterCompiler = createSQLColumnFilterCompiler;
|
|
4
11
|
const simple_errors_1 = require("@simonbackx/simple-errors");
|
|
5
12
|
const SQL_1 = require("../SQL");
|
|
6
13
|
const SQLExpressions_1 = require("../SQLExpressions");
|
|
@@ -10,17 +17,14 @@ function andSQLFilterCompiler(filter, filters) {
|
|
|
10
17
|
const runners = compileSQLFilter(filter, filters);
|
|
11
18
|
return new SQLWhere_1.SQLWhereAnd(runners);
|
|
12
19
|
}
|
|
13
|
-
exports.andSQLFilterCompiler = andSQLFilterCompiler;
|
|
14
20
|
function orSQLFilterCompiler(filter, filters) {
|
|
15
21
|
const runners = compileSQLFilter(filter, filters);
|
|
16
22
|
return new SQLWhere_1.SQLWhereOr(runners);
|
|
17
23
|
}
|
|
18
|
-
exports.orSQLFilterCompiler = orSQLFilterCompiler;
|
|
19
24
|
function notSQLFilterCompiler(filter, filters) {
|
|
20
25
|
const andRunner = andSQLFilterCompiler(filter, filters);
|
|
21
26
|
return new SQLWhere_1.SQLWhereNot(andRunner);
|
|
22
27
|
}
|
|
23
|
-
exports.notSQLFilterCompiler = notSQLFilterCompiler;
|
|
24
28
|
function guardScalar(s) {
|
|
25
29
|
if (typeof s !== 'string' && typeof s !== 'number' && typeof s !== 'boolean' && !(s instanceof Date) && s !== null) {
|
|
26
30
|
throw new Error('Invalid scalar value');
|
|
@@ -47,16 +51,14 @@ function createSQLRelationFilterCompiler(baseSelect, definitions) {
|
|
|
47
51
|
throw new Error('Invalid filter');
|
|
48
52
|
};
|
|
49
53
|
}
|
|
50
|
-
exports.createSQLRelationFilterCompiler = createSQLRelationFilterCompiler;
|
|
51
54
|
// Already joined, but creates a namespace
|
|
52
55
|
function createSQLFilterNamespace(definitions) {
|
|
53
56
|
return (filter) => {
|
|
54
57
|
return andSQLFilterCompiler(filter, definitions);
|
|
55
58
|
};
|
|
56
59
|
}
|
|
57
|
-
exports.createSQLFilterNamespace = createSQLFilterNamespace;
|
|
58
60
|
function createSQLExpressionFilterCompiler(sqlExpression, { normalizeValue, isJSONObject = false, isJSONValue = false, nullable = false } = {}) {
|
|
59
|
-
const norm = normalizeValue
|
|
61
|
+
const norm = normalizeValue ?? ((v) => v);
|
|
60
62
|
const convertToExpression = isJSONValue ? SQLExpressions_1.scalarToSQLJSONExpression : SQLExpressions_1.scalarToSQLExpression;
|
|
61
63
|
return (filter, filters) => {
|
|
62
64
|
if (typeof filter === 'string' || typeof filter === 'number' || typeof filter === 'boolean' || filter === null || filter === undefined) {
|
|
@@ -204,12 +206,10 @@ function createSQLExpressionFilterCompiler(sqlExpression, { normalizeValue, isJS
|
|
|
204
206
|
throw new Error('Invalid filter ' + JSON.stringify(f));
|
|
205
207
|
};
|
|
206
208
|
}
|
|
207
|
-
exports.createSQLExpressionFilterCompiler = createSQLExpressionFilterCompiler;
|
|
208
209
|
function createSQLColumnFilterCompiler(name, options) {
|
|
209
210
|
const column = name instanceof SQLExpressions_1.SQLColumnExpression ? name : SQL_1.SQL.column(name);
|
|
210
211
|
return createSQLExpressionFilterCompiler(column, options);
|
|
211
212
|
}
|
|
212
|
-
exports.createSQLColumnFilterCompiler = createSQLColumnFilterCompiler;
|
|
213
213
|
exports.baseSQLFilterCompilers = {
|
|
214
214
|
'$and': andSQLFilterCompiler,
|
|
215
215
|
'$or': orSQLFilterCompiler,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLFilter.js","sourceRoot":"","sources":["../../../src/filters/SQLFilter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"SQLFilter.js","sourceRoot":"","sources":["../../../src/filters/SQLFilter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.compileToSQLSorter =
|
|
3
|
+
exports.compileToSQLSorter = compileToSQLSorter;
|
|
4
4
|
const SQLOrderBy_1 = require("../SQLOrderBy");
|
|
5
5
|
function compileToSQLSorter(sortBy, definitions) {
|
|
6
6
|
const sorters = [];
|
|
@@ -16,5 +16,4 @@ function compileToSQLSorter(sortBy, definitions) {
|
|
|
16
16
|
}
|
|
17
17
|
return SQLOrderBy_1.SQLOrderBy.combine(sorters);
|
|
18
18
|
}
|
|
19
|
-
exports.compileToSQLSorter = compileToSQLSorter;
|
|
20
19
|
//# sourceMappingURL=SQLSorter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLSorter.js","sourceRoot":"","sources":["../../../src/filters/SQLSorter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SQLSorter.js","sourceRoot":"","sources":["../../../src/filters/SQLSorter.ts"],"names":[],"mappings":";;AAWA,gDAiBC;AAzBD,8CAAgE;AAQhE,SAAgB,kBAAkB,CAAC,MAAgB,EAAE,WAA+B;IAChF,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,CAAC,EAAE,CAAC;YACL,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QAChD,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACvC,CAAC;IAED,OAAO,uBAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stamhoofd/sql",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.16.0",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"license": "UNLICENCED",
|
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
"scripts": {
|
|
13
13
|
"build": "tsc -b"
|
|
14
14
|
},
|
|
15
|
-
"gitHead": "
|
|
15
|
+
"gitHead": "d5f1a4dda2c1623058e96e8ff25d837b28e51bd6"
|
|
16
16
|
}
|
package/src/SQL.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { SQLResultNamespacedRow } from "@simonbackx/simple-database";
|
|
2
|
+
import { SQLDelete } from "./SQLDelete";
|
|
1
3
|
import { SQLExpression } from "./SQLExpression";
|
|
2
|
-
import {
|
|
3
|
-
import { SQLColumnExpression, SQLSafeValue, SQLTableExpression, SQLWildcardSelectExpression, scalarToSQLExpression } from "./SQLExpressions";
|
|
4
|
+
import { SQLColumnExpression, SQLSafeValue, SQLTableExpression, SQLWildcardSelectExpression } from "./SQLExpressions";
|
|
4
5
|
import { SQLJoin, SQLJoinType } from "./SQLJoin";
|
|
5
6
|
import { SQLJsonExtract, SQLJsonLength } from "./SQLJsonExpressions";
|
|
6
|
-
import {
|
|
7
|
+
import { parseTable, SQLSelect } from "./SQLSelect";
|
|
7
8
|
|
|
8
9
|
class StaticSQL {
|
|
9
10
|
wildcard(namespace?: string) {
|
|
@@ -36,7 +37,7 @@ class StaticSQL {
|
|
|
36
37
|
return new SQLTableExpression(namespaceOrTable, table)
|
|
37
38
|
}
|
|
38
39
|
|
|
39
|
-
select(...columns: SQLExpression[]): InstanceType<typeof SQLSelect
|
|
40
|
+
select(...columns: (SQLExpression|string)[]): InstanceType<typeof SQLSelect<SQLResultNamespacedRow>> {
|
|
40
41
|
if (columns.length === 0) {
|
|
41
42
|
return new SQLSelect(this.wildcard())
|
|
42
43
|
}
|
|
@@ -47,20 +48,32 @@ class StaticSQL {
|
|
|
47
48
|
return new SQLDelete()
|
|
48
49
|
}
|
|
49
50
|
|
|
50
|
-
leftJoin(table:
|
|
51
|
-
|
|
51
|
+
leftJoin(namespace: string, table: string);
|
|
52
|
+
leftJoin(table: string);
|
|
53
|
+
leftJoin(expression: SQLExpression);
|
|
54
|
+
leftJoin(tableOrExpressiongOrNamespace: SQLExpression|string, table?: string) {
|
|
55
|
+
return new SQLJoin(SQLJoinType.Left, parseTable(tableOrExpressiongOrNamespace, table))
|
|
52
56
|
}
|
|
53
57
|
|
|
54
|
-
rightJoin(table:
|
|
55
|
-
|
|
58
|
+
rightJoin(namespace: string, table: string);
|
|
59
|
+
rightJoin(table: string);
|
|
60
|
+
rightJoin(expression: SQLExpression);
|
|
61
|
+
rightJoin(tableOrExpressiongOrNamespace: SQLExpression|string, table?: string) {
|
|
62
|
+
return new SQLJoin(SQLJoinType.Right, parseTable(tableOrExpressiongOrNamespace, table))
|
|
56
63
|
}
|
|
57
64
|
|
|
58
|
-
innerJoin(table:
|
|
59
|
-
|
|
65
|
+
innerJoin(namespace: string, table: string);
|
|
66
|
+
innerJoin(table: string);
|
|
67
|
+
innerJoin(expression: SQLExpression);
|
|
68
|
+
innerJoin(tableOrExpressiongOrNamespace: SQLExpression|string, table?: string) {
|
|
69
|
+
return new SQLJoin(SQLJoinType.Inner, parseTable(tableOrExpressiongOrNamespace, table))
|
|
60
70
|
}
|
|
61
71
|
|
|
62
|
-
join(table:
|
|
63
|
-
|
|
72
|
+
join(namespace: string, table: string);
|
|
73
|
+
join(table: string);
|
|
74
|
+
join(expression: SQLExpression);
|
|
75
|
+
join(tableOrExpressiongOrNamespace: SQLExpression|string, table?: string) {
|
|
76
|
+
return new SQLJoin(SQLJoinType.Inner, parseTable(tableOrExpressiongOrNamespace, table))
|
|
64
77
|
}
|
|
65
78
|
}
|
|
66
79
|
|
package/src/SQLDelete.ts
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
import { Database } from "@simonbackx/simple-database";
|
|
2
2
|
import { SQLExpression, SQLExpressionOptions, SQLQuery, joinSQLQuery, normalizeSQLQuery } from "./SQLExpression";
|
|
3
3
|
import { SQLJoin } from './SQLJoin';
|
|
4
|
-
import { SQLWhere,
|
|
4
|
+
import { SQLWhere, Whereable } from "./SQLWhere";
|
|
5
5
|
|
|
6
|
-
class
|
|
6
|
+
class EmptyClass {}
|
|
7
|
+
export class SQLDelete extends Whereable(EmptyClass) implements SQLExpression {
|
|
7
8
|
_from: SQLExpression;
|
|
8
|
-
_where: SQLWhere|null = null;
|
|
9
9
|
_joins: (InstanceType<typeof SQLJoin>)[] = [];
|
|
10
10
|
|
|
11
|
-
constructor() {
|
|
12
|
-
}
|
|
13
|
-
|
|
14
11
|
clone(): this {
|
|
15
12
|
const c = new SQLDelete()
|
|
16
13
|
Object.assign(c, this);
|
|
@@ -63,5 +60,3 @@ class DeleteBase implements SQLExpression {
|
|
|
63
60
|
return this.delete().then(onFulfilled, onRejected);
|
|
64
61
|
}
|
|
65
62
|
}
|
|
66
|
-
|
|
67
|
-
export const SQLDelete = addWhereHelpers(DeleteBase)
|
package/src/SQLJoin.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SQLExpression, SQLExpressionOptions, SQLQuery, joinSQLQuery } from "./SQLExpression";
|
|
2
|
-
import { SQLWhere,
|
|
2
|
+
import { SQLWhere, Whereable } from "./SQLWhere";
|
|
3
3
|
|
|
4
4
|
export enum SQLJoinType {
|
|
5
5
|
Left = "Left",
|
|
@@ -8,12 +8,13 @@ export enum SQLJoinType {
|
|
|
8
8
|
Outer = "Outer"
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
class EmptyClass {}
|
|
12
|
+
export class SQLJoin extends Whereable(EmptyClass) implements SQLExpression {
|
|
12
13
|
type = SQLJoinType.Left
|
|
13
14
|
table: SQLExpression;
|
|
14
|
-
_where: SQLWhere|null = null;
|
|
15
15
|
|
|
16
16
|
constructor(type: SQLJoinType, table: SQLExpression) {
|
|
17
|
+
super();
|
|
17
18
|
this.type = type;
|
|
18
19
|
this.table = table;
|
|
19
20
|
}
|
|
@@ -36,5 +37,3 @@ export class JoinBase implements SQLExpression {
|
|
|
36
37
|
], ' ')
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
|
-
|
|
40
|
-
export const SQLJoin = addWhereHelpers(JoinBase)
|
package/src/SQLOrderBy.ts
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
import { SQLExpression, SQLExpressionOptions, SQLQuery, joinSQLQuery } from "./SQLExpression";
|
|
2
2
|
|
|
3
|
-
type
|
|
4
|
-
type Orderable = GConstructor<{ _orderBy: SQLOrderBy|null }>;
|
|
3
|
+
type Constructor<T = {}> = new (...args: any[]) => T;
|
|
5
4
|
|
|
6
|
-
export function
|
|
5
|
+
export function Orderable<Sup extends Constructor<{}>>(Base: Sup) {
|
|
7
6
|
return class extends Base {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
orderBy(
|
|
11
|
-
orderBy(
|
|
7
|
+
_orderBy: SQLOrderBy|null = null
|
|
8
|
+
|
|
9
|
+
orderBy<T>(this: T, orderBy: SQLOrderBy): T
|
|
10
|
+
orderBy<T>(this: T, column: SQLExpression, direction?: SQLOrderByDirection) : T
|
|
11
|
+
orderBy<T>(this: T, columnOrOrderBy: SQLExpression, direction?: SQLOrderByDirection): T {
|
|
12
12
|
let o = columnOrOrderBy as SQLOrderBy
|
|
13
13
|
if (!(columnOrOrderBy instanceof SQLOrderBy)) {
|
|
14
14
|
o = new SQLOrderBy({column: columnOrOrderBy, direction: direction ?? 'ASC'})
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
if
|
|
18
|
-
|
|
17
|
+
const me = this as any; // stupid typescript looses type information if we don't do the this: T dance
|
|
18
|
+
|
|
19
|
+
if (me._orderBy) {
|
|
20
|
+
me._orderBy.add(o)
|
|
19
21
|
} else {
|
|
20
|
-
|
|
22
|
+
me._orderBy = o;
|
|
21
23
|
}
|
|
22
24
|
|
|
23
|
-
return
|
|
25
|
+
return me;
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
}
|
|
@@ -60,4 +62,4 @@ export class SQLOrderBy implements SQLExpression {
|
|
|
60
62
|
)
|
|
61
63
|
])
|
|
62
64
|
}
|
|
63
|
-
}
|
|
65
|
+
}
|
package/src/SQLSelect.ts
CHANGED
|
@@ -1,24 +1,42 @@
|
|
|
1
|
+
import { Database, SQLResultNamespacedRow } from "@simonbackx/simple-database";
|
|
1
2
|
import { SQLExpression, SQLExpressionOptions, SQLQuery, joinSQLQuery, normalizeSQLQuery } from "./SQLExpression";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
3
|
+
import { SQLAlias, SQLColumnExpression, SQLCount, SQLSelectAs, SQLSum, SQLTableExpression } from "./SQLExpressions";
|
|
4
|
+
import { SQLJoin } from './SQLJoin';
|
|
5
|
+
import { Orderable } from "./SQLOrderBy";
|
|
6
|
+
import { Whereable } from "./SQLWhere";
|
|
7
|
+
|
|
8
|
+
class EmptyClass {}
|
|
9
|
+
|
|
10
|
+
export function parseTable(tableOrExpressiongOrNamespace: SQLExpression|string, table?: string): SQLExpression {
|
|
11
|
+
if (table !== undefined && typeof tableOrExpressiongOrNamespace === 'string') {
|
|
12
|
+
return new SQLTableExpression(tableOrExpressiongOrNamespace, table)
|
|
13
|
+
} else if (typeof tableOrExpressiongOrNamespace === 'string') {
|
|
14
|
+
return new SQLTableExpression(tableOrExpressiongOrNamespace)
|
|
15
|
+
} else {
|
|
16
|
+
return tableOrExpressiongOrNamespace;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
7
19
|
|
|
8
|
-
class
|
|
20
|
+
export class SQLSelect<T = SQLResultNamespacedRow> extends Whereable(Orderable(EmptyClass)) implements SQLExpression {
|
|
9
21
|
_columns: SQLExpression[]
|
|
10
22
|
_from: SQLExpression;
|
|
11
23
|
|
|
12
24
|
_limit: number|null = null;
|
|
13
25
|
_offset: number|null = null;
|
|
14
|
-
|
|
15
|
-
_where: SQLWhere|null = null;
|
|
16
|
-
_orderBy: SQLOrderBy|null = null;
|
|
17
26
|
_groupBy: SQLExpression[] = [];
|
|
18
27
|
_joins: (InstanceType<typeof SQLJoin>)[] = [];
|
|
19
28
|
|
|
20
|
-
|
|
21
|
-
|
|
29
|
+
_transformer: ((row: SQLResultNamespacedRow) => T)|null = null;
|
|
30
|
+
|
|
31
|
+
constructor(...columns: (SQLExpression|string)[])
|
|
32
|
+
constructor(transformer: ((row: SQLResultNamespacedRow) => T),...columns: (SQLExpression|string)[])
|
|
33
|
+
constructor(...columns: (SQLExpression|string|((row: SQLResultNamespacedRow) => T))[]) {
|
|
34
|
+
super();
|
|
35
|
+
|
|
36
|
+
if (typeof columns[0] === 'function') {
|
|
37
|
+
this._transformer = columns.shift() as any;
|
|
38
|
+
}
|
|
39
|
+
this._columns = columns.map(c => typeof c === 'string' ? new SQLColumnExpression(c) : c ) as any;
|
|
22
40
|
}
|
|
23
41
|
|
|
24
42
|
clone(): this {
|
|
@@ -27,8 +45,12 @@ class SelectBase implements SQLExpression {
|
|
|
27
45
|
return c as any;
|
|
28
46
|
}
|
|
29
47
|
|
|
30
|
-
from(table:
|
|
31
|
-
|
|
48
|
+
from(namespace: string, table: string): this
|
|
49
|
+
from(table: string): this
|
|
50
|
+
from(expression: SQLExpression): this
|
|
51
|
+
from(tableOrExpressiongOrNamespace: SQLExpression|string, table?: string): this {
|
|
52
|
+
this._from = parseTable(tableOrExpressiongOrNamespace, table);
|
|
53
|
+
|
|
32
54
|
return this;
|
|
33
55
|
}
|
|
34
56
|
|
|
@@ -98,10 +120,11 @@ class SelectBase implements SQLExpression {
|
|
|
98
120
|
return this;
|
|
99
121
|
}
|
|
100
122
|
|
|
101
|
-
async fetch(): Promise<
|
|
123
|
+
async fetch(): Promise<T[]> {
|
|
102
124
|
const {query, params} = normalizeSQLQuery(this.getSQL())
|
|
103
125
|
|
|
104
|
-
|
|
126
|
+
// when debugging: log all queries
|
|
127
|
+
//console.log(query, params);
|
|
105
128
|
const [rows] = await Database.select(query, params, {nestTables: true});
|
|
106
129
|
|
|
107
130
|
// Now map aggregated queries to the correct namespace
|
|
@@ -121,12 +144,16 @@ class SelectBase implements SQLExpression {
|
|
|
121
144
|
delete row[''];
|
|
122
145
|
}
|
|
123
146
|
}
|
|
124
|
-
|
|
147
|
+
|
|
148
|
+
if (this._transformer) {
|
|
149
|
+
return rows.map(this._transformer);
|
|
150
|
+
}
|
|
151
|
+
return rows as T[];
|
|
125
152
|
}
|
|
126
153
|
|
|
127
|
-
first(required: false): Promise<
|
|
128
|
-
first(required: true): Promise<
|
|
129
|
-
async first(required = true): Promise<
|
|
154
|
+
first(required: false): Promise<T|null>
|
|
155
|
+
first(required: true): Promise<T>
|
|
156
|
+
async first(required = true): Promise<T|null> {
|
|
130
157
|
const rows = await this.limit(1).fetch();
|
|
131
158
|
if (rows.length === 0) {
|
|
132
159
|
if (required) {
|
|
@@ -134,6 +161,7 @@ class SelectBase implements SQLExpression {
|
|
|
134
161
|
}
|
|
135
162
|
return null;
|
|
136
163
|
}
|
|
164
|
+
|
|
137
165
|
return rows[0]
|
|
138
166
|
}
|
|
139
167
|
|
|
@@ -199,8 +227,3 @@ class SelectBase implements SQLExpression {
|
|
|
199
227
|
return 0;
|
|
200
228
|
}
|
|
201
229
|
}
|
|
202
|
-
|
|
203
|
-
export const SQLSelect = addOrderByHelpers(
|
|
204
|
-
addWhereHelpers(SelectBase)
|
|
205
|
-
)
|
|
206
|
-
|
package/src/SQLWhere.ts
CHANGED
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
import { SQLExpression, SQLExpressionOptions, SQLQuery, joinSQLQuery, normalizeSQLQuery } from "./SQLExpression";
|
|
2
|
-
import { SQLArray, SQLDynamicExpression, SQLNull, readDynamicSQLExpression } from "./SQLExpressions";
|
|
2
|
+
import { SQLArray, SQLColumnExpression, SQLDynamicExpression, SQLNull, readDynamicSQLExpression } from "./SQLExpressions";
|
|
3
3
|
|
|
4
|
-
type
|
|
5
|
-
type Whereable = GConstructor<{ _where: SQLWhere|null }>;
|
|
4
|
+
type Constructor<T = {}> = new (...args: any[]) => T;
|
|
6
5
|
|
|
7
6
|
export type ParseWhereArguments = [
|
|
8
7
|
where: SQLWhere
|
|
9
8
|
] | [
|
|
10
|
-
whereOrColumn: SQLExpression,
|
|
9
|
+
whereOrColumn: SQLExpression|string,
|
|
11
10
|
sign: SQLWhereSign,
|
|
12
11
|
value: SQLDynamicExpression
|
|
13
12
|
] | [
|
|
14
|
-
whereOrColumn: SQLExpression,
|
|
13
|
+
whereOrColumn: SQLExpression|string,
|
|
15
14
|
value: SQLDynamicExpression
|
|
16
15
|
]
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
function assertWhereable(o: any): any {
|
|
18
|
+
return o;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function Whereable<Sup extends Constructor<{}>>(Base: Sup) {
|
|
19
22
|
return class extends Base {
|
|
23
|
+
_where: SQLWhere|null = null
|
|
24
|
+
|
|
20
25
|
parseWhere(...[whereOrColumn, signOrValue, value]: ParseWhereArguments): SQLWhere {
|
|
21
26
|
if (signOrValue === undefined) {
|
|
22
27
|
return whereOrColumn as SQLWhere;
|
|
@@ -24,63 +29,71 @@ export function addWhereHelpers<TBase extends Whereable>(Base: TBase) {
|
|
|
24
29
|
|
|
25
30
|
if (value !== undefined) {
|
|
26
31
|
return new SQLWhereEqual(
|
|
27
|
-
whereOrColumn,
|
|
32
|
+
typeof whereOrColumn === 'string' ? new SQLColumnExpression(whereOrColumn) : whereOrColumn,
|
|
28
33
|
signOrValue as SQLWhereSign,
|
|
29
34
|
readDynamicSQLExpression(value)
|
|
30
35
|
)
|
|
31
36
|
}
|
|
32
37
|
return new SQLWhereEqual(
|
|
33
|
-
whereOrColumn,
|
|
38
|
+
typeof whereOrColumn === 'string' ? new SQLColumnExpression(whereOrColumn) : whereOrColumn,
|
|
34
39
|
SQLWhereSign.Equal,
|
|
35
40
|
readDynamicSQLExpression(signOrValue)
|
|
36
41
|
)
|
|
37
42
|
}
|
|
38
43
|
|
|
44
|
+
|
|
39
45
|
where<T>(this: T, ...args: ParseWhereArguments): T {
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
const me = assertWhereable(this)
|
|
47
|
+
|
|
48
|
+
const w = me.parseWhere(...args);
|
|
49
|
+
if (!me._where) {
|
|
50
|
+
me._where = w;
|
|
51
|
+
return me;
|
|
44
52
|
}
|
|
45
|
-
|
|
46
|
-
return
|
|
53
|
+
me._where = me._where.and(w);
|
|
54
|
+
return me;
|
|
47
55
|
}
|
|
48
56
|
|
|
49
|
-
andWhere(...args: ParseWhereArguments) {
|
|
50
|
-
|
|
57
|
+
andWhere<T>(this: T, ...args: ParseWhereArguments): T {
|
|
58
|
+
const me = assertWhereable(this)
|
|
59
|
+
return me.where(...args)
|
|
51
60
|
}
|
|
52
61
|
|
|
53
|
-
orWhere(...args: ParseWhereArguments) {
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
62
|
+
orWhere<T>(this: T, ...args: ParseWhereArguments): T {
|
|
63
|
+
const me = assertWhereable(this)
|
|
64
|
+
const w = me.parseWhere(...args);
|
|
65
|
+
if (!me._where) {
|
|
66
|
+
me._where = w;
|
|
57
67
|
return this;
|
|
58
68
|
}
|
|
59
|
-
|
|
69
|
+
me._where = me._where.or(w);
|
|
60
70
|
return this;
|
|
61
71
|
}
|
|
62
72
|
|
|
63
|
-
whereNot(...args: ParseWhereArguments) {
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
73
|
+
whereNot<T>(this: T, ...args: ParseWhereArguments): T {
|
|
74
|
+
const me = assertWhereable(this)
|
|
75
|
+
const w = new SQLWhereNot(me.parseWhere(...args));
|
|
76
|
+
if (!me._where) {
|
|
77
|
+
me._where = w;
|
|
67
78
|
return this;
|
|
68
79
|
}
|
|
69
|
-
|
|
80
|
+
me._where = me._where.and(w);
|
|
70
81
|
return this;
|
|
71
82
|
}
|
|
72
83
|
|
|
73
|
-
andWhereNot(...args: ParseWhereArguments) {
|
|
74
|
-
|
|
84
|
+
andWhereNot<T>(this: T, ...args: ParseWhereArguments): T {
|
|
85
|
+
const me = assertWhereable(this)
|
|
86
|
+
return me.whereNot(...args)
|
|
75
87
|
}
|
|
76
88
|
|
|
77
|
-
orWhereNot(...args: ParseWhereArguments) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
89
|
+
orWhereNot<T>(this: T, ...args: ParseWhereArguments): T {
|
|
90
|
+
const me = assertWhereable(this)
|
|
91
|
+
const w = new SQLWhereNot(me.parseWhere(...args));
|
|
92
|
+
if (!me._where) {
|
|
93
|
+
me._where = w;
|
|
81
94
|
return this;
|
|
82
95
|
}
|
|
83
|
-
|
|
96
|
+
me._where = me._where.or(w);
|
|
84
97
|
return this;
|
|
85
98
|
}
|
|
86
99
|
}
|