prostgles-server 4.2.54 → 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 (49) 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/getExistsCondition.d.ts.map +1 -1
  13. package/dist/DboBuilder/ViewHandler/getExistsCondition.js +1 -0
  14. package/dist/DboBuilder/ViewHandler/getExistsCondition.js.map +1 -1
  15. package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts +12 -0
  16. package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts.map +1 -0
  17. package/dist/DboBuilder/ViewHandler/parseComplexFilter.js +66 -0
  18. package/dist/DboBuilder/ViewHandler/parseComplexFilter.js.map +1 -0
  19. package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts +1 -1
  20. package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts.map +1 -1
  21. package/dist/DboBuilder/ViewHandler/prepareWhere.js.map +1 -1
  22. package/dist/DboBuilder/getCondition.d.ts +1 -1
  23. package/dist/DboBuilder/getCondition.d.ts.map +1 -1
  24. package/dist/DboBuilder/getCondition.js +9 -52
  25. package/dist/DboBuilder/getCondition.js.map +1 -1
  26. package/dist/DboBuilder/getSubscribeRelatedTables.d.ts +1 -1
  27. package/dist/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
  28. package/dist/DboBuilder/getSubscribeRelatedTables.js +3 -1
  29. package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
  30. package/dist/DboBuilder/parseUpdateRules.d.ts.map +1 -1
  31. package/dist/DboBuilder/parseUpdateRules.js +25 -4
  32. package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
  33. package/dist/Filtering.d.ts +6 -0
  34. package/dist/Filtering.d.ts.map +1 -1
  35. package/dist/Filtering.js +36 -25
  36. package/dist/Filtering.js.map +1 -1
  37. package/lib/DboBuilder/TableHandler/TableHandler.ts +1 -1
  38. package/lib/DboBuilder/TableHandler/delete.ts +1 -1
  39. package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +1 -0
  40. package/lib/DboBuilder/TableHandler/update.ts +1 -0
  41. package/lib/DboBuilder/ViewHandler/getExistsCondition.ts +1 -0
  42. package/lib/DboBuilder/ViewHandler/parseComplexFilter.ts +82 -0
  43. package/lib/DboBuilder/ViewHandler/prepareWhere.ts +1 -3
  44. package/lib/DboBuilder/getCondition.ts +11 -57
  45. package/lib/DboBuilder/getSubscribeRelatedTables.ts +3 -1
  46. package/lib/DboBuilder/parseUpdateRules.ts +26 -4
  47. package/lib/Filtering.ts +40 -25
  48. package/package.json +1 -1
  49. package/tests/server/package-lock.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import { FullFilter } from "prostgles-types";
2
2
  import { SelectItem } from "./DboBuilder/QueryBuilder/QueryBuilder";
