@stamhoofd/sql 2.83.5 → 2.84.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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/src/QueryableModel.d.ts +1 -0
- package/dist/src/QueryableModel.d.ts.map +1 -1
- package/dist/src/QueryableModel.js +20 -2
- package/dist/src/QueryableModel.js.map +1 -1
- package/dist/src/SQL.d.ts +9 -16
- package/dist/src/SQL.d.ts.map +1 -1
- package/dist/src/SQL.js +16 -13
- package/dist/src/SQL.js.map +1 -1
- package/dist/src/SQLDelete.d.ts +2 -2
- package/dist/src/SQLDelete.d.ts.map +1 -1
- package/dist/src/SQLDelete.js +13 -3
- package/dist/src/SQLDelete.js.map +1 -1
- package/dist/src/SQLExpression.d.ts +3 -0
- package/dist/src/SQLExpression.d.ts.map +1 -1
- package/dist/src/SQLExpression.js.map +1 -1
- package/dist/src/SQLExpressions.d.ts +17 -6
- package/dist/src/SQLExpressions.d.ts.map +1 -1
- package/dist/src/SQLExpressions.js +20 -12
- package/dist/src/SQLExpressions.js.map +1 -1
- package/dist/src/SQLJoin.d.ts +3 -3
- package/dist/src/SQLJoin.d.ts.map +1 -1
- package/dist/src/SQLJoin.js +5 -1
- package/dist/src/SQLJoin.js.map +1 -1
- package/dist/src/SQLJsonExpressions.d.ts +22 -0
- package/dist/src/SQLJsonExpressions.d.ts.map +1 -1
- package/dist/src/SQLJsonExpressions.js +56 -4
- package/dist/src/SQLJsonExpressions.js.map +1 -1
- package/dist/src/SQLSelect.d.ts +10 -4
- package/dist/src/SQLSelect.d.ts.map +1 -1
- package/dist/src/SQLSelect.js +25 -11
- package/dist/src/SQLSelect.js.map +1 -1
- package/dist/src/SQLWhere.d.ts +29 -1
- package/dist/src/SQLWhere.d.ts.map +1 -1
- package/dist/src/SQLWhere.js +181 -12
- package/dist/src/SQLWhere.js.map +1 -1
- package/dist/src/filters/SQLFilter.d.ts +1 -0
- package/dist/src/filters/SQLFilter.d.ts.map +1 -1
- package/dist/src/filters/SQLFilter.js +8 -0
- package/dist/src/filters/SQLFilter.js.map +1 -1
- package/dist/src/filters/modern/SQLModernFilter.d.ts +73 -0
- package/dist/src/filters/modern/SQLModernFilter.d.ts.map +1 -0
- package/dist/src/filters/modern/SQLModernFilter.js +200 -0
- package/dist/src/filters/modern/SQLModernFilter.js.map +1 -0
- package/dist/src/filters/modern/compilers/contains.d.ts +4 -0
- package/dist/src/filters/modern/compilers/contains.d.ts.map +1 -0
- package/dist/src/filters/modern/compilers/contains.js +28 -0
- package/dist/src/filters/modern/compilers/contains.js.map +1 -0
- package/dist/src/filters/modern/compilers/equals.d.ts +4 -0
- package/dist/src/filters/modern/compilers/equals.d.ts.map +1 -0
- package/dist/src/filters/modern/compilers/equals.js +46 -0
- package/dist/src/filters/modern/compilers/equals.js.map +1 -0
- package/dist/src/filters/modern/compilers/greater.d.ts +4 -0
- package/dist/src/filters/modern/compilers/greater.d.ts.map +1 -0
- package/dist/src/filters/modern/compilers/greater.js +17 -0
- package/dist/src/filters/modern/compilers/greater.js.map +1 -0
- package/dist/src/filters/modern/compilers/in.d.ts +4 -0
- package/dist/src/filters/modern/compilers/in.d.ts.map +1 -0
- package/dist/src/filters/modern/compilers/in.js +50 -0
- package/dist/src/filters/modern/compilers/in.js.map +1 -0
- package/dist/src/filters/modern/compilers/index.d.ts +5 -0
- package/dist/src/filters/modern/compilers/index.d.ts.map +1 -0
- package/dist/src/filters/modern/compilers/index.js +8 -0
- package/dist/src/filters/modern/compilers/index.js.map +1 -0
- package/dist/src/filters/modern/compilers/less.d.ts +4 -0
- package/dist/src/filters/modern/compilers/less.d.ts.map +1 -0
- package/dist/src/filters/modern/compilers/less.js +17 -0
- package/dist/src/filters/modern/compilers/less.js.map +1 -0
- package/dist/src/filters/modern/helpers/isJSONColumn.d.ts +4 -0
- package/dist/src/filters/modern/helpers/isJSONColumn.d.ts.map +1 -0
- package/dist/src/filters/modern/helpers/isJSONColumn.js +16 -0
- package/dist/src/filters/modern/helpers/isJSONColumn.js.map +1 -0
- package/dist/src/filters/modern/helpers/normalizeCompareValue.d.ts +9 -0
- package/dist/src/filters/modern/helpers/normalizeCompareValue.d.ts.map +1 -0
- package/dist/src/filters/modern/helpers/normalizeCompareValue.js +82 -0
- package/dist/src/filters/modern/helpers/normalizeCompareValue.js.map +1 -0
- package/dist/tests/filters/$and.test.d.ts +2 -0
- package/dist/tests/filters/$and.test.d.ts.map +1 -0
- package/dist/tests/filters/$and.test.js +185 -0
- package/dist/tests/filters/$and.test.js.map +1 -0
- package/dist/tests/filters/$contains.test.d.ts +2 -0
- package/dist/tests/filters/$contains.test.d.ts.map +1 -0
- package/dist/tests/filters/$contains.test.js +701 -0
- package/dist/tests/filters/$contains.test.js.map +1 -0
- package/dist/tests/filters/$eq.test.d.ts +2 -0
- package/dist/tests/filters/$eq.test.d.ts.map +1 -0
- package/dist/tests/filters/$eq.test.js +986 -0
- package/dist/tests/filters/$eq.test.js.map +1 -0
- package/dist/tests/filters/$gt.test.d.ts +2 -0
- package/dist/tests/filters/$gt.test.d.ts.map +1 -0
- package/dist/tests/filters/$gt.test.js +463 -0
- package/dist/tests/filters/$gt.test.js.map +1 -0
- package/dist/tests/filters/$gte.test.d.ts +2 -0
- package/dist/tests/filters/$gte.test.d.ts.map +1 -0
- package/dist/tests/filters/$gte.test.js +433 -0
- package/dist/tests/filters/$gte.test.js.map +1 -0
- package/dist/tests/filters/$in.test.d.ts +2 -0
- package/dist/tests/filters/$in.test.d.ts.map +1 -0
- package/dist/tests/filters/$in.test.js +590 -0
- package/dist/tests/filters/$in.test.js.map +1 -0
- package/dist/tests/filters/$lt.test.d.ts +2 -0
- package/dist/tests/filters/$lt.test.d.ts.map +1 -0
- package/dist/tests/filters/$lt.test.js +433 -0
- package/dist/tests/filters/$lt.test.js.map +1 -0
- package/dist/tests/filters/$lte.test.d.ts +2 -0
- package/dist/tests/filters/$lte.test.d.ts.map +1 -0
- package/dist/tests/filters/$lte.test.js +472 -0
- package/dist/tests/filters/$lte.test.js.map +1 -0
- package/dist/tests/filters/$neq.test.d.ts +2 -0
- package/dist/tests/filters/$neq.test.d.ts.map +1 -0
- package/dist/tests/filters/$neq.test.js +32 -0
- package/dist/tests/filters/$neq.test.js.map +1 -0
- package/dist/tests/filters/$not.test.d.ts +2 -0
- package/dist/tests/filters/$not.test.d.ts.map +1 -0
- package/dist/tests/filters/$not.test.js +50 -0
- package/dist/tests/filters/$not.test.js.map +1 -0
- package/dist/tests/filters/$or.test.d.ts +2 -0
- package/dist/tests/filters/$or.test.d.ts.map +1 -0
- package/dist/tests/filters/$or.test.js +185 -0
- package/dist/tests/filters/$or.test.js.map +1 -0
- package/dist/tests/filters/dot-syntax.test.d.ts +2 -0
- package/dist/tests/filters/dot-syntax.test.d.ts.map +1 -0
- package/dist/tests/filters/dot-syntax.test.js +210 -0
- package/dist/tests/filters/dot-syntax.test.js.map +1 -0
- package/dist/tests/filters/exists.test.d.ts +2 -0
- package/dist/tests/filters/exists.test.d.ts.map +1 -0
- package/dist/tests/filters/exists.test.js +106 -0
- package/dist/tests/filters/exists.test.js.map +1 -0
- package/dist/tests/filters/joined-relations.test.d.ts +2 -0
- package/dist/tests/filters/joined-relations.test.d.ts.map +1 -0
- package/dist/tests/filters/joined-relations.test.js +167 -0
- package/dist/tests/filters/joined-relations.test.js.map +1 -0
- package/dist/tests/filters/special-cases.test.d.ts +2 -0
- package/dist/tests/filters/special-cases.test.d.ts.map +1 -0
- package/dist/tests/filters/special-cases.test.js +114 -0
- package/dist/tests/filters/special-cases.test.js.map +1 -0
- package/dist/tests/filters/wildcard.test.d.ts +2 -0
- package/dist/tests/filters/wildcard.test.d.ts.map +1 -0
- package/dist/tests/filters/wildcard.test.js +67 -0
- package/dist/tests/filters/wildcard.test.js.map +1 -0
- package/dist/tests/jest.global.setup.d.ts +3 -0
- package/dist/tests/jest.global.setup.d.ts.map +1 -0
- package/dist/tests/jest.global.setup.js +7 -0
- package/dist/tests/jest.global.setup.js.map +1 -0
- package/dist/tests/jest.setup.d.ts +2 -0
- package/dist/tests/jest.setup.d.ts.map +1 -0
- package/dist/tests/jest.setup.js +5 -0
- package/dist/tests/jest.setup.js.map +1 -0
- package/dist/tests/utils/index.d.ts +57 -0
- package/dist/tests/utils/index.d.ts.map +1 -0
- package/dist/tests/utils/index.js +206 -0
- package/dist/tests/utils/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
- package/src/QueryableModel.ts +22 -2
- package/src/SQL.ts +21 -30
- package/src/SQLDelete.ts +26 -15
- package/src/SQLExpression.ts +4 -0
- package/src/SQLExpressions.ts +23 -14
- package/src/SQLJoin.ts +8 -4
- package/src/SQLJsonExpressions.ts +65 -4
- package/src/SQLSelect.ts +31 -15
- package/src/SQLWhere.ts +208 -13
- package/src/filters/SQLFilter.ts +8 -0
- package/src/filters/modern/SQLModernFilter.ts +256 -0
- package/src/filters/modern/compilers/contains.ts +43 -0
- package/src/filters/modern/compilers/equals.ts +72 -0
- package/src/filters/modern/compilers/greater.ts +20 -0
- package/src/filters/modern/compilers/in.ts +62 -0
- package/src/filters/modern/compilers/index.ts +4 -0
- package/src/filters/modern/compilers/less.ts +19 -0
- package/src/filters/modern/helpers/isJSONColumn.ts +13 -0
- package/src/filters/modern/helpers/normalizeCompareValue.ts +95 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SQLRootExpression = exports.baseModernSQLFilterCompilers = exports.SQLModernValueType = void 0;
|
|
4
|
+
exports.createColumnFilter = createColumnFilter;
|
|
5
|
+
exports.createWildcardColumnFilter = createWildcardColumnFilter;
|
|
6
|
+
exports.createExistsFilter = createExistsFilter;
|
|
7
|
+
exports.createJoinedRelationFilter = createJoinedRelationFilter;
|
|
8
|
+
exports.$andSQLFilterCompiler = $andSQLFilterCompiler;
|
|
9
|
+
exports.$orSQLFilterCompiler = $orSQLFilterCompiler;
|
|
10
|
+
exports.$notSQLFilterCompiler = $notSQLFilterCompiler;
|
|
11
|
+
exports.compileToSQLRunner = compileToSQLRunner;
|
|
12
|
+
exports.compileToModernSQLFilter = compileToModernSQLFilter;
|
|
13
|
+
exports.normalizeColumn = normalizeColumn;
|
|
14
|
+
const simple_errors_1 = require("@simonbackx/simple-errors");
|
|
15
|
+
const structures_1 = require("@stamhoofd/structures");
|
|
16
|
+
const SQLJsonExpressions_1 = require("../../SQLJsonExpressions");
|
|
17
|
+
const SQLWhere_1 = require("../../SQLWhere");
|
|
18
|
+
const compilers_1 = require("./compilers");
|
|
19
|
+
const contains_1 = require("./compilers/contains");
|
|
20
|
+
var SQLModernValueType;
|
|
21
|
+
(function (SQLModernValueType) {
|
|
22
|
+
/** At the root of a select */
|
|
23
|
+
SQLModernValueType["Table"] = "Table";
|
|
24
|
+
/** Column with type string */
|
|
25
|
+
SQLModernValueType["String"] = "String";
|
|
26
|
+
/** MySQL Datetime */
|
|
27
|
+
SQLModernValueType["Datetime"] = "Datetime";
|
|
28
|
+
/** Column with type number */
|
|
29
|
+
SQLModernValueType["Number"] = "Number";
|
|
30
|
+
/** Column with type boolean, meaning 1 or 0 */
|
|
31
|
+
SQLModernValueType["Boolean"] = "Boolean";
|
|
32
|
+
/** True or false in JSON */
|
|
33
|
+
SQLModernValueType["JSONBoolean"] = "JSONBoolean";
|
|
34
|
+
SQLModernValueType["JSONString"] = "JSONString";
|
|
35
|
+
SQLModernValueType["JSONNumber"] = "JSONNumber";
|
|
36
|
+
/** [...] */
|
|
37
|
+
SQLModernValueType["JSONArray"] = "JSONArray";
|
|
38
|
+
/** {...} */
|
|
39
|
+
SQLModernValueType["JSONObject"] = "JSONObject";
|
|
40
|
+
})(SQLModernValueType || (exports.SQLModernValueType = SQLModernValueType = {}));
|
|
41
|
+
function createColumnFilter(column, childDefinitions) {
|
|
42
|
+
return (filter) => {
|
|
43
|
+
const compiler = childDefinitions ? (0, structures_1.filterDefinitionsToCompiler)(childDefinitions) : (0, structures_1.filterDefinitionsToCompiler)(exports.baseModernSQLFilterCompilers);
|
|
44
|
+
const runner = $andSQLFilterCompiler(filter, compiler);
|
|
45
|
+
return (_) => {
|
|
46
|
+
return runner({
|
|
47
|
+
nullable: false,
|
|
48
|
+
...column,
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function createWildcardColumnFilter(getColumn, childDefinitions) {
|
|
54
|
+
const wildcardCompiler = (filter, _, key) => {
|
|
55
|
+
const compiler = childDefinitions ? (0, structures_1.filterDefinitionsToCompiler)(childDefinitions(key)) : (0, structures_1.filterDefinitionsToCompiler)(exports.baseModernSQLFilterCompilers);
|
|
56
|
+
const runner = $andSQLFilterCompiler(filter, compiler);
|
|
57
|
+
return (_) => {
|
|
58
|
+
return runner({
|
|
59
|
+
nullable: false,
|
|
60
|
+
...getColumn(key),
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
return (filter) => {
|
|
65
|
+
return $andSQLFilterCompiler(filter, wildcardCompiler);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Filter with a subquery that should return at least one result.
|
|
70
|
+
*/
|
|
71
|
+
function createExistsFilter(baseSelect, definitions) {
|
|
72
|
+
return (filter, _) => {
|
|
73
|
+
if (filter !== null && typeof filter === 'object' && '$elemMatch' in filter) {
|
|
74
|
+
filter = filter['$elemMatch'];
|
|
75
|
+
}
|
|
76
|
+
const runner = compileToSQLRunner(filter, definitions);
|
|
77
|
+
return async (_) => {
|
|
78
|
+
const w = await runner({
|
|
79
|
+
expression: exports.SQLRootExpression,
|
|
80
|
+
type: SQLModernValueType.Table,
|
|
81
|
+
nullable: false,
|
|
82
|
+
});
|
|
83
|
+
const q = baseSelect.clone().andWhere(w);
|
|
84
|
+
return new SQLWhere_1.SQLWhereExists(q);
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* WARNING: only use this on one-to-one relations. Using it on one-to-many relations will result in duplicate results.
|
|
90
|
+
*
|
|
91
|
+
* 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)
|
|
92
|
+
*/
|
|
93
|
+
function createJoinedRelationFilter(join, definitions, options = { doesRelationAlwaysExist: true }) {
|
|
94
|
+
return (filter, _) => {
|
|
95
|
+
if (filter !== null && typeof filter === 'object' && '$elemMatch' in filter) {
|
|
96
|
+
filter = filter['$elemMatch'];
|
|
97
|
+
}
|
|
98
|
+
return async (_) => {
|
|
99
|
+
const w = await compileToModernSQLFilter(filter, definitions);
|
|
100
|
+
return new SQLWhere_1.SQLWhereJoin(join, w, {
|
|
101
|
+
doesRelationAlwaysExist: options.doesRelationAlwaysExist,
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function $andSQLFilterCompiler(filter, filters) {
|
|
107
|
+
const runners = compileSQLFilter(filter, filters);
|
|
108
|
+
return async (column) => {
|
|
109
|
+
const wheres = (await Promise.all(runners.map(runner => (runner(column)))));
|
|
110
|
+
return new SQLWhere_1.SQLWhereAnd(wheres);
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function $orSQLFilterCompiler(filter, filters) {
|
|
114
|
+
const runners = compileSQLFilter(filter, filters);
|
|
115
|
+
return async (column) => {
|
|
116
|
+
const wheres = (await Promise.all(runners.map(runner => (runner(column)))));
|
|
117
|
+
return new SQLWhere_1.SQLWhereOr(wheres);
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function $notSQLFilterCompiler(filter, filters) {
|
|
121
|
+
const andRunner = $andSQLFilterCompiler(filter, filters);
|
|
122
|
+
return async (column) => {
|
|
123
|
+
return new SQLWhere_1.SQLWhereNot(await andRunner(column));
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function invertFilterCompiler(compiler) {
|
|
127
|
+
return (filter, parentCompiler) => {
|
|
128
|
+
const runner = compiler(filter, parentCompiler);
|
|
129
|
+
return async (column) => {
|
|
130
|
+
return new SQLWhere_1.SQLWhereNot(await runner(column));
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
exports.baseModernSQLFilterCompilers = {
|
|
135
|
+
$and: $andSQLFilterCompiler,
|
|
136
|
+
$or: $orSQLFilterCompiler,
|
|
137
|
+
$not: $notSQLFilterCompiler,
|
|
138
|
+
$eq: compilers_1.$equalsSQLFilterCompiler,
|
|
139
|
+
$neq: invertFilterCompiler(compilers_1.$equalsSQLFilterCompiler),
|
|
140
|
+
$lt: compilers_1.$lessThanSQLFilterCompiler,
|
|
141
|
+
$gt: compilers_1.$greaterThanSQLFilterCompiler,
|
|
142
|
+
$lte: invertFilterCompiler(compilers_1.$greaterThanSQLFilterCompiler),
|
|
143
|
+
$gte: invertFilterCompiler(compilers_1.$lessThanSQLFilterCompiler),
|
|
144
|
+
$in: compilers_1.$inSQLFilterCompiler,
|
|
145
|
+
$contains: contains_1.$containsSQLFilterCompiler,
|
|
146
|
+
};
|
|
147
|
+
const compileSQLFilter = (structures_1.compileFilter);
|
|
148
|
+
exports.SQLRootExpression = {
|
|
149
|
+
getSQL(options) {
|
|
150
|
+
throw new simple_errors_1.SimpleError({
|
|
151
|
+
code: 'invalid_filter',
|
|
152
|
+
message: 'Root level filters are not allowed to use $eq or $neq',
|
|
153
|
+
});
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
function compileToSQLRunner(filter, definitions) {
|
|
157
|
+
if (filter === null) {
|
|
158
|
+
return () => {
|
|
159
|
+
return new SQLWhere_1.SQLWhereAnd([]); // No filter, return empty where
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
const compiler = (0, structures_1.filterDefinitionsToCompiler)(definitions); // this compiler searches in the definition for the right compiler for the given key
|
|
163
|
+
const runner = $andSQLFilterCompiler(filter, compiler);
|
|
164
|
+
return runner;
|
|
165
|
+
}
|
|
166
|
+
;
|
|
167
|
+
async function compileToModernSQLFilter(filter, filters) {
|
|
168
|
+
const runner = compileToSQLRunner(filter, filters);
|
|
169
|
+
return await runner({
|
|
170
|
+
expression: exports.SQLRootExpression,
|
|
171
|
+
type: SQLModernValueType.Table,
|
|
172
|
+
nullable: false,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
;
|
|
176
|
+
/**
|
|
177
|
+
* Casts json strings, numbers and booleans to native MySQL types. This includes json null to mysql null.
|
|
178
|
+
*/
|
|
179
|
+
function normalizeColumn(column) {
|
|
180
|
+
if (column.type === SQLModernValueType.JSONString) {
|
|
181
|
+
return {
|
|
182
|
+
expression: new SQLJsonExpressions_1.SQLJsonValue(column.expression, 'CHAR'),
|
|
183
|
+
type: SQLModernValueType.String,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (column.type === SQLModernValueType.JSONBoolean) {
|
|
187
|
+
return {
|
|
188
|
+
expression: new SQLJsonExpressions_1.SQLJsonValue(column.expression, 'UNSIGNED'),
|
|
189
|
+
type: SQLModernValueType.Boolean,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
if (column.type === SQLModernValueType.JSONNumber) {
|
|
193
|
+
return {
|
|
194
|
+
expression: new SQLJsonExpressions_1.SQLJsonValue(column.expression, 'UNSIGNED'),
|
|
195
|
+
type: SQLModernValueType.Number,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
return column;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=SQLModernFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQLModernFilter.js","sourceRoot":"","sources":["../../../../src/filters/modern/SQLModernFilter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contains.d.ts","sourceRoot":"","sources":["../../../../../src/filters/modern/compilers/contains.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIlF,OAAO,EAAqC,mBAAmB,EAAsB,MAAM,oBAAoB,CAAC;AAGhH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAkCvF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.$containsSQLFilterCompiler = $containsSQLFilterCompiler;
|
|
4
|
+
const simple_errors_1 = require("@simonbackx/simple-errors");
|
|
5
|
+
const structures_1 = require("@stamhoofd/structures");
|
|
6
|
+
const SQLExpressions_1 = require("../../../SQLExpressions");
|
|
7
|
+
const SQLJsonExpressions_1 = require("../../../SQLJsonExpressions");
|
|
8
|
+
const SQLWhere_1 = require("../../../SQLWhere");
|
|
9
|
+
const SQLModernFilter_1 = require("../SQLModernFilter");
|
|
10
|
+
const normalizeCompareValue_1 = require("../helpers/normalizeCompareValue");
|
|
11
|
+
function $containsSQLFilterCompiler(filter) {
|
|
12
|
+
return (originalColumn) => {
|
|
13
|
+
const column = (0, SQLModernFilter_1.normalizeColumn)(originalColumn);
|
|
14
|
+
const value = (0, normalizeCompareValue_1.normalizeCompareValue)((0, structures_1.assertFilterCompareValue)(filter), column.type);
|
|
15
|
+
if (typeof value !== 'string') {
|
|
16
|
+
throw new simple_errors_1.SimpleError({
|
|
17
|
+
code: 'invalid_filter',
|
|
18
|
+
message: 'Expected string at $contains filter',
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
if (column.type === SQLModernFilter_1.SQLModernValueType.JSONArray || column.type === SQLModernFilter_1.SQLModernValueType.JSONObject) {
|
|
22
|
+
// For JSON arrays and objects, we use JSON_CONTAINS
|
|
23
|
+
return new SQLWhere_1.SQLWhereEqual(new SQLJsonExpressions_1.SQLJsonSearch(new SQLExpressions_1.SQLLower(column.expression), 'one', (0, SQLExpressions_1.scalarToSQLExpression)('%' + SQLWhere_1.SQLWhereLike.escape(value) + '%')), SQLWhere_1.SQLWhereSign.NotEqual, new SQLExpressions_1.SQLNull());
|
|
24
|
+
}
|
|
25
|
+
return new SQLWhere_1.SQLWhereLike(column.expression, (0, SQLExpressions_1.scalarToSQLExpression)('%' + SQLWhere_1.SQLWhereLike.escape(value) + '%'));
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=contains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contains.js","sourceRoot":"","sources":["../../../../../src/filters/modern/compilers/contains.ts"],"names":[],"mappings":";;AAQA,gEAkCC;AA1CD,6DAAwD;AACxD,sDAAkF;AAClF,4DAAmF;AACnF,oEAA4D;AAC5D,gDAA8E;AAC9E,wDAAgH;AAChH,4EAAyE;AAEzE,SAAgB,0BAA0B,CAAC,MAAuB;IAC9D,OAAO,CAAC,cAAgC,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,IAAA,iCAAe,EAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAA,6CAAqB,EAAC,IAAA,qCAAwB,EAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAEnF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,2BAAW,CAAC;gBAClB,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,qCAAqC;aACjD,CAAC,CAAC;QACP,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,oCAAkB,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,oCAAkB,CAAC,UAAU,EAAE,CAAC;YAChG,oDAAoD;YACpD,OAAO,IAAI,wBAAa,CACpB,IAAI,kCAAa,CACb,IAAI,yBAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAC/B,KAAK,EACL,IAAA,sCAAqB,EACjB,GAAG,GAAG,uBAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CACzC,CACJ,EACD,uBAAY,CAAC,QAAQ,EACrB,IAAI,wBAAO,EAAE,CAChB,CAAC;QACN,CAAC;QAED,OAAO,IAAI,uBAAY,CACnB,MAAM,CAAC,UAAU,EACjB,IAAA,sCAAqB,EACjB,GAAG,GAAG,uBAAY,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/modern/compilers/equals.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIlF,OAAO,EAAqC,mBAAmB,EAAsB,MAAM,oBAAoB,CAAC;AAIhH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CA+DrF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.$equalsSQLFilterCompiler = $equalsSQLFilterCompiler;
|
|
4
|
+
const structures_1 = require("@stamhoofd/structures");
|
|
5
|
+
const SQLExpressions_1 = require("../../../SQLExpressions");
|
|
6
|
+
const SQLJsonExpressions_1 = require("../../../SQLJsonExpressions");
|
|
7
|
+
const SQLWhere_1 = require("../../../SQLWhere");
|
|
8
|
+
const SQLModernFilter_1 = require("../SQLModernFilter");
|
|
9
|
+
const isJSONColumn_1 = require("../helpers/isJSONColumn");
|
|
10
|
+
const normalizeCompareValue_1 = require("../helpers/normalizeCompareValue");
|
|
11
|
+
function $equalsSQLFilterCompiler(filter) {
|
|
12
|
+
return (originalColumn) => {
|
|
13
|
+
const column = (0, SQLModernFilter_1.normalizeColumn)(originalColumn);
|
|
14
|
+
const value = (0, normalizeCompareValue_1.normalizeCompareValue)((0, structures_1.assertFilterCompareValue)(filter), column.type);
|
|
15
|
+
/**
|
|
16
|
+
* Special case, checking for equality with a JSON array.
|
|
17
|
+
* This should return true if the JSON array contains the value exactly.
|
|
18
|
+
*
|
|
19
|
+
* This differs from $contains, which will check for 'LIKE' inside the JSON array.
|
|
20
|
+
*/
|
|
21
|
+
if (column.type === SQLModernFilter_1.SQLModernValueType.JSONArray) {
|
|
22
|
+
let where;
|
|
23
|
+
if (typeof value === 'string') {
|
|
24
|
+
where = new SQLWhere_1.SQLWhereEqual(new SQLJsonExpressions_1.SQLJsonSearch(new SQLExpressions_1.SQLLower(column.expression), 'one', (0, SQLExpressions_1.scalarToSQLExpression)(SQLWhere_1.SQLWhereLike.escape(value))), SQLWhere_1.SQLWhereSign.NotEqual, new SQLExpressions_1.SQLNull());
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
where = new SQLJsonExpressions_1.SQLJsonContains(column.expression, (0, SQLExpressions_1.scalarToSQLExpression)(JSON.stringify(value)));
|
|
28
|
+
}
|
|
29
|
+
// If comparing against null, also check for native MySQL null (the column does not exist)
|
|
30
|
+
if (value === null) {
|
|
31
|
+
where = new SQLWhere_1.SQLWhereOr([
|
|
32
|
+
where,
|
|
33
|
+
new SQLWhere_1.SQLWhereEqual(column.expression, SQLWhere_1.SQLWhereSign.Equal, new SQLExpressions_1.SQLNull()),
|
|
34
|
+
]);
|
|
35
|
+
}
|
|
36
|
+
return where;
|
|
37
|
+
}
|
|
38
|
+
if (value === null && (0, isJSONColumn_1.isJSONColumn)(column)) {
|
|
39
|
+
// JSON values can either resolve to null or "null" in MySQL.
|
|
40
|
+
return new SQLWhere_1.SQLWhereEqual(new SQLJsonExpressions_1.SQLJsonValue(column.expression), // casts json null to null, including invalid paths
|
|
41
|
+
SQLWhere_1.SQLWhereSign.Equal, new SQLExpressions_1.SQLNull());
|
|
42
|
+
}
|
|
43
|
+
return new SQLWhere_1.SQLWhereEqual(column.expression, SQLWhere_1.SQLWhereSign.Equal, (0, SQLExpressions_1.scalarToSQLExpression)(value));
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=equals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equals.js","sourceRoot":"","sources":["../../../../../src/filters/modern/compilers/equals.ts"],"names":[],"mappings":";;AAQA,4DA+DC;AAvED,sDAAkF;AAClF,4DAAmF;AACnF,oEAA2F;AAC3F,gDAAoG;AACpG,wDAAgH;AAChH,0DAAuD;AACvD,4EAAyE;AAEzE,SAAgB,wBAAwB,CAAC,MAAuB;IAC5D,OAAO,CAAC,cAAgC,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,IAAA,iCAAe,EAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAA,6CAAqB,EAAC,IAAA,qCAAwB,EAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACnF;;;;;WAKG;QACH,IAAI,MAAM,CAAC,IAAI,KAAK,oCAAkB,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,KAAe,CAAC;YAEpB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,KAAK,GAAG,IAAI,wBAAa,CACrB,IAAI,kCAAa,CACb,IAAI,yBAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAC/B,KAAK,EACL,IAAA,sCAAqB,EACjB,uBAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAC7B,CACJ,EACD,uBAAY,CAAC,QAAQ,EACrB,IAAI,wBAAO,EAAE,CAChB,CAAC;YACN,CAAC;iBACI,CAAC;gBACF,KAAK,GAAG,IAAI,oCAAe,CACvB,MAAM,CAAC,UAAU,EACjB,IAAA,sCAAqB,EAAC,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,qBAAU,CAAC;oBACnB,KAAK;oBACL,IAAI,wBAAa,CACb,MAAM,CAAC,UAAU,EACjB,uBAAY,CAAC,KAAK,EAClB,IAAI,wBAAO,EAAE,CAChB;iBACJ,CAAC,CAAC;YACP,CAAC;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,KAAK,KAAK,IAAI,IAAI,IAAA,2BAAY,EAAC,MAAM,CAAC,EAAE,CAAC;YACzC,6DAA6D;YAC7D,OAAO,IAAI,wBAAa,CACpB,IAAI,iCAAY,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,mDAAmD;YACxF,uBAAY,CAAC,KAAK,EAClB,IAAI,wBAAO,EAAE,CAChB,CAAC;QACN,CAAC;QAED,OAAO,IAAI,wBAAa,CACpB,MAAM,CAAC,UAAU,EACjB,uBAAY,CAAC,KAAK,EAClB,IAAA,sCAAqB,EAAC,KAAK,CAAC,CAC/B,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"greater.d.ts","sourceRoot":"","sources":["../../../../../src/filters/modern/compilers/greater.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGlF,OAAO,EAAqC,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG5F,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAa1F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.$greaterThanSQLFilterCompiler = $greaterThanSQLFilterCompiler;
|
|
4
|
+
const structures_1 = require("@stamhoofd/structures");
|
|
5
|
+
const SQLExpressions_1 = require("../../../SQLExpressions");
|
|
6
|
+
const SQLWhere_1 = require("../../../SQLWhere");
|
|
7
|
+
const SQLModernFilter_1 = require("../SQLModernFilter");
|
|
8
|
+
const normalizeCompareValue_1 = require("../helpers/normalizeCompareValue");
|
|
9
|
+
function $greaterThanSQLFilterCompiler(filter) {
|
|
10
|
+
return (originalColumn) => {
|
|
11
|
+
const column = (0, SQLModernFilter_1.normalizeColumn)(originalColumn);
|
|
12
|
+
const value = (0, normalizeCompareValue_1.normalizeCompareValue)((0, structures_1.assertFilterCompareValue)(filter), column.type);
|
|
13
|
+
const base = new SQLWhere_1.SQLWhereEqual(column.expression, SQLWhere_1.SQLWhereSign.Greater, (0, SQLExpressions_1.scalarToSQLExpression)(value)).setNullable(column.nullable);
|
|
14
|
+
return base;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=greater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"greater.js","sourceRoot":"","sources":["../../../../../src/filters/modern/compilers/greater.ts"],"names":[],"mappings":";;AAMA,sEAaC;AAnBD,sDAAkF;AAClF,4DAAgE;AAChE,gDAAgE;AAChE,wDAA4F;AAC5F,4EAAyE;AAEzE,SAAgB,6BAA6B,CAAC,MAAuB;IACjE,OAAO,CAAC,cAAgC,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,IAAA,iCAAe,EAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAA,6CAAqB,EAAC,IAAA,qCAAwB,EAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAEnF,MAAM,IAAI,GAAG,IAAI,wBAAa,CAC1B,MAAM,CAAC,UAAU,EACjB,uBAAY,CAAC,OAAO,EACpB,IAAA,sCAAqB,EAAC,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/modern/compilers/in.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIlF,OAAO,EAAqC,mBAAmB,EAAsB,MAAM,oBAAoB,CAAC;AAIhH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAoDjF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.$inSQLFilterCompiler = $inSQLFilterCompiler;
|
|
4
|
+
const simple_errors_1 = require("@simonbackx/simple-errors");
|
|
5
|
+
const structures_1 = require("@stamhoofd/structures");
|
|
6
|
+
const SQLExpressions_1 = require("../../../SQLExpressions");
|
|
7
|
+
const SQLJsonExpressions_1 = require("../../../SQLJsonExpressions");
|
|
8
|
+
const SQLWhere_1 = require("../../../SQLWhere");
|
|
9
|
+
const SQLModernFilter_1 = require("../SQLModernFilter");
|
|
10
|
+
const normalizeCompareValue_1 = require("../helpers/normalizeCompareValue");
|
|
11
|
+
const equals_1 = require("./equals");
|
|
12
|
+
function $inSQLFilterCompiler(filter) {
|
|
13
|
+
return (originalColumn) => {
|
|
14
|
+
if (!Array.isArray(filter)) {
|
|
15
|
+
throw new simple_errors_1.SimpleError({
|
|
16
|
+
code: 'invalid_filter',
|
|
17
|
+
message: 'Expected array at $in filter',
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
if (filter.length > 100) {
|
|
21
|
+
throw new simple_errors_1.SimpleError({
|
|
22
|
+
code: 'invalid_filter',
|
|
23
|
+
message: 'Too many values in $in filter, maximum is 100',
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const column = (0, SQLModernFilter_1.normalizeColumn)(originalColumn);
|
|
27
|
+
const values = filter.map(val => (0, normalizeCompareValue_1.normalizeCompareValue)((0, structures_1.assertFilterCompareValue)(val), column.type));
|
|
28
|
+
if (values.length === 0) {
|
|
29
|
+
// Return always false
|
|
30
|
+
return new SQLWhere_1.SQLWhereOr([]);
|
|
31
|
+
}
|
|
32
|
+
const valuesWithoutNulls = values.filter(val => val !== null);
|
|
33
|
+
const hasNull = values.length !== valuesWithoutNulls.length;
|
|
34
|
+
if (hasNull) {
|
|
35
|
+
// 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).
|
|
36
|
+
return new SQLWhere_1.SQLWhereOr([
|
|
37
|
+
(0, equals_1.$equalsSQLFilterCompiler)(null)(column),
|
|
38
|
+
$inSQLFilterCompiler(valuesWithoutNulls)(column),
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
if (column.type === SQLModernFilter_1.SQLModernValueType.JSONArray) {
|
|
42
|
+
const jsonValues = JSON.stringify(valuesWithoutNulls);
|
|
43
|
+
const valuesExpression = (0, SQLExpressions_1.scalarToSQLExpression)(jsonValues);
|
|
44
|
+
return new SQLJsonExpressions_1.SQLJsonOverlaps(column.expression, valuesExpression);
|
|
45
|
+
}
|
|
46
|
+
const valuesExpression = valuesWithoutNulls.length === 1 ? (0, SQLExpressions_1.scalarToSQLExpression)(valuesWithoutNulls[0]) : new SQLExpressions_1.SQLArray(valuesWithoutNulls);
|
|
47
|
+
return new SQLWhere_1.SQLWhereEqual(column.expression, SQLWhere_1.SQLWhereSign.Equal, valuesExpression);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=in.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in.js","sourceRoot":"","sources":["../../../../../src/filters/modern/compilers/in.ts"],"names":[],"mappings":";;AASA,oDAoDC;AA7DD,6DAAwD;AACxD,sDAAkF;AAClF,4DAA0E;AAC1E,oEAA8D;AAC9D,gDAA4E;AAC5E,wDAAgH;AAChH,4EAAyE;AACzE,qCAAoD;AAEpD,SAAgB,oBAAoB,CAAC,MAAuB;IACxD,OAAO,CAAC,cAAgC,EAAE,EAAE;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,2BAAW,CAAC;gBAClB,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,8BAA8B;aAC1C,CAAC,CAAC;QACP,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACtB,MAAM,IAAI,2BAAW,CAAC;gBAClB,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,+CAA+C;aAC3D,CAAC,CAAC;QACP,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,iCAAe,EAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAA,6CAAqB,EAAC,IAAA,qCAAwB,EAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,sBAAsB;YACtB,OAAO,IAAI,qBAAU,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,kBAAkB,CAAC,MAAM,CAAC;QAE5D,IAAI,OAAO,EAAE,CAAC;YACV,2IAA2I;YAC3I,OAAO,IAAI,qBAAU,CAAC;gBAClB,IAAA,iCAAwB,EAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBACtC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC;aACnD,CAAC,CAAC;QACP,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,oCAAkB,CAAC,SAAS,EAAE,CAAC;YAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;YACtD,MAAM,gBAAgB,GAAG,IAAA,sCAAqB,EAAC,UAAU,CAAC,CAAC;YAE3D,OAAO,IAAI,oCAAe,CACtB,MAAM,CAAC,UAAU,EACjB,gBAAgB,CACnB,CAAC;QACN,CAAC;QACD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAA,sCAAqB,EAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,yBAAQ,CAAC,kBAAkB,CAAC,CAAC;QAE3I,OAAO,IAAI,wBAAa,CACpB,MAAM,CAAC,UAAU,EACjB,uBAAY,CAAC,KAAK,EAClB,gBAAgB,CACnB,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/filters/modern/compilers/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,MAAM,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./less"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./greater"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./equals"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./in"), exports);
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/filters/modern/compilers/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,oDAA0B;AAC1B,mDAAyB;AACzB,+CAAqB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"less.d.ts","sourceRoot":"","sources":["../../../../../src/filters/modern/compilers/less.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGlF,OAAO,EAAqC,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG5F,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAYvF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.$lessThanSQLFilterCompiler = $lessThanSQLFilterCompiler;
|
|
4
|
+
const structures_1 = require("@stamhoofd/structures");
|
|
5
|
+
const SQLExpressions_1 = require("../../../SQLExpressions");
|
|
6
|
+
const SQLWhere_1 = require("../../../SQLWhere");
|
|
7
|
+
const SQLModernFilter_1 = require("../SQLModernFilter");
|
|
8
|
+
const normalizeCompareValue_1 = require("../helpers/normalizeCompareValue");
|
|
9
|
+
function $lessThanSQLFilterCompiler(filter) {
|
|
10
|
+
return (originalColumn) => {
|
|
11
|
+
const column = (0, SQLModernFilter_1.normalizeColumn)(originalColumn);
|
|
12
|
+
const value = (0, normalizeCompareValue_1.normalizeCompareValue)((0, structures_1.assertFilterCompareValue)(filter), column.type);
|
|
13
|
+
const base = new SQLWhere_1.SQLWhereEqual(column.expression, SQLWhere_1.SQLWhereSign.Less, (0, SQLExpressions_1.scalarToSQLExpression)(value)).setNullable(column.nullable);
|
|
14
|
+
return base;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=less.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"less.js","sourceRoot":"","sources":["../../../../../src/filters/modern/compilers/less.ts"],"names":[],"mappings":";;AAMA,gEAYC;AAlBD,sDAAkF;AAClF,4DAAgE;AAChE,gDAAgE;AAChE,wDAA4F;AAC5F,4EAAyE;AAEzE,SAAgB,0BAA0B,CAAC,MAAuB;IAC9D,OAAO,CAAC,cAAgC,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,IAAA,iCAAe,EAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAA,6CAAqB,EAAC,IAAA,qCAAwB,EAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAEnF,MAAM,IAAI,GAAG,IAAI,wBAAa,CAC1B,MAAM,CAAC,UAAU,EACjB,uBAAY,CAAC,IAAI,EACjB,IAAA,sCAAqB,EAAC,KAAK,CAAC,CAC/B,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isJSONColumn.d.ts","sourceRoot":"","sources":["../../../../../src/filters/modern/helpers/isJSONColumn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAEhE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAM5D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isJSONColumn = isJSONColumn;
|
|
4
|
+
exports.isJSONType = isJSONType;
|
|
5
|
+
const SQLModernFilter_1 = require("../SQLModernFilter");
|
|
6
|
+
function isJSONColumn({ type }) {
|
|
7
|
+
return isJSONType(type);
|
|
8
|
+
}
|
|
9
|
+
function isJSONType(type) {
|
|
10
|
+
return type === SQLModernFilter_1.SQLModernValueType.JSONString
|
|
11
|
+
|| type === SQLModernFilter_1.SQLModernValueType.JSONBoolean
|
|
12
|
+
|| type === SQLModernFilter_1.SQLModernValueType.JSONNumber
|
|
13
|
+
|| type === SQLModernFilter_1.SQLModernValueType.JSONArray
|
|
14
|
+
|| type === SQLModernFilter_1.SQLModernValueType.JSONObject;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=isJSONColumn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isJSONColumn.js","sourceRoot":"","sources":["../../../../../src/filters/modern/helpers/isJSONColumn.ts"],"names":[],"mappings":";;AAEA,oCAEC;AAED,gCAMC;AAZD,wDAA0E;AAE1E,SAAgB,YAAY,CAAC,EAAE,IAAI,EAAoB;IACnD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAgB,UAAU,CAAC,IAAwB;IAC/C,OAAO,IAAI,KAAK,oCAAkB,CAAC,UAAU;WACtC,IAAI,KAAK,oCAAkB,CAAC,WAAW;WACvC,IAAI,KAAK,oCAAkB,CAAC,UAAU;WACtC,IAAI,KAAK,oCAAkB,CAAC,SAAS;WACrC,IAAI,KAAK,oCAAkB,CAAC,UAAU,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { StamhoofdCompareValue } from '@stamhoofd/structures';
|
|
2
|
+
import { SQLModernValueType } from '../SQLModernFilter';
|
|
3
|
+
/**
|
|
4
|
+
* Prepares a compare value so we can compare it, given a certain column type.
|
|
5
|
+
*
|
|
6
|
+
* E.g. if you pass in true - and we are comparing against a mysql boolean column, convert it to 1.
|
|
7
|
+
*/
|
|
8
|
+
export declare function normalizeCompareValue(val: StamhoofdCompareValue, againstType: SQLModernValueType): string | number | Date | null | boolean;
|
|
9
|
+
//# sourceMappingURL=normalizeCompareValue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeCompareValue.d.ts","sourceRoot":"","sources":["../../../../../src/filters/modern/helpers/normalizeCompareValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,qBAAqB,EAAE,WAAW,EAAE,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAsF1I"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeCompareValue = normalizeCompareValue;
|
|
4
|
+
const SQLModernFilter_1 = require("../SQLModernFilter");
|
|
5
|
+
/**
|
|
6
|
+
* Prepares a compare value so we can compare it, given a certain column type.
|
|
7
|
+
*
|
|
8
|
+
* E.g. if you pass in true - and we are comparing against a mysql boolean column, convert it to 1.
|
|
9
|
+
*/
|
|
10
|
+
function normalizeCompareValue(val, againstType) {
|
|
11
|
+
if (againstType === SQLModernFilter_1.SQLModernValueType.Table) {
|
|
12
|
+
throw new Error('Cannot compare at root level');
|
|
13
|
+
}
|
|
14
|
+
if (againstType === SQLModernFilter_1.SQLModernValueType.JSONObject) {
|
|
15
|
+
if (val === null) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
throw new Error('Cannot compare with a JSON object');
|
|
19
|
+
}
|
|
20
|
+
if (val instanceof Date) {
|
|
21
|
+
if (againstType === SQLModernFilter_1.SQLModernValueType.Datetime) {
|
|
22
|
+
return val;
|
|
23
|
+
}
|
|
24
|
+
throw new Error('Cannot compare a date with a non-datetime column');
|
|
25
|
+
}
|
|
26
|
+
if (typeof val === 'string') {
|
|
27
|
+
if (againstType === SQLModernFilter_1.SQLModernValueType.String || againstType === SQLModernFilter_1.SQLModernValueType.JSONString) {
|
|
28
|
+
return val.toLocaleLowerCase();
|
|
29
|
+
}
|
|
30
|
+
if (againstType === SQLModernFilter_1.SQLModernValueType.JSONArray) {
|
|
31
|
+
// We'll search inside the array
|
|
32
|
+
return val.toLocaleLowerCase();
|
|
33
|
+
}
|
|
34
|
+
throw new Error('Cannot compare a string with a non-string column');
|
|
35
|
+
}
|
|
36
|
+
if (typeof val === 'boolean') {
|
|
37
|
+
if (againstType === SQLModernFilter_1.SQLModernValueType.JSONBoolean) {
|
|
38
|
+
return val;
|
|
39
|
+
}
|
|
40
|
+
if (againstType === SQLModernFilter_1.SQLModernValueType.Boolean || againstType === SQLModernFilter_1.SQLModernValueType.Number) {
|
|
41
|
+
return val === true ? 1 : 0;
|
|
42
|
+
}
|
|
43
|
+
if (againstType === SQLModernFilter_1.SQLModernValueType.JSONArray) {
|
|
44
|
+
// We'll search inside the array
|
|
45
|
+
return val;
|
|
46
|
+
}
|
|
47
|
+
throw new Error('Cannot compare a boolean with a non-boolean column');
|
|
48
|
+
}
|
|
49
|
+
if (typeof val === 'number') {
|
|
50
|
+
if (againstType === SQLModernFilter_1.SQLModernValueType.JSONBoolean) {
|
|
51
|
+
return val === 1 ? true : false;
|
|
52
|
+
}
|
|
53
|
+
if (againstType === SQLModernFilter_1.SQLModernValueType.Boolean) {
|
|
54
|
+
if (val !== 1 && val !== 0) {
|
|
55
|
+
throw new Error('Cannot compare a number with a boolean column');
|
|
56
|
+
}
|
|
57
|
+
return val;
|
|
58
|
+
}
|
|
59
|
+
if (againstType === SQLModernFilter_1.SQLModernValueType.Number || againstType === SQLModernFilter_1.SQLModernValueType.JSONNumber) {
|
|
60
|
+
return val;
|
|
61
|
+
}
|
|
62
|
+
if (againstType === SQLModernFilter_1.SQLModernValueType.JSONArray) {
|
|
63
|
+
// We'll search inside the array
|
|
64
|
+
return val;
|
|
65
|
+
}
|
|
66
|
+
throw new Error('Cannot compare a number with a non-number column');
|
|
67
|
+
}
|
|
68
|
+
if (val === null) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
if (typeof val === 'object' && '$' in val) {
|
|
72
|
+
const specialValue = val['$'];
|
|
73
|
+
switch (specialValue) {
|
|
74
|
+
case '$now':
|
|
75
|
+
return normalizeCompareValue(new Date(), againstType);
|
|
76
|
+
default:
|
|
77
|
+
throw new Error('Unsupported magic value ' + specialValue);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return val;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=normalizeCompareValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeCompareValue.js","sourceRoot":"","sources":["../../../../../src/filters/modern/helpers/normalizeCompareValue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"$and.test.d.ts","sourceRoot":"","sources":["../../../tests/filters/$and.test.ts"],"names":[],"mappings":""}
|