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
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
|
|
2
1
|
import { tryCatch } from "prostgles-types";
|
|
3
2
|
import { pgp } from "../DboBuilder/DboBuilderTypes";
|
|
4
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
asValue,
|
|
5
|
+
NOTIF_CHANNEL,
|
|
6
|
+
NOTIF_TYPE,
|
|
7
|
+
PubSubManager,
|
|
8
|
+
} from "./PubSubManager";
|
|
5
9
|
const { version } = require("../../package.json");
|
|
6
10
|
import { getAppCheckQuery } from "./orphanTriggerCheck";
|
|
7
11
|
import { DboBuilder } from "../DboBuilder/DboBuilder";
|
|
@@ -11,7 +15,7 @@ export const DB_OBJ_NAMES = {
|
|
|
11
15
|
data_watch_func: "prostgles.prostgles_trigger_function",
|
|
12
16
|
schema_watch_func: "prostgles.schema_watch_func",
|
|
13
17
|
schema_watch_trigger: "prostgles_schema_watch_trigger_new",
|
|
14
|
-
schema_watch_trigger_drop: "prostgles_schema_watch_trigger_new_drop"
|
|
18
|
+
schema_watch_trigger_drop: "prostgles_schema_watch_trigger_new_drop",
|
|
15
19
|
} as const;
|
|
16
20
|
|
|
17
21
|
const PROSTGLES_SCHEMA_EXISTS_QUERY = `
|
|
@@ -30,11 +34,10 @@ const PROSTGLES_SCHEMA_VERSION_OK_QUERY = `
|
|
|
30
34
|
`;
|
|
31
35
|
|
|
32
36
|
const getInitQuery = (debugMode: boolean | undefined, pgVersion: number) => {
|
|
33
|
-
|
|
34
37
|
const canReplaceTriggers = pgVersion >= 140006;
|
|
35
|
-
const createTriggerQuery = canReplaceTriggers
|
|
36
|
-
`CREATE OR REPLACE TRIGGER %1$I
|
|
37
|
-
`
|
|
38
|
+
const createTriggerQuery = canReplaceTriggers
|
|
39
|
+
? `CREATE OR REPLACE TRIGGER %1$I`
|
|
40
|
+
: `
|
|
38
41
|
DROP TRIGGER IF EXISTS %1$I ON %2$s;
|
|
39
42
|
CREATE TRIGGER %1$I
|
|
40
43
|
`;
|
|
@@ -334,7 +337,7 @@ BEGIN
|
|
|
334
337
|
THEN concat_ws('; ', 'error', err_text, err_detail, err_hint, 'query: ' || query )
|
|
335
338
|
ELSE COALESCE(v_trigger.cids, '')
|
|
336
339
|
END
|
|
337
|
-
${debugMode?
|
|
340
|
+
${debugMode ? ", COALESCE(current_query(), 'current_query ??'), ' ', query" : ""}
|
|
338
341
|
), 7999/4) -- Some chars are 2bytes -> 'Ω'
|
|
339
342
|
);
|
|
340
343
|
END LOOP;
|
|
@@ -504,7 +507,7 @@ BEGIN
|
|
|
504
507
|
$q$
|
|
505
508
|
DO $e$
|
|
506
509
|
BEGIN
|
|
507
|
-
/* ${
|
|
510
|
+
/* ${PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID} */
|
|
508
511
|
%s
|
|
509
512
|
|
|
510
513
|
END $e$;
|
|
@@ -532,7 +535,7 @@ BEGIN
|
|
|
532
535
|
json_build_object(
|
|
533
536
|
'TG_OP', TG_OP,
|
|
534
537
|
'duration', (EXTRACT(EPOCH FROM now()) * 1000) - start_time,
|
|
535
|
-
'query', ${debugMode?
|
|
538
|
+
'query', ${debugMode ? "LEFT(current_query(), 400)" : "'Only shown in debug mode'"}
|
|
536
539
|
)
|
|
537
540
|
)::TEXT, 7999/4)
|
|
538
541
|
);
|
|
@@ -609,7 +612,7 @@ BEGIN
|
|
|
609
612
|
${asValue(NOTIF_TYPE.schema)},
|
|
610
613
|
tg_tag ,
|
|
611
614
|
TG_event,
|
|
612
|
-
${debugMode?
|
|
615
|
+
${debugMode ? "curr_query" : "'Only shown in debug mode'"}
|
|
613
616
|
), 7999/4)
|
|
614
617
|
);
|
|
615
618
|
END LOOP;
|
|
@@ -629,34 +632,49 @@ $do$;
|
|
|
629
632
|
|
|
630
633
|
COMMIT;
|
|
631
634
|
`;
|
|
632
|
-
|
|
633
|
-
}
|
|
635
|
+
};
|
|
634
636
|
|
|
635
637
|
/**
|
|
636
638
|
* Initialize the prostgles schema and functions needed for realtime data and schema changes
|
|
637
639
|
* undefined returned if the database contains the apropriate prostgles schema
|
|
638
640
|
*/
|
|
639
|
-
export const getPubSubManagerInitQuery = async function(
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
const
|
|
643
|
-
|
|
641
|
+
export const getPubSubManagerInitQuery = async function (
|
|
642
|
+
this: DboBuilder,
|
|
643
|
+
): Promise<string | undefined> {
|
|
644
|
+
const versionNum = await this.db.one(
|
|
645
|
+
"SELECT current_setting('server_version_num')::int as val",
|
|
646
|
+
);
|
|
647
|
+
const initQuery = getInitQuery(
|
|
648
|
+
this.prostgles.opts.DEBUG_MODE,
|
|
649
|
+
versionNum.val,
|
|
650
|
+
);
|
|
651
|
+
const { schema_md5 = "none" } = await this.db.oneOrNone(
|
|
652
|
+
"SELECT md5($1) as schema_md5",
|
|
653
|
+
[initQuery.trim()],
|
|
654
|
+
);
|
|
644
655
|
const query = pgp.as.format(initQuery, { schema_md5, version });
|
|
645
656
|
const existingSchema = await this.db.any(PROSTGLES_SCHEMA_EXISTS_QUERY);
|
|
646
|
-
if(!existingSchema.length){
|
|
647
|
-
console.log(
|
|
657
|
+
if (!existingSchema.length) {
|
|
658
|
+
console.log(
|
|
659
|
+
"getPubSubManagerInitQuery: No prostgles.versions table found. Creating...",
|
|
660
|
+
);
|
|
648
661
|
return query;
|
|
649
662
|
}
|
|
650
663
|
const { existingSchemaVersions } = await tryCatch(async () => {
|
|
651
|
-
const existingSchemaVersions = await this.db.any(
|
|
664
|
+
const existingSchemaVersions = await this.db.any(
|
|
665
|
+
PROSTGLES_SCHEMA_VERSION_OK_QUERY,
|
|
666
|
+
{ schema_md5, version },
|
|
667
|
+
);
|
|
652
668
|
return {
|
|
653
|
-
existingSchemaVersions
|
|
654
|
-
}
|
|
669
|
+
existingSchemaVersions,
|
|
670
|
+
};
|
|
655
671
|
});
|
|
656
|
-
if(!existingSchemaVersions?.length){
|
|
657
|
-
console.log(
|
|
672
|
+
if (!existingSchemaVersions?.length) {
|
|
673
|
+
console.log(
|
|
674
|
+
"getPubSubManagerInitQuery: Outdated prostgles schema. Re-creating...",
|
|
675
|
+
);
|
|
658
676
|
return query;
|
|
659
677
|
}
|
|
660
|
-
|
|
678
|
+
|
|
661
679
|
return undefined;
|
|
662
|
-
}
|
|
680
|
+
};
|
|
@@ -3,11 +3,14 @@ import { PostgresNotifListenManager } from "../PostgresNotifListenManager";
|
|
|
3
3
|
import { getWatchSchemaTagList } from "../SchemaWatch/getWatchSchemaTagList";
|
|
4
4
|
import { NOTIF_CHANNEL, PubSubManager, asValue } from "./PubSubManager";
|
|
5
5
|
import { getPubSubManagerInitQuery } from "./getPubSubManagerInitQuery";
|
|
6
|
-
export const REALTIME_TRIGGER_CHECK_QUERY =
|
|
6
|
+
export const REALTIME_TRIGGER_CHECK_QUERY =
|
|
7
|
+
"prostgles-server internal query used to manage realtime triggers" as const;
|
|
7
8
|
|
|
8
|
-
export const tout = (ms: number) => new Promise(res => setTimeout(res, ms));
|
|
9
|
+
export const tout = (ms: number) => new Promise((res) => setTimeout(res, ms));
|
|
9
10
|
|
|
10
|
-
export async function initPubSubManager(
|
|
11
|
+
export async function initPubSubManager(
|
|
12
|
+
this: PubSubManager,
|
|
13
|
+
): Promise<PubSubManager | undefined> {
|
|
11
14
|
if (!this.getIsDestroyed()) return undefined;
|
|
12
15
|
|
|
13
16
|
const initQuery = await getPubSubManagerInitQuery.bind(this.dboBuilder)();
|
|
@@ -15,7 +18,7 @@ export async function initPubSubManager(this: PubSubManager): Promise<PubSubMana
|
|
|
15
18
|
/**
|
|
16
19
|
* High database activity might cause deadlocks.
|
|
17
20
|
* Must retry
|
|
18
|
-
|
|
21
|
+
*/
|
|
19
22
|
let didDeadlock = false;
|
|
20
23
|
let tries = 3;
|
|
21
24
|
let error: any;
|
|
@@ -25,20 +28,20 @@ export async function initPubSubManager(this: PubSubManager): Promise<PubSubMana
|
|
|
25
28
|
await tout(Math.random());
|
|
26
29
|
|
|
27
30
|
// await this.dboBuilder.runClientTransactionStatement(initQuery);// this.db.tx(t => t.any(initQuery));
|
|
28
|
-
await this.db.tx(t => t.any(initQuery));
|
|
31
|
+
await this.db.tx((t) => t.any(initQuery));
|
|
29
32
|
error = undefined;
|
|
30
33
|
tries = 0;
|
|
31
34
|
} catch (e: any) {
|
|
32
|
-
if(!didDeadlock && isObject(e) && e.code === "40P01"){
|
|
35
|
+
if (!didDeadlock && isObject(e) && e.code === "40P01") {
|
|
33
36
|
didDeadlock = true;
|
|
34
37
|
tries = 5;
|
|
35
38
|
console.error("Deadlock detected. Retrying...");
|
|
36
39
|
}
|
|
37
40
|
error = e;
|
|
38
|
-
tries
|
|
41
|
+
tries--;
|
|
39
42
|
}
|
|
40
43
|
}
|
|
41
|
-
if(error){
|
|
44
|
+
if (error) {
|
|
42
45
|
throw error;
|
|
43
46
|
}
|
|
44
47
|
|
|
@@ -48,19 +51,21 @@ export async function initPubSubManager(this: PubSubManager): Promise<PubSubMana
|
|
|
48
51
|
if (!this.appInfoWasInserted) {
|
|
49
52
|
this.appInfoWasInserted = true;
|
|
50
53
|
const check_frequency_ms = this.appCheckFrequencyMS;
|
|
51
|
-
const watching_schema_tag_names =
|
|
54
|
+
const watching_schema_tag_names =
|
|
55
|
+
this.dboBuilder.prostgles.schemaWatch?.type.watchType !== "NONE"
|
|
56
|
+
? getWatchSchemaTagList(this.dboBuilder.prostgles.opts.watchSchema)
|
|
57
|
+
: null;
|
|
52
58
|
await this.db.one(
|
|
53
59
|
"INSERT INTO prostgles.apps (id, check_frequency_ms, watching_schema_tag_names, application_name) \
|
|
54
60
|
VALUES($1, $2, $3, current_setting('application_name')) \
|
|
55
|
-
RETURNING *; "
|
|
56
|
-
,
|
|
57
|
-
this.appId,
|
|
58
|
-
check_frequency_ms,
|
|
59
|
-
watching_schema_tag_names
|
|
60
|
-
]
|
|
61
|
+
RETURNING *; ",
|
|
62
|
+
[this.appId, check_frequency_ms, watching_schema_tag_names],
|
|
61
63
|
);
|
|
62
64
|
|
|
63
|
-
const appRecord = await this.db.one(
|
|
65
|
+
const appRecord = await this.db.one(
|
|
66
|
+
"SELECT * FROM prostgles.apps WHERE id = $1",
|
|
67
|
+
[this.appId],
|
|
68
|
+
);
|
|
64
69
|
if (!appRecord || !appRecord.application_name?.includes(this.appId)) {
|
|
65
70
|
throw `initPubSubManager error: App record with application_name containing appId (${this.appId}) not found`;
|
|
66
71
|
}
|
|
@@ -71,9 +76,13 @@ export async function initPubSubManager(this: PubSubManager): Promise<PubSubMana
|
|
|
71
76
|
`);
|
|
72
77
|
}
|
|
73
78
|
|
|
74
|
-
this.postgresNotifListenManager = new PostgresNotifListenManager(
|
|
79
|
+
this.postgresNotifListenManager = new PostgresNotifListenManager(
|
|
80
|
+
this.db,
|
|
81
|
+
this.notifListener,
|
|
82
|
+
NOTIF_CHANNEL.getFull(this.appId),
|
|
83
|
+
);
|
|
75
84
|
|
|
76
85
|
await this.initialiseEventTriggers();
|
|
77
86
|
|
|
78
87
|
return this;
|
|
79
|
-
}
|
|
88
|
+
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { log, NOTIF_TYPE, pickKeys, PubSubManager } from "./PubSubManager";
|
|
2
2
|
|
|
3
3
|
/* Relay relevant data to relevant subscriptions */
|
|
4
|
-
export async function notifListener(
|
|
4
|
+
export async function notifListener(
|
|
5
|
+
this: PubSubManager,
|
|
6
|
+
data: { payload: string },
|
|
7
|
+
) {
|
|
5
8
|
const str = data.payload;
|
|
6
9
|
|
|
7
10
|
if (!str) {
|
|
8
|
-
console.error("Unexpected Empty notif")
|
|
11
|
+
console.error("Unexpected Empty notif");
|
|
9
12
|
return;
|
|
10
13
|
}
|
|
11
14
|
|
|
@@ -15,19 +18,25 @@ export async function notifListener(this: PubSubManager, data: { payload: string
|
|
|
15
18
|
log(str);
|
|
16
19
|
|
|
17
20
|
if (notifType === NOTIF_TYPE.schema) {
|
|
18
|
-
|
|
19
21
|
if (this.dboBuilder.prostgles.schemaWatch?.onSchemaChange) {
|
|
20
22
|
const [_, command, _event_type, query] = dataArr;
|
|
21
|
-
await this.dboBuilder.prostgles.opts.onLog?.({
|
|
23
|
+
await this.dboBuilder.prostgles.opts.onLog?.({
|
|
24
|
+
type: "debug",
|
|
25
|
+
command: "schemaChangeNotif",
|
|
26
|
+
duration: 0,
|
|
27
|
+
data: { command, query },
|
|
28
|
+
});
|
|
22
29
|
|
|
23
30
|
if (query && command) {
|
|
24
|
-
this.dboBuilder.prostgles.schemaWatch.onSchemaChange({
|
|
31
|
+
this.dboBuilder.prostgles.schemaWatch.onSchemaChange({
|
|
32
|
+
command,
|
|
33
|
+
query,
|
|
34
|
+
});
|
|
25
35
|
}
|
|
26
36
|
}
|
|
27
37
|
|
|
28
38
|
return;
|
|
29
|
-
} else if(notifType === NOTIF_TYPE.data_trigger_change) {
|
|
30
|
-
|
|
39
|
+
} else if (notifType === NOTIF_TYPE.data_trigger_change) {
|
|
31
40
|
await this.refreshTriggers();
|
|
32
41
|
return;
|
|
33
42
|
}
|
|
@@ -38,60 +47,61 @@ export async function notifListener(this: PubSubManager, data: { payload: string
|
|
|
38
47
|
}
|
|
39
48
|
|
|
40
49
|
if (dataArr.length < 3) {
|
|
41
|
-
throw "notifListener: dataArr length < 3"
|
|
50
|
+
throw "notifListener: dataArr length < 3";
|
|
42
51
|
}
|
|
43
|
-
|
|
52
|
+
|
|
44
53
|
const [_, table_name, op_name, condition_ids_str] = dataArr;
|
|
45
|
-
const condition_ids = condition_ids_str?.split(",").map(v => +v);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if(!table_name) {
|
|
54
|
+
const condition_ids = condition_ids_str?.split(",").map((v) => +v);
|
|
55
|
+
|
|
56
|
+
if (!table_name) {
|
|
49
57
|
throw "table_name undef";
|
|
50
58
|
}
|
|
51
59
|
|
|
52
|
-
const tableTriggerConditions = this._triggers?.[table_name]?.map(
|
|
53
|
-
idx
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
const tableTriggerConditions = this._triggers?.[table_name]?.map(
|
|
61
|
+
(condition, idx) => ({
|
|
62
|
+
idx,
|
|
63
|
+
condition,
|
|
64
|
+
subs: this.getTriggerSubs(table_name, condition),
|
|
65
|
+
syncs: this.getSyncs(table_name, condition),
|
|
66
|
+
}),
|
|
67
|
+
);
|
|
58
68
|
let state: "error" | "no-triggers" | "ok" | "invalid_condition_ids" = "ok";
|
|
59
|
-
|
|
69
|
+
|
|
60
70
|
// const triggers = await this.db.any("SELECT * FROM prostgles.triggers WHERE table_name = $1 AND id IN ($2:csv)", [table_name, condition_ids_str.split(",").map(v => +v)]);
|
|
61
71
|
// const conditions: string[] = triggers.map(t => t.condition);
|
|
62
|
-
|
|
63
72
|
|
|
64
|
-
if(!tableTriggerConditions?.length){
|
|
73
|
+
if (!tableTriggerConditions?.length) {
|
|
65
74
|
state = "no-triggers";
|
|
66
75
|
|
|
67
76
|
/* Trigger error */
|
|
68
|
-
} else if (
|
|
69
|
-
condition_ids_str?.startsWith("error")
|
|
70
|
-
) {
|
|
77
|
+
} else if (condition_ids_str?.startsWith("error")) {
|
|
71
78
|
state = "error";
|
|
72
79
|
const pref = "INTERNAL ERROR";
|
|
73
|
-
console.error(`${pref}: condition_ids_str: ${condition_ids_str}`)
|
|
80
|
+
console.error(`${pref}: condition_ids_str: ${condition_ids_str}`);
|
|
74
81
|
tableTriggerConditions.map(({ condition }) => {
|
|
75
82
|
const subs = this.getTriggerSubs(table_name, condition);
|
|
76
|
-
subs.map(s => {
|
|
77
|
-
this.pushSubData(
|
|
78
|
-
|
|
83
|
+
subs.map((s) => {
|
|
84
|
+
this.pushSubData(
|
|
85
|
+
s,
|
|
86
|
+
pref + ". Check server logs. Schema might have changed",
|
|
87
|
+
);
|
|
88
|
+
});
|
|
79
89
|
});
|
|
80
90
|
|
|
81
91
|
/* Trigger ok */
|
|
82
|
-
} else if (
|
|
83
|
-
condition_ids?.every(id => Number.isInteger(id))
|
|
84
|
-
) {
|
|
85
|
-
|
|
92
|
+
} else if (condition_ids?.every((id) => Number.isInteger(id))) {
|
|
86
93
|
state = "ok";
|
|
87
|
-
const firedTableConditions = tableTriggerConditions.filter(({ idx }) =>
|
|
94
|
+
const firedTableConditions = tableTriggerConditions.filter(({ idx }) =>
|
|
95
|
+
condition_ids.includes(idx),
|
|
96
|
+
);
|
|
88
97
|
const orphanedTableConditions = condition_ids.filter((condId) => {
|
|
89
98
|
const tc = tableTriggerConditions.at(condId);
|
|
90
99
|
return !tc || (tc.subs.length === 0 && tc.syncs.length === 0);
|
|
91
100
|
});
|
|
92
|
-
if(orphanedTableConditions.length){
|
|
101
|
+
if (orphanedTableConditions.length) {
|
|
93
102
|
this.db
|
|
94
|
-
.any(
|
|
103
|
+
.any(
|
|
104
|
+
`
|
|
95
105
|
/* Delete removed subscriptions */
|
|
96
106
|
/* ${PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID} */
|
|
97
107
|
DELETE FROM prostgles.app_triggers at
|
|
@@ -105,52 +115,57 @@ export async function notifListener(this: PubSubManager, data: { payload: string
|
|
|
105
115
|
AND at.table_name = t.table_name
|
|
106
116
|
AND at.condition = t.condition
|
|
107
117
|
)
|
|
108
|
-
`,
|
|
109
|
-
[table_name, orphanedTableConditions, this.appId]
|
|
118
|
+
`,
|
|
119
|
+
[table_name, orphanedTableConditions, this.appId],
|
|
110
120
|
)
|
|
111
121
|
.then(() => {
|
|
112
122
|
this.refreshTriggers();
|
|
113
123
|
})
|
|
114
|
-
.catch(e => {
|
|
124
|
+
.catch((e) => {
|
|
115
125
|
console.error("Error deleting orphaned triggers", e);
|
|
116
126
|
});
|
|
117
127
|
}
|
|
118
128
|
|
|
119
129
|
firedTableConditions.map(({ subs, syncs }) => {
|
|
120
|
-
|
|
121
|
-
|
|
130
|
+
log(
|
|
131
|
+
"notifListener",
|
|
132
|
+
subs.map((s) => s.channel_name),
|
|
133
|
+
syncs.map((s) => s.channel_name),
|
|
134
|
+
);
|
|
122
135
|
|
|
123
136
|
syncs.map((s) => {
|
|
124
137
|
this.syncData(s, undefined, "trigger");
|
|
125
138
|
});
|
|
126
139
|
|
|
127
140
|
/* Throttle the subscriptions */
|
|
128
|
-
const activeAndReadySubs = subs.filter(sub =>
|
|
129
|
-
sub.triggers.some(
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
141
|
+
const activeAndReadySubs = subs.filter((sub) =>
|
|
142
|
+
sub.triggers.some(
|
|
143
|
+
(trg) =>
|
|
144
|
+
this.dbo[trg.table_name] &&
|
|
145
|
+
sub.is_ready &&
|
|
146
|
+
((sub.socket_id && this.sockets[sub.socket_id]) || sub.localFuncs),
|
|
147
|
+
),
|
|
134
148
|
);
|
|
135
|
-
activeAndReadySubs.forEach(sub => {
|
|
149
|
+
activeAndReadySubs.forEach((sub) => {
|
|
136
150
|
const { throttle = 0, throttleOpts } = sub;
|
|
137
|
-
if (
|
|
151
|
+
if (
|
|
152
|
+
!throttleOpts?.skipFirst &&
|
|
153
|
+
sub.last_throttled <= Date.now() - throttle
|
|
154
|
+
) {
|
|
138
155
|
sub.last_throttled = Date.now();
|
|
139
156
|
|
|
140
157
|
/* It is assumed the policy was checked before this point */
|
|
141
158
|
this.pushSubData(sub);
|
|
142
159
|
} else if (!sub.is_throttling) {
|
|
143
|
-
|
|
144
|
-
log("throttling sub")
|
|
160
|
+
log("throttling sub");
|
|
145
161
|
sub.is_throttling = setTimeout(() => {
|
|
146
|
-
log("throttling finished. pushSubData...")
|
|
162
|
+
log("throttling finished. pushSubData...");
|
|
147
163
|
sub.is_throttling = null;
|
|
148
164
|
sub.last_throttled = Date.now();
|
|
149
165
|
this.pushSubData(sub);
|
|
150
166
|
}, throttle);
|
|
151
167
|
}
|
|
152
168
|
});
|
|
153
|
-
|
|
154
169
|
});
|
|
155
170
|
|
|
156
171
|
/* Trigger unknown issue */
|
|
@@ -158,16 +173,19 @@ export async function notifListener(this: PubSubManager, data: { payload: string
|
|
|
158
173
|
state = "invalid_condition_ids";
|
|
159
174
|
}
|
|
160
175
|
|
|
161
|
-
await this._log({
|
|
176
|
+
await this._log({
|
|
162
177
|
type: "sync",
|
|
163
178
|
command: "notifListener",
|
|
164
179
|
state,
|
|
165
|
-
tableName: table_name,
|
|
166
|
-
op_name,
|
|
180
|
+
tableName: table_name,
|
|
181
|
+
op_name,
|
|
167
182
|
condition_ids_str,
|
|
168
183
|
tableTriggers: this._triggers?.[table_name],
|
|
169
|
-
tableSyncs: JSON.stringify(
|
|
184
|
+
tableSyncs: JSON.stringify(
|
|
185
|
+
this.syncs
|
|
186
|
+
.filter((s) => s.table_name === table_name)
|
|
187
|
+
.map((s) => pickKeys(s, ["condition", "socket_id"])),
|
|
188
|
+
),
|
|
170
189
|
connectedSocketIds: this.connectedSocketIds,
|
|
171
190
|
});
|
|
172
|
-
|
|
173
|
-
}
|
|
191
|
+
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { PubSubManager } from
|
|
1
|
+
import { PubSubManager } from "./PubSubManager";
|
|
2
2
|
import { REALTIME_TRIGGER_CHECK_QUERY } from "./initPubSubManager";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* Schema and Data watch triggers (DB_OBJ_NAMES.schema_watch_func, DB_OBJ_NAMES.data_watch_func)
|
|
5
|
+
* Schema and Data watch triggers (DB_OBJ_NAMES.schema_watch_func, DB_OBJ_NAMES.data_watch_func)
|
|
6
6
|
* survive and continue to user resources even after the client disconnects.
|
|
7
7
|
* We must therefore delete apps that do not have active connections
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
const queryIdentifier =
|
|
10
|
+
const queryIdentifier =
|
|
11
|
+
"prostgles query used to keep track of which prgl backend clients are still connected";
|
|
11
12
|
const connectedApplicationNamesQuery = `
|
|
12
13
|
SELECT DISTINCT application_name
|
|
13
14
|
FROM prostgles.apps
|
|
@@ -15,7 +16,7 @@ const connectedApplicationNamesQuery = `
|
|
|
15
16
|
SELECT application_name
|
|
16
17
|
FROM pg_catalog.pg_stat_activity
|
|
17
18
|
)
|
|
18
|
-
`;
|
|
19
|
+
`;
|
|
19
20
|
|
|
20
21
|
export const DELETE_DISCONNECTED_APPS_QUERY = `
|
|
21
22
|
DELETE FROM prostgles.apps a
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { parseLocalFuncs } from "../DboBuilder/ViewHandler/subscribe";
|
|
2
2
|
import { log, PubSubManager, Subscription } from "./PubSubManager";
|
|
3
3
|
|
|
4
|
-
export async function pushSubData(
|
|
4
|
+
export async function pushSubData(
|
|
5
|
+
this: PubSubManager,
|
|
6
|
+
sub: Subscription,
|
|
7
|
+
err?: any,
|
|
8
|
+
) {
|
|
5
9
|
if (!sub) throw "pushSubData: invalid sub";
|
|
6
10
|
|
|
7
11
|
const { socket_id, channel_name } = sub;
|
|
8
|
-
if(!this.subs.some(s => s.channel_name === channel_name)){
|
|
12
|
+
if (!this.subs.some((s) => s.channel_name === channel_name)) {
|
|
9
13
|
// Might be throttling a sub that was removed
|
|
10
14
|
return;
|
|
11
15
|
}
|
|
@@ -20,13 +24,12 @@ export async function pushSubData(this: PubSubManager, sub: Subscription, err?:
|
|
|
20
24
|
|
|
21
25
|
return new Promise(async (resolve, reject) => {
|
|
22
26
|
/* TODO: Retire subOne -> it's redundant */
|
|
23
|
-
|
|
24
|
-
const { data, err } = await this.getSubData(sub);
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
const { data, err } = await this.getSubData(sub);
|
|
27
29
|
|
|
30
|
+
if (data) {
|
|
28
31
|
if (socket_id && this.sockets[socket_id]) {
|
|
29
|
-
log("Pushed " + data.length + " records to sub")
|
|
32
|
+
log("Pushed " + data.length + " records to sub");
|
|
30
33
|
this.sockets[socket_id].emit(channel_name, { data }, () => {
|
|
31
34
|
resolve(data);
|
|
32
35
|
});
|
|
@@ -38,13 +41,12 @@ export async function pushSubData(this: PubSubManager, sub: Subscription, err?:
|
|
|
38
41
|
resolve(data);
|
|
39
42
|
}
|
|
40
43
|
// sub.last_throttled = Date.now();
|
|
41
|
-
|
|
42
44
|
} else {
|
|
43
45
|
const errObj = { _err_msg: err.toString(), err };
|
|
44
46
|
if (socket_id && this.sockets[socket_id]) {
|
|
45
47
|
this.sockets[socket_id].emit(channel_name, { err: errObj });
|
|
46
48
|
} else if (localFuncs) {
|
|
47
|
-
if(!localFuncs.onError){
|
|
49
|
+
if (!localFuncs.onError) {
|
|
48
50
|
console.error("Uncaught subscription error", err);
|
|
49
51
|
}
|
|
50
52
|
localFuncs.onError?.(errObj);
|
|
@@ -52,4 +54,4 @@ export async function pushSubData(this: PubSubManager, sub: Subscription, err?:
|
|
|
52
54
|
reject(errObj);
|
|
53
55
|
}
|
|
54
56
|
});
|
|
55
|
-
}
|
|
57
|
+
}
|