3
+ export declare const FILTER_OPERANDS: readonly ["$ilike", "$like", "$nilike", "$nlike", ...("@@" | "@>" | "<@" | "?" | "?|" | "?&" | "||" | "-" | "#-" | "@?")[], "=", "$eq", "<>", ">", "<", ">=", "<=", "$eq", "$ne", "$gt", "$gte", "$lte", "$in", "$nin"];
3
4
  /**
4
5
  * Parse a single filter
5
6
  * Ensure only single key objects reach this point
@@ -11,5 +12,10 @@ type ParseFilterItemArgs = {
11
12
  allowedColumnNames: string[];
12
13
  };
13
14
  export declare const parseFilterItem: (args: ParseFilterItemArgs) => string;
15
+ type ParseRightValOpts = {
16
+ expect?: "csv" | "array" | "json" | "jsonb";
17
+ selectItem: SelectItem | undefined;
18
+ };
19
+ export declare const parseFilterRightValue: (val: any, { expect, selectItem }: ParseRightValOpts) => string;
14
20
  export {};
15
21
  //# sourceMappingURL=Filtering.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Filtering.d.ts","sourceRoot":"","sources":["../lib/Filtering.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,UAAU,EAQX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAGpE;;;EAGE;AACF,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,eAAe,SAAU,mBAAmB,KAAG,MAsW3D,CAAA"}
1
+ {"version":3,"file":"Filtering.d.ts","sourceRoot":"","sources":["../lib/Filtering.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,UAAU,EAQX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAIpE,eAAO,MAAM,eAAe,yNAKlB,CAAC;AAEX;;;EAGE;AACF,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,eAAe,SAAU,mBAAmB,KAAG,MAsV3D,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;CACpC,CAAA;AACD,eAAO,MAAM,qBAAqB,QAAS,GAAG,0BAA0B,iBAAiB,WAkBxF,CAAA"}
package/dist/Filtering.js CHANGED
@@ -1,8 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseFilterItem = void 0;
3
+ exports.parseFilterRightValue = exports.parseFilterItem = exports.FILTER_OPERANDS = void 0;
4
4
  const prostgles_types_1 = require("prostgles-types");
5
5
  const DboBuilderTypes_1 = require("./DboBuilder/DboBuilderTypes");
6
+ exports.FILTER_OPERANDS = [
7
+ ...prostgles_types_1.TextFilterKeys,
8
+ ...prostgles_types_1.JsonbFilterKeys,
9
+ ...prostgles_types_1.CompareFilterKeys,
10
+ ...prostgles_types_1.CompareInFilterKeys
11
+ ];
6
12
  const parseFilterItem = (args) => {
7
13
  const { filter: _f, select, tableAlias, allowedColumnNames } = args;
8
14
  if (!_f || (0, prostgles_types_1.isEmpty)(_f))
@@ -146,29 +152,16 @@ const parseFilterItem = (args) => {
146
152
  }
147
153
  if (!leftQ)
148
154
  mErr("Internal error: leftQ missing?!");
149
- const parseRightVal = (val, expect = null) => {
150
- const checkIfArr = () => {
151
- if (!Array.isArray(val))
152
- return mErr("This type of filter/column expects an Array of items");
153
- };
154
- if (expect === "csv" || expect?.startsWith("json")) {
155
- checkIfArr();
156
- return DboBuilderTypes_1.pgp.as.format(`($1:${expect})`, [val]);
157
- }
158
- else if (expect === "array" || selItem && selItem.columnPGDataType && selItem.columnPGDataType === "ARRAY") {
159
- checkIfArr();
160
- return DboBuilderTypes_1.pgp.as.format(" ARRAY[$1:csv]", [val]);
161
- }
162
- return asValue(val);
155
+ const parseRightVal = (val, expect) => {
156
+ try {
157
+ return (0, exports.parseFilterRightValue)(val, { selectItem: selItem, expect });
158
+ }
159
+ catch (e) {
160
+ return mErr(e);
161
+ }
163
162
  };
164
163
  /* Matching sel item */
