prostgles-server 4.2.183 → 4.2.185
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/.github/workflows/main.yml +15 -15
- package/.prettierignore +2 -0
- package/README.md +1 -1
- package/dist/Auth/AuthHandler.d.ts +1 -1
- package/dist/Auth/AuthHandler.d.ts.map +1 -1
- package/dist/Auth/AuthHandler.js +64 -32
- package/dist/Auth/AuthHandler.js.map +1 -1
- package/dist/Auth/AuthTypes.d.ts +15 -1
- package/dist/Auth/AuthTypes.d.ts.map +1 -1
- package/dist/Auth/getSafeReturnURL.d.ts.map +1 -1
- package/dist/Auth/getSafeReturnURL.js.map +1 -1
- package/dist/Auth/sendEmail.d.ts.map +1 -1
- package/dist/Auth/sendEmail.js +6 -6
- package/dist/Auth/sendEmail.js.map +1 -1
- package/dist/Auth/setAuthProviders.d.ts +1 -1
- package/dist/Auth/setAuthProviders.d.ts.map +1 -1
- package/dist/Auth/setAuthProviders.js +15 -8
- package/dist/Auth/setAuthProviders.js.map +1 -1
- package/dist/Auth/setEmailProvider.d.ts.map +1 -1
- package/dist/Auth/setEmailProvider.js +23 -4
- package/dist/Auth/setEmailProvider.js.map +1 -1
- package/dist/Auth/setupAuthRoutes.d.ts.map +1 -1
- package/dist/Auth/setupAuthRoutes.js +27 -9
- package/dist/Auth/setupAuthRoutes.js.map +1 -1
- package/dist/DBEventsManager.d.ts.map +1 -1
- package/dist/DBEventsManager.js +24 -19
- package/dist/DBEventsManager.js.map +1 -1
- package/dist/DBSchemaBuilder.d.ts.map +1 -1
- package/dist/DBSchemaBuilder.js +18 -5
- package/dist/DBSchemaBuilder.js.map +1 -1
- package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/DboBuilder.js +7 -2
- package/dist/DboBuilder/DboBuilder.js.map +1 -1
- package/dist/DboBuilder/DboBuilderTypes.d.ts +4 -4
- package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
- package/dist/DboBuilder/DboBuilderTypes.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions.d.ts +2 -2
- package/dist/DboBuilder/QueryBuilder/Functions.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions.js +293 -173
- package/dist/DboBuilder/QueryBuilder/Functions.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts +2 -2
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +52 -29
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getJoinQuery.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getJoinQuery.js +51 -32
- package/dist/DboBuilder/QueryBuilder/getJoinQuery.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getNewQuery.js +48 -25
- package/dist/DboBuilder/QueryBuilder/getNewQuery.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getSelectQuery.d.ts +1 -1
- package/dist/DboBuilder/QueryBuilder/getSelectQuery.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getSelectQuery.js +32 -23
- package/dist/DboBuilder/QueryBuilder/getSelectQuery.js.map +1 -1
- package/dist/DboBuilder/QueryStreamer.d.ts +2 -2
- package/dist/DboBuilder/QueryStreamer.d.ts.map +1 -1
- package/dist/DboBuilder/QueryStreamer.js +68 -23
- package/dist/DboBuilder/QueryStreamer.js.map +1 -1
- package/dist/DboBuilder/TableHandler/DataValidator.d.ts +1 -1
- package/dist/DboBuilder/TableHandler/DataValidator.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/DataValidator.js +79 -43
- package/dist/DboBuilder/TableHandler/DataValidator.js.map +1 -1
- package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/TableHandler.js +39 -15
- package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
- package/dist/DboBuilder/TableHandler/delete.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/delete.js +44 -13
- package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
- package/dist/DboBuilder/TableHandler/insert.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/insert.js +81 -22
- package/dist/DboBuilder/TableHandler/insert.js.map +1 -1
- package/dist/DboBuilder/TableHandler/insertTest.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/insertTest.js.map +1 -1
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts +1 -1
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js +7 -4
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js +24 -5
- 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 +16 -4
- package/dist/DboBuilder/TableHandler/update.js.map +1 -1
- package/dist/DboBuilder/TableHandler/updateBatch.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/updateBatch.js +33 -10
- package/dist/DboBuilder/TableHandler/updateBatch.js.map +1 -1
- package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/updateFile.js +24 -6
- package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
- package/dist/DboBuilder/TableHandler/upsert.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/upsert.js +22 -6
- package/dist/DboBuilder/TableHandler/upsert.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +5 -5
- package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/ViewHandler.js +64 -36
- package/dist/DboBuilder/ViewHandler/ViewHandler.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/count.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/count.js +21 -7
- package/dist/DboBuilder/ViewHandler/count.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/find.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/find.js +76 -22
- package/dist/DboBuilder/ViewHandler/find.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsCondition.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsCondition.js +19 -10
- package/dist/DboBuilder/ViewHandler/getExistsCondition.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsFilters.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsFilters.js +12 -5
- package/dist/DboBuilder/ViewHandler/getExistsFilters.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getInfo.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/getInfo.js +27 -9
- package/dist/DboBuilder/ViewHandler/getInfo.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getTableJoinQuery.d.ts +2 -2
- package/dist/DboBuilder/ViewHandler/getTableJoinQuery.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js +42 -23
- package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseComplexFilter.js +22 -9
- package/dist/DboBuilder/ViewHandler/parseComplexFilter.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseFieldFilter.d.ts +4 -4
- package/dist/DboBuilder/ViewHandler/parseFieldFilter.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseFieldFilter.js +13 -11
- package/dist/DboBuilder/ViewHandler/parseFieldFilter.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseJoinPath.d.ts +1 -1
- package/dist/DboBuilder/ViewHandler/parseJoinPath.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseJoinPath.js +44 -29
- package/dist/DboBuilder/ViewHandler/parseJoinPath.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareSortItems.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareSortItems.js +36 -27
- package/dist/DboBuilder/ViewHandler/prepareSortItems.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareWhere.js +16 -12
- package/dist/DboBuilder/ViewHandler/prepareWhere.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/size.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/size.js +24 -7
- package/dist/DboBuilder/ViewHandler/size.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/subscribe.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/subscribe.js +40 -12
- package/dist/DboBuilder/ViewHandler/subscribe.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/validateViewRules.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/validateViewRules.js +20 -5
- package/dist/DboBuilder/ViewHandler/validateViewRules.js.map +1 -1
- package/dist/DboBuilder/dboBuilderUtils.d.ts.map +1 -1
- package/dist/DboBuilder/dboBuilderUtils.js +18 -7
- package/dist/DboBuilder/dboBuilderUtils.js.map +1 -1
- package/dist/DboBuilder/getColumns.d.ts.map +1 -1
- package/dist/DboBuilder/getColumns.js +22 -7
- package/dist/DboBuilder/getColumns.js.map +1 -1
- package/dist/DboBuilder/getCondition.d.ts.map +1 -1
- package/dist/DboBuilder/getCondition.js +43 -30
- package/dist/DboBuilder/getCondition.js.map +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.js +38 -27
- package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
- package/dist/DboBuilder/getTablesForSchemaPostgresSQL.d.ts.map +1 -1
- package/dist/DboBuilder/getTablesForSchemaPostgresSQL.js +9 -9
- package/dist/DboBuilder/getTablesForSchemaPostgresSQL.js.map +1 -1
- package/dist/DboBuilder/insertNestedRecords.d.ts +3 -3
- package/dist/DboBuilder/insertNestedRecords.d.ts.map +1 -1
- package/dist/DboBuilder/insertNestedRecords.js +79 -44
- package/dist/DboBuilder/insertNestedRecords.js.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.d.ts.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.js +38 -14
- package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
- package/dist/DboBuilder/prepareShortestJoinPaths.d.ts.map +1 -1
- package/dist/DboBuilder/prepareShortestJoinPaths.js +56 -31
- package/dist/DboBuilder/prepareShortestJoinPaths.js.map +1 -1
- package/dist/DboBuilder/runSQL.d.ts.map +1 -1
- package/dist/DboBuilder/runSQL.js +41 -21
- package/dist/DboBuilder/runSQL.js.map +1 -1
- package/dist/DboBuilder/runTransaction.d.ts +1 -1
- package/dist/DboBuilder/runTransaction.d.ts.map +1 -1
- package/dist/DboBuilder/runTransaction.js +2 -2
- package/dist/DboBuilder/runTransaction.js.map +1 -1
- package/dist/DboBuilder/sqlErrCodeToMsg.d.ts.map +1 -1
- package/dist/DboBuilder/sqlErrCodeToMsg.js +297 -38
- package/dist/DboBuilder/sqlErrCodeToMsg.js.map +1 -1
- package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
- package/dist/DboBuilder/uploadFile.js +33 -9
- package/dist/DboBuilder/uploadFile.js.map +1 -1
- package/dist/Event_Trigger_Tags.d.ts +1 -1
- package/dist/Event_Trigger_Tags.d.ts.map +1 -1
- package/dist/Event_Trigger_Tags.js +1 -1
- package/dist/Event_Trigger_Tags.js.map +1 -1
- package/dist/FileManager/FileManager.d.ts.map +1 -1
- package/dist/FileManager/FileManager.js +6 -3
- package/dist/FileManager/FileManager.js.map +1 -1
- package/dist/FileManager/getValidatedFileType.d.ts.map +1 -1
- package/dist/FileManager/getValidatedFileType.js +18 -16
- package/dist/FileManager/getValidatedFileType.js.map +1 -1
- package/dist/FileManager/initFileManager.d.ts.map +1 -1
- package/dist/FileManager/initFileManager.js +7 -1
- package/dist/FileManager/initFileManager.js.map +1 -1
- package/dist/FileManager/upload.d.ts +1 -1
- package/dist/FileManager/upload.d.ts.map +1 -1
- package/dist/FileManager/upload.js +3 -3
- package/dist/FileManager/upload.js.map +1 -1
- package/dist/FileManager/uploadStream.d.ts +1 -1
- package/dist/FileManager/uploadStream.d.ts.map +1 -1
- package/dist/FileManager/uploadStream.js +6 -7
- package/dist/FileManager/uploadStream.js.map +1 -1
- package/dist/Filtering.d.ts +3 -3
- package/dist/Filtering.d.ts.map +1 -1
- package/dist/Filtering.js +70 -37
- package/dist/Filtering.js.map +1 -1
- package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -1
- package/dist/JSONBValidation/validate_jsonb_schema_sql.js +1 -4
- package/dist/JSONBValidation/validate_jsonb_schema_sql.js.map +1 -1
- package/dist/JSONBValidation/validation.d.ts.map +1 -1
- package/dist/JSONBValidation/validation.js +46 -24
- package/dist/JSONBValidation/validation.js.map +1 -1
- package/dist/Logging.d.ts +2 -2
- package/dist/Logging.d.ts.map +1 -1
- package/dist/PostgresNotifListenManager.d.ts.map +1 -1
- package/dist/PostgresNotifListenManager.js +20 -22
- package/dist/PostgresNotifListenManager.js.map +1 -1
- package/dist/Prostgles.d.ts +1 -1
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +37 -11
- package/dist/Prostgles.js.map +1 -1
- package/dist/ProstglesTypes.d.ts.map +1 -1
- package/dist/ProstglesTypes.js +6 -1
- package/dist/ProstglesTypes.js.map +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.js +10 -5
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/dist/PubSubManager/addSub.d.ts.map +1 -1
- package/dist/PubSubManager/addSub.js +4 -6
- package/dist/PubSubManager/addSub.js.map +1 -1
- package/dist/PubSubManager/addSync.d.ts.map +1 -1
- package/dist/PubSubManager/addSync.js +10 -6
- package/dist/PubSubManager/addSync.js.map +1 -1
- package/dist/PubSubManager/getCreatePubSubManagerError.d.ts.map +1 -1
- package/dist/PubSubManager/getCreatePubSubManagerError.js +3 -1
- package/dist/PubSubManager/getCreatePubSubManagerError.js.map +1 -1
- package/dist/PubSubManager/getPubSubManagerInitQuery.d.ts.map +1 -1
- package/dist/PubSubManager/getPubSubManagerInitQuery.js +8 -8
- package/dist/PubSubManager/getPubSubManagerInitQuery.js.map +1 -1
- package/dist/PubSubManager/initPubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/initPubSubManager.js +7 -9
- package/dist/PubSubManager/initPubSubManager.js.map +1 -1
- package/dist/PubSubManager/notifListener.d.ts.map +1 -1
- package/dist/PubSubManager/notifListener.js +23 -12
- package/dist/PubSubManager/notifListener.js.map +1 -1
- package/dist/PubSubManager/orphanTriggerCheck.d.ts.map +1 -1
- package/dist/PubSubManager/orphanTriggerCheck.js.map +1 -1
- package/dist/PubSubManager/pushSubData.d.ts.map +1 -1
- package/dist/PubSubManager/pushSubData.js +1 -1
- package/dist/PubSubManager/pushSubData.js.map +1 -1
- package/dist/PublishParser/PublishParser.d.ts +1 -1
- package/dist/PublishParser/PublishParser.d.ts.map +1 -1
- package/dist/PublishParser/PublishParser.js +25 -14
- package/dist/PublishParser/PublishParser.js.map +1 -1
- package/dist/PublishParser/getFileTableRules.d.ts.map +1 -1
- package/dist/PublishParser/getFileTableRules.js +23 -16
- package/dist/PublishParser/getFileTableRules.js.map +1 -1
- package/dist/PublishParser/getSchemaFromPublish.d.ts.map +1 -1
- package/dist/PublishParser/getSchemaFromPublish.js +39 -16
- package/dist/PublishParser/getSchemaFromPublish.js.map +1 -1
- package/dist/PublishParser/getTableRulesWithoutFileTable.d.ts.map +1 -1
- package/dist/PublishParser/getTableRulesWithoutFileTable.js +42 -22
- package/dist/PublishParser/getTableRulesWithoutFileTable.js.map +1 -1
- package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
- package/dist/PublishParser/publishTypesAndUtils.js +5 -1
- package/dist/PublishParser/publishTypesAndUtils.js.map +1 -1
- package/dist/RestApi.d.ts +1 -1
- package/dist/RestApi.d.ts.map +1 -1
- package/dist/RestApi.js +1 -1
- package/dist/RestApi.js.map +1 -1
- package/dist/SchemaWatch/SchemaWatch.d.ts +2 -2
- package/dist/SchemaWatch/SchemaWatch.d.ts.map +1 -1
- package/dist/SchemaWatch/SchemaWatch.js +11 -9
- package/dist/SchemaWatch/SchemaWatch.js.map +1 -1
- package/dist/SchemaWatch/getValidatedWatchSchemaType.d.ts.map +1 -1
- package/dist/SchemaWatch/getValidatedWatchSchemaType.js +3 -3
- package/dist/SchemaWatch/getValidatedWatchSchemaType.js.map +1 -1
- package/dist/SchemaWatch/getWatchSchemaTagList.d.ts.map +1 -1
- package/dist/SchemaWatch/getWatchSchemaTagList.js +12 -6
- package/dist/SchemaWatch/getWatchSchemaTagList.js.map +1 -1
- package/dist/SyncReplication.d.ts.map +1 -1
- package/dist/SyncReplication.js +84 -42
- package/dist/SyncReplication.js.map +1 -1
- package/dist/TableConfig/TableConfig.d.ts +5 -5
- package/dist/TableConfig/TableConfig.d.ts.map +1 -1
- package/dist/TableConfig/TableConfig.js +18 -5
- package/dist/TableConfig/TableConfig.js.map +1 -1
- package/dist/TableConfig/getColumnDefinitionQuery.d.ts +2 -2
- package/dist/TableConfig/getColumnDefinitionQuery.d.ts.map +1 -1
- package/dist/TableConfig/getColumnDefinitionQuery.js +20 -9
- package/dist/TableConfig/getColumnDefinitionQuery.js.map +1 -1
- package/dist/TableConfig/getConstraintDefinitionQueries.d.ts +3 -3
- package/dist/TableConfig/getConstraintDefinitionQueries.d.ts.map +1 -1
- package/dist/TableConfig/getConstraintDefinitionQueries.js +12 -7
- package/dist/TableConfig/getConstraintDefinitionQueries.js.map +1 -1
- package/dist/TableConfig/getFutureTableSchema.d.ts +1 -1
- package/dist/TableConfig/getFutureTableSchema.d.ts.map +1 -1
- package/dist/TableConfig/getFutureTableSchema.js +6 -4
- package/dist/TableConfig/getFutureTableSchema.js.map +1 -1
- package/dist/TableConfig/getPGIndexes.d.ts.map +1 -1
- package/dist/TableConfig/getPGIndexes.js.map +1 -1
- package/dist/TableConfig/getTableColumnQueries.d.ts +1 -1
- package/dist/TableConfig/getTableColumnQueries.d.ts.map +1 -1
- package/dist/TableConfig/getTableColumnQueries.js +38 -19
- package/dist/TableConfig/getTableColumnQueries.js.map +1 -1
- package/dist/TableConfig/initTableConfig.d.ts.map +1 -1
- package/dist/TableConfig/initTableConfig.js +91 -43
- package/dist/TableConfig/initTableConfig.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/initProstgles.d.ts.map +1 -1
- package/dist/initProstgles.js +14 -10
- package/dist/initProstgles.js.map +1 -1
- package/dist/onSocketConnected.d.ts.map +1 -1
- package/dist/onSocketConnected.js +38 -16
- package/dist/onSocketConnected.js.map +1 -1
- package/dist/runClientRequest.d.ts.map +1 -1
- package/dist/runClientRequest.js +33 -14
- package/dist/runClientRequest.js.map +1 -1
- package/dist/shortestPath.d.ts.map +1 -1
- package/dist/shortestPath.js +1 -1
- package/dist/shortestPath.js.map +1 -1
- package/dist/typeTests/dboTypeCheck.js.map +1 -1
- package/examples/full-example-typescript/DBoGenerated.d.ts +112 -54
- package/examples/full-example-typescript/DBoGenerated.js +3 -3
- package/examples/full-example-typescript/home.html +28 -26
- package/examples/full-example-typescript/index.d.ts +1 -1
- package/examples/full-example-typescript/index.js +80 -53
- package/examples/full-example-vanilla/home.html +151 -125
- package/examples/server/javascript/index.js +17 -19
- package/lib/Auth/AuthHandler.ts +234 -155
- package/lib/Auth/AuthTypes.ts +27 -4
- package/lib/Auth/getSafeReturnURL.ts +35 -21
- package/lib/Auth/sendEmail.ts +34 -31
- package/lib/Auth/setAuthProviders.ts +94 -71
- package/lib/Auth/setEmailProvider.ts +45 -27
- package/lib/Auth/setupAuthRoutes.ts +164 -100
- package/lib/DBEventsManager.ts +87 -65
- package/lib/DBSchemaBuilder.ts +62 -28
- package/lib/DboBuilder/DboBuilder.ts +45 -21
- package/lib/DboBuilder/DboBuilderTypes.ts +99 -95
- package/lib/DboBuilder/QueryBuilder/Functions.ts +862 -580
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +202 -141
- package/lib/DboBuilder/QueryBuilder/getJoinQuery.ts +199 -124
- package/lib/DboBuilder/QueryBuilder/getNewQuery.ts +209 -148
- package/lib/DboBuilder/QueryBuilder/getSelectQuery.ts +101 -75
- package/lib/DboBuilder/QueryBuilder/prepareHaving.ts +10 -5
- package/lib/DboBuilder/QueryStreamer.ts +207 -100
- package/lib/DboBuilder/TableHandler/DataValidator.ts +253 -148
- package/lib/DboBuilder/TableHandler/TableHandler.ts +155 -60
- package/lib/DboBuilder/TableHandler/delete.ts +82 -29
- package/lib/DboBuilder/TableHandler/insert.ts +177 -81
- package/lib/DboBuilder/TableHandler/insertTest.ts +13 -7
- package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +35 -21
- package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +95 -45
- package/lib/DboBuilder/TableHandler/update.ts +54 -14
- package/lib/DboBuilder/TableHandler/updateBatch.ts +59 -21
- package/lib/DboBuilder/TableHandler/updateFile.ts +57 -26
- package/lib/DboBuilder/TableHandler/upsert.ts +58 -13
- package/lib/DboBuilder/ViewHandler/ViewHandler.ts +264 -121
- package/lib/DboBuilder/ViewHandler/count.ts +56 -25
- package/lib/DboBuilder/ViewHandler/find.ts +153 -68
- package/lib/DboBuilder/ViewHandler/getExistsCondition.ts +59 -32
- package/lib/DboBuilder/ViewHandler/getExistsFilters.ts +31 -19
- package/lib/DboBuilder/ViewHandler/getInfo.ts +47 -16
- package/lib/DboBuilder/ViewHandler/getTableJoinQuery.ts +91 -57
- package/lib/DboBuilder/ViewHandler/parseComplexFilter.ts +51 -29
- package/lib/DboBuilder/ViewHandler/parseFieldFilter.ts +35 -29
- package/lib/DboBuilder/ViewHandler/parseJoinPath.ts +130 -76
- package/lib/DboBuilder/ViewHandler/prepareSortItems.ts +140 -92
- package/lib/DboBuilder/ViewHandler/prepareWhere.ts +66 -26
- package/lib/DboBuilder/ViewHandler/size.ts +56 -22
- package/lib/DboBuilder/ViewHandler/subscribe.ts +122 -46
- package/lib/DboBuilder/ViewHandler/validateViewRules.ts +39 -14
- package/lib/DboBuilder/dboBuilderUtils.ts +41 -18
- package/lib/DboBuilder/getColumns.ts +44 -12
- package/lib/DboBuilder/getCondition.ts +120 -79
- package/lib/DboBuilder/getSubscribeRelatedTables.ts +144 -83
- package/lib/DboBuilder/getTablesForSchemaPostgresSQL.ts +61 -44
- package/lib/DboBuilder/insertNestedRecords.ts +370 -235
- package/lib/DboBuilder/parseUpdateRules.ts +117 -61
- package/lib/DboBuilder/prepareShortestJoinPaths.ts +115 -56
- package/lib/DboBuilder/runSQL.ts +135 -74
- package/lib/DboBuilder/runTransaction.ts +27 -16
- package/lib/DboBuilder/sqlErrCodeToMsg.ts +502 -244
- package/lib/DboBuilder/uploadFile.ts +67 -31
- package/lib/Event_Trigger_Tags.ts +6 -4
- package/lib/FileManager/FileManager.ts +53 -21
- package/lib/FileManager/getValidatedFileType.ts +79 -35
- package/lib/FileManager/initFileManager.ts +21 -9
- package/lib/FileManager/upload.ts +21 -19
- package/lib/FileManager/uploadStream.ts +33 -34
- package/lib/Filtering.ts +249 -197
- package/lib/JSONBValidation/validate_jsonb_schema_sql.ts +2 -7
- package/lib/JSONBValidation/validation.ts +147 -82
- package/lib/Logging.ts +107 -97
- package/lib/PostgresNotifListenManager.ts +96 -63
- package/lib/Prostgles.ts +106 -35
- package/lib/ProstglesTypes.ts +31 -9
- package/lib/PubSubManager/PubSubManager.ts +62 -27
- package/lib/PubSubManager/addSub.ts +56 -37
- package/lib/PubSubManager/addSync.ts +50 -33
- package/lib/PubSubManager/getCreatePubSubManagerError.ts +29 -21
- package/lib/PubSubManager/getPubSubManagerInitQuery.ts +45 -27
- package/lib/PubSubManager/initPubSubManager.ts +27 -18
- package/lib/PubSubManager/notifListener.ts +77 -59
- package/lib/PubSubManager/orphanTriggerCheck.ts +5 -4
- package/lib/PubSubManager/pushSubData.ts +11 -9
- package/lib/PublishParser/PublishParser.ts +102 -44
- package/lib/PublishParser/getFileTableRules.ts +97 -54
- package/lib/PublishParser/getSchemaFromPublish.ts +146 -74
- package/lib/PublishParser/getTableRulesWithoutFileTable.ts +101 -51
- package/lib/PublishParser/publishTypesAndUtils.ts +74 -23
- package/lib/RestApi.ts +10 -2
- package/lib/SchemaWatch/SchemaWatch.ts +52 -34
- package/lib/SchemaWatch/createSchemaWatchEventTrigger.ts +1 -1
- package/lib/SchemaWatch/getValidatedWatchSchemaType.ts +32 -22
- package/lib/SchemaWatch/getWatchSchemaTagList.ts +24 -16
- package/lib/SyncReplication.ts +376 -190
- package/lib/TableConfig/TableConfig.ts +200 -136
- package/lib/TableConfig/getColumnDefinitionQuery.ts +65 -44
- package/lib/TableConfig/getConstraintDefinitionQueries.ts +41 -25
- package/lib/TableConfig/getFutureTableSchema.ts +31 -21
- package/lib/TableConfig/getPGIndexes.ts +7 -4
- package/lib/TableConfig/getTableColumnQueries.ts +101 -54
- package/lib/TableConfig/initTableConfig.ts +192 -101
- package/lib/index.ts +6 -5
- package/lib/initProstgles.ts +57 -51
- package/lib/onSocketConnected.ts +75 -40
- package/lib/runClientRequest.ts +148 -79
- package/lib/shortestPath.ts +80 -76
- package/lib/typeTests/DBoGenerated.d.ts +5 -1
- package/lib/typeTests/dboTypeCheck.ts +8 -8
- package/package.json +1 -1
|
@@ -34,7 +34,9 @@ export const getErrorAsObject = (rawError: any, includeStack = false) => {
|
|
|
34
34
|
return { message: rawError };
|
|
35
35
|
}
|
|
36
36
|
if (rawError instanceof Error) {
|
|
37
|
-
const result = JSON.parse(
|
|
37
|
+
const result = JSON.parse(
|
|
38
|
+
JSON.stringify(rawError, Object.getOwnPropertyNames(rawError)),
|
|
39
|
+
);
|
|
38
40
|
if (!includeStack) {
|
|
39
41
|
return omitKeys(result, ["stack"]);
|
|
40
42
|
}
|
|
@@ -76,7 +78,7 @@ const otherKeys = [
|
|
|
76
78
|
|
|
77
79
|
export function getSerializedClientErrorFromPGError(
|
|
78
80
|
rawError: any,
|
|
79
|
-
args: GetSerializedClientErrorFromPGErrorArgs
|
|
81
|
+
args: GetSerializedClientErrorFromPGErrorArgs,
|
|
80
82
|
): AnyObject {
|
|
81
83
|
const err = getErrorAsObject(rawError);
|
|
82
84
|
if (err.code) {
|
|
@@ -89,7 +91,9 @@ export function getSerializedClientErrorFromPGError(
|
|
|
89
91
|
const isServerSideRequest = !args.localParams;
|
|
90
92
|
//TODO: add a rawSQL check for HTTP requests
|
|
91
93
|
const showFullError =
|
|
92
|
-
isServerSideRequest ||
|
|
94
|
+
isServerSideRequest ||
|
|
95
|
+
args.type === "sql" ||
|
|
96
|
+
args.localParams?.socket?.prostgles?.rawSQL;
|
|
93
97
|
if (showFullError) {
|
|
94
98
|
return err;
|
|
95
99
|
}
|
|
@@ -102,15 +106,19 @@ export function getSerializedClientErrorFromPGError(
|
|
|
102
106
|
];
|
|
103
107
|
|
|
104
108
|
const errObject = pickKeys(err, finalKeys);
|
|
105
|
-
if (
|
|
109
|
+
if (
|
|
110
|
+
view?.dboBuilder?.constraints &&
|
|
111
|
+
errObject.constraint &&
|
|
112
|
+
!errObject.column
|
|
113
|
+
) {
|
|
106
114
|
const constraint = view.dboBuilder.constraints.find(
|
|
107
|
-
(c) => c.conname === errObject.constraint && c.relname === view.name
|
|
115
|
+
(c) => c.conname === errObject.constraint && c.relname === view.name,
|
|
108
116
|
);
|
|
109
117
|
if (constraint) {
|
|
110
118
|
const cols = view.columns?.filter(
|
|
111
119
|
(c) =>
|
|
112
120
|
(!allowedKeys || allowedKeys.includes(c.name)) &&
|
|
113
|
-
constraint.conkey.includes(c.ordinal_position)
|
|
121
|
+
constraint.conkey.includes(c.ordinal_position),
|
|
114
122
|
);
|
|
115
123
|
const [firstCol] = cols ?? [];
|
|
116
124
|
if (firstCol) {
|
|
@@ -123,7 +131,7 @@ export function getSerializedClientErrorFromPGError(
|
|
|
123
131
|
}
|
|
124
132
|
export function getClientErrorFromPGError(
|
|
125
133
|
rawError: any,
|
|
126
|
-
args: GetSerializedClientErrorFromPGErrorArgs
|
|
134
|
+
args: GetSerializedClientErrorFromPGErrorArgs,
|
|
127
135
|
) {
|
|
128
136
|
const errorObj = getSerializedClientErrorFromPGError(rawError, args);
|
|
129
137
|
return Promise.reject(errorObj);
|
|
@@ -135,11 +143,16 @@ export function getClientErrorFromPGError(
|
|
|
135
143
|
export function parseError(e: any, _caller: string): ProstglesError {
|
|
136
144
|
const errorObject = isObject(e) ? e : undefined;
|
|
137
145
|
const message =
|
|
138
|
-
typeof e === "string"
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
146
|
+
typeof e === "string"
|
|
147
|
+
? e
|
|
148
|
+
: e instanceof Error
|
|
149
|
+
? e.message
|
|
150
|
+
: isObject(errorObject)
|
|
151
|
+
? (errorObject.message ??
|
|
152
|
+
errorObject.txt ??
|
|
153
|
+
JSON.stringify(errorObject) ??
|
|
154
|
+
"")
|
|
155
|
+
: "";
|
|
143
156
|
|
|
144
157
|
const result: ProstglesError = {
|
|
145
158
|
...errorObject,
|
|
@@ -175,7 +188,7 @@ export type PGConstraint = {
|
|
|
175
188
|
|
|
176
189
|
export const getConstraints = async (
|
|
177
190
|
db: DB,
|
|
178
|
-
schema: ProstglesInitOptions["schemaFilter"]
|
|
191
|
+
schema: ProstglesInitOptions["schemaFilter"],
|
|
179
192
|
): Promise<PGConstraint[]> => {
|
|
180
193
|
const { sql, schemaNames } = getSchemaFilter(schema);
|
|
181
194
|
return db.any(
|
|
@@ -188,7 +201,7 @@ export const getConstraints = async (
|
|
|
188
201
|
ON nsp.oid = connamespace
|
|
189
202
|
WHERE nsp.nspname ${sql}
|
|
190
203
|
`,
|
|
191
|
-
{ schemaNames }
|
|
204
|
+
{ schemaNames },
|
|
192
205
|
);
|
|
193
206
|
};
|
|
194
207
|
|
|
@@ -200,7 +213,9 @@ export function isPlainObject(o: any): o is Record<string, any> {
|
|
|
200
213
|
return Object(o) === o && Object.getPrototypeOf(o) === Object.prototype;
|
|
201
214
|
}
|
|
202
215
|
|
|
203
|
-
export function postgresToTsType(
|
|
216
|
+
export function postgresToTsType(
|
|
217
|
+
udt_data_type: PG_COLUMN_UDT_DATA_TYPE,
|
|
218
|
+
): keyof typeof TS_PG_Types {
|
|
204
219
|
return (
|
|
205
220
|
getKeys(TS_PG_Types).find((k) => {
|
|
206
221
|
// @ts-ignore
|
|
@@ -209,14 +224,19 @@ export function postgresToTsType(udt_data_type: PG_COLUMN_UDT_DATA_TYPE): keyof
|
|
|
209
224
|
);
|
|
210
225
|
}
|
|
211
226
|
|
|
212
|
-
export const prepareOrderByQuery = (
|
|
227
|
+
export const prepareOrderByQuery = (
|
|
228
|
+
items: SortItem[],
|
|
229
|
+
tableAlias?: string,
|
|
230
|
+
): string[] => {
|
|
213
231
|
if (!items.length) return [];
|
|
214
232
|
return [
|
|
215
233
|
"ORDER BY " +
|
|
216
234
|
items
|
|
217
235
|
.map((d) => {
|
|
218
236
|
const orderType = d.asc ? " ASC " : " DESC ";
|
|
219
|
-
const nullOrder = d.nulls
|
|
237
|
+
const nullOrder = d.nulls
|
|
238
|
+
? ` NULLS ${d.nulls === "first" ? " FIRST " : " LAST "}`
|
|
239
|
+
: "";
|
|
220
240
|
if (d.type === "query" && d.nested) {
|
|
221
241
|
return d.fieldQuery;
|
|
222
242
|
}
|
|
@@ -237,7 +257,10 @@ export const getCanExecute = async (db: DB) => {
|
|
|
237
257
|
return false;
|
|
238
258
|
};
|
|
239
259
|
|
|
240
|
-
export const withUserRLS = (
|
|
260
|
+
export const withUserRLS = (
|
|
261
|
+
localParams: LocalParams | undefined,
|
|
262
|
+
query: string,
|
|
263
|
+
) => {
|
|
241
264
|
const user = localParams?.isRemoteRequest?.user;
|
|
242
265
|
const queryPrefix = `SET SESSION "prostgles.user" \nTO`;
|
|
243
266
|
let firstQuery = `${queryPrefix} '';`;
|
|
@@ -15,7 +15,8 @@ import {
|
|
|
15
15
|
import { TableHandler } from "./TableHandler/TableHandler";
|
|
16
16
|
import { ViewHandler } from "./ViewHandler/ViewHandler";
|
|
17
17
|
|
|
18
|
-
export const isTableHandler = (v: any): v is TableHandler =>
|
|
18
|
+
export const isTableHandler = (v: any): v is TableHandler =>
|
|
19
|
+
"parseUpdateRules" in v;
|
|
19
20
|
|
|
20
21
|
export async function getColumns(
|
|
21
22
|
this: ViewHandler,
|
|
@@ -23,7 +24,7 @@ export async function getColumns(
|
|
|
23
24
|
params?: { rule: "update"; filter: AnyObject },
|
|
24
25
|
_param3?: undefined,
|
|
25
26
|
tableRules?: TableRule,
|
|
26
|
-
localParams?: LocalParams
|
|
27
|
+
localParams?: LocalParams,
|
|
27
28
|
): Promise<ValidatedColumnInfo[]> {
|
|
28
29
|
const start = Date.now();
|
|
29
30
|
try {
|
|
@@ -34,7 +35,11 @@ export async function getColumns(
|
|
|
34
35
|
let dynamicUpdateFields = this.column_names;
|
|
35
36
|
|
|
36
37
|
if (params && tableRules && isTableHandler(this)) {
|
|
37
|
-
if (
|
|
38
|
+
if (
|
|
39
|
+
!isObject(params) ||
|
|
40
|
+
!isObject(params.filter) ||
|
|
41
|
+
params.rule !== "update"
|
|
42
|
+
) {
|
|
38
43
|
throw (
|
|
39
44
|
"params must be { rule: 'update', filter: object } but received: " +
|
|
40
45
|
JSON.stringify(params)
|
|
@@ -45,7 +50,12 @@ export async function getColumns(
|
|
|
45
50
|
dynamicUpdateFields = [];
|
|
46
51
|
} else {
|
|
47
52
|
const { filter } = params;
|
|
48
|
-
const updateRules = await this.parseUpdateRules(
|
|
53
|
+
const updateRules = await this.parseUpdateRules(
|
|
54
|
+
filter,
|
|
55
|
+
undefined,
|
|
56
|
+
tableRules,
|
|
57
|
+
localParams,
|
|
58
|
+
);
|
|
49
59
|
dynamicUpdateFields = updateRules.fields;
|
|
50
60
|
}
|
|
51
61
|
}
|
|
@@ -79,11 +89,17 @@ export async function getColumns(
|
|
|
79
89
|
});
|
|
80
90
|
|
|
81
91
|
/** Do not allow updates to file table unless it's to delete fields */
|
|
82
|
-
if (
|
|
92
|
+
if (
|
|
93
|
+
prostgles.fileManager?.config &&
|
|
94
|
+
prostgles.fileManager.tableName === this.name
|
|
95
|
+
) {
|
|
83
96
|
update = false;
|
|
84
97
|
}
|
|
85
98
|
|
|
86
|
-
const nonOrderableUD_Types: PG_COLUMN_UDT_DATA_TYPE[] = [
|
|
99
|
+
const nonOrderableUD_Types: PG_COLUMN_UDT_DATA_TYPE[] = [
|
|
100
|
+
..._PG_geometric,
|
|
101
|
+
"xml" as any,
|
|
102
|
+
];
|
|
87
103
|
|
|
88
104
|
const result: ValidatedColumnInfo = {
|
|
89
105
|
...c,
|
|
@@ -97,7 +113,9 @@ export async function getColumns(
|
|
|
97
113
|
select: select && Boolean(p.select?.fields?.includes(c.name)),
|
|
98
114
|
orderBy:
|
|
99
115
|
select &&
|
|
100
|
-
Boolean(
|
|
116
|
+
Boolean(
|
|
117
|
+
p.select?.fields && p.select.orderByFields.includes(c.name),
|
|
118
|
+
) &&
|
|
101
119
|
!nonOrderableUD_Types.includes(c.udt_name),
|
|
102
120
|
filter: Boolean(p.select?.filterFields?.includes(c.name)),
|
|
103
121
|
update:
|
|
@@ -108,9 +126,16 @@ export async function getColumns(
|
|
|
108
126
|
dynamicUpdateFields.includes(c.name),
|
|
109
127
|
delete:
|
|
110
128
|
_delete &&
|
|
111
|
-
Boolean(
|
|
112
|
-
|
|
113
|
-
|
|
129
|
+
Boolean(
|
|
130
|
+
p.delete &&
|
|
131
|
+
p.delete.filterFields &&
|
|
132
|
+
p.delete.filterFields.includes(c.name),
|
|
133
|
+
),
|
|
134
|
+
...(prostgles?.tableConfigurator?.getColInfo({
|
|
135
|
+
table: this.name,
|
|
136
|
+
col: c.name,
|
|
137
|
+
lang,
|
|
138
|
+
}) || {}),
|
|
114
139
|
...(fileConfig && { file: fileConfig }),
|
|
115
140
|
};
|
|
116
141
|
|
|
@@ -133,14 +158,21 @@ export async function getColumns(
|
|
|
133
158
|
duration: Date.now() - start,
|
|
134
159
|
error: getErrorAsObject(e),
|
|
135
160
|
});
|
|
136
|
-
throw getSerializedClientErrorFromPGError(e, {
|
|
161
|
+
throw getSerializedClientErrorFromPGError(e, {
|
|
162
|
+
type: "tableMethod",
|
|
163
|
+
localParams,
|
|
164
|
+
view: this,
|
|
165
|
+
});
|
|
137
166
|
}
|
|
138
167
|
}
|
|
139
168
|
|
|
140
169
|
function replaceNonAlphaNumeric(string: string, replacement = "_"): string {
|
|
141
170
|
return string.replace(/[\W_]+/g, replacement);
|
|
142
171
|
}
|
|
143
|
-
function capitalizeFirstLetter(
|
|
172
|
+
function capitalizeFirstLetter(
|
|
173
|
+
string: string,
|
|
174
|
+
nonalpha_replacement?: string,
|
|
175
|
+
): string {
|
|
144
176
|
const str = replaceNonAlphaNumeric(string, nonalpha_replacement);
|
|
145
177
|
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
146
178
|
}
|
|
@@ -9,7 +9,7 @@ import { getExistsCondition } from "./ViewHandler/getExistsCondition";
|
|
|
9
9
|
import { getExistsFilters } from "./ViewHandler/getExistsFilters";
|
|
10
10
|
import { parseComplexFilter } from "./ViewHandler/parseComplexFilter";
|
|
11
11
|
|
|
12
|
-
const FILTER_FUNCS = FUNCTIONS.filter(f => f.canBeUsedForFilter);
|
|
12
|
+
const FILTER_FUNCS = FUNCTIONS.filter((f) => f.canBeUsedForFilter);
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* parses a single filter
|
|
@@ -18,52 +18,79 @@ const FILTER_FUNCS = FUNCTIONS.filter(f => f.canBeUsedForFilter);
|
|
|
18
18
|
* { fff: { $ilike: 'abc' } } => "fff" ilike 'abc'
|
|
19
19
|
*/
|
|
20
20
|
export async function getCondition(
|
|
21
|
-
this: ViewHandler,
|
|
22
|
-
params: {
|
|
23
|
-
filter: any
|
|
24
|
-
select: SelectItem[] | undefined
|
|
25
|
-
allowed_colnames: string[]
|
|
26
|
-
tableAlias?: string
|
|
27
|
-
localParams?: LocalParams
|
|
28
|
-
tableRules?: TableRule
|
|
29
|
-
isHaving?: boolean
|
|
21
|
+
this: ViewHandler,
|
|
22
|
+
params: {
|
|
23
|
+
filter: any;
|
|
24
|
+
select: SelectItem[] | undefined;
|
|
25
|
+
allowed_colnames: string[];
|
|
26
|
+
tableAlias?: string;
|
|
27
|
+
localParams?: LocalParams;
|
|
28
|
+
tableRules?: TableRule;
|
|
29
|
+
isHaving?: boolean;
|
|
30
30
|
},
|
|
31
31
|
): Promise<{ exists: ExistsFilterConfig[]; condition: string }> {
|
|
32
|
-
const {
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
const {
|
|
33
|
+
filter: rawFilter,
|
|
34
|
+
select,
|
|
35
|
+
allowed_colnames,
|
|
36
|
+
tableAlias,
|
|
37
|
+
localParams,
|
|
38
|
+
tableRules,
|
|
39
|
+
isHaving,
|
|
40
|
+
} = params;
|
|
41
|
+
|
|
42
|
+
const filter = { ...(rawFilter as any) } as any;
|
|
35
43
|
|
|
36
44
|
const existsConfigs = getExistsFilters(filter, this);
|
|
37
45
|
|
|
38
46
|
const funcConds: string[] = [];
|
|
39
|
-
const funcFilter = FILTER_FUNCS.filter(f => f.name in filter);
|
|
47
|
+
const funcFilter = FILTER_FUNCS.filter((f) => f.name in filter);
|
|
40
48
|
|
|
41
|
-
funcFilter.map(f => {
|
|
49
|
+
funcFilter.map((f) => {
|
|
42
50
|
const funcArgs = filter[f.name];
|
|
43
51
|
if (!Array.isArray(funcArgs)) {
|
|
44
52
|
throw `A function filter must contain an array. E.g: { $funcFilterName: ["col1"] } \n but got: ${JSON.stringify(pickKeys(filter, [f.name]))} `;
|
|
45
53
|
}
|
|
46
|
-
const fields = this.parseFieldFilter(
|
|
54
|
+
const fields = this.parseFieldFilter(
|
|
55
|
+
f.getFields(funcArgs),
|
|
56
|
+
true,
|
|
57
|
+
allowed_colnames,
|
|
58
|
+
);
|
|
47
59
|
|
|
48
|
-
const dissallowedCols = fields.filter(
|
|
60
|
+
const dissallowedCols = fields.filter(
|
|
61
|
+
(fname) => !allowed_colnames.includes(fname),
|
|
62
|
+
);
|
|
49
63
|
if (dissallowedCols.length) {
|
|
50
|
-
throw `Invalid/disallowed columns found in function filter: ${dissallowedCols}
|
|
64
|
+
throw `Invalid/disallowed columns found in function filter: ${dissallowedCols}`;
|
|
51
65
|
}
|
|
52
|
-
funcConds.push(
|
|
66
|
+
funcConds.push(
|
|
67
|
+
f.getQuery({
|
|
68
|
+
args: funcArgs,
|
|
69
|
+
allColumns: this.columns,
|
|
70
|
+
allowedFields: allowed_colnames,
|
|
71
|
+
tableAlias,
|
|
72
|
+
}),
|
|
73
|
+
);
|
|
53
74
|
});
|
|
54
75
|
|
|
55
|
-
|
|
56
76
|
let existsCond = "";
|
|
57
77
|
if (existsConfigs.length) {
|
|
58
|
-
existsCond = (
|
|
78
|
+
existsCond = (
|
|
79
|
+
await Promise.all(
|
|
80
|
+
existsConfigs.map(
|
|
81
|
+
async (existsConfig) =>
|
|
82
|
+
await getExistsCondition.bind(this)(existsConfig, localParams),
|
|
83
|
+
),
|
|
84
|
+
)
|
|
85
|
+
).join(" AND ");
|
|
59
86
|
}
|
|
60
87
|
|
|
61
88
|
/* Computed field queries ($rowhash) */
|
|
62
89
|
const p = this.getValidatedRules(tableRules, localParams);
|
|
63
|
-
const computedFields = p.allColumns.filter(c => c.type === "computed");
|
|
90
|
+
const computedFields = p.allColumns.filter((c) => c.type === "computed");
|
|
64
91
|
const computedColConditions: string[] = [];
|
|
65
|
-
Object.keys(filter || {}).map(key => {
|
|
66
|
-
const compCol = computedFields.find(cf => cf.name === key);
|
|
92
|
+
Object.keys(filter || {}).map((key) => {
|
|
93
|
+
const compCol = computedFields.find((cf) => cf.name === key);
|
|
67
94
|
if (compCol) {
|
|
68
95
|
computedColConditions.push(
|
|
69
96
|
compCol.getQuery({
|
|
@@ -75,7 +102,7 @@ export async function getCondition(
|
|
|
75
102
|
// ctidField: this.is_view? undefined : "ctid"
|
|
76
103
|
|
|
77
104
|
ctidField: undefined,
|
|
78
|
-
}) + ` = ${pgp.as.format("$1", [(filter as any)[key]])}
|
|
105
|
+
}) + ` = ${pgp.as.format("$1", [(filter as any)[key]])}`,
|
|
79
106
|
);
|
|
80
107
|
delete (filter as any)[key];
|
|
81
108
|
}
|
|
@@ -85,41 +112,48 @@ export async function getCondition(
|
|
|
85
112
|
/* Select aliases take precedence over col names. This is to ensure filters work correctly even on computed cols*/
|
|
86
113
|
if (select) {
|
|
87
114
|
/* Allow filtering by selected fields/funcs */
|
|
88
|
-
allowedSelect = select.filter(s => {
|
|
89
|
-
if (
|
|
115
|
+
allowedSelect = select.filter((s) => {
|
|
116
|
+
if (
|
|
117
|
+
["function", "computed", "column"].includes(s.type) ||
|
|
118
|
+
(isHaving && s.type === "aggregation")
|
|
119
|
+
) {
|
|
90
120
|
/** Selected computed cols are allowed for filtering without checking. Why not allow all?! */
|
|
91
121
|
if (s.type !== "column" || allowed_colnames.includes(s.alias)) {
|
|
92
122
|
return true;
|
|
93
123
|
}
|
|
94
124
|
}
|
|
95
125
|
return false;
|
|
96
|
-
})
|
|
126
|
+
});
|
|
97
127
|
}
|
|
98
128
|
|
|
99
129
|
/* Add remaining allowed fields */
|
|
100
|
-
const remainingNonSelectedColumns: SelectItem[] = p.allColumns
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
130
|
+
const remainingNonSelectedColumns: SelectItem[] = p.allColumns
|
|
131
|
+
.filter(
|
|
132
|
+
(c) =>
|
|
133
|
+
allowed_colnames.includes(c.name) &&
|
|
134
|
+
!allowedSelect.find((s) => s.alias === c.name),
|
|
135
|
+
)
|
|
136
|
+
.map((f) => ({
|
|
137
|
+
type: f.type,
|
|
138
|
+
alias: f.name,
|
|
139
|
+
columnName: f.type === "column" ? f.name : (undefined as any),
|
|
140
|
+
getQuery: (tableAlias) =>
|
|
141
|
+
f.getQuery({
|
|
142
|
+
tableAlias,
|
|
143
|
+
allColumns: this.columns,
|
|
144
|
+
allowedFields: allowed_colnames,
|
|
145
|
+
}),
|
|
146
|
+
selected: false,
|
|
147
|
+
getFields: () => [f.name],
|
|
148
|
+
column_udt_type:
|
|
149
|
+
f.type === "column"
|
|
150
|
+
? this.columns.find((c) => c.name === f.name)?.udt_name
|
|
151
|
+
: undefined,
|
|
152
|
+
}));
|
|
153
|
+
allowedSelect = allowedSelect.concat(remainingNonSelectedColumns);
|
|
119
154
|
const complexFilters: string[] = [];
|
|
120
155
|
const complexFilterKey = "$filter";
|
|
121
156
|
if (complexFilterKey in filter) {
|
|
122
|
-
|
|
123
157
|
const complexFilterCondition = parseComplexFilter({
|
|
124
158
|
filter,
|
|
125
159
|
complexFilterKey,
|
|
@@ -135,39 +169,43 @@ export async function getCondition(
|
|
|
135
169
|
will make an exists filter
|
|
136
170
|
*/
|
|
137
171
|
|
|
138
|
-
const filterKeys = Object.keys(filter)
|
|
139
|
-
|
|
140
|
-
k !== complexFilterKey &&
|
|
141
|
-
!funcFilter.find(ek => ek.name === k) &&
|
|
142
|
-
!computedFields.find(cf => cf.name === k) &&
|
|
143
|
-
!existsConfigs.find(ek => ek.existType === k)
|
|
144
|
-
|
|
172
|
+
const filterKeys = Object.keys(filter).filter(
|
|
173
|
+
(k) =>
|
|
174
|
+
k !== complexFilterKey &&
|
|
175
|
+
!funcFilter.find((ek) => ek.name === k) &&
|
|
176
|
+
!computedFields.find((cf) => cf.name === k) &&
|
|
177
|
+
!existsConfigs.find((ek) => ek.existType === k),
|
|
178
|
+
);
|
|
145
179
|
|
|
146
|
-
const validFieldNames = allowedSelect.map(s => s.alias);
|
|
147
|
-
const invalidColumn = filterKeys
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
fName.
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
)
|
|
156
|
-
|
|
180
|
+
const validFieldNames = allowedSelect.map((s) => s.alias);
|
|
181
|
+
const invalidColumn = filterKeys.find(
|
|
182
|
+
(fName) =>
|
|
183
|
+
!validFieldNames.find(
|
|
184
|
+
(c) =>
|
|
185
|
+
c === fName ||
|
|
186
|
+
(fName.startsWith(c) &&
|
|
187
|
+
(fName.slice(c.length).includes("->") ||
|
|
188
|
+
fName.slice(c.length).includes("."))),
|
|
189
|
+
),
|
|
190
|
+
);
|
|
157
191
|
|
|
158
192
|
if (invalidColumn) {
|
|
159
|
-
const selItem = select?.find(s => s.alias === invalidColumn);
|
|
193
|
+
const selItem = select?.find((s) => s.alias === invalidColumn);
|
|
160
194
|
let isComplexFilter = false;
|
|
161
|
-
if(selItem?.type === "aggregation"){
|
|
162
|
-
if(!params.isHaving){
|
|
163
|
-
throw new Error(
|
|
195
|
+
if (selItem?.type === "aggregation") {
|
|
196
|
+
if (!params.isHaving) {
|
|
197
|
+
throw new Error(
|
|
198
|
+
`Filtering by ${invalidColumn} is not allowed. Aggregations cannot be filtered. Use HAVING clause instead.`,
|
|
199
|
+
);
|
|
164
200
|
} else {
|
|
165
201
|
isComplexFilter = true;
|
|
166
202
|
}
|
|
167
203
|
}
|
|
168
204
|
|
|
169
|
-
if(!isComplexFilter){
|
|
170
|
-
const allowedCols = allowedSelect
|
|
205
|
+
if (!isComplexFilter) {
|
|
206
|
+
const allowedCols = allowedSelect
|
|
207
|
+
.map((s) => (s.type === "column" ? s.getQuery() : s.alias))
|
|
208
|
+
.join(", ");
|
|
171
209
|
const errMessage = `Table: ${this.name} -> disallowed/inexistent columns in filter: ${invalidColumn} \n Expecting one of: ${allowedCols}`;
|
|
172
210
|
throw errMessage;
|
|
173
211
|
}
|
|
@@ -182,10 +220,14 @@ export async function getCondition(
|
|
|
182
220
|
filter: f,
|
|
183
221
|
tableAlias,
|
|
184
222
|
select: allowedSelect,
|
|
185
|
-
allowedColumnNames: !tableRules
|
|
223
|
+
allowedColumnNames: !tableRules
|
|
224
|
+
? this.column_names.slice(0)
|
|
225
|
+
: this.parseFieldFilter(
|
|
226
|
+
tableRules.select?.filterFields ?? tableRules.select?.fields,
|
|
227
|
+
),
|
|
186
228
|
});
|
|
187
229
|
|
|
188
|
-
let templates: string[] = [q].filter(q => q);
|
|
230
|
+
let templates: string[] = [q].filter((q) => q);
|
|
189
231
|
|
|
190
232
|
if (existsCond) templates.push(existsCond);
|
|
191
233
|
templates = templates.concat(funcConds);
|
|
@@ -193,9 +235,8 @@ export async function getCondition(
|
|
|
193
235
|
templates = templates.concat(complexFilters);
|
|
194
236
|
|
|
195
237
|
/* sorted to ensure duplicate subscription channels are not created due to different condition order */
|
|
196
|
-
return {
|
|
197
|
-
exists: existsConfigs,
|
|
198
|
-
condition: templates.sort().join(" AND \n")
|
|
238
|
+
return {
|
|
239
|
+
exists: existsConfigs,
|
|
240
|
+
condition: templates.sort().join(" AND \n"),
|
|
199
241
|
};
|
|
200
|
-
|
|
201
|
-
}
|
|
242
|
+
}
|