@stamhoofd/sql 2.118.1 → 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} +32 -45
- 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 +10 -6
- package/dist/filters/SQLFilter.d.ts.map +1 -0
- package/{src/filters/SQLFilter.ts → dist/filters/SQLFilter.js} +66 -127
- 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 +5 -8
- 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/dist/filters/compilers/contains.js +26 -0
- 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} +11 -26
- 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} +5 -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} +3 -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 -216
- 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 -28
- 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 -46
- 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 -17
- 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 -17
- 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 -16
- 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 -701
- 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 -1048
- 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 -463
- 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 -590
- 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/contains.ts +0 -43
- package/src/filters/compilers/equals.ts +0 -72
- package/src/filters/compilers/greater.ts +0 -20
- package/src/filters/compilers/less.ts +0 -19
- /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,76 +1,40 @@
|
|
|
1
1
|
import { SimpleError } from '@simonbackx/simple-errors';
|
|
2
|
-
import { compileFilter,
|
|
3
|
-
import {
|
|
4
|
-
import { SQLJoin } from '../SQLJoin.js';
|
|
2
|
+
import { compileFilter, filterDefinitionsToCompiler } from '@stamhoofd/structures';
|
|
3
|
+
import { SQLSafeValue } from '../SQLExpressions.js';
|
|
5
4
|
import { SQLJsonValue } from '../SQLJsonExpressions.js';
|
|
6
|
-
import {
|
|
7
|
-
import { SQLWhere, SQLWhereAnd, SQLWhereExists, SQLWhereJoin, SQLWhereNot, SQLWhereOr } from '../SQLWhere.js';
|
|
8
|
-
import { $equalsSQLFilterCompiler, $greaterThanSQLFilterCompiler, $inSQLFilterCompiler, $lessThanSQLFilterCompiler } from './compilers/index.js';
|
|
5
|
+
import { SQLWhereAnd, SQLWhereExists, SQLWhereJoin, SQLWhereNot, SQLWhereOr } from '../SQLWhere.js';
|
|
9
6
|
import { $containsSQLFilterCompiler } from './compilers/contains.js';
|
|
10
|
-
import {
|
|
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 {
|
|
7
|
+
import { $equalsSQLFilterCompiler, $greaterThanSQLFilterCompiler, $inSQLFilterCompiler, $lessThanSQLFilterCompiler } from './compilers/index.js';
|
|
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
|
-
|
|
38
|
-
JSONNumber = 'JSONNumber',
|
|
39
|
-
|
|
40
|
-
/** [...] */
|
|
41
|
-
JSONArray = 'JSONArray',
|
|
42
|
-
|
|
43
|
-
/** {...} */
|
|
44
|
-
JSONObject = 'JSONObject',
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export type SQLCurrentColumn = {
|
|
48
|
-
expression: SQLExpression;
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* 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.
|
|
52
|
-
*
|
|
53
|
-
* Mainly > and < operators will make sure the behaviour is consistent with MySQL sorting (normally comparing with null will always return false in MySQL)
|
|
54
|
-
*/
|
|
55
|
-
nullable?: boolean;
|
|
56
|
-
|
|
21
|
+
SQLValueType["JSONBoolean"] = "JSONBoolean";
|
|
22
|
+
SQLValueType["JSONString"] = "JSONString";
|
|
23
|
+
SQLValueType["JSONNumber"] = "JSONNumber";
|
|
57
24
|
/**
|
|
58
|
-
*
|
|
25
|
+
* Either boolean, string, number or null (if nullable). Only use this if you cannot determine the type at compile time.
|
|
59
26
|
*/
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
export function createColumnFilter(column: SQLCurrentColumn, childDefinitions?: SQLFilterDefinitions): SQLFilterCompiler {
|
|
69
|
-
return (filter: StamhoofdFilter) => {
|
|
27
|
+
SQLValueType["JSONScalar"] = "JSONScalar";
|
|
28
|
+
/** [...] */
|
|
29
|
+
SQLValueType["JSONArray"] = "JSONArray";
|
|
30
|
+
/** {...} */
|
|
31
|
+
SQLValueType["JSONObject"] = "JSONObject";
|
|
32
|
+
})(SQLValueType || (SQLValueType = {}));
|
|
33
|
+
export function createColumnFilter(column, childDefinitions) {
|
|
34
|
+
return (filter) => {
|
|
70
35
|
const compiler = childDefinitions ? filterDefinitionsToCompiler(childDefinitions) : filterDefinitionsToCompiler(baseSQLFilterCompilers);
|
|
71
36
|
const runner = $andSQLFilterCompiler(filter, compiler);
|
|
72
|
-
|
|
73
|
-
return async (_: SQLCurrentColumn) => {
|
|
37
|
+
return async (_) => {
|
|
74
38
|
if (column.checkPermission) {
|
|
75
39
|
await column.checkPermission(filter);
|
|
76
40
|
}
|
|
@@ -81,13 +45,11 @@ export function createColumnFilter(column: SQLCurrentColumn, childDefinitions?:
|
|
|
81
45
|
};
|
|
82
46
|
};
|
|
83
47
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const wildcardCompiler = (filter: StamhoofdFilter, _, key: string) => {
|
|
48
|
+
export function createWildcardColumnFilter(getColumn, childDefinitions, options) {
|
|
49
|
+
const wildcardCompiler = (filter, _, key) => {
|
|
87
50
|
const compiler = childDefinitions ? filterDefinitionsToCompiler(childDefinitions(key)) : filterDefinitionsToCompiler(baseSQLFilterCompilers);
|
|
88
51
|
const runner = $andSQLFilterCompiler(filter, compiler);
|
|
89
|
-
|
|
90
|
-
return async (_: SQLCurrentColumn) => {
|
|
52
|
+
return async (_) => {
|
|
91
53
|
if (options?.checkPermission) {
|
|
92
54
|
await options.checkPermission(key);
|
|
93
55
|
}
|
|
@@ -101,24 +63,20 @@ export function createWildcardColumnFilter(getColumn: (key: string) => SQLCurren
|
|
|
101
63
|
});
|
|
102
64
|
};
|
|
103
65
|
};
|
|
104
|
-
|
|
105
|
-
return (filter: StamhoofdFilter) => {
|
|
66
|
+
return (filter) => {
|
|
106
67
|
return $andSQLFilterCompiler(filter, wildcardCompiler);
|
|
107
68
|
};
|
|
108
69
|
}
|
|
109
|
-
|
|
110
70
|
/**
|
|
111
71
|
* Filter with a subquery that should return at least one result.
|
|
112
72
|
*/
|
|
113
|
-
export function createExistsFilter(baseSelect
|
|
114
|
-
return (filter
|
|
73
|
+
export function createExistsFilter(baseSelect, definitions) {
|
|
74
|
+
return (filter, _) => {
|
|
115
75
|
if (filter !== null && typeof filter === 'object' && '$elemMatch' in filter) {
|
|
116
|
-
filter = filter['$elemMatch']
|
|
76
|
+
filter = filter['$elemMatch'];
|
|
117
77
|
}
|
|
118
|
-
|
|
119
78
|
const runner = compileToSQLRunner(filter, definitions);
|
|
120
|
-
|
|
121
|
-
return async (_: SQLCurrentColumn) => {
|
|
79
|
+
return async (_) => {
|
|
122
80
|
const w = await runner({
|
|
123
81
|
expression: SQLRootExpression,
|
|
124
82
|
type: SQLValueType.Table,
|
|
@@ -131,19 +89,17 @@ export function createExistsFilter(baseSelect: InstanceType<typeof SQLSelect> &
|
|
|
131
89
|
};
|
|
132
90
|
};
|
|
133
91
|
}
|
|
134
|
-
|
|
135
92
|
/**
|
|
136
93
|
* WARNING: only use this on one-to-one relations. Using it on one-to-many relations will result in duplicate results.
|
|
137
94
|
*
|
|
138
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)
|
|
139
96
|
*/
|
|
140
|
-
export function createJoinedRelationFilter(join
|
|
141
|
-
return (filter
|
|
97
|
+
export function createJoinedRelationFilter(join, definitions, options = { doesRelationAlwaysExist: true }) {
|
|
98
|
+
return (filter, _) => {
|
|
142
99
|
if (filter !== null && typeof filter === 'object' && '$elemMatch' in filter) {
|
|
143
|
-
filter = filter['$elemMatch']
|
|
100
|
+
filter = filter['$elemMatch'];
|
|
144
101
|
}
|
|
145
|
-
|
|
146
|
-
return async (_: SQLCurrentColumn) => {
|
|
102
|
+
return async (_) => {
|
|
147
103
|
const w = await compileToSQLFilter(filter, definitions);
|
|
148
104
|
return new SQLWhereJoin(join, w, {
|
|
149
105
|
doesRelationAlwaysExist: options.doesRelationAlwaysExist,
|
|
@@ -151,77 +107,61 @@ export function createJoinedRelationFilter(join: SQLJoin, definitions: SQLFilter
|
|
|
151
107
|
};
|
|
152
108
|
};
|
|
153
109
|
}
|
|
154
|
-
|
|
155
|
-
export function $andSQLFilterCompiler(filter: StamhoofdFilter, filters: SQLFilterCompiler): SQLFilterRunner {
|
|
110
|
+
export function $andSQLFilterCompiler(filter, filters) {
|
|
156
111
|
const runners = compileSQLFilter(filter, filters);
|
|
157
|
-
|
|
158
|
-
return async (column: SQLCurrentColumn) => {
|
|
112
|
+
return async (column) => {
|
|
159
113
|
const wheres = (await Promise.all(
|
|
160
|
-
|
|
161
|
-
));
|
|
162
|
-
|
|
114
|
+
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
115
|
+
runners.map(runner => (runner(column)))));
|
|
163
116
|
return new SQLWhereAnd(wheres);
|
|
164
117
|
};
|
|
165
118
|
}
|
|
166
|
-
|
|
167
|
-
export function $orSQLFilterCompiler(filter: StamhoofdFilter, filters: SQLFilterCompiler): SQLFilterRunner {
|
|
119
|
+
export function $orSQLFilterCompiler(filter, filters) {
|
|
168
120
|
const runners = compileSQLFilter(filter, filters);
|
|
169
|
-
|
|
170
|
-
return async (column: SQLCurrentColumn) => {
|
|
121
|
+
return async (column) => {
|
|
171
122
|
const wheres = (await Promise.all(
|
|
172
|
-
|
|
173
|
-
));
|
|
174
|
-
|
|
123
|
+
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
124
|
+
runners.map(runner => (runner(column)))));
|
|
175
125
|
return new SQLWhereOr(wheres);
|
|
176
126
|
};
|
|
177
127
|
}
|
|
178
|
-
|
|
179
|
-
export function $notSQLFilterCompiler(filter: StamhoofdFilter, filters: SQLFilterCompiler): SQLFilterRunner {
|
|
128
|
+
export function $notSQLFilterCompiler(filter, filters) {
|
|
180
129
|
const andRunner = $andSQLFilterCompiler(filter, filters);
|
|
181
|
-
|
|
182
|
-
return async (column: SQLCurrentColumn) => {
|
|
130
|
+
return async (column) => {
|
|
183
131
|
return new SQLWhereNot(await andRunner(column));
|
|
184
132
|
};
|
|
185
133
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
return (filter: StamhoofdFilter, parentCompiler: SQLFilterCompiler) => {
|
|
134
|
+
function invertFilterCompiler(compiler) {
|
|
135
|
+
return (filter, parentCompiler) => {
|
|
189
136
|
const runner = compiler(filter, parentCompiler);
|
|
190
137
|
return async (column) => {
|
|
191
138
|
return new SQLWhereNot(await runner(column));
|
|
192
139
|
};
|
|
193
140
|
};
|
|
194
141
|
}
|
|
195
|
-
|
|
196
|
-
export const baseSQLFilterCompilers: SQLFilterDefinitions = {
|
|
142
|
+
export const baseSQLFilterCompilers = {
|
|
197
143
|
$and: $andSQLFilterCompiler,
|
|
198
144
|
$or: $orSQLFilterCompiler,
|
|
199
145
|
$not: $notSQLFilterCompiler,
|
|
200
146
|
$eq: $equalsSQLFilterCompiler,
|
|
201
147
|
$neq: invertFilterCompiler($equalsSQLFilterCompiler),
|
|
202
|
-
|
|
203
148
|
$lt: $lessThanSQLFilterCompiler,
|
|
204
149
|
$gt: $greaterThanSQLFilterCompiler,
|
|
205
150
|
$lte: invertFilterCompiler($greaterThanSQLFilterCompiler),
|
|
206
151
|
$gte: invertFilterCompiler($lessThanSQLFilterCompiler),
|
|
207
|
-
|
|
208
152
|
$in: $inSQLFilterCompiler,
|
|
209
|
-
|
|
210
153
|
$contains: $containsSQLFilterCompiler,
|
|
211
154
|
};
|
|
212
|
-
|
|
213
|
-
const
|
|
214
|
-
|
|
215
|
-
export const SQLRootExpression: SQLExpression = {
|
|
216
|
-
getSQL(options?: SQLExpressionOptions): SQLQuery {
|
|
155
|
+
const compileSQLFilter = (compileFilter);
|
|
156
|
+
export const SQLRootExpression = {
|
|
157
|
+
getSQL(options) {
|
|
217
158
|
throw new SimpleError({
|
|
218
159
|
code: 'invalid_filter',
|
|
219
160
|
message: 'Root level filters are not allowed to use $eq or $neq',
|
|
220
161
|
});
|
|
221
162
|
},
|
|
222
163
|
};
|
|
223
|
-
|
|
224
|
-
export function compileToSQLRunner(filter: StamhoofdFilter, definitions: SQLFilterDefinitions): SQLFilterRunner {
|
|
164
|
+
export function compileToSQLRunner(filter, definitions) {
|
|
225
165
|
if (filter === null) {
|
|
226
166
|
return () => {
|
|
227
167
|
return new SQLWhereAnd([]); // No filter, return empty where
|
|
@@ -230,43 +170,42 @@ export function compileToSQLRunner(filter: StamhoofdFilter, definitions: SQLFilt
|
|
|
230
170
|
const compiler = filterDefinitionsToCompiler(definitions); // this compiler searches in the definition for the right compiler for the given key
|
|
231
171
|
const runner = $andSQLFilterCompiler(filter, compiler);
|
|
232
172
|
return runner;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
export async function compileToSQLFilter(filter
|
|
173
|
+
}
|
|
174
|
+
;
|
|
175
|
+
export async function compileToSQLFilter(filter, filters) {
|
|
236
176
|
const runner = compileToSQLRunner(filter, filters);
|
|
237
177
|
return await runner({
|
|
238
178
|
expression: SQLRootExpression,
|
|
239
179
|
type: SQLValueType.Table,
|
|
240
180
|
nullable: false,
|
|
241
181
|
});
|
|
242
|
-
}
|
|
243
|
-
|
|
182
|
+
}
|
|
183
|
+
;
|
|
244
184
|
/**
|
|
245
185
|
* Casts json strings, numbers and booleans to native MySQL types. This includes json null to mysql null.
|
|
246
186
|
*/
|
|
247
|
-
export function normalizeColumn(column
|
|
248
|
-
if (column.type === SQLValueType.JSONString) {
|
|
187
|
+
export function normalizeColumn(column, hint) {
|
|
188
|
+
if (column.type === SQLValueType.JSONString || (column.type === SQLValueType.JSONScalar && typeof hint === 'string')) {
|
|
249
189
|
return {
|
|
250
190
|
expression: new SQLJsonValue(column.expression, 'CHAR'),
|
|
251
191
|
type: SQLValueType.String,
|
|
252
192
|
nullable: column.nullable,
|
|
253
193
|
};
|
|
254
194
|
}
|
|
255
|
-
|
|
256
|
-
if (column.type === SQLValueType.JSONBoolean) {
|
|
195
|
+
if (column.type === SQLValueType.JSONNumber || (column.type === SQLValueType.JSONScalar && typeof hint === 'number')) {
|
|
257
196
|
return {
|
|
258
|
-
expression: new SQLJsonValue(column.expression, '
|
|
259
|
-
type: SQLValueType.
|
|
197
|
+
expression: new SQLJsonValue(column.expression, 'SIGNED'),
|
|
198
|
+
type: SQLValueType.Number,
|
|
260
199
|
nullable: column.nullable,
|
|
261
200
|
};
|
|
262
201
|
}
|
|
263
|
-
|
|
264
|
-
if (column.type === SQLValueType.JSONNumber) {
|
|
202
|
+
if (column.type === SQLValueType.JSONBoolean || (column.type === SQLValueType.JSONScalar && typeof hint === 'boolean')) {
|
|
265
203
|
return {
|
|
266
204
|
expression: new SQLJsonValue(column.expression, 'UNSIGNED'),
|
|
267
|
-
type: SQLValueType.
|
|
205
|
+
type: SQLValueType.Boolean,
|
|
268
206
|
nullable: column.nullable,
|
|
269
207
|
};
|
|
270
208
|
}
|
|
271
209
|
return column;
|
|
272
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,10 +21,10 @@ 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
|
-
human: $t('
|
|
27
|
+
human: $t('%GU'),
|
|
31
28
|
});
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { SimpleError } from '@simonbackx/simple-errors';
|
|
2
|
+
import { assertFilterCompareValue } from '@stamhoofd/structures';
|
|
3
|
+
import { scalarToSQLExpression, SQLLower, SQLNull } from '../../SQLExpressions.js';
|
|
4
|
+
import { SQLJsonSearch } from '../../SQLJsonExpressions.js';
|
|
5
|
+
import { SQLWhereEqual, SQLWhereLike, SQLWhereSign } from '../../SQLWhere.js';
|
|
6
|
+
import { normalizeColumn, SQLValueType } from '../SQLFilter.js';
|
|
7
|
+
import { normalizeCompareValue } from '../helpers/normalizeCompareValue.js';
|
|
8
|
+
export function $containsSQLFilterCompiler(filter) {
|
|
9
|
+
return (originalColumn) => {
|
|
10
|
+
const v = assertFilterCompareValue(filter);
|
|
11
|
+
const column = normalizeColumn(originalColumn, v);
|
|
12
|
+
const value = normalizeCompareValue(v, column.type);
|
|
13
|
+
if (typeof value !== 'string') {
|
|
14
|
+
throw new SimpleError({
|
|
15
|
+
code: 'invalid_filter',
|
|
16
|
+
message: 'Expected string at $contains filter',
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
if (column.type === SQLValueType.JSONArray || column.type === SQLValueType.JSONObject) {
|
|
20
|
+
// For JSON arrays and objects, we use JSON_CONTAINS
|
|
21
|
+
return new SQLWhereEqual(new SQLJsonSearch(new SQLLower(column.expression), 'one', scalarToSQLExpression('%' + SQLWhereLike.escape(value) + '%')), SQLWhereSign.NotEqual, new SQLNull());
|
|
22
|
+
}
|
|
23
|
+
return new SQLWhereLike(column.expression, scalarToSQLExpression('%' + SQLWhereLike.escape(value) + '%'));
|
|
24
|
+
};
|
|
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,40 +1,34 @@
|
|
|
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',
|
|
22
20
|
message: 'Too many values in $in filter, maximum is 1000',
|
|
23
|
-
human: $t('
|
|
21
|
+
human: $t('%1HH', { count: filter.length }),
|
|
24
22
|
});
|
|
25
23
|
}
|
|
26
|
-
|
|
27
|
-
const column = normalizeColumn(originalColumn);
|
|
28
|
-
const values = filter.map(val => normalizeCompareValue(assertFilterCompareValue(val), column.type));
|
|
29
|
-
|
|
30
|
-
if (values.length === 0) {
|
|
24
|
+
if (filter.length === 0) {
|
|
31
25
|
// Return always false
|
|
32
26
|
return new SQLWhereOr([]);
|
|
33
27
|
}
|
|
34
|
-
|
|
28
|
+
const column = normalizeColumn(originalColumn, assertFilterCompareValue(filter.find(f => f !== null) ?? null));
|
|
29
|
+
const values = filter.map(val => normalizeCompareValue(assertFilterCompareValue(val), column.type));
|
|
35
30
|
const valuesWithoutNulls = values.filter(val => val !== null);
|
|
36
31
|
const hasNull = values.length !== valuesWithoutNulls.length;
|
|
37
|
-
|
|
38
32
|
if (hasNull) {
|
|
39
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).
|
|
40
34
|
return new SQLWhereOr([
|
|
@@ -42,22 +36,13 @@ export function $inSQLFilterCompiler(filter: StamhoofdFilter): SQLSyncFilterRunn
|
|
|
42
36
|
$inSQLFilterCompiler(valuesWithoutNulls)(column),
|
|
43
37
|
]);
|
|
44
38
|
}
|
|
45
|
-
|
|
46
39
|
if (column.type === SQLValueType.JSONArray) {
|
|
47
40
|
const jsonValues = JSON.stringify(valuesWithoutNulls);
|
|
48
41
|
const valuesExpression = scalarToSQLExpression(jsonValues);
|
|
49
|
-
|
|
50
|
-
return new SQLJsonOverlaps(
|
|
51
|
-
column.expression,
|
|
52
|
-
valuesExpression,
|
|
53
|
-
);
|
|
42
|
+
return new SQLJsonOverlaps(column.expression, valuesExpression);
|
|
54
43
|
}
|
|
55
44
|
const valuesExpression = valuesWithoutNulls.length === 1 ? scalarToSQLExpression(valuesWithoutNulls[0]) : new SQLArray(valuesWithoutNulls);
|
|
56
|
-
|
|
57
|
-
return new SQLWhereEqual(
|
|
58
|
-
column.expression,
|
|
59
|
-
SQLWhereSign.Equal,
|
|
60
|
-
valuesExpression,
|
|
61
|
-
).setNullable(column.nullable);
|
|
45
|
+
return new SQLWhereEqual(column.expression, SQLWhereSign.Equal, valuesExpression).setNullable(column.nullable);
|
|
62
46
|
};
|
|
63
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"}
|