prostgles-server 3.0.86 → 3.0.88
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/.eslintignore +5 -0
- package/.eslintrc.json +30 -0
- package/dist/DBEventsManager.js +1 -1
- package/dist/DBEventsManager.js.map +1 -1
- package/dist/DBSchemaBuilder.d.ts.map +1 -1
- package/dist/DBSchemaBuilder.js +6 -6
- package/dist/DBSchemaBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions.js +9 -9
- package/dist/DboBuilder/QueryBuilder/Functions.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +8 -7
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js +4 -4
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js.map +1 -1
- package/dist/DboBuilder/TableHandler.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler.js +18 -20
- package/dist/DboBuilder/TableHandler.js.map +1 -1
- package/dist/DboBuilder/ViewHandler.d.ts +0 -10
- package/dist/DboBuilder/ViewHandler.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler.js +50 -63
- package/dist/DboBuilder/ViewHandler.js.map +1 -1
- package/dist/DboBuilder/delete.js +0 -1
- package/dist/DboBuilder/delete.js.map +1 -1
- package/dist/DboBuilder/getColumns.js +5 -4
- package/dist/DboBuilder/getColumns.js.map +1 -1
- package/dist/DboBuilder/getCondition.d.ts.map +1 -1
- package/dist/DboBuilder/getCondition.js +6 -6
- package/dist/DboBuilder/getCondition.js.map +1 -1
- package/dist/DboBuilder/insert.js +15 -16
- package/dist/DboBuilder/insert.js.map +1 -1
- package/dist/DboBuilder/insertDataParse.d.ts.map +1 -1
- package/dist/DboBuilder/insertDataParse.js +9 -10
- package/dist/DboBuilder/insertDataParse.js.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.js +2 -2
- package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
- package/dist/DboBuilder/runSQL.d.ts.map +1 -1
- package/dist/DboBuilder/runSQL.js +5 -5
- package/dist/DboBuilder/runSQL.js.map +1 -1
- package/dist/DboBuilder/subscribe.js +3 -3
- package/dist/DboBuilder/subscribe.js.map +1 -1
- package/dist/DboBuilder/update.js +5 -6
- package/dist/DboBuilder/update.js.map +1 -1
- package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
- package/dist/DboBuilder/uploadFile.js +1 -1
- package/dist/DboBuilder/uploadFile.js.map +1 -1
- package/dist/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder.js +13 -14
- package/dist/DboBuilder.js.map +1 -1
- package/dist/FileManager.d.ts.map +1 -1
- package/dist/FileManager.js +3 -5
- package/dist/FileManager.js.map +1 -1
- package/dist/Filtering.js +7 -7
- package/dist/Filtering.js.map +1 -1
- package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts +3 -0
- package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -0
- package/dist/JSONBValidation/validate_jsonb_schema_sql.js +295 -0
- package/dist/JSONBValidation/validate_jsonb_schema_sql.js.map +1 -0
- package/dist/JSONBValidation/validation.d.ts +108 -0
- package/dist/JSONBValidation/validation.d.ts.map +1 -0
- package/dist/JSONBValidation/validation.js +222 -0
- package/dist/JSONBValidation/validation.js.map +1 -0
- package/dist/PostgresNotifListenManager.js +1 -1
- package/dist/PostgresNotifListenManager.js.map +1 -1
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +20 -20
- package/dist/Prostgles.js.map +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.js +10 -8
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/dist/PubSubManager/initPubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/initPubSubManager.js +10 -7
- package/dist/PubSubManager/initPubSubManager.js.map +1 -1
- package/dist/PublishParser.d.ts.map +1 -1
- package/dist/PublishParser.js +122 -125
- package/dist/PublishParser.js.map +1 -1
- package/dist/SyncReplication.d.ts.map +1 -1
- package/dist/SyncReplication.js +19 -16
- package/dist/SyncReplication.js.map +1 -1
- package/dist/TableConfig.d.ts +9 -5
- package/dist/TableConfig.d.ts.map +1 -1
- package/dist/TableConfig.js +33 -12
- package/dist/TableConfig.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/shortestPath.js +11 -11
- package/dist/shortestPath.js.map +1 -1
- package/dist/validation.d.ts +50 -24
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +177 -53
- package/dist/validation.js.map +1 -1
- package/lib/AuthHandler.d.ts +11 -11
- package/lib/AuthHandler.d.ts.map +1 -1
- package/lib/DBEventsManager.js +1 -1
- package/lib/DBEventsManager.ts +1 -1
- package/lib/DBSchemaBuilder.d.ts +3 -3
- package/lib/DBSchemaBuilder.d.ts.map +1 -1
- package/lib/DBSchemaBuilder.js +6 -6
- package/lib/DBSchemaBuilder.ts +10 -9
- package/lib/DboBuilder/QueryBuilder/Functions.d.ts +3 -3
- package/lib/DboBuilder/QueryBuilder/Functions.d.ts.map +1 -1
- package/lib/DboBuilder/QueryBuilder/Functions.js +9 -9
- package/lib/DboBuilder/QueryBuilder/Functions.ts +13 -13
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts +3 -3
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.js +8 -7
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +12 -12
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -1
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.js +4 -4
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.ts +5 -5
- package/lib/DboBuilder/TableHandler.d.ts +1 -1
- package/lib/DboBuilder/TableHandler.d.ts.map +1 -1
- package/lib/DboBuilder/TableHandler.js +18 -20
- package/lib/DboBuilder/TableHandler.ts +21 -20
- package/lib/DboBuilder/ViewHandler.d.ts +1 -11
- package/lib/DboBuilder/ViewHandler.d.ts.map +1 -1
- package/lib/DboBuilder/ViewHandler.js +50 -63
- package/lib/DboBuilder/ViewHandler.ts +68 -97
- package/lib/DboBuilder/delete.js +0 -1
- package/lib/DboBuilder/delete.ts +1 -1
- package/lib/DboBuilder/getColumns.js +5 -4
- package/lib/DboBuilder/getColumns.ts +5 -5
- package/lib/DboBuilder/getCondition.d.ts.map +1 -1
- package/lib/DboBuilder/getCondition.js +6 -6
- package/lib/DboBuilder/getCondition.ts +7 -7
- package/lib/DboBuilder/insert.js +15 -16
- package/lib/DboBuilder/insert.ts +18 -18
- package/lib/DboBuilder/insertDataParse.d.ts.map +1 -1
- package/lib/DboBuilder/insertDataParse.js +9 -10
- package/lib/DboBuilder/insertDataParse.ts +42 -43
- package/lib/DboBuilder/parseUpdateRules.js +2 -2
- package/lib/DboBuilder/parseUpdateRules.ts +2 -2
- package/lib/DboBuilder/runSQL.d.ts.map +1 -1
- package/lib/DboBuilder/runSQL.js +5 -5
- package/lib/DboBuilder/runSQL.ts +6 -6
- package/lib/DboBuilder/subscribe.d.ts +1 -1
- package/lib/DboBuilder/subscribe.d.ts.map +1 -1
- package/lib/DboBuilder/subscribe.js +3 -3
- package/lib/DboBuilder/subscribe.ts +3 -3
- package/lib/DboBuilder/update.js +5 -6
- package/lib/DboBuilder/update.ts +6 -6
- package/lib/DboBuilder/uploadFile.d.ts.map +1 -1
- package/lib/DboBuilder/uploadFile.js +1 -1
- package/lib/DboBuilder/uploadFile.ts +2 -2
- package/lib/DboBuilder.d.ts +22 -22
- package/lib/DboBuilder.d.ts.map +1 -1
- package/lib/DboBuilder.js +13 -14
- package/lib/DboBuilder.ts +19 -19
- package/lib/FileManager.d.ts +6 -6
- package/lib/FileManager.d.ts.map +1 -1
- package/lib/FileManager.js +3 -5
- package/lib/FileManager.ts +7 -6
- package/lib/Filtering.d.ts +1 -1
- package/lib/Filtering.d.ts.map +1 -1
- package/lib/Filtering.js +7 -7
- package/lib/Filtering.ts +7 -7
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts +3 -0
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -0
- package/lib/JSONBValidation/validate_jsonb_schema_sql.js +294 -0
- package/lib/JSONBValidation/validate_jsonb_schema_sql.ts +293 -0
- package/lib/JSONBValidation/validation.d.ts +108 -0
- package/lib/JSONBValidation/validation.d.ts.map +1 -0
- package/lib/JSONBValidation/validation.js +221 -0
- package/lib/JSONBValidation/validation.ts +332 -0
- package/lib/PostgresNotifListenManager.d.ts +1 -1
- package/lib/PostgresNotifListenManager.d.ts.map +1 -1
- package/lib/PostgresNotifListenManager.js +1 -1
- package/lib/PostgresNotifListenManager.ts +1 -1
- package/lib/Prostgles.d.ts +14 -14
- package/lib/Prostgles.d.ts.map +1 -1
- package/lib/Prostgles.js +20 -19
- package/lib/Prostgles.ts +22 -21
- package/lib/PubSubManager/PubSubManager.d.ts +7 -7
- package/lib/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/lib/PubSubManager/PubSubManager.js +10 -8
- package/lib/PubSubManager/PubSubManager.ts +13 -8
- package/lib/PubSubManager/initPubSubManager.d.ts.map +1 -1
- package/lib/PubSubManager/initPubSubManager.js +10 -7
- package/lib/PubSubManager/initPubSubManager.ts +12 -7
- package/lib/PublishParser.d.ts +32 -32
- package/lib/PublishParser.d.ts.map +1 -1
- package/lib/PublishParser.js +121 -124
- package/lib/PublishParser.ts +125 -127
- package/lib/SchemaWatch.d.ts +1 -1
- package/lib/SchemaWatch.d.ts.map +1 -1
- package/lib/SyncReplication.d.ts +5 -5
- package/lib/SyncReplication.d.ts.map +1 -1
- package/lib/SyncReplication.js +19 -16
- package/lib/SyncReplication.ts +470 -471
- package/lib/TableConfig.d.ts +28 -24
- package/lib/TableConfig.d.ts.map +1 -1
- package/lib/TableConfig.js +33 -12
- package/lib/TableConfig.ts +55 -21
- package/lib/index.js +1 -1
- package/lib/index.ts +1 -1
- package/lib/shortestPath.d.ts +1 -1
- package/lib/shortestPath.d.ts.map +1 -1
- package/lib/shortestPath.js +11 -11
- package/lib/shortestPath.ts +11 -11
- package/package.json +10 -6
- package/tests/client/PID.txt +1 -1
- package/tests/client/package-lock.json +53 -31
- package/tests/client/package.json +4 -1
- package/tests/isomorphic_queries.d.ts.map +1 -1
- package/tests/isomorphic_queries.js +28 -26
- package/tests/isomorphic_queries.ts +30 -29
- package/tests/server/DBoGenerated.d.ts +1 -1
- package/tests/server/index.js +8 -7
- package/tests/server/index.ts +10 -8
- package/tests/server/package-lock.json +76 -58
- package/tests/server/package.json +2 -2
- package/tests/server/server.ts +2 -3
- package/lib/validation.d.ts +0 -100
- package/lib/validation.d.ts.map +0 -1
- package/lib/validation.js +0 -280
- package/lib/validation.ts +0 -360
|
@@ -97,7 +97,7 @@ export class TableHandler extends ViewHandler {
|
|
|
97
97
|
row[synced_field] = Date.now();
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
const data = this.prepareFieldValues(row, forcedData, allowedFields, fixIssues);
|
|
101
101
|
const dataKeys = getKeys(data);
|
|
102
102
|
|
|
103
103
|
dataKeys.map(col => {
|
|
@@ -122,9 +122,9 @@ export class TableHandler extends ViewHandler {
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
prepareReturning = async (returning: Select | undefined, allowedFields: string[]): Promise<SelectItem[]> => {
|
|
125
|
-
|
|
125
|
+
const result: SelectItem[] = [];
|
|
126
126
|
if (returning) {
|
|
127
|
-
|
|
127
|
+
const sBuilder = new SelectItemBuilder({
|
|
128
128
|
allFields: this.column_names.slice(0),
|
|
129
129
|
allowedFields,
|
|
130
130
|
allowedOrderByFields: allowedFields,
|
|
@@ -148,7 +148,7 @@ export class TableHandler extends ViewHandler {
|
|
|
148
148
|
|
|
149
149
|
async delete(filter?: Filter, params?: DeleteParams, param3_unused?: undefined, table_rules?: TableRule, localParams?: LocalParams): Promise<any> {
|
|
150
150
|
return _delete.bind(this)(filter, params, param3_unused, table_rules, localParams);
|
|
151
|
-
}
|
|
151
|
+
}
|
|
152
152
|
|
|
153
153
|
remove(filter: Filter, params?: UpdateParams, param3_unused?: undefined, tableRules?: TableRule, localParams?: LocalParams) {
|
|
154
154
|
return this.delete(filter, params, param3_unused, tableRules, localParams);
|
|
@@ -156,14 +156,7 @@ export class TableHandler extends ViewHandler {
|
|
|
156
156
|
|
|
157
157
|
async upsert(filter: Filter, newData: AnyObject, params?: UpdateParams, table_rules?: TableRule, localParams?: LocalParams): Promise<any> {
|
|
158
158
|
try {
|
|
159
|
-
|
|
160
|
-
if (!this.t) {
|
|
161
|
-
return this.dboBuilder.getTX(dbTX => _upsert(dbTX[this.name] as TableHandler))
|
|
162
|
-
} else {
|
|
163
|
-
return _upsert(this);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
async function _upsert(tblH: TableHandler) {
|
|
159
|
+
const _upsert = async function (tblH: TableHandler) {
|
|
167
160
|
return tblH.find(filter, { select: "", limit: 1 }, undefined, table_rules, localParams)
|
|
168
161
|
.then(exists => {
|
|
169
162
|
if (exists && exists.length) {
|
|
@@ -173,11 +166,19 @@ export class TableHandler extends ViewHandler {
|
|
|
173
166
|
}
|
|
174
167
|
});
|
|
175
168
|
}
|
|
169
|
+
|
|
170
|
+
/* Do it within a transaction to ensure consisency */
|
|
171
|
+
if (!this.t) {
|
|
172
|
+
return this.dboBuilder.getTX(dbTX => _upsert(dbTX[this.name] as TableHandler))
|
|
173
|
+
} else {
|
|
174
|
+
return _upsert(this);
|
|
175
|
+
}
|
|
176
|
+
|
|
176
177
|
} catch (e) {
|
|
177
178
|
if (localParams && localParams.testRule) throw e;
|
|
178
179
|
throw parseError(e, `dbo.${this.name}.upsert()`);
|
|
179
180
|
}
|
|
180
|
-
}
|
|
181
|
+
}
|
|
181
182
|
|
|
182
183
|
/* External request. Cannot sync from server */
|
|
183
184
|
async sync(filter: Filter, params: SelectParams, param3_unused: undefined, table_rules: TableRule, localParams: LocalParams) {
|
|
@@ -197,22 +198,22 @@ export class TableHandler extends ViewHandler {
|
|
|
197
198
|
try {
|
|
198
199
|
|
|
199
200
|
|
|
200
|
-
|
|
201
|
-
const syncFields = [...id_fields, synced_field];
|
|
201
|
+
const { synced_field, allow_delete }: SyncRule = table_rules.sync;
|
|
202
202
|
|
|
203
|
-
if (!id_fields || !synced_field) {
|
|
203
|
+
if (!table_rules.sync.id_fields.length || !synced_field) {
|
|
204
204
|
const err = "INTERNAL ERROR: id_fields OR synced_field missing from publish";
|
|
205
205
|
console.error(err);
|
|
206
206
|
throw err;
|
|
207
207
|
}
|
|
208
208
|
|
|
209
|
-
id_fields = this.parseFieldFilter(id_fields, false);
|
|
209
|
+
const id_fields = this.parseFieldFilter(table_rules.sync.id_fields, false);
|
|
210
|
+
const syncFields = [...id_fields, synced_field];
|
|
210
211
|
|
|
211
|
-
|
|
212
|
+
const allowedSelect = this.parseFieldFilter(table_rules?.select.fields ?? false);
|
|
212
213
|
if (syncFields.find(f => !allowedSelect.includes(f))) {
|
|
213
214
|
throw `INTERNAL ERROR: sync field missing from publish.${this.name}.select.fields`;
|
|
214
215
|
}
|
|
215
|
-
|
|
216
|
+
const select = this.getAllowedSelectFields(
|
|
216
217
|
(params || {})?.select || "*",
|
|
217
218
|
allowedSelect,
|
|
218
219
|
false
|
|
@@ -226,7 +227,7 @@ export class TableHandler extends ViewHandler {
|
|
|
226
227
|
|
|
227
228
|
/* Step 1: parse command and params */
|
|
228
229
|
return this.find(filter, { select, limit: 0 }, undefined, table_rules, localParams)
|
|
229
|
-
.then(async
|
|
230
|
+
.then(async _isValid => {
|
|
230
231
|
|
|
231
232
|
const { filterFields, forcedFilter } = table_rules?.select || {};
|
|
232
233
|
const condition = (await this.prepareWhere({ filter, forcedFilter, filterFields, addKeywords: false, localParams, tableRule: table_rules })).where;
|
|
@@ -6,7 +6,7 @@ import { Graph } from "../shortestPath";
|
|
|
6
6
|
import { TableRule, UpdateRule, ValidateRow } from "../PublishParser";
|
|
7
7
|
import { SelectItem, SelectItemValidated } from "./QueryBuilder/QueryBuilder";
|
|
8
8
|
import { LocalFunc } from "./subscribe";
|
|
9
|
-
export
|
|
9
|
+
export type JoinPaths = {
|
|
10
10
|
t1: string;
|
|
11
11
|
t2: string;
|
|
12
12
|
path: string[];
|
|
@@ -75,16 +75,6 @@ export declare class ViewHandler {
|
|
|
75
75
|
getAllowedSelectFields(selectParams: FieldFilter, allowed_cols: FieldFilter, allow_empty?: boolean): string[];
|
|
76
76
|
prepareColumnSet(selectParams: FieldFilter, allowed_cols: FieldFilter, allow_empty?: boolean, onlyNames?: boolean): string | pgPromise.ColumnSet;
|
|
77
77
|
prepareSelect(selectParams: FieldFilter, allowed_cols: FieldFilter, allow_empty?: boolean, tableAlias?: string): string;
|
|
78
|
-
prepareHaving(params: {
|
|
79
|
-
having: Filter;
|
|
80
|
-
select: SelectItem[];
|
|
81
|
-
forcedFilter: object;
|
|
82
|
-
filterFields: FieldFilter;
|
|
83
|
-
addKeywords?: boolean;
|
|
84
|
-
tableAlias?: string;
|
|
85
|
-
localParams: LocalParams;
|
|
86
|
-
tableRule: TableRule;
|
|
87
|
-
}): Promise<string>;
|
|
88
78
|
/**
|
|
89
79
|
* Parses group or simple filter
|
|
90
80
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewHandler.d.ts","sourceRoot":"","sources":["ViewHandler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AAExC,OAAO,EACL,UAAU,EAAE,WAAW,EAAE,YAAY,EACrC,OAAO,EAGP,SAAS,IAAI,KAAK,EAClB,SAAS,EAEgB,eAAe,EACzC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EACL,UAAU,EAAiB,kBAAkB,EAAC,MAAM,EACpD,QAAQ,EAAE,WAAW,EAA2D,QAAQ,EACxF,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAChD,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EAAkD,UAAU,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAG9H,OAAO,EAAE,SAAS,EAAa,MAAM,aAAa,CAAC;AACnD,
|
|
1
|
+
{"version":3,"file":"ViewHandler.d.ts","sourceRoot":"","sources":["ViewHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -138,7 +138,7 @@ class ViewHandler {
|
|
|
138
138
|
// fix this
|
|
139
139
|
// and also make hot schema reload over ws
|
|
140
140
|
this.colSet = new ColSet(this.columns, this.name);
|
|
141
|
-
const { $and: $and_key, $or: $or_key } = this.dboBuilder.prostgles.keywords;
|
|
141
|
+
// const { $and: $and_key, $or: $or_key } = this.dboBuilder.prostgles.keywords;
|
|
142
142
|
// this.tsDataName = snakify(this.name, true);
|
|
143
143
|
// if(this.tsDataName === "T") this.tsDataName = this.tsDataName + "_";
|
|
144
144
|
// this.tsDataDef = `export type ${this.tsDataName} = {\n`;
|
|
@@ -237,7 +237,8 @@ class ViewHandler {
|
|
|
237
237
|
const getJoinCondition = (on, leftTable, rightTable) => {
|
|
238
238
|
return on.map(cond => Object.keys(cond).map(lKey => `${leftTable}.${lKey} = ${rightTable}.${cond[lKey]}`).join("\nAND ")).join(" OR ");
|
|
239
239
|
};
|
|
240
|
-
let toOne = true
|
|
240
|
+
let toOne = true;
|
|
241
|
+
const query = this.joins.map(({ tables, on, type }, i) => {
|
|
241
242
|
if (type.split("-")[1] === "many") {
|
|
242
243
|
toOne = false;
|
|
243
244
|
}
|
|
@@ -300,9 +301,9 @@ class ViewHandler {
|
|
|
300
301
|
if (!jo)
|
|
301
302
|
throw `Joining ${t1} <-> ${t2} dissallowed or missing`;
|
|
302
303
|
;
|
|
303
|
-
|
|
304
|
+
const on = [];
|
|
304
305
|
jo.on.map(cond => {
|
|
305
|
-
|
|
306
|
+
const condArr = [];
|
|
306
307
|
Object.keys(cond).map(leftKey => {
|
|
307
308
|
const rightKey = cond[leftKey];
|
|
308
309
|
/* Left table is joining on keys */
|
|
@@ -323,7 +324,7 @@ class ViewHandler {
|
|
|
323
324
|
on
|
|
324
325
|
};
|
|
325
326
|
});
|
|
326
|
-
|
|
327
|
+
const expectOne = false;
|
|
327
328
|
// paths.map(({ source, target, on }, i) => {
|
|
328
329
|
// if(expectOne && on.length === 1){
|
|
329
330
|
// const sourceCol = on[0][1];
|
|
@@ -424,7 +425,7 @@ class ViewHandler {
|
|
|
424
425
|
const firstValid = fieldParams.find(fp => fp !== undefined);
|
|
425
426
|
return this.parseFieldFilter(firstValid);
|
|
426
427
|
};
|
|
427
|
-
|
|
428
|
+
const res = {
|
|
428
429
|
allColumns,
|
|
429
430
|
getColumns: tableRules?.getColumns ?? true,
|
|
430
431
|
getInfo: tableRules?.getColumns ?? true,
|
|
@@ -541,13 +542,10 @@ class ViewHandler {
|
|
|
541
542
|
}
|
|
542
543
|
/* Validate publish */
|
|
543
544
|
if (tableRules) {
|
|
544
|
-
let fields, filterFields, forcedFilter, maxLimit;
|
|
545
545
|
if (!tableRules.select)
|
|
546
546
|
throw "select rules missing for " + this.name;
|
|
547
|
-
fields = tableRules.select.fields;
|
|
548
|
-
|
|
549
|
-
filterFields = tableRules.select.filterFields;
|
|
550
|
-
maxLimit = tableRules.select.maxLimit;
|
|
547
|
+
const fields = tableRules.select.fields;
|
|
548
|
+
const maxLimit = tableRules.select.maxLimit;
|
|
551
549
|
if (tableRules.select !== "*" && typeof tableRules.select !== "boolean" && !(0, DboBuilder_1.isPlainObject)(tableRules.select))
|
|
552
550
|
throw `\nINVALID publish.${this.name}.select\nExpecting any of: "*" | { fields: "*" } | true | false`;
|
|
553
551
|
if (!fields)
|
|
@@ -555,7 +553,7 @@ class ViewHandler {
|
|
|
555
553
|
if (maxLimit && !Number.isInteger(maxLimit))
|
|
556
554
|
throw ` invalid publish.${this.name}.select.maxLimit -> expecting integer but got ` + maxLimit;
|
|
557
555
|
}
|
|
558
|
-
|
|
556
|
+
const q = await (0, QueryBuilder_1.getNewQuery)(this, filter, selectParams, param3_unused, tableRules, localParams, this.columns), _query = (0, makeSelectQuery_1.makeSelectQuery)(this, q, undefined, undefined, selectParams);
|
|
559
557
|
// console.log(_query, JSON.stringify(q, null, 2))
|
|
560
558
|
if (testRule) {
|
|
561
559
|
try {
|
|
@@ -620,7 +618,7 @@ class ViewHandler {
|
|
|
620
618
|
}
|
|
621
619
|
subscribeOne(filter, params = {}, localFunc, table_rules, localParams) {
|
|
622
620
|
//@ts-ignore
|
|
623
|
-
|
|
621
|
+
const func = localParams ? undefined : (rows) => localFunc(rows[0]);
|
|
624
622
|
//@ts-ignore
|
|
625
623
|
return this.subscribe(filter, { ...params, limit: 2 }, func, table_rules, localParams);
|
|
626
624
|
}
|
|
@@ -628,10 +626,10 @@ class ViewHandler {
|
|
|
628
626
|
filter = filter || {};
|
|
629
627
|
try {
|
|
630
628
|
return await this.find(filter, { select: "", limit: 0 }, undefined, table_rules, localParams)
|
|
631
|
-
.then(async (
|
|
629
|
+
.then(async (_allowed) => {
|
|
632
630
|
const { filterFields, forcedFilter } = table_rules?.select || {};
|
|
633
631
|
const where = (await this.prepareWhere({ filter, forcedFilter, filterFields, addKeywords: true, localParams, tableRule: table_rules })).where;
|
|
634
|
-
|
|
632
|
+
const query = "SELECT COUNT(*) FROM " + this.escapedName + " " + where;
|
|
635
633
|
return (this.t || this.db).one(query, { _psqlWS_tableName: this.name }).then(({ count }) => +count);
|
|
636
634
|
});
|
|
637
635
|
}
|
|
@@ -666,7 +664,8 @@ class ViewHandler {
|
|
|
666
664
|
}
|
|
667
665
|
}
|
|
668
666
|
getAllowedSelectFields(selectParams = "*", allowed_cols, allow_empty = true) {
|
|
669
|
-
|
|
667
|
+
const all_columns = this.column_names.slice(0);
|
|
668
|
+
let allowedFields = all_columns.slice(0), resultFields = [];
|
|
670
669
|
if (selectParams) {
|
|
671
670
|
resultFields = this.parseFieldFilter(selectParams, allow_empty);
|
|
672
671
|
}
|
|
@@ -680,32 +679,24 @@ class ViewHandler {
|
|
|
680
679
|
return col_names;
|
|
681
680
|
}
|
|
682
681
|
prepareColumnSet(selectParams = "*", allowed_cols, allow_empty = true, onlyNames = true) {
|
|
683
|
-
|
|
682
|
+
const all_columns = this.column_names.slice(0);
|
|
684
683
|
let col_names = this.getAllowedSelectFields(selectParams, all_columns, allow_empty);
|
|
685
684
|
/** Ensure order is maintained */
|
|
686
685
|
if (selectParams && Array.isArray(selectParams) && typeof selectParams[0] === "string") {
|
|
687
686
|
col_names = col_names.sort((a, b) => selectParams.indexOf(a) - selectParams.indexOf(b));
|
|
688
687
|
}
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
return onlyNames ? colSet.names : colSet;
|
|
692
|
-
}
|
|
693
|
-
catch (e) {
|
|
694
|
-
throw e;
|
|
695
|
-
}
|
|
688
|
+
const colSet = new DboBuilder_1.pgp.helpers.ColumnSet(col_names);
|
|
689
|
+
return onlyNames ? colSet.names : colSet;
|
|
696
690
|
}
|
|
697
691
|
prepareSelect(selectParams = "*", allowed_cols, allow_empty = true, tableAlias) {
|
|
698
692
|
if (tableAlias) {
|
|
699
|
-
|
|
693
|
+
const cs = this.prepareColumnSet(selectParams, allowed_cols, true, false);
|
|
700
694
|
return cs.columns.map(col => `${this.escapedName}.${(0, prostgles_types_1.asName)(col.name)}`).join(", ");
|
|
701
695
|
}
|
|
702
696
|
else {
|
|
703
697
|
return this.prepareColumnSet(selectParams, allowed_cols, true, true);
|
|
704
698
|
}
|
|
705
699
|
}
|
|
706
|
-
async prepareHaving(params) {
|
|
707
|
-
return "";
|
|
708
|
-
}
|
|
709
700
|
/**
|
|
710
701
|
* Parses group or simple filter
|
|
711
702
|
*/
|
|
@@ -720,7 +711,7 @@ class ViewHandler {
|
|
|
720
711
|
if (!f)
|
|
721
712
|
throw "Invalid/missing group filter provided";
|
|
722
713
|
let result = "";
|
|
723
|
-
|
|
714
|
+
const keys = (0, prostgles_types_1.getKeys)(f);
|
|
724
715
|
if (!keys.length)
|
|
725
716
|
return result;
|
|
726
717
|
if ((keys.includes($and_key) || keys.includes($or_key))) {
|
|
@@ -732,7 +723,7 @@ class ViewHandler {
|
|
|
732
723
|
const { [$and_key]: $and, [$or_key]: $or } = f, group = $and || $or;
|
|
733
724
|
if (group && group.length) {
|
|
734
725
|
const operand = $and ? " AND " : " OR ";
|
|
735
|
-
|
|
726
|
+
const conditions = (await Promise.all(group.map(async (gf) => await parseFullFilter(gf, group, isForcedFilterBypass)))).filter(c => c);
|
|
736
727
|
if (conditions && conditions.length) {
|
|
737
728
|
if (conditions.length === 1)
|
|
738
729
|
return conditions.join(operand);
|
|
@@ -772,8 +763,8 @@ class ViewHandler {
|
|
|
772
763
|
let res = "";
|
|
773
764
|
const thisTable = this.name;
|
|
774
765
|
const isNotExists = ["$notExists", "$notExistsJoined"].includes(eConfig.existType);
|
|
775
|
-
|
|
776
|
-
|
|
766
|
+
const { f2, tables, isJoined } = eConfig;
|
|
767
|
+
const t2 = tables[tables.length - 1];
|
|
777
768
|
tables.forEach(t => {
|
|
778
769
|
if (!this.dboBuilder.dbo[t])
|
|
779
770
|
throw { stack: ["prepareExistCondition()"], message: `Invalid or dissallowed table: ${t}` };
|
|
@@ -786,7 +777,7 @@ class ViewHandler {
|
|
|
786
777
|
let joinPaths = [];
|
|
787
778
|
let expectOne = true;
|
|
788
779
|
tables.map((t2, depth) => {
|
|
789
|
-
|
|
780
|
+
const t1 = depth ? tables[depth - 1] : thisTable;
|
|
790
781
|
let exactPaths = [t1, t2];
|
|
791
782
|
if (!depth && eConfig.shortestJoin)
|
|
792
783
|
exactPaths = undefined;
|
|
@@ -794,16 +785,16 @@ class ViewHandler {
|
|
|
794
785
|
expectOne = Boolean(expectOne && jinf.expectOne);
|
|
795
786
|
joinPaths = joinPaths.concat(jinf.paths);
|
|
796
787
|
});
|
|
797
|
-
|
|
788
|
+
const r = makeJoin({ paths: joinPaths, expectOne }, 0);
|
|
798
789
|
return r;
|
|
799
790
|
function makeJoin(joinInfo, ji) {
|
|
800
791
|
const { paths } = joinInfo;
|
|
801
792
|
const jp = paths[ji];
|
|
802
793
|
// let prevTable = ji? paths[ji - 1].table : jp.source;
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
794
|
+
const table = paths[ji].table;
|
|
795
|
+
const tableAlias = (0, prostgles_types_1.asName)(ji < paths.length - 1 ? `jd${ji}` : table);
|
|
796
|
+
const prevTableAlias = (0, prostgles_types_1.asName)(ji ? `jd${ji - 1}` : thisTable);
|
|
797
|
+
const cond = `${jp.on.map(c => {
|
|
807
798
|
return c.map(([c1, c2]) => `${prevTableAlias}.${(0, prostgles_types_1.asName)(c1)} = ${tableAlias}.${(0, prostgles_types_1.asName)(c2)}`).join(" AND ");
|
|
808
799
|
}).join("\n OR ")}`;
|
|
809
800
|
let j = `SELECT 1 \n` +
|
|
@@ -818,7 +809,7 @@ class ViewHandler {
|
|
|
818
809
|
j += `AND ${makeJoin(joinInfo, ji + 1)} \n`;
|
|
819
810
|
}
|
|
820
811
|
j = indent(j, ji + 1);
|
|
821
|
-
|
|
812
|
+
const res = `${isNotExists ? " NOT " : " "} EXISTS ( \n` +
|
|
822
813
|
j +
|
|
823
814
|
`) \n`;
|
|
824
815
|
return indent(res, ji);
|
|
@@ -835,21 +826,15 @@ class ViewHandler {
|
|
|
835
826
|
throw "Dissallowed";
|
|
836
827
|
({ forcedFilter, filterFields } = t2Rules.select);
|
|
837
828
|
}
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
})).where;
|
|
848
|
-
}
|
|
849
|
-
catch (err) {
|
|
850
|
-
// console.trace(err)
|
|
851
|
-
throw err;
|
|
852
|
-
}
|
|
829
|
+
finalWhere = (await this.dboBuilder.dbo[t2].prepareWhere({
|
|
830
|
+
filter: f2,
|
|
831
|
+
forcedFilter,
|
|
832
|
+
filterFields,
|
|
833
|
+
addKeywords: false,
|
|
834
|
+
tableAlias,
|
|
835
|
+
localParams,
|
|
836
|
+
tableRule: t2Rules
|
|
837
|
+
})).where;
|
|
853
838
|
if (!isJoined) {
|
|
854
839
|
res = `${isNotExists ? " NOT " : " "} EXISTS (SELECT 1 \nFROM ${(0, prostgles_types_1.asName)(t2)} \n${finalWhere ? `WHERE ${finalWhere}` : ""}) `;
|
|
855
840
|
}
|
|
@@ -914,7 +899,7 @@ class ViewHandler {
|
|
|
914
899
|
}
|
|
915
900
|
else if (Array.isArray(orderBy)) {
|
|
916
901
|
/* Order by is formed of a list of ascending field names */
|
|
917
|
-
|
|
902
|
+
const _orderBy = orderBy;
|
|
918
903
|
if (_orderBy && !_orderBy.find(v => typeof v !== "string")) {
|
|
919
904
|
/* [string] */
|
|
920
905
|
_ob = _orderBy.map(key => ({ key, asc: true }));
|
|
@@ -931,7 +916,7 @@ class ViewHandler {
|
|
|
931
916
|
return [];
|
|
932
917
|
const validatedAggAliases = select.filter(s => s.type !== "joinedColumn" &&
|
|
933
918
|
(!s.fields.length || s.fields.every(f => allowed_cols.includes(f)))).map(s => s.alias);
|
|
934
|
-
|
|
919
|
+
const bad_param = _ob.find(({ key }) => !(validatedAggAliases || []).includes(key) &&
|
|
935
920
|
!allowed_cols.includes(key));
|
|
936
921
|
if (!bad_param) {
|
|
937
922
|
const selectedAliases = select.filter(s => s.selected).map(s => s.alias);
|
|
@@ -1016,15 +1001,16 @@ class ViewHandler {
|
|
|
1016
1001
|
* @param {string[]} allowed_cols - allowed columns (excluding forcedData) from table rules
|
|
1017
1002
|
*/
|
|
1018
1003
|
prepareFieldValues(obj = {}, forcedData = {}, allowed_cols, fixIssues = false) {
|
|
1019
|
-
|
|
1004
|
+
const column_names = this.column_names.slice(0);
|
|
1020
1005
|
if (!column_names || !column_names.length)
|
|
1021
1006
|
throw "table column_names mising";
|
|
1022
1007
|
let _allowed_cols = column_names.slice(0);
|
|
1023
|
-
|
|
1008
|
+
const _obj = { ...obj };
|
|
1024
1009
|
if (allowed_cols) {
|
|
1025
1010
|
_allowed_cols = this.parseFieldFilter(allowed_cols, false);
|
|
1026
1011
|
}
|
|
1027
|
-
let final_filter = { ..._obj }
|
|
1012
|
+
let final_filter = { ..._obj };
|
|
1013
|
+
const filter_keys = Object.keys(final_filter);
|
|
1028
1014
|
if (fixIssues && filter_keys.length) {
|
|
1029
1015
|
final_filter = {};
|
|
1030
1016
|
filter_keys
|
|
@@ -1055,7 +1041,8 @@ class ViewHandler {
|
|
|
1055
1041
|
if (!all_cols)
|
|
1056
1042
|
throw "all_cols missing";
|
|
1057
1043
|
const all_fields = all_cols; // || this.column_names.slice(0);
|
|
1058
|
-
let colNames = []
|
|
1044
|
+
let colNames = [];
|
|
1045
|
+
const initialParams = JSON.stringify(fieldParams);
|
|
1059
1046
|
if (fieldParams) {
|
|
1060
1047
|
/*
|
|
1061
1048
|
"field1, field2, field4" | "*"
|
|
@@ -1097,7 +1084,7 @@ class ViewHandler {
|
|
|
1097
1084
|
if (!(0, prostgles_types_1.getKeys)(fieldParams).length) {
|
|
1098
1085
|
return []; //all_fields.slice(0) as typeof all_fields;
|
|
1099
1086
|
}
|
|
1100
|
-
|
|
1087
|
+
const keys = (0, prostgles_types_1.getKeys)(fieldParams);
|
|
1101
1088
|
if (keys[0] === "") {
|
|
1102
1089
|
if (allow_empty) {
|
|
1103
1090
|
return [""];
|
|
@@ -1112,7 +1099,7 @@ class ViewHandler {
|
|
|
1112
1099
|
if (!allowedVals.includes(fieldParams[key]))
|
|
1113
1100
|
throw `Invalid field selection value for: { ${key}: ${fieldParams[key]} }. \n Allowed values: ${allowedVals.join(" OR ")}`;
|
|
1114
1101
|
});
|
|
1115
|
-
|
|
1102
|
+
const allowed = keys.filter(key => fieldParams[key]), disallowed = keys.filter(key => !fieldParams[key]);
|
|
1116
1103
|
if (disallowed && disallowed.length) {
|
|
1117
1104
|
return all_fields.filter(col => !disallowed.includes(col));
|
|
1118
1105
|
}
|
|
@@ -1127,7 +1114,7 @@ class ViewHandler {
|
|
|
1127
1114
|
}
|
|
1128
1115
|
return colNames;
|
|
1129
1116
|
function validate(cols) {
|
|
1130
|
-
|
|
1117
|
+
const bad_keys = cols.filter(col => !all_fields.includes(col));
|
|
1131
1118
|
if (bad_keys && bad_keys.length) {
|
|
1132
1119
|
throw "\nUnrecognised or illegal fields: " + bad_keys.join(", ");
|
|
1133
1120
|
}
|