prostgles-server 4.2.53 → 4.2.55
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/DboBuilder/TableHandler/TableHandler.js +1 -1
- package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
- package/dist/DboBuilder/TableHandler/delete.js +1 -0
- package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js +1 -0
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js.map +1 -1
- package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/update.js +1 -0
- package/dist/DboBuilder/TableHandler/update.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +1 -1
- package/dist/DboBuilder/ViewHandler/count.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/count.js +3 -2
- package/dist/DboBuilder/ViewHandler/count.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsCondition.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsCondition.js +1 -0
- package/dist/DboBuilder/ViewHandler/getExistsCondition.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts +12 -0
- package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts.map +1 -0
- package/dist/DboBuilder/ViewHandler/parseComplexFilter.js +66 -0
- package/dist/DboBuilder/ViewHandler/parseComplexFilter.js.map +1 -0
- package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts +1 -1
- package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareWhere.js.map +1 -1
- package/dist/DboBuilder/getCondition.d.ts +1 -1
- package/dist/DboBuilder/getCondition.d.ts.map +1 -1
- package/dist/DboBuilder/getCondition.js +9 -52
- package/dist/DboBuilder/getCondition.js.map +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.d.ts +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.js +3 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.d.ts.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.js +25 -4
- package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
- package/dist/Filtering.d.ts +6 -0
- package/dist/Filtering.d.ts.map +1 -1
- package/dist/Filtering.js +36 -25
- package/dist/Filtering.js.map +1 -1
- package/lib/DboBuilder/TableHandler/TableHandler.ts +1 -1
- package/lib/DboBuilder/TableHandler/delete.ts +1 -1
- package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +1 -0
- package/lib/DboBuilder/TableHandler/update.ts +1 -0
- package/lib/DboBuilder/ViewHandler/count.ts +3 -2
- package/lib/DboBuilder/ViewHandler/getExistsCondition.ts +1 -0
- package/lib/DboBuilder/ViewHandler/parseComplexFilter.ts +82 -0
- package/lib/DboBuilder/ViewHandler/prepareWhere.ts +1 -3
- package/lib/DboBuilder/getCondition.ts +11 -57
- package/lib/DboBuilder/getSubscribeRelatedTables.ts +3 -1
- package/lib/DboBuilder/parseUpdateRules.ts +26 -4
- package/lib/Filtering.ts +40 -25
- package/package.json +1 -1
- package/tests/server/package-lock.json +1 -1
package/lib/Filtering.ts
CHANGED
|
@@ -16,6 +16,14 @@ import {
|
|
|
16
16
|
import { SelectItem } from "./DboBuilder/QueryBuilder/QueryBuilder";
|
|
17
17
|
import { pgp } from "./DboBuilder/DboBuilderTypes";
|
|
18
18
|
|
|
19
|
+
|
|
20
|
+
export const FILTER_OPERANDS = [
|
|
21
|
+
...TextFilterKeys,
|
|
22
|
+
...JsonbFilterKeys,
|
|
23
|
+
...CompareFilterKeys,
|
|
24
|
+
...CompareInFilterKeys
|
|
25
|
+
] as const;
|
|
26
|
+
|
|
19
27
|
/**
|
|
20
28
|
* Parse a single filter
|
|
21
29
|
* Ensure only single key objects reach this point
|
|
@@ -199,35 +207,19 @@ export const parseFilterItem = (args: ParseFilterItemArgs): string => {
|
|
|
199
207
|
|
|
200
208
|
if(!leftQ) mErr("Internal error: leftQ missing?!");
|
|
201
209
|
|
|
202
|
-
const parseRightVal = (val: any, expect
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
checkIfArr();
|
|
208
|
-
return pgp.as.format(`($1:${expect})`, [val]);
|
|
209
|
-
|
|
210
|
-
} else if(expect === "array" || selItem && selItem.columnPGDataType && selItem.columnPGDataType === "ARRAY"){
|
|
211
|
-
checkIfArr();
|
|
212
|
-
return pgp.as.format(" ARRAY[$1:csv]", [val]);
|
|
213
|
-
|
|
210
|
+
const parseRightVal = (val: any, expect?: "csv" | "array" | "json" | "jsonb") => {
|
|
211
|
+
try {
|
|
212
|
+
return parseFilterRightValue(val, { selectItem: selItem, expect });
|
|
213
|
+
} catch(e: any){
|
|
214
|
+
return mErr(e);
|
|
214
215
|
}
|
|
215
|
-
|
|
216
|
-
return asValue(val);
|
|
217
216
|
}
|
|
218
217
|
|
|
219
218
|
/* Matching sel item */
|
|
220
219
|
if(isObject(rightF)){
|
|
221
220
|
|
|
222
|
-
const OPERANDS = [
|
|
223
|
-
...TextFilterKeys,
|
|
224
|
-
...JsonbFilterKeys,
|
|
225
|
-
...CompareFilterKeys,
|
|
226
|
-
...CompareInFilterKeys
|
|
227
|
-
] as const;
|
|
228
|
-
|
|
229
221
|
const filterKeys = Object.keys(rightF);
|
|
230
|
-
let filterOperand: typeof
|
|
222
|
+
let filterOperand: typeof FILTER_OPERANDS[number] = filterKeys[0] as any;
|
|
231
223
|
|
|
232
224
|
/** JSON cannot be compared so we'll cast it to TEXT */
|
|
233
225
|
if(selItem?.column_udt_type === "json" || TextFilterKeys.includes(filterOperand as any)){
|
|
@@ -235,7 +227,7 @@ export const parseFilterItem = (args: ParseFilterItemArgs): string => {
|
|
|
235
227
|
}
|
|
236
228
|
|
|
237
229
|
/** It's an object key which means it's an equality comparison against a json object */
|
|
238
|
-
if(selItem?.column_udt_type?.startsWith("json") && !
|
|
230
|
+
if(selItem?.column_udt_type?.startsWith("json") && !FILTER_OPERANDS.includes(filterOperand)){
|
|
239
231
|
return leftQ + " = " + parseRightVal(rightF);
|
|
240
232
|
}
|
|
241
233
|
|
|
@@ -315,9 +307,9 @@ export const parseFilterItem = (args: ParseFilterItemArgs): string => {
|
|
|
315
307
|
return " TRUE ";
|
|
316
308
|
}
|
|
317
309
|
|
|
318
|
-
const
|
|
310
|
+
const nonNullFilterValues: any[] = filterValue.filter((v: any) => v !== null);
|
|
319
311
|
let c1 = "", c2 = "";
|
|
320
|
-
if(
|
|
312
|
+
if(nonNullFilterValues.length) c1 = leftQ + " NOT IN " + parseRightVal(nonNullFilterValues, "csv");
|
|
321
313
|
if(filterValue.includes(null)) c2 = ` ${leftQ} IS NOT NULL `;
|
|
322
314
|
return [c1, c2].filter(c => c).join(" AND ");
|
|
323
315
|
|
|
@@ -387,6 +379,29 @@ export const parseFilterItem = (args: ParseFilterItemArgs): string => {
|
|
|
387
379
|
}
|
|
388
380
|
}
|
|
389
381
|
|
|
382
|
+
type ParseRightValOpts = {
|
|
383
|
+
expect?: "csv" | "array" | "json" | "jsonb";
|
|
384
|
+
selectItem: SelectItem | undefined;
|
|
385
|
+
}
|
|
386
|
+
export const parseFilterRightValue = (val: any, { expect, selectItem }: ParseRightValOpts) => {
|
|
387
|
+
const asValue = (v: any) => pgp.as.format("$1", [v]);
|
|
388
|
+
const checkIfArr = () => {
|
|
389
|
+
if(!Array.isArray(val)) {
|
|
390
|
+
throw "This type of filter/column expects an Array of items";
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
if(expect === "csv" || expect?.startsWith("json")){
|
|
394
|
+
checkIfArr();
|
|
395
|
+
return pgp.as.format(`($1:${expect})`, [val]);
|
|
396
|
+
|
|
397
|
+
} else if(expect === "array" || selectItem?.columnPGDataType === "ARRAY"){
|
|
398
|
+
checkIfArr();
|
|
399
|
+
return pgp.as.format(" ARRAY[$1:csv]", [val]);
|
|
400
|
+
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
return asValue(val);
|
|
404
|
+
}
|
|
390
405
|
|
|
391
406
|
// ensure pgp is not NULL!!!
|
|
392
407
|
// const asValue = v => v;// pgp.as.value;
|
package/package.json
CHANGED