165
164
  if ((0, prostgles_types_1.isObject)(rightF)) {
166
- const OPERANDS = [
167
- ...prostgles_types_1.TextFilterKeys,
168
- ...prostgles_types_1.JsonbFilterKeys,
169
- ...prostgles_types_1.CompareFilterKeys,
170
- ...prostgles_types_1.CompareInFilterKeys
171
- ];
172
165
  const filterKeys = Object.keys(rightF);
173
166
  let filterOperand = filterKeys[0];
174
167
  /** JSON cannot be compared so we'll cast it to TEXT */
@@ -176,7 +169,7 @@ const parseFilterItem = (args) => {
176
169
  leftQ += "::TEXT ";
177
170
  }
178
171
  /** It's an object key which means it's an equality comparison against a json object */
179
- if (selItem?.column_udt_type?.startsWith("json") && !OPERANDS.includes(filterOperand)) {
172
+ if (selItem?.column_udt_type?.startsWith("json") && !exports.FILTER_OPERANDS.includes(filterOperand)) {
180
173
  return leftQ + " = " + parseRightVal(rightF);
181
174
  }
182
175
  let filterValue = rightF[filterOperand];
@@ -252,10 +245,10 @@ const parseFilterItem = (args) => {
252
245
  if (!filterValue?.length) {
253
246
  return " TRUE ";
254
247
  }
255
- const _fVal = filterValue.filter((v) => v !== null);
248
+ const nonNullFilterValues = filterValue.filter((v) => v !== null);
256
249
  let c1 = "", c2 = "";
257
- if (_fVal.length)
258
- c1 = leftQ + " NOT IN " + parseRightVal(_fVal, "csv");
250
+ if (nonNullFilterValues.length)
251
+ c1 = leftQ + " NOT IN " + parseRightVal(nonNullFilterValues, "csv");
259
252
  if (filterValue.includes(null))
260
253
  c2 = ` ${leftQ} IS NOT NULL `;
261
254
  return [c1, c2].filter(c => c).join(" AND ");
@@ -322,6 +315,24 @@ const parseFilterItem = (args) => {
322
315
  }
323
316
  };
324
317
  exports.parseFilterItem = parseFilterItem;
318
+ const parseFilterRightValue = (val, { expect, selectItem }) => {
319
+ const asValue = (v) => DboBuilderTypes_1.pgp.as.format("$1", [v]);
320
+ const checkIfArr = () => {
321
+ if (!Array.isArray(val)) {
322
+ throw "This type of filter/column expects an Array of items";
323
+ }
324
+ };
325
+ if (expect === "csv" || expect?.startsWith("json")) {
326
+ checkIfArr();
327
+ return DboBuilderTypes_1.pgp.as.format(`($1:${expect})`, [val]);
328
+ }
329
+ else if (expect === "array" || selectItem?.columnPGDataType === "ARRAY") {
330
+ checkIfArr();
331
+ return DboBuilderTypes_1.pgp.as.format(" ARRAY[$1:csv]", [val]);
332
+ }
333
+ return asValue(val);
334
+ };
335
+ exports.parseFilterRightValue = parseFilterRightValue;
325
336
  // ensure pgp is not NULL!!!
326
337
  // const asValue = v => v;// pgp.as.value;
327
338
  // const filters: FilterSpec[] = [
@@ -1 +1 @@
1
- {"version":3,"file":"Filtering.js","sourceRoot":"","sources":["../lib/Filtering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Filtering.js","sourceRoot":"","sources":["../lib/Filtering.ts"],"names":[],"mappings":"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"}
@@ -149,7 +149,7 @@ export class TableHandler extends ViewHandler {
149
149
  .then(async _isValid => {
150
150
 
151
151
  const { filterFields, forcedFilter } = table_rules?.select || {};
152
- const condition = (await this.prepareWhere({ filter, forcedFilter, filterFields, addWhere: false, localParams, tableRule: table_rules })).where;
152
+ const condition = (await this.prepareWhere({ select: undefined, filter, forcedFilter, filterFields, addWhere: false, localParams, tableRule: table_rules })).where;
153
153
 
154
154
  const pubSubManager = await this.dboBuilder.getPubSubManager();
155
155
  return pubSubManager.addSync({
@@ -38,7 +38,6 @@ export async function _delete(this: TableHandler, filter?: Filter, params?: Dele
38
38
  }
39
39
  }
40
40
 
41
-
42
41
  if (params) {
43
42
  const good_paramsObj: Record<keyof DeleteParams, 1> = { returning: 1, returnType: 1 };
44
43
  const good_params = Object.keys(good_paramsObj);
@@ -49,6 +48,7 @@ export async function _delete(this: TableHandler, filter?: Filter, params?: Dele
49
48
  let queryType: keyof pgPromise.ITask<{}> = 'none';
50
49
  let queryWithoutRLS = `DELETE FROM ${this.escapedName} `;
51
50
  const filterOpts = (await this.prepareWhere({
51
+ select: undefined,
52
52
  filter,
53
53
  forcedFilter,
54
54
  filterFields,
@@ -34,6 +34,7 @@ export const runInsertUpdateQuery = async (args: RunInsertUpdateQueryArgs) => {
34
34
  let checkCondition = "WHERE FALSE";
35
35
  if(checkFilter){
36
36
  const checkCond = await tableHandler.prepareWhere({
37
+ select: undefined,
37
38
  localParams: undefined,
38
39
  tableRule: undefined,
39
40
  filter: checkFilter,
@@ -55,6 +55,7 @@ export async function update(this: TableHandler, filter: Filter, _newData: AnyOb
55
55
  });
56
56
 
57
57
  const updateFilter = await this.prepareWhere({
58
+ select: undefined,
58
59
  filter,
59
60
  forcedFilter,
60
61
  filterFields,
@@ -42,6 +42,7 @@ export async function getExistsCondition(this: ViewHandler, eConfig: ExistsFilte
42
42
 
43
43
  const tableHandler = this.dboBuilder.dbo[targetTable] as TableHandler
44
44
  const finalWhere = (await tableHandler.prepareWhere({
45
+ select: undefined,
45
46
  filter: targetTableFilter,
46
47
  forcedFilter,
47
48
  filterFields,
@@ -0,0 +1,82 @@
1
+ import { AnyObject, isObject } from "prostgles-types";
2
+ import { FILTER_OPERANDS, parseFilterRightValue } from "../../Filtering";
3
+ import { FUNCTIONS, parseFunction } from "../QueryBuilder/Functions";
4
+ import { asNameAlias, parseFunctionObject } from "../QueryBuilder/QueryBuilder";
5
+ import { TableSchemaColumn } from "../DboBuilderTypes";
6
+
7
+ const allowedComparators = FILTER_OPERANDS; //[">", "<", "=", "<=", ">=", "<>", "!="]
8
+ type Args = {
9
+ filter: AnyObject;
10
+ complexFilterKey: string;
11
+ tableAlias: string | undefined;
12
+ allowed_colnames: string[];
13
+ columns: TableSchemaColumn[];
14
+ }
15
+
16
+ /* Parse complex filters
17
+ {
18
+ $filter: [
19
+ { $func: [...] },
20
+ "=",
21
+ value | { $func: [..] }
22
+ ]
23
+ }
24
+ */
25
+ export const parseComplexFilter = ({
26
+ filter,
27
+ complexFilterKey,
28
+ tableAlias,
29
+ allowed_colnames,
30
+ columns,
31
+ }: Args) => {
32
+
33
+ /**
34
+ * { $funcName: [arg1, arg2] }
35
+ * { $column: "column_name" }
36
+ */
37
+ const getFuncQuery = (funcData: AnyObject): string => {
38
+ if(isObject(funcData) && "$column" in funcData){
39
+ const column = funcData["$column"]
40
+ if(typeof column !== "string"){
41
+ throw `expecting: \n { $column: "column_name" } received:\n ${JSON.stringify(funcData)}`;
42
+ }
43
+ if(!allowed_colnames.includes(column)){
44
+ throw `Dissallowed or Invalid column ${column}. Allowed columns: ${allowed_colnames}`;
45
+ }
46
+ return asNameAlias(column, tableAlias)
47
+ }
48
+ const { funcName, args } = parseFunctionObject(funcData);
49
+ const funcDef = parseFunction({ func: funcName, args, functions: FUNCTIONS, allowedFields: allowed_colnames });
50
+ return funcDef.getQuery({ args, tableAlias, allColumns: columns, allowedFields: allowed_colnames });
51
+ }
52
+
53
+ const complexFilter = filter[complexFilterKey];
54
+ if (!Array.isArray(complexFilter)) {
55
+ throw `Invalid $filter. Must contain an array of at least element but got: ${JSON.stringify(complexFilter)} `
56
+ }
57
+
58
+ const [leftFilter, comparator, rightFilterOrValue] = complexFilter;
59
+
60
+ const leftVal = getFuncQuery(leftFilter);
61
+ let result = leftVal;
62
+ if (comparator) {
63
+ if (!allowedComparators.includes(comparator)) {
64
+ throw `Invalid $filter. comparator ${JSON.stringify(comparator)} is not valid. Expecting one of: ${allowedComparators}`;
65
+ }
66
+ if (!rightFilterOrValue) {
67
+ throw "Invalid $filter. Expecting a value or function after the comparator";
68
+ }
69
+ const rightVal = isObject(rightFilterOrValue) ?
70
+ getFuncQuery(rightFilterOrValue) :
71
+ parseFilterRightValue(rightFilterOrValue, {
72
+ selectItem: undefined,
73
+ expect: ["$in", "$nin"].includes(comparator)? "array" : undefined
74
+ });
75
+ if (leftVal === rightVal){
76
+ throw "Invalid $filter. Cannot compare two identical function signatures: " + JSON.stringify(leftFilter);
77
+ }
78
+ result += ` ${comparator} ${rightVal}`;
79
+ }
80
+
81
+ return result;
82
+ }
@@ -7,7 +7,7 @@ import { getCondition } from "../getCondition";
7
7
 
8
8
  type PrepareWhereParams = {
9
9
  filter?: Filter;
10
- select?: SelectItem[];
10
+ select: SelectItem[] | undefined;
11
11
  forcedFilter?: AnyObject;
12
12
  filterFields?: FieldFilter;
13
13
  addWhere?: boolean;
@@ -69,8 +69,6 @@ export async function prepareWhere(this: ViewHandler, params: PrepareWhereParams
69
69
  return result;
70
70
  }
71
71
 
72
-
73
-
74
72
  /* A forced filter condition will not check if the existsJoined filter tables have been published */
75
73
  const forcedFilterCond = forcedFilter ? await parseFullFilter(forcedFilter, null, true) : undefined;
76
74
  const filterCond = await parseFullFilter(filter, null, false);
@@ -1,6 +1,6 @@
1
1
  import { AnyObject, isObject, pickKeys } from "prostgles-types";
2
2
  import { ExistsFilterConfig, LocalParams, pgp } from "./DboBuilder";
3
- import { parseFilterItem } from "../Filtering";
3
+ import { FILTER_OPERANDS, parseFilterItem } from "../Filtering";
4
4
  import { asValue } from "../PubSubManager/PubSubManager";
5
5
  import { TableRule } from "../PublishParser/PublishParser";
6
6
  import { FUNCTIONS, parseFunction } from "./QueryBuilder/Functions";
@@ -8,6 +8,7 @@ import { SelectItem, asNameAlias, parseFunctionObject } from "./QueryBuilder/Que
8
8
  import { ViewHandler } from "./ViewHandler/ViewHandler";
9
9
  import { getExistsCondition } from "./ViewHandler/getExistsCondition";
10
10
  import { getExistsFilters } from "./ViewHandler/getExistsFilters";
11
+ import { parseComplexFilter } from "./ViewHandler/parseComplexFilter";
11
12
 
12
13
  const FILTER_FUNCS = FUNCTIONS.filter(f => f.canBeUsedForFilter);
13
14
 
@@ -21,7 +22,7 @@ export async function getCondition(
21
22
  this: ViewHandler,
22
23
  params: {
23
24
  filter: any,
24
- select?: SelectItem[],
25
+ select: SelectItem[] | undefined,
25
26
  allowed_colnames: string[],
26
27
  tableAlias?: string,
27
28
  localParams?: LocalParams,
@@ -115,67 +116,20 @@ export async function getCondition(
115
116
  allowedSelect = allowedSelect.concat(
116
117
  remainingNonSelectedColumns
117
118
  );
118
-
119
- /* Parse complex filters
120
- {
121
- $filter: [
122
- { $func: [...] },
123
- "=",
124
- value | { $func: [..] }
125
- ]
126
- }
127
- */
128
119
  const complexFilters: string[] = [];
129
120
  const complexFilterKey = "$filter";
130
- const allowedComparators = [">", "<", "=", "<=", ">=", "<>", "!="]
131
121
  if (complexFilterKey in filter) {
132
122
 
133
- /**
134
- * { $funcName: [arg1, arg2] }
135
- * { $column: "column_name" }
136
- */
137
- const getFuncQuery = (funcData: AnyObject): string => {
138
- if(isObject(funcData) && "$column" in funcData){
139
- const column = funcData["$column"]
140
- if(typeof column !== "string"){
141
- throw `expecting: \n { $column: "column_name" } received:\n ${JSON.stringify(funcData)}`;
142
- }
143
- if(!allowed_colnames.includes(column)){
144
- throw `Dissallowed or Invalid column ${column}. Allowed columns: ${allowed_colnames}`;
145
- }
146
- return asNameAlias(column, tableAlias)
147
- }
148
- const { funcName, args } = parseFunctionObject(funcData);
149
- const funcDef = parseFunction({ func: funcName, args, functions: FUNCTIONS, allowedFields: allowed_colnames });
150
- return funcDef.getQuery({ args, tableAlias, allColumns: this.columns, allowedFields: allowed_colnames });
151
- }
152
-
153
- const complexFilter = filter[complexFilterKey];
154
- if (!Array.isArray(complexFilter)) {
155
- throw `Invalid $filter. Must contain an array of at least element but got: ${JSON.stringify(complexFilter)} `
156
- }
157
-
158
- const [leftFilter, comparator, rightFilterOrValue] = complexFilter;
159
-
160
- const leftVal = getFuncQuery(leftFilter);
161
- let result = leftVal;
162
- if (comparator) {
163
- if (!allowedComparators.includes(comparator)) {
164
- throw `Invalid $filter. comparator ${JSON.stringify(comparator)} is not valid. Expecting one of: ${allowedComparators}`;
165
- }
166
- if (!rightFilterOrValue) {
167
- throw "Invalid $filter. Expecting a value or function after the comparator";
168
- }
169
- const rightVal = isObject(rightFilterOrValue) ? getFuncQuery(rightFilterOrValue) : asValue(rightFilterOrValue);
170
- if (leftVal === rightVal){
171
- throw "Invalid $filter. Cannot compare two identical function signatures: " + JSON.stringify(leftFilter);
172
- }
173
- result += ` ${comparator} ${rightVal}`;
174
- }
175
- complexFilters.push(result);
123
+ const complexFilterCondition = parseComplexFilter({
124
+ filter,
125
+ complexFilterKey,
126
+ tableAlias,
127
+ allowed_colnames,
128
+ columns: this.columns,
129
+ });
130
+ complexFilters.push(complexFilterCondition);
176
131
  }
177
132
 
178
-
179
133
  /* Parse join filters
180
134
  { $joinFilter: { $ST_DWithin: [table.col, foreignTable.col, distance] }
181
135
  will make an exists filter
@@ -12,7 +12,7 @@ type Args = {
12
12
  localParams: LocalParams | undefined;
13
13
  newQuery: NewQuery;
14
14
  }
15
- export async function getSubscribeRelatedTables(this: ViewHandler, { selectParams, filter, localParams, table_rules, newQuery }: Args){
15
+ export async function getSubscribeRelatedTables(this: ViewHandler, { filter, localParams, newQuery }: Args){
16
16
 
17
17
  let viewOptions: ViewSubscriptionOptions | undefined = undefined;
18
18
  const { condition } = newQuery.whereOpts;
@@ -143,6 +143,7 @@ export async function getSubscribeRelatedTables(this: ViewHandler, { selectParam
143
143
  tableName: j.table,
144
144
  tableNameEscaped: asName(j.table),
145
145
  condition: (await this.dboBuilder.dbo[j.table]!.prepareWhere!({
146
+ select: undefined,
146
147
  filter: {
147
148
  $existsJoined: {
148
149
  path: reverseParsedPath(j.joinPath, this.name),
@@ -164,6 +165,7 @@ export async function getSubscribeRelatedTables(this: ViewHandler, { selectParam
164
165
  tableName: targetTable,
165
166
  tableNameEscaped: asName(targetTable),
166
167
  condition: (await this.dboBuilder.dbo[targetTable]!.prepareWhere!({
168
+ select: undefined,
167
169
  filter: {
168
170
  $existsJoined: {
169
171
  path: newPath,
@@ -50,7 +50,14 @@ export async function parseUpdateRules(
50
50
  if (!fields) {
51
51
  throw ` Invalid update rule fo r ${this.name}. fields missing `;
52
52
  }
53
- finalUpdateFilter = (await this.prepareWhere({ filter, forcedFilter, filterFields, localParams, tableRule: tableRules })).filter;
53
+ finalUpdateFilter = (await this.prepareWhere({
54
+ select: undefined,
55
+ filter,
56
+ forcedFilter,
57
+ filterFields,
58
+ localParams,
59
+ tableRule: tableRules
60
+ })).filter;
54
61
  if (tableRules.update.dynamicFields?.length) {
55
62
  /**
56
63
  * dynamicFields.fields used to allow a custom list of fields for specific records
@@ -63,9 +70,24 @@ export async function parseUpdateRules(
63
70
  /**
64
71
  * Validated filter and fields
65
72
  */
66
- const condition = await this.prepareWhere({ filterFields: this.column_names, filter: dfRule.filter, localParams, tableRule: tableRules });
67
- if (!condition.where) throw "dynamicFields.filter cannot be empty: " + JSON.stringify(dfRule);
68
- await this.validateViewRules({ fields: dfRule.fields, filterFields, returningFields, forcedFilter, dynamicFields: tableRules.update.dynamicFields, rule: "update" });
73
+ const condition = await this.prepareWhere({
74
+ select: undefined,
75
+ filterFields: this.column_names,
76
+ filter: dfRule.filter,
77
+ localParams,
78
+ tableRule: tableRules
79
+ });
80
+ if (!condition.where) {
81
+ throw "dynamicFields.filter cannot be empty: " + JSON.stringify(dfRule);
82
+ }
83
+ await this.validateViewRules({
84
+ fields: dfRule.fields,
85
+ filterFields,
86
+ returningFields,
87
+ forcedFilter,
88
+ dynamicFields: tableRules.update.dynamicFields,
89
+ rule: "update"
90
+ });
69
91
 
70
92
 
71
93
  await this.find(dfRule.filter, { limit: 0 });
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.54",
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.53",
24
+ "version": "4.2.54",
25
25
  "license": "MIT",
26
26
  "dependencies": {
27
27
  "bluebird": "^3.7.2",