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.
Files changed (53) hide show
  1. package/dist/DboBuilder/TableHandler/TableHandler.js +1 -1
  2. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  3. package/dist/DboBuilder/TableHandler/delete.js +1 -0
  4. package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
  5. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts.map +1 -1
  6. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js +1 -0
  7. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js.map +1 -1
  8. package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
  9. package/dist/DboBuilder/TableHandler/update.js +1 -0
  10. package/dist/DboBuilder/TableHandler/update.js.map +1 -1
  11. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +1 -1
  12. package/dist/DboBuilder/ViewHandler/count.d.ts.map +1 -1
  13. package/dist/DboBuilder/ViewHandler/count.js +3 -2
  14. package/dist/DboBuilder/ViewHandler/count.js.map +1 -1
  15. package/dist/DboBuilder/ViewHandler/getExistsCondition.d.ts.map +1 -1
  16. package/dist/DboBuilder/ViewHandler/getExistsCondition.js +1 -0
  17. package/dist/DboBuilder/ViewHandler/getExistsCondition.js.map +1 -1
  18. package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts +12 -0
  19. package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts.map +1 -0
  20. package/dist/DboBuilder/ViewHandler/parseComplexFilter.js +66 -0
  21. package/dist/DboBuilder/ViewHandler/parseComplexFilter.js.map +1 -0
  22. package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts +1 -1
  23. package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts.map +1 -1
  24. package/dist/DboBuilder/ViewHandler/prepareWhere.js.map +1 -1
  25. package/dist/DboBuilder/getCondition.d.ts +1 -1
  26. package/dist/DboBuilder/getCondition.d.ts.map +1 -1
  27. package/dist/DboBuilder/getCondition.js +9 -52
  28. package/dist/DboBuilder/getCondition.js.map +1 -1
  29. package/dist/DboBuilder/getSubscribeRelatedTables.d.ts +1 -1
  30. package/dist/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
  31. package/dist/DboBuilder/getSubscribeRelatedTables.js +3 -1
  32. package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
  33. package/dist/DboBuilder/parseUpdateRules.d.ts.map +1 -1
  34. package/dist/DboBuilder/parseUpdateRules.js +25 -4
  35. package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
  36. package/dist/Filtering.d.ts +6 -0
  37. package/dist/Filtering.d.ts.map +1 -1
  38. package/dist/Filtering.js +36 -25
  39. package/dist/Filtering.js.map +1 -1
  40. package/lib/DboBuilder/TableHandler/TableHandler.ts +1 -1
  41. package/lib/DboBuilder/TableHandler/delete.ts +1 -1
  42. package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +1 -0
  43. package/lib/DboBuilder/TableHandler/update.ts +1 -0
  44. package/lib/DboBuilder/ViewHandler/count.ts +3 -2
  45. package/lib/DboBuilder/ViewHandler/getExistsCondition.ts +1 -0
  46. package/lib/DboBuilder/ViewHandler/parseComplexFilter.ts +82 -0
  47. package/lib/DboBuilder/ViewHandler/prepareWhere.ts +1 -3
  48. package/lib/DboBuilder/getCondition.ts +11 -57
  49. package/lib/DboBuilder/getSubscribeRelatedTables.ts +3 -1
  50. package/lib/DboBuilder/parseUpdateRules.ts +26 -4
  51. package/lib/Filtering.ts +40 -25
  52. package/package.json +1 -1
  53. 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: "csv" | "array" | "json" | "jsonb" | null = null) => {
203
- const checkIfArr = () => {
204
- if(!Array.isArray(val)) return mErr("This type of filter/column expects an Array of items");
205
- }
206
- if(expect === "csv" || expect?.startsWith("json")){
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 OPERANDS[number] = filterKeys[0] as any;
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") && !OPERANDS.includes(filterOperand)){
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 _fVal: any[] = filterValue.filter((v: any) => v !== null);
310
+ const nonNullFilterValues: any[] = filterValue.filter((v: any) => v !== null);
319
311
  let c1 = "", c2 = "";
320
- if(_fVal.length) c1 = leftQ + " NOT IN " + parseRightVal(_fVal, "csv");
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "4.2.53",
3
+ "version": "4.2.55",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "../..": {
23
23
  "name": "prostgles-server",
24
- "version": "4.2.52",
24
+ "version": "4.2.54",
25
25
  "license": "MIT",
26
26
  "dependencies": {
27
27
  "bluebird": "^3.7.2",