@stamhoofd/sql 2.89.2 → 2.90.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 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -10
- package/dist/index.js.map +1 -1
- package/dist/src/SQLJsonExpressions.d.ts +2 -0
- package/dist/src/SQLJsonExpressions.d.ts.map +1 -1
- package/dist/src/SQLJsonExpressions.js +8 -0
- package/dist/src/SQLJsonExpressions.js.map +1 -1
- package/dist/src/SQLSelect.d.ts.map +1 -1
- package/dist/src/SQLSelect.js +7 -0
- package/dist/src/SQLSelect.js.map +1 -1
- package/dist/src/SQLWhere.d.ts +6 -0
- package/dist/src/SQLWhere.d.ts.map +1 -1
- package/dist/src/SQLWhere.js +39 -1
- package/dist/src/SQLWhere.js.map +1 -1
- package/dist/src/filters/SQLFilter.d.ts +61 -25
- package/dist/src/filters/SQLFilter.d.ts.map +1 -1
- package/dist/src/filters/SQLFilter.js +183 -380
- package/dist/src/filters/SQLFilter.js.map +1 -1
- package/dist/src/filters/{modern/compilers → compilers}/contains.d.ts +1 -1
- package/dist/src/filters/compilers/contains.d.ts.map +1 -0
- package/dist/src/filters/{modern/compilers → compilers}/contains.js +6 -6
- package/dist/src/filters/compilers/contains.js.map +1 -0
- package/dist/src/filters/{modern/compilers → compilers}/equals.d.ts +1 -1
- package/dist/src/filters/compilers/equals.d.ts.map +1 -0
- package/dist/src/filters/{modern/compilers → compilers}/equals.js +7 -7
- package/dist/src/filters/compilers/equals.js.map +1 -0
- package/dist/src/filters/{modern/compilers → compilers}/greater.d.ts +1 -1
- package/dist/src/filters/compilers/greater.d.ts.map +1 -0
- package/dist/src/filters/{modern/compilers → compilers}/greater.js +4 -4
- package/dist/src/filters/compilers/greater.js.map +1 -0
- package/dist/src/filters/{modern/compilers → compilers}/in.d.ts +1 -1
- package/dist/src/filters/compilers/in.d.ts.map +1 -0
- package/dist/src/filters/{modern/compilers → compilers}/in.js +7 -7
- package/dist/src/filters/compilers/in.js.map +1 -0
- package/dist/src/filters/compilers/index.d.ts.map +1 -0
- package/dist/src/filters/compilers/index.js.map +1 -0
- package/dist/src/filters/{modern/compilers → compilers}/less.d.ts +1 -1
- package/dist/src/filters/compilers/less.d.ts.map +1 -0
- package/dist/src/filters/{modern/compilers → compilers}/less.js +4 -4
- package/dist/src/filters/compilers/less.js.map +1 -0
- package/dist/src/filters/helpers/isJSONColumn.d.ts +4 -0
- package/dist/src/filters/helpers/isJSONColumn.d.ts.map +1 -0
- package/dist/src/filters/helpers/isJSONColumn.js +16 -0
- package/dist/src/filters/helpers/isJSONColumn.js.map +1 -0
- package/dist/src/filters/{modern/helpers → helpers}/normalizeCompareValue.d.ts +2 -2
- package/dist/src/filters/helpers/normalizeCompareValue.d.ts.map +1 -0
- package/dist/src/filters/{modern/helpers → helpers}/normalizeCompareValue.js +13 -13
- package/dist/src/filters/helpers/normalizeCompareValue.js.map +1 -0
- package/dist/tests/filters/$and.test.js +49 -18
- package/dist/tests/filters/$and.test.js.map +1 -1
- package/dist/tests/filters/$contains.test.js +20 -20
- package/dist/tests/filters/$contains.test.js.map +1 -1
- package/dist/tests/filters/$eq.test.js +59 -53
- package/dist/tests/filters/$eq.test.js.map +1 -1
- package/dist/tests/filters/$gt.test.js +18 -18
- package/dist/tests/filters/$gt.test.js.map +1 -1
- package/dist/tests/filters/$gte.test.js +14 -14
- package/dist/tests/filters/$gte.test.js.map +1 -1
- package/dist/tests/filters/$in.test.js +24 -24
- package/dist/tests/filters/$in.test.js.map +1 -1
- package/dist/tests/filters/$lt.test.js +14 -14
- package/dist/tests/filters/$lt.test.js.map +1 -1
- package/dist/tests/filters/$lte.test.js +14 -14
- package/dist/tests/filters/$lte.test.js.map +1 -1
- package/dist/tests/filters/$neq.test.js +3 -3
- package/dist/tests/filters/$neq.test.js.map +1 -1
- package/dist/tests/filters/$not.test.js +5 -5
- package/dist/tests/filters/$not.test.js.map +1 -1
- package/dist/tests/filters/$or.test.js +16 -16
- package/dist/tests/filters/$or.test.js.map +1 -1
- package/dist/tests/filters/dot-syntax.test.js +10 -10
- package/dist/tests/filters/dot-syntax.test.js.map +1 -1
- package/dist/tests/filters/exists.test.js +16 -16
- package/dist/tests/filters/exists.test.js.map +1 -1
- package/dist/tests/filters/joined-relations.test.js +31 -31
- package/dist/tests/filters/joined-relations.test.js.map +1 -1
- package/dist/tests/filters/special-cases.test.js +11 -11
- package/dist/tests/filters/special-cases.test.js.map +1 -1
- package/dist/tests/filters/wildcard.test.js +8 -8
- package/dist/tests/filters/wildcard.test.js.map +1 -1
- package/dist/tests/utils/index.d.ts +7 -7
- package/dist/tests/utils/index.d.ts.map +1 -1
- package/dist/tests/utils/index.js +6 -6
- package/dist/tests/utils/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/SQLJsonExpressions.ts +10 -0
- package/src/SQLSelect.ts +9 -0
- package/src/SQLWhere.ts +48 -1
- package/src/filters/SQLFilter.ts +203 -485
- package/src/filters/{modern/compilers → compilers}/contains.ts +5 -5
- package/src/filters/{modern/compilers → compilers}/equals.ts +6 -6
- package/src/filters/{modern/compilers → compilers}/greater.ts +3 -3
- package/src/filters/{modern/compilers → compilers}/in.ts +6 -6
- package/src/filters/{modern/compilers → compilers}/less.ts +3 -3
- package/src/filters/helpers/isJSONColumn.ts +13 -0
- package/src/filters/{modern/helpers → helpers}/normalizeCompareValue.ts +14 -14
- package/dist/src/filters/modern/SQLModernFilter.d.ts +0 -73
- package/dist/src/filters/modern/SQLModernFilter.d.ts.map +0 -1
- package/dist/src/filters/modern/SQLModernFilter.js +0 -200
- package/dist/src/filters/modern/SQLModernFilter.js.map +0 -1
- package/dist/src/filters/modern/compilers/contains.d.ts.map +0 -1
- package/dist/src/filters/modern/compilers/contains.js.map +0 -1
- package/dist/src/filters/modern/compilers/equals.d.ts.map +0 -1
- package/dist/src/filters/modern/compilers/equals.js.map +0 -1
- package/dist/src/filters/modern/compilers/greater.d.ts.map +0 -1
- package/dist/src/filters/modern/compilers/greater.js.map +0 -1
- package/dist/src/filters/modern/compilers/in.d.ts.map +0 -1
- package/dist/src/filters/modern/compilers/in.js.map +0 -1
- package/dist/src/filters/modern/compilers/index.d.ts.map +0 -1
- package/dist/src/filters/modern/compilers/index.js.map +0 -1
- package/dist/src/filters/modern/compilers/less.d.ts.map +0 -1
- package/dist/src/filters/modern/compilers/less.js.map +0 -1
- package/dist/src/filters/modern/helpers/isJSONColumn.d.ts +0 -4
- package/dist/src/filters/modern/helpers/isJSONColumn.d.ts.map +0 -1
- package/dist/src/filters/modern/helpers/isJSONColumn.js +0 -16
- package/dist/src/filters/modern/helpers/isJSONColumn.js.map +0 -1
- package/dist/src/filters/modern/helpers/normalizeCompareValue.d.ts.map +0 -1
- package/dist/src/filters/modern/helpers/normalizeCompareValue.js.map +0 -1
- package/src/filters/modern/SQLModernFilter.ts +0 -256
- package/src/filters/modern/helpers/isJSONColumn.ts +0 -13
- /package/dist/src/filters/{modern/compilers → compilers}/index.d.ts +0 -0
- /package/dist/src/filters/{modern/compilers → compilers}/index.js +0 -0
- /package/src/filters/{modern/compilers → compilers}/index.ts +0 -0
|
@@ -10,17 +10,17 @@ exports.createTableDefinition = createTableDefinition;
|
|
|
10
10
|
exports.testMatch = testMatch;
|
|
11
11
|
const simple_database_1 = require("@simonbackx/simple-database");
|
|
12
12
|
const test_utils_1 = require("@stamhoofd/test-utils");
|
|
13
|
-
const
|
|
13
|
+
const SQLFilter_1 = require("../../src/filters/SQLFilter");
|
|
14
14
|
const SQL_1 = require("../../src/SQL");
|
|
15
15
|
const SQLWhere_1 = require("../../src/SQLWhere");
|
|
16
16
|
async function testError({ filter, filters, error }) {
|
|
17
|
-
await expect((0,
|
|
17
|
+
await expect((0, SQLFilter_1.compileToSQLFilter)(filter, filters)).rejects.toThrow(error);
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* Only compares the WHERE clause of the query.
|
|
21
21
|
*/
|
|
22
22
|
async function test({ filter, filters, query }) {
|
|
23
|
-
const where = await (0,
|
|
23
|
+
const where = await (0, SQLFilter_1.compileToSQLFilter)(filter, filters);
|
|
24
24
|
if (where.isAlways === false) {
|
|
25
25
|
doesQueryMatch('', query);
|
|
26
26
|
return;
|
|
@@ -39,7 +39,7 @@ async function test({ filter, filters, query }) {
|
|
|
39
39
|
* Use to also test joins. This will use `test_table` as the table name in your query.
|
|
40
40
|
*/
|
|
41
41
|
async function testSelect({ filter, filters, query }) {
|
|
42
|
-
const where = await (0,
|
|
42
|
+
const where = await (0, SQLFilter_1.compileToSQLFilter)(filter, filters);
|
|
43
43
|
if (where.isAlways === false) {
|
|
44
44
|
doesQueryMatch('', query);
|
|
45
45
|
return;
|
|
@@ -147,7 +147,7 @@ async function testMatch({ tableDefinition, rows, doMatch, doNotMatch, filters }
|
|
|
147
147
|
// Run queries
|
|
148
148
|
try {
|
|
149
149
|
for (const filter of doMatch ?? []) {
|
|
150
|
-
const where = await (0,
|
|
150
|
+
const where = await (0, SQLFilter_1.compileToSQLFilter)(filter, filters);
|
|
151
151
|
const select = SQL_1.SQL.select().from(tableName).where(where);
|
|
152
152
|
let results;
|
|
153
153
|
try {
|
|
@@ -168,7 +168,7 @@ async function testMatch({ tableDefinition, rows, doMatch, doNotMatch, filters }
|
|
|
168
168
|
}).toMatchSnapshot('SQL Query for filter: ' + JSON.stringify(filter));
|
|
169
169
|
}
|
|
170
170
|
for (const filter of doNotMatch ?? []) {
|
|
171
|
-
const where = await (0,
|
|
171
|
+
const where = await (0, SQLFilter_1.compileToSQLFilter)(filter, filters);
|
|
172
172
|
const select = SQL_1.SQL.select().from(tableName).where(where);
|
|
173
173
|
let results;
|
|
174
174
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../tests/utils/index.ts"],"names":[],"mappings":";;AAUA,8BAIC;AAKD,oBAiBC;AAKD,gCAqBC;AAED,oCAQC;AAED,gDAQC;AAED,wCASC;AAID,sDAMC;AA0BD,8BAoGC;AArOD,iEAA+E;AAG/E,sDAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../tests/utils/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/queryablemodel.ts","../src/sql.ts","../src/sqldelete.ts","../src/sqlexpression.ts","../src/sqlexpressions.ts","../src/sqlinsert.ts","../src/sqljoin.ts","../src/sqljsonexpressions.ts","../src/sqlorderby.ts","../src/sqlselect.ts","../src/sqlupdate.ts","../src/sqlwhere.ts","../src/filters/sqlfilter.ts","../src/filters/sqlsorter.ts","../src/filters/
|
|
1
|
+
{"root":["../src/queryablemodel.ts","../src/sql.ts","../src/sqldelete.ts","../src/sqlexpression.ts","../src/sqlexpressions.ts","../src/sqlinsert.ts","../src/sqljoin.ts","../src/sqljsonexpressions.ts","../src/sqlorderby.ts","../src/sqlselect.ts","../src/sqlupdate.ts","../src/sqlwhere.ts","../src/filters/sqlfilter.ts","../src/filters/sqlsorter.ts","../src/filters/compilers/contains.ts","../src/filters/compilers/equals.ts","../src/filters/compilers/greater.ts","../src/filters/compilers/in.ts","../src/filters/compilers/index.ts","../src/filters/compilers/less.ts","../src/filters/helpers/isjsoncolumn.ts","../src/filters/helpers/normalizecomparevalue.ts","../tests/jest.global.setup.ts","../tests/jest.setup.ts","../tests/filters/$and.test.ts","../tests/filters/$contains.test.ts","../tests/filters/$eq.test.ts","../tests/filters/$gt.test.ts","../tests/filters/$gte.test.ts","../tests/filters/$in.test.ts","../tests/filters/$lt.test.ts","../tests/filters/$lte.test.ts","../tests/filters/$neq.test.ts","../tests/filters/$not.test.ts","../tests/filters/$or.test.ts","../tests/filters/dot-syntax.test.ts","../tests/filters/exists.test.ts","../tests/filters/joined-relations.test.ts","../tests/filters/special-cases.test.ts","../tests/filters/wildcard.test.ts","../tests/utils/index.ts","../index.ts","../../../../environment.d.ts","../../../../jest-extended.d.ts","../../../stamhoofd.d.ts"],"version":"5.8.3"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stamhoofd/sql",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.90.0",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"license": "UNLICENCED",
|
|
@@ -16,5 +16,5 @@
|
|
|
16
16
|
"publishConfig": {
|
|
17
17
|
"access": "public"
|
|
18
18
|
},
|
|
19
|
-
"gitHead": "
|
|
19
|
+
"gitHead": "d360b2ce795e378363765863457cd595f4841b73"
|
|
20
20
|
}
|
|
@@ -206,6 +206,11 @@ export class SQLJsonContains extends SQLWhere {
|
|
|
206
206
|
')',
|
|
207
207
|
]);
|
|
208
208
|
}
|
|
209
|
+
|
|
210
|
+
clone(): this {
|
|
211
|
+
const c = (new (this.constructor as any)(this.target, this.candidate, this.path)) as this;
|
|
212
|
+
return c;
|
|
213
|
+
}
|
|
209
214
|
}
|
|
210
215
|
|
|
211
216
|
/**
|
|
@@ -230,6 +235,11 @@ export class SQLJsonOverlaps extends SQLWhere {
|
|
|
230
235
|
')',
|
|
231
236
|
]);
|
|
232
237
|
}
|
|
238
|
+
|
|
239
|
+
clone(): this {
|
|
240
|
+
const c = (new (this.constructor as any)(this.jsonDoc1, this.jsonDoc2)) as this;
|
|
241
|
+
return c;
|
|
242
|
+
}
|
|
233
243
|
}
|
|
234
244
|
|
|
235
245
|
export class SQLLpad implements SQLExpression {
|
package/src/SQLSelect.ts
CHANGED
|
@@ -55,6 +55,7 @@ export class SQLSelect<T extends object = SQLResultNamespacedRow> extends Wherea
|
|
|
55
55
|
clone(): this {
|
|
56
56
|
const c = new SQLSelect(...this._columns);
|
|
57
57
|
Object.assign(c, this);
|
|
58
|
+
this._where = this._where ? this._where.clone() : null;
|
|
58
59
|
return c as any;
|
|
59
60
|
}
|
|
60
61
|
|
|
@@ -232,6 +233,10 @@ export class SQLSelect<T extends object = SQLResultNamespacedRow> extends Wherea
|
|
|
232
233
|
}
|
|
233
234
|
|
|
234
235
|
async count(): Promise<number> {
|
|
236
|
+
if (this._where && this._where.isAlways === false) {
|
|
237
|
+
return 0;
|
|
238
|
+
}
|
|
239
|
+
|
|
235
240
|
this._columns = [
|
|
236
241
|
new SQLSelectAs(
|
|
237
242
|
new SQLCount(),
|
|
@@ -263,6 +268,10 @@ export class SQLSelect<T extends object = SQLResultNamespacedRow> extends Wherea
|
|
|
263
268
|
}
|
|
264
269
|
|
|
265
270
|
async sum(expression: SQLExpression): Promise<number> {
|
|
271
|
+
if (this._where && this._where.isAlways === false) {
|
|
272
|
+
return 0;
|
|
273
|
+
}
|
|
274
|
+
|
|
266
275
|
this._columns = [
|
|
267
276
|
new SQLSelectAs(
|
|
268
277
|
new SQLSum(expression),
|
package/src/SQLWhere.ts
CHANGED
|
@@ -138,6 +138,8 @@ export abstract class SQLWhere implements SQLExpression {
|
|
|
138
138
|
getJoins(): SQLJoin[] {
|
|
139
139
|
return [];
|
|
140
140
|
}
|
|
141
|
+
|
|
142
|
+
abstract clone(): this;
|
|
141
143
|
}
|
|
142
144
|
|
|
143
145
|
export class SQLEmptyWhere extends SQLWhere {
|
|
@@ -168,6 +170,10 @@ export class SQLEmptyWhere extends SQLWhere {
|
|
|
168
170
|
get isAlways() {
|
|
169
171
|
return true;
|
|
170
172
|
}
|
|
173
|
+
|
|
174
|
+
clone(): this {
|
|
175
|
+
return new SQLEmptyWhere() as this;
|
|
176
|
+
}
|
|
171
177
|
}
|
|
172
178
|
|
|
173
179
|
export class SQLWhereEqual extends SQLWhere {
|
|
@@ -325,9 +331,25 @@ export class SQLWhereEqual extends SQLWhere {
|
|
|
325
331
|
]);
|
|
326
332
|
}
|
|
327
333
|
|
|
334
|
+
let sign = this.sign as string;
|
|
335
|
+
if (this.sign === SQLWhereSign.Equal && this.nullable) {
|
|
336
|
+
// Swap with null-safe equal
|
|
337
|
+
sign = '<=>';
|
|
338
|
+
}
|
|
339
|
+
else if (this.sign === SQLWhereSign.NotEqual && this.nullable) {
|
|
340
|
+
// Swap with null-safe not equal
|
|
341
|
+
return joinSQLQuery([
|
|
342
|
+
'NOT (',
|
|
343
|
+
this.column.getSQL(options),
|
|
344
|
+
` <=> `,
|
|
345
|
+
this.value.getSQL(options),
|
|
346
|
+
')',
|
|
347
|
+
]);
|
|
348
|
+
}
|
|
349
|
+
|
|
328
350
|
return joinSQLQuery([
|
|
329
351
|
this.column.getSQL(options),
|
|
330
|
-
` ${
|
|
352
|
+
` ${sign} `,
|
|
331
353
|
this.value.getSQL(options),
|
|
332
354
|
]);
|
|
333
355
|
}
|
|
@@ -529,6 +551,12 @@ export class SQLWhereJoin extends SQLWhere {
|
|
|
529
551
|
}
|
|
530
552
|
return [this.join, ...this.where.getJoins()];
|
|
531
553
|
}
|
|
554
|
+
|
|
555
|
+
clone(): this {
|
|
556
|
+
const c = (new (this.constructor as any)(this.join, this.where.clone())) as this;
|
|
557
|
+
c.doesRelationAlwaysExist = this.doesRelationAlwaysExist;
|
|
558
|
+
return c;
|
|
559
|
+
}
|
|
532
560
|
}
|
|
533
561
|
|
|
534
562
|
export class SQLWhereAnd extends SQLWhere {
|
|
@@ -588,6 +616,11 @@ export class SQLWhereAnd extends SQLWhere {
|
|
|
588
616
|
// NOT (A AND B) is the same as (NOT A OR NOT B)
|
|
589
617
|
return new SQLWhereOr(this.children.map(c => new SQLWhereNot(c)));
|
|
590
618
|
}
|
|
619
|
+
|
|
620
|
+
clone(): this {
|
|
621
|
+
const c = (new (this.constructor as any)(this.children.map(child => child.clone()))) as this;
|
|
622
|
+
return c;
|
|
623
|
+
}
|
|
591
624
|
}
|
|
592
625
|
|
|
593
626
|
export class SQLWhereOr extends SQLWhere {
|
|
@@ -648,6 +681,11 @@ export class SQLWhereOr extends SQLWhere {
|
|
|
648
681
|
// NOT (A OR B) is the same as (NOT A AND NOT B)
|
|
649
682
|
return new SQLWhereAnd(this.children.map(c => new SQLWhereNot(c)));
|
|
650
683
|
}
|
|
684
|
+
|
|
685
|
+
clone(): this {
|
|
686
|
+
const c = (new (this.constructor as any)(this.children.map(child => child.clone()))) as this;
|
|
687
|
+
return c;
|
|
688
|
+
}
|
|
651
689
|
}
|
|
652
690
|
|
|
653
691
|
export class SQLWhereNot extends SQLWhere {
|
|
@@ -659,6 +697,10 @@ export class SQLWhereNot extends SQLWhere {
|
|
|
659
697
|
}
|
|
660
698
|
|
|
661
699
|
get isSingle(): boolean {
|
|
700
|
+
if (this.a instanceof SQLWhereEqual || this.a instanceof SQLWhereAnd || this.a instanceof SQLWhereOr || this.a instanceof SQLWhereNot) {
|
|
701
|
+
return this.a.inverted().isSingle;
|
|
702
|
+
}
|
|
703
|
+
|
|
662
704
|
return this.a.isSingle;
|
|
663
705
|
}
|
|
664
706
|
|
|
@@ -694,4 +736,9 @@ export class SQLWhereNot extends SQLWhere {
|
|
|
694
736
|
inverted(): SQLWhere {
|
|
695
737
|
return this.a; // NOT NOT A is just A
|
|
696
738
|
}
|
|
739
|
+
|
|
740
|
+
clone(): this {
|
|
741
|
+
const c = (new (this.constructor as any)(this.a.clone())) as this;
|
|
742
|
+
return c;
|
|
743
|
+
}
|
|
697
744
|
}
|