@stamhoofd/sql 2.119.0 → 2.120.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/ModelCache.d.ts → ModelCache.d.ts} +1 -1
- package/dist/ModelCache.d.ts.map +1 -0
- package/{src/ModelCache.ts → dist/ModelCache.js} +8 -16
- package/dist/ModelCache.js.map +1 -0
- package/dist/{src/QueryableModel.d.ts → QueryableModel.d.ts} +7 -6
- package/dist/QueryableModel.d.ts.map +1 -0
- package/dist/{src/QueryableModel.js → QueryableModel.js} +9 -13
- package/dist/QueryableModel.js.map +1 -0
- package/dist/{src/SQL.d.ts → SQL.d.ts} +7 -5
- package/dist/SQL.d.ts.map +1 -0
- package/dist/SQL.js +100 -0
- package/dist/SQL.js.map +1 -0
- package/dist/{src/SQLDelete.d.ts → SQLDelete.d.ts} +2 -2
- package/dist/SQLDelete.d.ts.map +1 -0
- package/dist/{src/SQLDelete.js → SQLDelete.js} +8 -12
- package/dist/SQLDelete.js.map +1 -0
- package/dist/SQLExpression.d.ts.map +1 -0
- package/dist/{src/SQLExpression.js → SQLExpression.js} +3 -8
- package/dist/SQLExpression.js.map +1 -0
- package/dist/{src/SQLExpressions.d.ts → SQLExpressions.d.ts} +2 -2
- package/dist/SQLExpressions.d.ts.map +1 -0
- package/dist/{src/SQLExpressions.js → SQLExpressions.js} +78 -115
- package/dist/SQLExpressions.js.map +1 -0
- package/dist/{src/SQLInsert.d.ts → SQLInsert.d.ts} +3 -2
- package/dist/SQLInsert.d.ts.map +1 -0
- package/dist/{src/SQLInsert.js → SQLInsert.js} +17 -21
- package/dist/SQLInsert.js.map +1 -0
- package/dist/{src/SQLJoin.d.ts → SQLJoin.d.ts} +1 -1
- package/dist/SQLJoin.d.ts.map +1 -0
- package/{src/SQLJoin.ts → dist/SQLJoin.js} +15 -18
- package/dist/SQLJoin.js.map +1 -0
- package/dist/{src/SQLJsonExpressions.d.ts → SQLJsonExpressions.d.ts} +2 -2
- package/dist/SQLJsonExpressions.d.ts.map +1 -0
- package/dist/{src/SQLJsonExpressions.js → SQLJsonExpressions.js} +31 -44
- package/dist/SQLJsonExpressions.js.map +1 -0
- package/dist/SQLLogger.d.ts.map +1 -0
- package/dist/{src/SQLLogger.js → SQLLogger.js} +5 -8
- package/dist/SQLLogger.js.map +1 -0
- package/dist/{src/SQLOrderBy.d.ts → SQLOrderBy.d.ts} +1 -1
- package/dist/SQLOrderBy.d.ts.map +1 -0
- package/dist/{src/SQLOrderBy.js → SQLOrderBy.js} +8 -13
- package/dist/SQLOrderBy.js.map +1 -0
- package/dist/{src/SQLSelect.d.ts → SQLSelect.d.ts} +3 -3
- package/dist/SQLSelect.d.ts.map +1 -0
- package/dist/{src/SQLSelect.js → SQLSelect.js} +24 -29
- package/dist/SQLSelect.js.map +1 -0
- package/dist/{src/SQLTranslatedStringHelper.d.ts → SQLTranslatedStringHelper.d.ts} +3 -2
- package/dist/SQLTranslatedStringHelper.d.ts.map +1 -0
- package/dist/SQLTranslatedStringHelper.js +33 -0
- package/dist/SQLTranslatedStringHelper.js.map +1 -0
- package/dist/{src/SQLUpdate.d.ts → SQLUpdate.d.ts} +3 -2
- package/dist/SQLUpdate.d.ts.map +1 -0
- package/{src/SQLUpdate.ts → dist/SQLUpdate.js} +18 -35
- package/dist/SQLUpdate.js.map +1 -0
- package/dist/{src/SQLWhere.d.ts → SQLWhere.d.ts} +3 -3
- package/dist/SQLWhere.d.ts.map +1 -0
- package/dist/{src/SQLWhere.js → SQLWhere.js} +42 -56
- package/dist/SQLWhere.js.map +1 -0
- package/dist/{src/filters → filters}/SQLFilter.d.ts +5 -5
- package/dist/filters/SQLFilter.d.ts.map +1 -0
- package/{src/filters/SQLFilter.ts → dist/filters/SQLFilter.js} +55 -121
- package/dist/filters/SQLFilter.js.map +1 -0
- package/dist/{src/filters → filters}/SQLSorter.d.ts +6 -6
- package/dist/filters/SQLSorter.d.ts.map +1 -0
- package/dist/{src/filters → filters}/SQLSorter.js +4 -7
- package/dist/filters/SQLSorter.js.map +1 -0
- package/dist/filters/compilers/contains.d.ts +4 -0
- package/dist/filters/compilers/contains.d.ts.map +1 -0
- package/{src/filters/compilers/contains.ts → dist/filters/compilers/contains.js} +7 -25
- package/dist/filters/compilers/contains.js.map +1 -0
- package/dist/filters/compilers/equals.d.ts +4 -0
- package/dist/filters/compilers/equals.d.ts.map +1 -0
- package/dist/filters/compilers/equals.js +44 -0
- package/dist/filters/compilers/equals.js.map +1 -0
- package/dist/filters/compilers/greater.d.ts +4 -0
- package/dist/filters/compilers/greater.d.ts.map +1 -0
- package/dist/filters/compilers/greater.js +15 -0
- package/dist/filters/compilers/greater.js.map +1 -0
- package/dist/filters/compilers/in.d.ts +4 -0
- package/dist/filters/compilers/in.d.ts.map +1 -0
- package/{src/filters/compilers/in.ts → dist/filters/compilers/in.js} +7 -21
- package/dist/filters/compilers/in.js.map +1 -0
- package/dist/filters/compilers/index.d.ts.map +1 -0
- package/{src/filters/compilers/index.ts → dist/filters/compilers/index.js} +1 -0
- package/dist/filters/compilers/index.js.map +1 -0
- package/dist/filters/compilers/less.d.ts +4 -0
- package/dist/filters/compilers/less.d.ts.map +1 -0
- package/dist/filters/compilers/less.js +15 -0
- package/dist/filters/compilers/less.js.map +1 -0
- package/dist/filters/helpers/isJSONColumn.d.ts +5 -0
- package/dist/filters/helpers/isJSONColumn.d.ts.map +1 -0
- package/{src/filters/helpers/isJSONColumn.ts → dist/filters/helpers/isJSONColumn.js} +4 -5
- package/dist/filters/helpers/isJSONColumn.js.map +1 -0
- package/dist/{src/filters → filters}/helpers/normalizeCompareValue.d.ts +1 -1
- package/dist/filters/helpers/normalizeCompareValue.d.ts.map +1 -0
- package/{src/filters/helpers/normalizeCompareValue.ts → dist/filters/helpers/normalizeCompareValue.js} +2 -20
- package/dist/filters/helpers/normalizeCompareValue.js.map +1 -0
- package/dist/index.d.ts +14 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -25
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/dist/src/ModelCache.d.ts.map +0 -1
- package/dist/src/ModelCache.js +0 -57
- package/dist/src/ModelCache.js.map +0 -1
- package/dist/src/QueryableModel.d.ts.map +0 -1
- package/dist/src/QueryableModel.js.map +0 -1
- package/dist/src/SQL.d.ts.map +0 -1
- package/dist/src/SQL.js +0 -103
- package/dist/src/SQL.js.map +0 -1
- package/dist/src/SQLDelete.d.ts.map +0 -1
- package/dist/src/SQLDelete.js.map +0 -1
- package/dist/src/SQLExpression.d.ts.map +0 -1
- package/dist/src/SQLExpression.js.map +0 -1
- package/dist/src/SQLExpressions.d.ts.map +0 -1
- package/dist/src/SQLExpressions.js.map +0 -1
- package/dist/src/SQLInsert.d.ts.map +0 -1
- package/dist/src/SQLInsert.js.map +0 -1
- package/dist/src/SQLJoin.d.ts.map +0 -1
- package/dist/src/SQLJoin.js +0 -61
- package/dist/src/SQLJoin.js.map +0 -1
- package/dist/src/SQLJsonExpressions.d.ts.map +0 -1
- package/dist/src/SQLJsonExpressions.js.map +0 -1
- package/dist/src/SQLLogger.d.ts.map +0 -1
- package/dist/src/SQLLogger.js.map +0 -1
- package/dist/src/SQLOrderBy.d.ts.map +0 -1
- package/dist/src/SQLOrderBy.js.map +0 -1
- package/dist/src/SQLSelect.d.ts.map +0 -1
- package/dist/src/SQLSelect.js.map +0 -1
- package/dist/src/SQLTranslatedStringHelper.d.ts.map +0 -1
- package/dist/src/SQLTranslatedStringHelper.js +0 -37
- package/dist/src/SQLTranslatedStringHelper.js.map +0 -1
- package/dist/src/SQLUpdate.d.ts.map +0 -1
- package/dist/src/SQLUpdate.js +0 -60
- package/dist/src/SQLUpdate.js.map +0 -1
- package/dist/src/SQLWhere.d.ts.map +0 -1
- package/dist/src/SQLWhere.js.map +0 -1
- package/dist/src/filters/SQLFilter.d.ts.map +0 -1
- package/dist/src/filters/SQLFilter.js +0 -220
- package/dist/src/filters/SQLFilter.js.map +0 -1
- package/dist/src/filters/SQLSorter.d.ts.map +0 -1
- package/dist/src/filters/SQLSorter.js.map +0 -1
- package/dist/src/filters/compilers/contains.d.ts +0 -4
- package/dist/src/filters/compilers/contains.d.ts.map +0 -1
- package/dist/src/filters/compilers/contains.js +0 -29
- package/dist/src/filters/compilers/contains.js.map +0 -1
- package/dist/src/filters/compilers/equals.d.ts +0 -4
- package/dist/src/filters/compilers/equals.d.ts.map +0 -1
- package/dist/src/filters/compilers/equals.js +0 -47
- package/dist/src/filters/compilers/equals.js.map +0 -1
- package/dist/src/filters/compilers/greater.d.ts +0 -4
- package/dist/src/filters/compilers/greater.d.ts.map +0 -1
- package/dist/src/filters/compilers/greater.js +0 -18
- package/dist/src/filters/compilers/greater.js.map +0 -1
- package/dist/src/filters/compilers/in.d.ts +0 -4
- package/dist/src/filters/compilers/in.d.ts.map +0 -1
- package/dist/src/filters/compilers/in.js +0 -51
- package/dist/src/filters/compilers/in.js.map +0 -1
- package/dist/src/filters/compilers/index.d.ts.map +0 -1
- package/dist/src/filters/compilers/index.js +0 -8
- package/dist/src/filters/compilers/index.js.map +0 -1
- package/dist/src/filters/compilers/less.d.ts +0 -4
- package/dist/src/filters/compilers/less.d.ts.map +0 -1
- package/dist/src/filters/compilers/less.js +0 -18
- package/dist/src/filters/compilers/less.js.map +0 -1
- package/dist/src/filters/helpers/isJSONColumn.d.ts +0 -4
- package/dist/src/filters/helpers/isJSONColumn.d.ts.map +0 -1
- package/dist/src/filters/helpers/isJSONColumn.js +0 -17
- package/dist/src/filters/helpers/isJSONColumn.js.map +0 -1
- package/dist/src/filters/helpers/normalizeCompareValue.d.ts.map +0 -1
- package/dist/src/filters/helpers/normalizeCompareValue.js +0 -87
- package/dist/src/filters/helpers/normalizeCompareValue.js.map +0 -1
- package/dist/tests/filters/$and.test.d.ts +0 -2
- package/dist/tests/filters/$and.test.d.ts.map +0 -1
- package/dist/tests/filters/$and.test.js +0 -216
- package/dist/tests/filters/$and.test.js.map +0 -1
- package/dist/tests/filters/$contains.test.d.ts +0 -2
- package/dist/tests/filters/$contains.test.d.ts.map +0 -1
- package/dist/tests/filters/$contains.test.js +0 -917
- package/dist/tests/filters/$contains.test.js.map +0 -1
- package/dist/tests/filters/$eq.test.d.ts +0 -2
- package/dist/tests/filters/$eq.test.d.ts.map +0 -1
- package/dist/tests/filters/$eq.test.js +0 -1464
- package/dist/tests/filters/$eq.test.js.map +0 -1
- package/dist/tests/filters/$gt.test.d.ts +0 -2
- package/dist/tests/filters/$gt.test.d.ts.map +0 -1
- package/dist/tests/filters/$gt.test.js +0 -641
- package/dist/tests/filters/$gt.test.js.map +0 -1
- package/dist/tests/filters/$gte.test.d.ts +0 -2
- package/dist/tests/filters/$gte.test.d.ts.map +0 -1
- package/dist/tests/filters/$gte.test.js +0 -433
- package/dist/tests/filters/$gte.test.js.map +0 -1
- package/dist/tests/filters/$in.test.d.ts +0 -2
- package/dist/tests/filters/$in.test.d.ts.map +0 -1
- package/dist/tests/filters/$in.test.js +0 -773
- package/dist/tests/filters/$in.test.js.map +0 -1
- package/dist/tests/filters/$lt.test.d.ts +0 -2
- package/dist/tests/filters/$lt.test.d.ts.map +0 -1
- package/dist/tests/filters/$lt.test.js +0 -433
- package/dist/tests/filters/$lt.test.js.map +0 -1
- package/dist/tests/filters/$lte.test.d.ts +0 -2
- package/dist/tests/filters/$lte.test.d.ts.map +0 -1
- package/dist/tests/filters/$lte.test.js +0 -472
- package/dist/tests/filters/$lte.test.js.map +0 -1
- package/dist/tests/filters/$neq.test.d.ts +0 -2
- package/dist/tests/filters/$neq.test.d.ts.map +0 -1
- package/dist/tests/filters/$neq.test.js +0 -32
- package/dist/tests/filters/$neq.test.js.map +0 -1
- package/dist/tests/filters/$not.test.d.ts +0 -2
- package/dist/tests/filters/$not.test.d.ts.map +0 -1
- package/dist/tests/filters/$not.test.js +0 -50
- package/dist/tests/filters/$not.test.js.map +0 -1
- package/dist/tests/filters/$or.test.d.ts +0 -2
- package/dist/tests/filters/$or.test.d.ts.map +0 -1
- package/dist/tests/filters/$or.test.js +0 -185
- package/dist/tests/filters/$or.test.js.map +0 -1
- package/dist/tests/filters/SQLTranslatedStringHelper.test.d.ts +0 -2
- package/dist/tests/filters/SQLTranslatedStringHelper.test.d.ts.map +0 -1
- package/dist/tests/filters/SQLTranslatedStringHelper.test.js +0 -491
- package/dist/tests/filters/SQLTranslatedStringHelper.test.js.map +0 -1
- package/dist/tests/filters/dot-syntax.test.d.ts +0 -2
- package/dist/tests/filters/dot-syntax.test.d.ts.map +0 -1
- package/dist/tests/filters/dot-syntax.test.js +0 -210
- package/dist/tests/filters/dot-syntax.test.js.map +0 -1
- package/dist/tests/filters/exists.test.d.ts +0 -2
- package/dist/tests/filters/exists.test.d.ts.map +0 -1
- package/dist/tests/filters/exists.test.js +0 -96
- package/dist/tests/filters/exists.test.js.map +0 -1
- package/dist/tests/filters/joined-relations.test.d.ts +0 -2
- package/dist/tests/filters/joined-relations.test.d.ts.map +0 -1
- package/dist/tests/filters/joined-relations.test.js +0 -167
- package/dist/tests/filters/joined-relations.test.js.map +0 -1
- package/dist/tests/filters/special-cases.test.d.ts +0 -2
- package/dist/tests/filters/special-cases.test.d.ts.map +0 -1
- package/dist/tests/filters/special-cases.test.js +0 -114
- package/dist/tests/filters/special-cases.test.js.map +0 -1
- package/dist/tests/filters/wildcard.test.d.ts +0 -2
- package/dist/tests/filters/wildcard.test.d.ts.map +0 -1
- package/dist/tests/filters/wildcard.test.js +0 -67
- package/dist/tests/filters/wildcard.test.js.map +0 -1
- package/dist/tests/jest.global.setup.d.ts +0 -3
- package/dist/tests/jest.global.setup.d.ts.map +0 -1
- package/dist/tests/jest.global.setup.js +0 -7
- package/dist/tests/jest.global.setup.js.map +0 -1
- package/dist/tests/jest.setup.d.ts +0 -2
- package/dist/tests/jest.setup.d.ts.map +0 -1
- package/dist/tests/jest.setup.js +0 -5
- package/dist/tests/jest.setup.js.map +0 -1
- package/dist/tests/utils/index.d.ts +0 -57
- package/dist/tests/utils/index.d.ts.map +0 -1
- package/dist/tests/utils/index.js +0 -206
- package/dist/tests/utils/index.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/QueryableModel.ts +0 -134
- package/src/SQL.ts +0 -128
- package/src/SQLDelete.ts +0 -73
- package/src/SQLExpression.ts +0 -34
- package/src/SQLExpressions.ts +0 -587
- package/src/SQLInsert.ts +0 -113
- package/src/SQLJsonExpressions.ts +0 -283
- package/src/SQLLogger.ts +0 -82
- package/src/SQLOrderBy.ts +0 -69
- package/src/SQLSelect.ts +0 -520
- package/src/SQLTranslatedStringHelper.ts +0 -40
- package/src/SQLWhere.ts +0 -744
- package/src/filters/SQLSorter.ts +0 -60
- package/src/filters/compilers/equals.ts +0 -73
- package/src/filters/compilers/greater.ts +0 -21
- package/src/filters/compilers/less.ts +0 -20
- /package/dist/{src/SQLExpression.d.ts → SQLExpression.d.ts} +0 -0
- /package/dist/{src/SQLLogger.d.ts → SQLLogger.d.ts} +0 -0
- /package/dist/{src/filters → filters}/compilers/index.d.ts +0 -0
|
@@ -1,80 +1,40 @@
|
|
|
1
1
|
import { SimpleError } from '@simonbackx/simple-errors';
|
|
2
|
-
import { compileFilter,
|
|
3
|
-
import { SQLExpression, SQLExpressionOptions, SQLQuery } from '../SQLExpression.js';
|
|
2
|
+
import { compileFilter, filterDefinitionsToCompiler } from '@stamhoofd/structures';
|
|
4
3
|
import { SQLSafeValue } from '../SQLExpressions.js';
|
|
5
|
-
import { SQLJoin } from '../SQLJoin.js';
|
|
6
4
|
import { SQLJsonValue } from '../SQLJsonExpressions.js';
|
|
7
|
-
import {
|
|
8
|
-
import { SQLWhere, SQLWhereAnd, SQLWhereExists, SQLWhereJoin, SQLWhereNot, SQLWhereOr } from '../SQLWhere.js';
|
|
5
|
+
import { SQLWhereAnd, SQLWhereExists, SQLWhereJoin, SQLWhereNot, SQLWhereOr } from '../SQLWhere.js';
|
|
9
6
|
import { $containsSQLFilterCompiler } from './compilers/contains.js';
|
|
10
7
|
import { $equalsSQLFilterCompiler, $greaterThanSQLFilterCompiler, $inSQLFilterCompiler, $lessThanSQLFilterCompiler } from './compilers/index.js';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export type SQLFilterRunner = (column: SQLCurrentColumn) => Promise<SQLWhere> | SQLWhere;
|
|
14
|
-
export type SQLFilterCompiler = FilterCompiler<SQLFilterRunner>;
|
|
15
|
-
export type SQLRequiredFilterCompiler = RequiredFilterCompiler<SQLFilterRunner>;
|
|
16
|
-
export type SQLFilterDefinitions = FilterDefinitions<SQLFilterRunner>;
|
|
17
|
-
|
|
18
|
-
export enum SQLValueType {
|
|
8
|
+
export var SQLValueType;
|
|
9
|
+
(function (SQLValueType) {
|
|
19
10
|
/** At the root of a select */
|
|
20
|
-
Table =
|
|
21
|
-
|
|
11
|
+
SQLValueType["Table"] = "Table";
|
|
22
12
|
/** Column with type string */
|
|
23
|
-
String =
|
|
24
|
-
|
|
13
|
+
SQLValueType["String"] = "String";
|
|
25
14
|
/** MySQL Datetime */
|
|
26
|
-
Datetime =
|
|
27
|
-
|
|
15
|
+
SQLValueType["Datetime"] = "Datetime";
|
|
28
16
|
/** Column with type number */
|
|
29
|
-
Number =
|
|
30
|
-
|
|
17
|
+
SQLValueType["Number"] = "Number";
|
|
31
18
|
/** Column with type boolean, meaning 1 or 0 */
|
|
32
|
-
Boolean =
|
|
33
|
-
|
|
19
|
+
SQLValueType["Boolean"] = "Boolean";
|
|
34
20
|
/** True or false in JSON */
|
|
35
|
-
JSONBoolean =
|
|
36
|
-
JSONString =
|
|
37
|
-
JSONNumber =
|
|
38
|
-
|
|
21
|
+
SQLValueType["JSONBoolean"] = "JSONBoolean";
|
|
22
|
+
SQLValueType["JSONString"] = "JSONString";
|
|
23
|
+
SQLValueType["JSONNumber"] = "JSONNumber";
|
|
39
24
|
/**
|
|
40
25
|
* Either boolean, string, number or null (if nullable). Only use this if you cannot determine the type at compile time.
|
|
41
26
|
*/
|
|
42
|
-
JSONScalar =
|
|
43
|
-
|
|
27
|
+
SQLValueType["JSONScalar"] = "JSONScalar";
|
|
44
28
|
/** [...] */
|
|
45
|
-
JSONArray =
|
|
46
|
-
|
|
29
|
+
SQLValueType["JSONArray"] = "JSONArray";
|
|
47
30
|
/** {...} */
|
|
48
|
-
JSONObject =
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
expression: SQLExpression;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* MySQL nullable. Please fill this in correctly! If a value can be null, can not exist (=mysql null), or can be JSONNull, set this to true.
|
|
56
|
-
*
|
|
57
|
-
* Mainly > and < operators will make sure the behaviour is consistent with MySQL sorting (normally comparing with null will always return false in MySQL)
|
|
58
|
-
*/
|
|
59
|
-
nullable?: boolean;
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* JSON nullable
|
|
63
|
-
*/
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Type of this column, use to normalize values received from filters
|
|
67
|
-
*/
|
|
68
|
-
type: SQLValueType;
|
|
69
|
-
checkPermission?: (filter: StamhoofdFilter) => Promise<void>;
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
export function createColumnFilter(column: SQLCurrentColumn, childDefinitions?: SQLFilterDefinitions): SQLFilterCompiler {
|
|
73
|
-
return (filter: StamhoofdFilter) => {
|
|
31
|
+
SQLValueType["JSONObject"] = "JSONObject";
|
|
32
|
+
})(SQLValueType || (SQLValueType = {}));
|
|
33
|
+
export function createColumnFilter(column, childDefinitions) {
|
|
34
|
+
return (filter) => {
|
|
74
35
|
const compiler = childDefinitions ? filterDefinitionsToCompiler(childDefinitions) : filterDefinitionsToCompiler(baseSQLFilterCompilers);
|
|
75
36
|
const runner = $andSQLFilterCompiler(filter, compiler);
|
|
76
|
-
|
|
77
|
-
return async (_: SQLCurrentColumn) => {
|
|
37
|
+
return async (_) => {
|
|
78
38
|
if (column.checkPermission) {
|
|
79
39
|
await column.checkPermission(filter);
|
|
80
40
|
}
|
|
@@ -85,13 +45,11 @@ export function createColumnFilter(column: SQLCurrentColumn, childDefinitions?:
|
|
|
85
45
|
};
|
|
86
46
|
};
|
|
87
47
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
const wildcardCompiler = (filter: StamhoofdFilter, _, key: string) => {
|
|
48
|
+
export function createWildcardColumnFilter(getColumn, childDefinitions, options) {
|
|
49
|
+
const wildcardCompiler = (filter, _, key) => {
|
|
91
50
|
const compiler = childDefinitions ? filterDefinitionsToCompiler(childDefinitions(key)) : filterDefinitionsToCompiler(baseSQLFilterCompilers);
|
|
92
51
|
const runner = $andSQLFilterCompiler(filter, compiler);
|
|
93
|
-
|
|
94
|
-
return async (_: SQLCurrentColumn) => {
|
|
52
|
+
return async (_) => {
|
|
95
53
|
if (options?.checkPermission) {
|
|
96
54
|
await options.checkPermission(key);
|
|
97
55
|
}
|
|
@@ -105,24 +63,20 @@ export function createWildcardColumnFilter(getColumn: (key: string) => SQLCurren
|
|
|
105
63
|
});
|
|
106
64
|
};
|
|
107
65
|
};
|
|
108
|
-
|
|
109
|
-
return (filter: StamhoofdFilter) => {
|
|
66
|
+
return (filter) => {
|
|
110
67
|
return $andSQLFilterCompiler(filter, wildcardCompiler);
|
|
111
68
|
};
|
|
112
69
|
}
|
|
113
|
-
|
|
114
70
|
/**
|
|
115
71
|
* Filter with a subquery that should return at least one result.
|
|
116
72
|
*/
|
|
117
|
-
export function createExistsFilter(baseSelect
|
|
118
|
-
return (filter
|
|
73
|
+
export function createExistsFilter(baseSelect, definitions) {
|
|
74
|
+
return (filter, _) => {
|
|
119
75
|
if (filter !== null && typeof filter === 'object' && '$elemMatch' in filter) {
|
|
120
|
-
filter = filter['$elemMatch']
|
|
76
|
+
filter = filter['$elemMatch'];
|
|
121
77
|
}
|
|
122
|
-
|
|
123
78
|
const runner = compileToSQLRunner(filter, definitions);
|
|
124
|
-
|
|
125
|
-
return async (_: SQLCurrentColumn) => {
|
|
79
|
+
return async (_) => {
|
|
126
80
|
const w = await runner({
|
|
127
81
|
expression: SQLRootExpression,
|
|
128
82
|
type: SQLValueType.Table,
|
|
@@ -135,19 +89,17 @@ export function createExistsFilter(baseSelect: InstanceType<typeof SQLSelect> &
|
|
|
135
89
|
};
|
|
136
90
|
};
|
|
137
91
|
}
|
|
138
|
-
|
|
139
92
|
/**
|
|
140
93
|
* WARNING: only use this on one-to-one relations. Using it on one-to-many relations will result in duplicate results.
|
|
141
94
|
*
|
|
142
95
|
* By default doesRelationAlwaysExist is set to true, this means we expect the relation to always exist. This helps optimize the query (dropping the join if the where clause in the join is always true)
|
|
143
96
|
*/
|
|
144
|
-
export function createJoinedRelationFilter(join
|
|
145
|
-
return (filter
|
|
97
|
+
export function createJoinedRelationFilter(join, definitions, options = { doesRelationAlwaysExist: true }) {
|
|
98
|
+
return (filter, _) => {
|
|
146
99
|
if (filter !== null && typeof filter === 'object' && '$elemMatch' in filter) {
|
|
147
|
-
filter = filter['$elemMatch']
|
|
100
|
+
filter = filter['$elemMatch'];
|
|
148
101
|
}
|
|
149
|
-
|
|
150
|
-
return async (_: SQLCurrentColumn) => {
|
|
102
|
+
return async (_) => {
|
|
151
103
|
const w = await compileToSQLFilter(filter, definitions);
|
|
152
104
|
return new SQLWhereJoin(join, w, {
|
|
153
105
|
doesRelationAlwaysExist: options.doesRelationAlwaysExist,
|
|
@@ -155,77 +107,61 @@ export function createJoinedRelationFilter(join: SQLJoin, definitions: SQLFilter
|
|
|
155
107
|
};
|
|
156
108
|
};
|
|
157
109
|
}
|
|
158
|
-
|
|
159
|
-
export function $andSQLFilterCompiler(filter: StamhoofdFilter, filters: SQLFilterCompiler): SQLFilterRunner {
|
|
110
|
+
export function $andSQLFilterCompiler(filter, filters) {
|
|
160
111
|
const runners = compileSQLFilter(filter, filters);
|
|
161
|
-
|
|
162
|
-
return async (column: SQLCurrentColumn) => {
|
|
112
|
+
return async (column) => {
|
|
163
113
|
const wheres = (await Promise.all(
|
|
164
|
-
|
|
165
|
-
));
|
|
166
|
-
|
|
114
|
+
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
115
|
+
runners.map(runner => (runner(column)))));
|
|
167
116
|
return new SQLWhereAnd(wheres);
|
|
168
117
|
};
|
|
169
118
|
}
|
|
170
|
-
|
|
171
|
-
export function $orSQLFilterCompiler(filter: StamhoofdFilter, filters: SQLFilterCompiler): SQLFilterRunner {
|
|
119
|
+
export function $orSQLFilterCompiler(filter, filters) {
|
|
172
120
|
const runners = compileSQLFilter(filter, filters);
|
|
173
|
-
|
|
174
|
-
return async (column: SQLCurrentColumn) => {
|
|
121
|
+
return async (column) => {
|
|
175
122
|
const wheres = (await Promise.all(
|
|
176
|
-
|
|
177
|
-
));
|
|
178
|
-
|
|
123
|
+
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
124
|
+
runners.map(runner => (runner(column)))));
|
|
179
125
|
return new SQLWhereOr(wheres);
|
|
180
126
|
};
|
|
181
127
|
}
|
|
182
|
-
|
|
183
|
-
export function $notSQLFilterCompiler(filter: StamhoofdFilter, filters: SQLFilterCompiler): SQLFilterRunner {
|
|
128
|
+
export function $notSQLFilterCompiler(filter, filters) {
|
|
184
129
|
const andRunner = $andSQLFilterCompiler(filter, filters);
|
|
185
|
-
|
|
186
|
-
return async (column: SQLCurrentColumn) => {
|
|
130
|
+
return async (column) => {
|
|
187
131
|
return new SQLWhereNot(await andRunner(column));
|
|
188
132
|
};
|
|
189
133
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
return (filter: StamhoofdFilter, parentCompiler: SQLFilterCompiler) => {
|
|
134
|
+
function invertFilterCompiler(compiler) {
|
|
135
|
+
return (filter, parentCompiler) => {
|
|
193
136
|
const runner = compiler(filter, parentCompiler);
|
|
194
137
|
return async (column) => {
|
|
195
138
|
return new SQLWhereNot(await runner(column));
|
|
196
139
|
};
|
|
197
140
|
};
|
|
198
141
|
}
|
|
199
|
-
|
|
200
|
-
export const baseSQLFilterCompilers: SQLFilterDefinitions = {
|
|
142
|
+
export const baseSQLFilterCompilers = {
|
|
201
143
|
$and: $andSQLFilterCompiler,
|
|
202
144
|
$or: $orSQLFilterCompiler,
|
|
203
145
|
$not: $notSQLFilterCompiler,
|
|
204
146
|
$eq: $equalsSQLFilterCompiler,
|
|
205
147
|
$neq: invertFilterCompiler($equalsSQLFilterCompiler),
|
|
206
|
-
|
|
207
148
|
$lt: $lessThanSQLFilterCompiler,
|
|
208
149
|
$gt: $greaterThanSQLFilterCompiler,
|
|
209
150
|
$lte: invertFilterCompiler($greaterThanSQLFilterCompiler),
|
|
210
151
|
$gte: invertFilterCompiler($lessThanSQLFilterCompiler),
|
|
211
|
-
|
|
212
152
|
$in: $inSQLFilterCompiler,
|
|
213
|
-
|
|
214
153
|
$contains: $containsSQLFilterCompiler,
|
|
215
154
|
};
|
|
216
|
-
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
export const SQLRootExpression: SQLExpression = {
|
|
220
|
-
getSQL(options?: SQLExpressionOptions): SQLQuery {
|
|
155
|
+
const compileSQLFilter = (compileFilter);
|
|
156
|
+
export const SQLRootExpression = {
|
|
157
|
+
getSQL(options) {
|
|
221
158
|
throw new SimpleError({
|
|
222
159
|
code: 'invalid_filter',
|
|
223
160
|
message: 'Root level filters are not allowed to use $eq or $neq',
|
|
224
161
|
});
|
|
225
162
|
},
|
|
226
163
|
};
|
|
227
|
-
|
|
228
|
-
export function compileToSQLRunner(filter: StamhoofdFilter, definitions: SQLFilterDefinitions): SQLFilterRunner {
|
|
164
|
+
export function compileToSQLRunner(filter, definitions) {
|
|
229
165
|
if (filter === null) {
|
|
230
166
|
return () => {
|
|
231
167
|
return new SQLWhereAnd([]); // No filter, return empty where
|
|
@@ -234,21 +170,21 @@ export function compileToSQLRunner(filter: StamhoofdFilter, definitions: SQLFilt
|
|
|
234
170
|
const compiler = filterDefinitionsToCompiler(definitions); // this compiler searches in the definition for the right compiler for the given key
|
|
235
171
|
const runner = $andSQLFilterCompiler(filter, compiler);
|
|
236
172
|
return runner;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
export async function compileToSQLFilter(filter
|
|
173
|
+
}
|
|
174
|
+
;
|
|
175
|
+
export async function compileToSQLFilter(filter, filters) {
|
|
240
176
|
const runner = compileToSQLRunner(filter, filters);
|
|
241
177
|
return await runner({
|
|
242
178
|
expression: SQLRootExpression,
|
|
243
179
|
type: SQLValueType.Table,
|
|
244
180
|
nullable: false,
|
|
245
181
|
});
|
|
246
|
-
}
|
|
247
|
-
|
|
182
|
+
}
|
|
183
|
+
;
|
|
248
184
|
/**
|
|
249
185
|
* Casts json strings, numbers and booleans to native MySQL types. This includes json null to mysql null.
|
|
250
186
|
*/
|
|
251
|
-
export function normalizeColumn(column
|
|
187
|
+
export function normalizeColumn(column, hint) {
|
|
252
188
|
if (column.type === SQLValueType.JSONString || (column.type === SQLValueType.JSONScalar && typeof hint === 'string')) {
|
|
253
189
|
return {
|
|
254
190
|
expression: new SQLJsonValue(column.expression, 'CHAR'),
|
|
@@ -256,7 +192,6 @@ export function normalizeColumn(column: SQLCurrentColumn, hint?: StamhoofdCompar
|
|
|
256
192
|
nullable: column.nullable,
|
|
257
193
|
};
|
|
258
194
|
}
|
|
259
|
-
|
|
260
195
|
if (column.type === SQLValueType.JSONNumber || (column.type === SQLValueType.JSONScalar && typeof hint === 'number')) {
|
|
261
196
|
return {
|
|
262
197
|
expression: new SQLJsonValue(column.expression, 'SIGNED'),
|
|
@@ -264,7 +199,6 @@ export function normalizeColumn(column: SQLCurrentColumn, hint?: StamhoofdCompar
|
|
|
264
199
|
nullable: column.nullable,
|
|
265
200
|
};
|
|
266
201
|
}
|
|
267
|
-
|
|
268
202
|
if (column.type === SQLValueType.JSONBoolean || (column.type === SQLValueType.JSONScalar && typeof hint === 'boolean')) {
|
|
269
203
|
return {
|
|
270
204
|
expression: new SQLJsonValue(column.expression, 'UNSIGNED'),
|
|
@@ -272,6 +206,6 @@ export function normalizeColumn(column: SQLCurrentColumn, hint?: StamhoofdCompar
|
|
|
272
206
|
nullable: column.nullable,
|
|
273
207
|
};
|
|
274
208
|
}
|
|
275
|
-
|
|
276
209
|
return column;
|
|
277
210
|
}
|
|
211
|
+
//# sourceMappingURL=SQLFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQLFilter.js","sourceRoot":"","sources":["../../src/filters/SQLFilter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { PlainObject } from '@simonbackx/simple-encoding';
|
|
2
|
-
import { SortDefinition, SortList } from '@stamhoofd/structures';
|
|
3
|
-
import { SQLExpression } from '../SQLExpression.js';
|
|
4
|
-
import { SQLJoin } from '../SQLJoin.js';
|
|
5
|
-
import { SQLOrderBy, SQLOrderByDirection } from '../SQLOrderBy.js';
|
|
6
|
-
import { SQLSelect } from '../SQLSelect.js';
|
|
1
|
+
import type { PlainObject } from '@simonbackx/simple-encoding';
|
|
2
|
+
import type { SortDefinition, SortList } from '@stamhoofd/structures';
|
|
3
|
+
import type { SQLExpression } from '../SQLExpression.js';
|
|
4
|
+
import type { SQLJoin } from '../SQLJoin.js';
|
|
5
|
+
import type { SQLOrderBy, SQLOrderByDirection } from '../SQLOrderBy.js';
|
|
6
|
+
import type { SQLSelect } from '../SQLSelect.js';
|
|
7
7
|
export type SQLSortDefinition<T, B extends PlainObject | Date = PlainObject | Date> = SortDefinition<T, B> & {
|
|
8
8
|
toSQL(direction: SQLOrderByDirection): SQLOrderBy;
|
|
9
9
|
join?: SQLJoin;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQLSorter.d.ts","sourceRoot":"","sources":["../../src/filters/SQLSorter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IACzG,KAAK,CAAC,SAAS,EAAE,mBAAmB,GAAG,UAAU,CAAC;IAClD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/E,wBAAgB,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,QA0C5G"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.applySQLSorter = applySQLSorter;
|
|
4
|
-
const simple_errors_1 = require("@simonbackx/simple-errors");
|
|
5
|
-
function applySQLSorter(selectQuery, sortBy, definitions) {
|
|
1
|
+
import { SimpleError } from '@simonbackx/simple-errors';
|
|
2
|
+
export function applySQLSorter(selectQuery, sortBy, definitions) {
|
|
6
3
|
if (sortBy.length === 0) {
|
|
7
|
-
throw new
|
|
4
|
+
throw new SimpleError({
|
|
8
5
|
code: 'empty_sort',
|
|
9
6
|
message: 'No sort passed',
|
|
10
7
|
});
|
|
@@ -24,7 +21,7 @@ function applySQLSorter(selectQuery, sortBy, definitions) {
|
|
|
24
21
|
const name = d.join.table.getSQL({ defaultNamespace: 'default' });
|
|
25
22
|
for (const j of selectQuery._joins) {
|
|
26
23
|
if (j.table.getSQL({ defaultNamespace: 'default' }) === name) {
|
|
27
|
-
throw new
|
|
24
|
+
throw new SimpleError({
|
|
28
25
|
code: 'sorter_join_overlap',
|
|
29
26
|
message: 'This combination of sorters is not possible',
|
|
30
27
|
human: $t('%GU'),
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQLSorter.js","sourceRoot":"","sources":["../../src/filters/SQLSorter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAexD,MAAM,UAAU,cAAc,CAAC,WAA2B,EAAE,MAAgB,EAAE,WAA+B;IACzG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,WAAW,CAAC;YAClB,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,gBAAgB;SAC5B,CAAC,CAAC;IACP,CAAC;IAED,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,CAAC;QACjD,CAAC;QAED,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAEtC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACT,kEAAkE;YAClE,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,gBAAgB;YACpB,CAAC;iBACI,CAAC;gBACF,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC;gBAElE,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;oBACjC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;wBAC3D,MAAM,IAAI,WAAW,CAAC;4BAClB,IAAI,EAAE,qBAAqB;4BAC3B,OAAO,EAAE,6CAA6C;4BACtD,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;yBACnB,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;gBAED,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACX,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contains.d.ts","sourceRoot":"","sources":["../../../src/filters/compilers/contains.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,OAAO,KAAK,EAAoB,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAI5E,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAmCvF"}
|
|
@@ -1,44 +1,26 @@
|
|
|
1
1
|
import { SimpleError } from '@simonbackx/simple-errors';
|
|
2
|
-
import { assertFilterCompareValue
|
|
2
|
+
import { assertFilterCompareValue } from '@stamhoofd/structures';
|
|
3
3
|
import { scalarToSQLExpression, SQLLower, SQLNull } from '../../SQLExpressions.js';
|
|
4
4
|
import { SQLJsonSearch } from '../../SQLJsonExpressions.js';
|
|
5
5
|
import { SQLWhereEqual, SQLWhereLike, SQLWhereSign } from '../../SQLWhere.js';
|
|
6
|
-
import { normalizeColumn,
|
|
6
|
+
import { normalizeColumn, SQLValueType } from '../SQLFilter.js';
|
|
7
7
|
import { normalizeCompareValue } from '../helpers/normalizeCompareValue.js';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return (originalColumn: SQLCurrentColumn) => {
|
|
8
|
+
export function $containsSQLFilterCompiler(filter) {
|
|
9
|
+
return (originalColumn) => {
|
|
11
10
|
const v = assertFilterCompareValue(filter);
|
|
12
11
|
const column = normalizeColumn(originalColumn, v);
|
|
13
12
|
const value = normalizeCompareValue(v, column.type);
|
|
14
|
-
|
|
15
13
|
if (typeof value !== 'string') {
|
|
16
14
|
throw new SimpleError({
|
|
17
15
|
code: 'invalid_filter',
|
|
18
16
|
message: 'Expected string at $contains filter',
|
|
19
17
|
});
|
|
20
18
|
}
|
|
21
|
-
|
|
22
19
|
if (column.type === SQLValueType.JSONArray || column.type === SQLValueType.JSONObject) {
|
|
23
20
|
// For JSON arrays and objects, we use JSON_CONTAINS
|
|
24
|
-
return new SQLWhereEqual(
|
|
25
|
-
new SQLJsonSearch(
|
|
26
|
-
new SQLLower(column.expression),
|
|
27
|
-
'one',
|
|
28
|
-
scalarToSQLExpression(
|
|
29
|
-
'%' + SQLWhereLike.escape(value) + '%',
|
|
30
|
-
),
|
|
31
|
-
),
|
|
32
|
-
SQLWhereSign.NotEqual,
|
|
33
|
-
new SQLNull(),
|
|
34
|
-
);
|
|
21
|
+
return new SQLWhereEqual(new SQLJsonSearch(new SQLLower(column.expression), 'one', scalarToSQLExpression('%' + SQLWhereLike.escape(value) + '%')), SQLWhereSign.NotEqual, new SQLNull());
|
|
35
22
|
}
|
|
36
|
-
|
|
37
|
-
return new SQLWhereLike(
|
|
38
|
-
column.expression,
|
|
39
|
-
scalarToSQLExpression(
|
|
40
|
-
'%' + SQLWhereLike.escape(value) + '%',
|
|
41
|
-
),
|
|
42
|
-
);
|
|
23
|
+
return new SQLWhereLike(column.expression, scalarToSQLExpression('%' + SQLWhereLike.escape(value) + '%'));
|
|
43
24
|
};
|
|
44
25
|
}
|
|
26
|
+
//# sourceMappingURL=contains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contains.js","sourceRoot":"","sources":["../../../src/filters/compilers/contains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,MAAM,UAAU,0BAA0B,CAAC,MAAuB;IAC9D,OAAO,CAAC,cAAgC,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,WAAW,CAAC;gBAClB,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,qCAAqC;aACjD,CAAC,CAAC;QACP,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,EAAE,CAAC;YACpF,oDAAoD;YACpD,OAAO,IAAI,aAAa,CACpB,IAAI,aAAa,CACb,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAC/B,KAAK,EACL,qBAAqB,CACjB,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CACzC,CACJ,EACD,YAAY,CAAC,QAAQ,EACrB,IAAI,OAAO,EAAE,CAChB,CAAC;QACN,CAAC;QAED,OAAO,IAAI,YAAY,CACnB,MAAM,CAAC,UAAU,EACjB,qBAAqB,CACjB,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CACzC,CACJ,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equals.d.ts","sourceRoot":"","sources":["../../../src/filters/compilers/equals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAM7D,OAAO,KAAK,EAAoB,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAK5E,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAgErF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { assertFilterCompareValue } from '@stamhoofd/structures';
|
|
2
|
+
import { scalarToSQLExpression, SQLLower, SQLNull } from '../../SQLExpressions.js';
|
|
3
|
+
import { SQLJsonContains, SQLJsonSearch, SQLJsonValue } from '../../SQLJsonExpressions.js';
|
|
4
|
+
import { SQLWhereEqual, SQLWhereLike, SQLWhereOr, SQLWhereSign } from '../../SQLWhere.js';
|
|
5
|
+
import { normalizeColumn, SQLValueType } from '../SQLFilter.js';
|
|
6
|
+
import { isJSONColumn } from '../helpers/isJSONColumn.js';
|
|
7
|
+
import { normalizeCompareValue } from '../helpers/normalizeCompareValue.js';
|
|
8
|
+
export function $equalsSQLFilterCompiler(filter) {
|
|
9
|
+
return (originalColumn) => {
|
|
10
|
+
const v = assertFilterCompareValue(filter);
|
|
11
|
+
const column = normalizeColumn(originalColumn, v);
|
|
12
|
+
const value = normalizeCompareValue(v, column.type);
|
|
13
|
+
/**
|
|
14
|
+
* Special case, checking for equality with a JSON array.
|
|
15
|
+
* This should return true if the JSON array contains the value exactly.
|
|
16
|
+
*
|
|
17
|
+
* This differs from $contains, which will check for 'LIKE' inside the JSON array.
|
|
18
|
+
*/
|
|
19
|
+
if (column.type === SQLValueType.JSONArray) {
|
|
20
|
+
let where;
|
|
21
|
+
if (typeof value === 'string') {
|
|
22
|
+
where = new SQLWhereEqual(new SQLJsonSearch(new SQLLower(column.expression), 'one', scalarToSQLExpression(SQLWhereLike.escape(value))), SQLWhereSign.NotEqual, new SQLNull());
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
where = new SQLJsonContains(column.expression, scalarToSQLExpression(JSON.stringify(value)));
|
|
26
|
+
}
|
|
27
|
+
// If comparing against null, also check for native MySQL null (the column does not exist)
|
|
28
|
+
if (value === null) {
|
|
29
|
+
where = new SQLWhereOr([
|
|
30
|
+
where,
|
|
31
|
+
new SQLWhereEqual(column.expression, SQLWhereSign.Equal, new SQLNull()),
|
|
32
|
+
]);
|
|
33
|
+
}
|
|
34
|
+
return where;
|
|
35
|
+
}
|
|
36
|
+
if (value === null && isJSONColumn(column)) {
|
|
37
|
+
// JSON values can either resolve to null or "null" in MySQL.
|
|
38
|
+
return new SQLWhereEqual(new SQLJsonValue(column.expression), // casts json null to null, including invalid paths
|
|
39
|
+
SQLWhereSign.Equal, new SQLNull());
|
|
40
|
+
}
|
|
41
|
+
return new SQLWhereEqual(column.expression, SQLWhereSign.Equal, scalarToSQLExpression(value)).setNullable(column.nullable);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=equals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equals.js","sourceRoot":"","sources":["../../../src/filters/compilers/equals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1F,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,MAAM,UAAU,wBAAwB,CAAC,MAAuB;IAC5D,OAAO,CAAC,cAAgC,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACpD;;;;;WAKG;QACH,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;YACzC,IAAI,KAAe,CAAC;YAEpB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,KAAK,GAAG,IAAI,aAAa,CACrB,IAAI,aAAa,CACb,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAC/B,KAAK,EACL,qBAAqB,CACjB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAC7B,CACJ,EACD,YAAY,CAAC,QAAQ,EACrB,IAAI,OAAO,EAAE,CAChB,CAAC;YACN,CAAC;iBACI,CAAC;gBACF,KAAK,GAAG,IAAI,eAAe,CACvB,MAAM,CAAC,UAAU,EACjB,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAC/C,CAAC;YACN,CAAC;YAED,0FAA0F;YAC1F,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,KAAK,GAAG,IAAI,UAAU,CAAC;oBACnB,KAAK;oBACL,IAAI,aAAa,CACb,MAAM,CAAC,UAAU,EACjB,YAAY,CAAC,KAAK,EAClB,IAAI,OAAO,EAAE,CAChB;iBACJ,CAAC,CAAC;YACP,CAAC;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACzC,6DAA6D;YAC7D,OAAO,IAAI,aAAa,CACpB,IAAI,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,mDAAmD;YACxF,YAAY,CAAC,KAAK,EAClB,IAAI,OAAO,EAAE,CAChB,CAAC;QACN,CAAC;QAED,OAAO,IAAI,aAAa,CACpB,MAAM,CAAC,UAAU,EACjB,YAAY,CAAC,KAAK,EAClB,qBAAqB,CAAC,KAAK,CAAC,CAC/B,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"greater.d.ts","sourceRoot":"","sources":["../../../src/filters/compilers/greater.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,OAAO,KAAK,EAAoB,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAI7E,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAc1F"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { assertFilterCompareValue } from '@stamhoofd/structures';
|
|
2
|
+
import { scalarToSQLExpression } from '../../SQLExpressions.js';
|
|
3
|
+
import { SQLWhereEqual, SQLWhereSign } from '../../SQLWhere.js';
|
|
4
|
+
import { normalizeColumn } from '../SQLFilter.js';
|
|
5
|
+
import { normalizeCompareValue } from '../helpers/normalizeCompareValue.js';
|
|
6
|
+
export function $greaterThanSQLFilterCompiler(filter) {
|
|
7
|
+
return (originalColumn) => {
|
|
8
|
+
const v = assertFilterCompareValue(filter);
|
|
9
|
+
const column = normalizeColumn(originalColumn, v);
|
|
10
|
+
const value = normalizeCompareValue(v, column.type);
|
|
11
|
+
const base = new SQLWhereEqual(column.expression, SQLWhereSign.Greater, scalarToSQLExpression(value)).setNullable(column.nullable);
|
|
12
|
+
return base;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=greater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"greater.js","sourceRoot":"","sources":["../../../src/filters/compilers/greater.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,MAAM,UAAU,6BAA6B,CAAC,MAAuB;IACjE,OAAO,CAAC,cAAgC,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpD,MAAM,IAAI,GAAG,IAAI,aAAa,CAC1B,MAAM,CAAC,UAAU,EACjB,YAAY,CAAC,OAAO,EACpB,qBAAqB,CAAC,KAAK,CAAC,CAC/B,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE/B,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in.d.ts","sourceRoot":"","sources":["../../../src/filters/compilers/in.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,OAAO,KAAK,EAAoB,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAK5E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAoDjF"}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import { SimpleError } from '@simonbackx/simple-errors';
|
|
2
|
-
import { assertFilterCompareValue
|
|
2
|
+
import { assertFilterCompareValue } from '@stamhoofd/structures';
|
|
3
3
|
import { scalarToSQLExpression, SQLArray } from '../../SQLExpressions.js';
|
|
4
4
|
import { SQLJsonOverlaps } from '../../SQLJsonExpressions.js';
|
|
5
5
|
import { SQLWhereEqual, SQLWhereOr, SQLWhereSign } from '../../SQLWhere.js';
|
|
6
|
-
import { normalizeColumn,
|
|
6
|
+
import { normalizeColumn, SQLValueType } from '../SQLFilter.js';
|
|
7
7
|
import { normalizeCompareValue } from '../helpers/normalizeCompareValue.js';
|
|
8
8
|
import { $equalsSQLFilterCompiler } from './equals.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return (originalColumn: SQLCurrentColumn) => {
|
|
9
|
+
export function $inSQLFilterCompiler(filter) {
|
|
10
|
+
return (originalColumn) => {
|
|
12
11
|
if (!Array.isArray(filter)) {
|
|
13
12
|
throw new SimpleError({
|
|
14
13
|
code: 'invalid_filter',
|
|
15
14
|
message: 'Expected array at $in filter',
|
|
16
15
|
});
|
|
17
16
|
}
|
|
18
|
-
|
|
19
17
|
if (filter.length > 1000) {
|
|
20
18
|
throw new SimpleError({
|
|
21
19
|
code: 'invalid_filter',
|
|
@@ -27,13 +25,10 @@ export function $inSQLFilterCompiler(filter: StamhoofdFilter): SQLSyncFilterRunn
|
|
|
27
25
|
// Return always false
|
|
28
26
|
return new SQLWhereOr([]);
|
|
29
27
|
}
|
|
30
|
-
|
|
31
28
|
const column = normalizeColumn(originalColumn, assertFilterCompareValue(filter.find(f => f !== null) ?? null));
|
|
32
29
|
const values = filter.map(val => normalizeCompareValue(assertFilterCompareValue(val), column.type));
|
|
33
|
-
|
|
34
30
|
const valuesWithoutNulls = values.filter(val => val !== null);
|
|
35
31
|
const hasNull = values.length !== valuesWithoutNulls.length;
|
|
36
|
-
|
|
37
32
|
if (hasNull) {
|
|
38
33
|
// We cannot 'in' check with null. On top of that, null has some special behaviour when used in JSON values (e.g. JSON null vs MySQL null).
|
|
39
34
|
return new SQLWhereOr([
|
|
@@ -41,22 +36,13 @@ export function $inSQLFilterCompiler(filter: StamhoofdFilter): SQLSyncFilterRunn
|
|
|
41
36
|
$inSQLFilterCompiler(valuesWithoutNulls)(column),
|
|
42
37
|
]);
|
|
43
38
|
}
|
|
44
|
-
|
|
45
39
|
if (column.type === SQLValueType.JSONArray) {
|
|
46
40
|
const jsonValues = JSON.stringify(valuesWithoutNulls);
|
|
47
41
|
const valuesExpression = scalarToSQLExpression(jsonValues);
|
|
48
|
-
|
|
49
|
-
return new SQLJsonOverlaps(
|
|
50
|
-
column.expression,
|
|
51
|
-
valuesExpression,
|
|
52
|
-
);
|
|
42
|
+
return new SQLJsonOverlaps(column.expression, valuesExpression);
|
|
53
43
|
}
|
|
54
44
|
const valuesExpression = valuesWithoutNulls.length === 1 ? scalarToSQLExpression(valuesWithoutNulls[0]) : new SQLArray(valuesWithoutNulls);
|
|
55
|
-
|
|
56
|
-
return new SQLWhereEqual(
|
|
57
|
-
column.expression,
|
|
58
|
-
SQLWhereSign.Equal,
|
|
59
|
-
valuesExpression,
|
|
60
|
-
).setNullable(column.nullable);
|
|
45
|
+
return new SQLWhereEqual(column.expression, SQLWhereSign.Equal, valuesExpression).setNullable(column.nullable);
|
|
61
46
|
};
|
|
62
47
|
}
|
|
48
|
+
//# sourceMappingURL=in.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in.js","sourceRoot":"","sources":["../../../src/filters/compilers/in.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/filters/compilers/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
|