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,71 +1,81 @@
|
|
|
1
|
-
import { asName, pickKeys } from "prostgles-types";
|
|
1
|
+
import { asName, pickKeys } from "prostgles-types";
|
|
2
2
|
import { DB } from "../Prostgles";
|
|
3
3
|
import { asValue } from "../PubSubManager/PubSubManager";
|
|
4
4
|
import { VALIDATE_SCHEMA_FUNCNAME } from "../JSONBValidation/validate_jsonb_schema_sql";
|
|
5
5
|
import { BaseColumnTypes, ColumnConfig } from "./TableConfig";
|
|
6
|
-
import pgPromise from "pg-promise";
|
|
6
|
+
import pgPromise from "pg-promise";
|
|
7
7
|
|
|
8
8
|
type Args = {
|
|
9
|
-
column: string;
|
|
9
|
+
column: string;
|
|
10
10
|
colConf: ColumnConfig;
|
|
11
|
-
db: DB;
|
|
11
|
+
db: DB;
|
|
12
12
|
table: string;
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Column create statement for a given config
|
|
17
17
|
*/
|
|
18
|
-
export const getColumnDefinitionQuery = async ({
|
|
19
|
-
|
|
18
|
+
export const getColumnDefinitionQuery = async ({
|
|
19
|
+
colConf: colConfRaw,
|
|
20
|
+
column,
|
|
21
|
+
db,
|
|
22
|
+
table,
|
|
23
|
+
}: Args): Promise<string | undefined> => {
|
|
24
|
+
const colConf =
|
|
25
|
+
typeof colConfRaw === "string" ? { sqlDefinition: colConfRaw } : colConfRaw;
|
|
20
26
|
const colNameEsc = asName(column);
|
|
21
|
-
const getColTypeDef = (
|
|
27
|
+
const getColTypeDef = (
|
|
28
|
+
colConf: BaseColumnTypes,
|
|
29
|
+
pgType: "TEXT" | "JSONB",
|
|
30
|
+
) => {
|
|
22
31
|
const { nullable, defaultValue } = colConf;
|
|
23
|
-
return `${pgType} ${!nullable ? " NOT NULL " : ""} ${defaultValue ? ` DEFAULT ${asValue(defaultValue)} ` : ""}
|
|
24
|
-
}
|
|
32
|
+
return `${pgType} ${!nullable ? " NOT NULL " : ""} ${defaultValue ? ` DEFAULT ${asValue(defaultValue)} ` : ""}`;
|
|
33
|
+
};
|
|
25
34
|
|
|
26
35
|
const jsonbSchema =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
"jsonbSchema" in colConf && colConf.jsonbSchema
|
|
37
|
+
? { jsonbSchema: colConf.jsonbSchema, jsonbSchemaType: undefined }
|
|
38
|
+
: "jsonbSchemaType" in colConf && colConf.jsonbSchemaType
|
|
39
|
+
? { jsonbSchema: undefined, jsonbSchemaType: colConf.jsonbSchemaType }
|
|
40
|
+
: undefined;
|
|
31
41
|
|
|
32
42
|
if ("references" in colConf && colConf.references) {
|
|
33
|
-
|
|
34
|
-
|
|
43
|
+
const { tableName: lookupTable, columnName: lookupCol = "id" } =
|
|
44
|
+
colConf.references;
|
|
35
45
|
return ` ${colNameEsc} ${getColTypeDef(colConf.references, "TEXT")} REFERENCES ${lookupTable} (${lookupCol}) `;
|
|
36
|
-
|
|
37
46
|
} else if ("sqlDefinition" in colConf && colConf.sqlDefinition) {
|
|
38
|
-
|
|
39
47
|
return ` ${colNameEsc} ${colConf.sqlDefinition} `;
|
|
40
|
-
|
|
41
48
|
} else if ("isText" in colConf && colConf.isText) {
|
|
42
49
|
let checks = "";
|
|
43
50
|
const colChecks: string[] = [];
|
|
44
51
|
if (colConf.lowerCased) {
|
|
45
|
-
colChecks.push(`${colNameEsc} = LOWER(${colNameEsc})`)
|
|
52
|
+
colChecks.push(`${colNameEsc} = LOWER(${colNameEsc})`);
|
|
46
53
|
}
|
|
47
54
|
if (colConf.trimmed) {
|
|
48
|
-
colChecks.push(`${colNameEsc} = BTRIM(${colNameEsc})`)
|
|
55
|
+
colChecks.push(`${colNameEsc} = BTRIM(${colNameEsc})`);
|
|
49
56
|
}
|
|
50
57
|
if (colChecks.length) {
|
|
51
|
-
checks = `CHECK (${colChecks.join(" AND ")})
|
|
58
|
+
checks = `CHECK (${colChecks.join(" AND ")})`;
|
|
52
59
|
}
|
|
53
60
|
return ` ${colNameEsc} ${getColTypeDef(colConf, "TEXT")} ${checks}`;
|
|
54
|
-
|
|
55
61
|
} else if (jsonbSchema) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
62
|
+
const jsonbSchemaStr =
|
|
63
|
+
asValue({
|
|
64
|
+
...pickKeys(colConf, ["enum", "nullable", "info"]),
|
|
65
|
+
...(jsonbSchema.jsonbSchemaType
|
|
66
|
+
? { type: jsonbSchema.jsonbSchemaType }
|
|
67
|
+
: jsonbSchema.jsonbSchema),
|
|
68
|
+
}) + "::TEXT";
|
|
61
69
|
|
|
62
70
|
/** Validate default value against jsonbSchema */
|
|
63
71
|
const validationQuery = `SELECT ${VALIDATE_SCHEMA_FUNCNAME}(${jsonbSchemaStr}, ${asValue(colConf.defaultValue) + "::JSONB"}, ${asValue({ table, column })}) as v`;
|
|
64
72
|
if (colConf.defaultValue) {
|
|
65
|
-
|
|
66
73
|
const failedDefault = (err?: any) => {
|
|
67
|
-
return {
|
|
68
|
-
|
|
74
|
+
return {
|
|
75
|
+
msg: `Default value (${colConf.defaultValue}) for ${table}.${column} does not satisfy the jsonb constraint check: ${validationQuery}`,
|
|
76
|
+
err,
|
|
77
|
+
};
|
|
78
|
+
};
|
|
69
79
|
try {
|
|
70
80
|
const row = await db.oneOrNone(validationQuery);
|
|
71
81
|
if (!row?.v) {
|
|
@@ -74,38 +84,49 @@ export const getColumnDefinitionQuery = async ({ colConf: colConfRaw, column, db
|
|
|
74
84
|
} catch (e) {
|
|
75
85
|
throw failedDefault(e);
|
|
76
86
|
}
|
|
77
|
-
}
|
|
87
|
+
}
|
|
78
88
|
|
|
79
89
|
return ` ${colNameEsc} ${getColTypeDef(colConf, "JSONB")} CHECK(${VALIDATE_SCHEMA_FUNCNAME}(${jsonbSchemaStr}, ${colNameEsc}, ${asValue({ table, column })} ))`;
|
|
80
|
-
|
|
81
90
|
} else if ("enum" in colConf) {
|
|
82
|
-
if (!colConf.enum?.length)
|
|
83
|
-
|
|
84
|
-
const
|
|
91
|
+
if (!colConf.enum?.length)
|
|
92
|
+
throw new Error("colConf.enum Must not be empty");
|
|
93
|
+
const type = colConf.enum.every((v) => Number.isFinite(v))
|
|
94
|
+
? "NUMERIC"
|
|
95
|
+
: "TEXT";
|
|
96
|
+
const checks = colConf.enum
|
|
97
|
+
.map((v) => `${colNameEsc} = ${asValue(v)}`)
|
|
98
|
+
.join(" OR ");
|
|
85
99
|
return ` ${colNameEsc} ${type} ${colConf.nullable ? "" : "NOT NULL"} ${"defaultValue" in colConf ? ` DEFAULT ${asValue(colConf.defaultValue)}` : ""} CHECK(${checks})`;
|
|
86
|
-
|
|
87
100
|
} else {
|
|
88
101
|
return undefined;
|
|
89
102
|
// throw "Unknown column config: " + JSON.stringify(colConf);
|
|
90
103
|
}
|
|
91
|
-
}
|
|
92
|
-
|
|
104
|
+
};
|
|
93
105
|
|
|
94
|
-
export type ColumnMinimalInfo = {
|
|
106
|
+
export type ColumnMinimalInfo = {
|
|
95
107
|
table_name: string;
|
|
96
108
|
table_schema: string;
|
|
97
109
|
column_name: string;
|
|
98
110
|
column_default: string | null;
|
|
99
111
|
udt_name: string;
|
|
100
|
-
nullable: boolean;
|
|
112
|
+
nullable: boolean;
|
|
101
113
|
};
|
|
102
|
-
export const getTableColumns = ({
|
|
103
|
-
|
|
114
|
+
export const getTableColumns = ({
|
|
115
|
+
db,
|
|
116
|
+
table,
|
|
117
|
+
}: {
|
|
118
|
+
db: DB | pgPromise.ITask<{}>;
|
|
119
|
+
table: string;
|
|
120
|
+
}): Promise<ColumnMinimalInfo[]> => {
|
|
121
|
+
return db.manyOrNone(
|
|
122
|
+
`
|
|
104
123
|
SELECT table_name,
|
|
105
124
|
table_schema, column_name,
|
|
106
125
|
column_default, udt_name,
|
|
107
126
|
is_nullable = 'YES' as nullable
|
|
108
127
|
FROM information_schema.columns
|
|
109
128
|
WHERE table_name = $1
|
|
110
|
-
`,
|
|
111
|
-
|
|
129
|
+
`,
|
|
130
|
+
[table],
|
|
131
|
+
);
|
|
132
|
+
};
|
|
@@ -6,48 +6,55 @@ import { TableConfig } from "./TableConfig";
|
|
|
6
6
|
|
|
7
7
|
type Args = {
|
|
8
8
|
tableName: string;
|
|
9
|
-
tableConf: TableConfig[string]
|
|
9
|
+
tableConf: TableConfig[string];
|
|
10
10
|
// tableConf: BaseTableDefinition<LANG_IDS> & (TableDefinition<LANG_IDS> | LookupTableDefinition<LANG_IDS>)
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
export type ConstraintDef = {
|
|
13
|
+
export type ConstraintDef = {
|
|
14
14
|
/**
|
|
15
15
|
* Named constraints are used to show a relevant error message
|
|
16
16
|
*/
|
|
17
|
-
name?: string;
|
|
18
|
-
content: string;
|
|
19
|
-
alterQuery: string;
|
|
17
|
+
name?: string;
|
|
18
|
+
content: string;
|
|
19
|
+
alterQuery: string;
|
|
20
20
|
};
|
|
21
|
-
export const getConstraintDefinitionQueries = ({
|
|
22
|
-
|
|
21
|
+
export const getConstraintDefinitionQueries = ({
|
|
22
|
+
tableConf,
|
|
23
|
+
tableName,
|
|
24
|
+
}: Args): ConstraintDef[] | undefined => {
|
|
23
25
|
if ("constraints" in tableConf && tableConf.constraints) {
|
|
24
26
|
const { constraints } = tableConf;
|
|
25
|
-
if(!constraints){
|
|
27
|
+
if (!constraints) {
|
|
26
28
|
return undefined;
|
|
27
29
|
}
|
|
28
|
-
|
|
29
|
-
if(Array.isArray(constraints)) {
|
|
30
|
-
return constraints.map(c => ({
|
|
31
|
-
|
|
30
|
+
|
|
31
|
+
if (Array.isArray(constraints)) {
|
|
32
|
+
return constraints.map((c) => ({
|
|
33
|
+
content: c,
|
|
34
|
+
alterQuery: `ALTER TABLE ${asName(tableName)} ADD ${c}`,
|
|
35
|
+
}));
|
|
32
36
|
} else {
|
|
33
37
|
const constraintNames = Object.keys(constraints);
|
|
34
|
-
return constraintNames.map(constraintName => {
|
|
38
|
+
return constraintNames.map((constraintName) => {
|
|
35
39
|
const _cnstr = constraints[constraintName]!;
|
|
36
|
-
const constraintDef =
|
|
37
|
-
|
|
40
|
+
const constraintDef =
|
|
41
|
+
typeof _cnstr === "string"
|
|
42
|
+
? _cnstr
|
|
43
|
+
: `${_cnstr.type} (${_cnstr.content})`;
|
|
44
|
+
|
|
38
45
|
/** Drop constraints with the same name */
|
|
39
46
|
// const existingConstraint = constraints.some(c => c.conname === constraintName);
|
|
40
47
|
// if(existingConstraint){
|
|
41
48
|
// if(canDrop) queries.push(`ALTER TABLE ${asName(tableName)} DROP CONSTRAINT ${asName(constraintName)};`);
|
|
42
49
|
// }
|
|
43
|
-
|
|
50
|
+
|
|
44
51
|
const alterQuery = `ALTER TABLE ${asName(tableName)} ADD CONSTRAINT ${asName(constraintName)} ${constraintDef};`;
|
|
45
52
|
|
|
46
53
|
return { name: constraintName, alterQuery, content: constraintDef };
|
|
47
54
|
});
|
|
48
55
|
}
|
|
49
56
|
}
|
|
50
|
-
}
|
|
57
|
+
};
|
|
51
58
|
|
|
52
59
|
export type ColConstraint = {
|
|
53
60
|
name: string;
|
|
@@ -56,14 +63,18 @@ export type ColConstraint = {
|
|
|
56
63
|
cols: Array<string>;
|
|
57
64
|
definition: string;
|
|
58
65
|
schema: string;
|
|
59
|
-
}
|
|
66
|
+
};
|
|
60
67
|
type ColConstraintsArgs = {
|
|
61
68
|
db: DB | pgPromise.ITask<{}>;
|
|
62
69
|
table?: string;
|
|
63
70
|
column?: string;
|
|
64
71
|
types?: ColConstraint["type"][];
|
|
65
|
-
}
|
|
66
|
-
export const getColConstraintsQuery = ({
|
|
72
|
+
};
|
|
73
|
+
export const getColConstraintsQuery = ({
|
|
74
|
+
column,
|
|
75
|
+
table,
|
|
76
|
+
types,
|
|
77
|
+
}: Omit<ColConstraintsArgs, "db">) => {
|
|
67
78
|
let query = `
|
|
68
79
|
SELECT *
|
|
69
80
|
FROM (
|
|
@@ -86,10 +97,15 @@ export const getColConstraintsQuery = ({ column, table, types }: Omit<ColConstra
|
|
|
86
97
|
`;
|
|
87
98
|
if (table) query += `\nAND "table" = ${asValue(table)}`;
|
|
88
99
|
if (column) query += `\nAND cols @> ARRAY[${asValue(column)}]`;
|
|
89
|
-
if (types?.length)
|
|
100
|
+
if (types?.length)
|
|
101
|
+
query += `\nAND type IN (${types.map((v) => asValue(v)).join(", ")})`;
|
|
90
102
|
return query;
|
|
91
|
-
}
|
|
92
|
-
export const getColConstraints = ({
|
|
93
|
-
|
|
103
|
+
};
|
|
104
|
+
export const getColConstraints = ({
|
|
105
|
+
db,
|
|
106
|
+
column,
|
|
107
|
+
table,
|
|
108
|
+
types,
|
|
109
|
+
}: ColConstraintsArgs): Promise<ColConstraint[]> => {
|
|
94
110
|
return db.manyOrNone(getColConstraintsQuery({ column, table, types }));
|
|
95
|
-
}
|
|
111
|
+
};
|
|
@@ -2,42 +2,53 @@ import { asName } from "prostgles-types";
|
|
|
2
2
|
import { pgp } from "../DboBuilder/DboBuilder";
|
|
3
3
|
import { DB } from "../Prostgles";
|
|
4
4
|
import { ColumnMinimalInfo, getTableColumns } from "./getColumnDefinitionQuery";
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
ColConstraint,
|
|
7
|
+
ConstraintDef,
|
|
8
|
+
getColConstraints,
|
|
9
|
+
} from "./getConstraintDefinitionQueries";
|
|
6
10
|
|
|
7
11
|
type Args = {
|
|
8
|
-
db: DB
|
|
9
|
-
columnDefs: string[];
|
|
12
|
+
db: DB;
|
|
13
|
+
columnDefs: string[];
|
|
10
14
|
tableName: string;
|
|
11
15
|
constraintDefs?: ConstraintDef[];
|
|
12
16
|
};
|
|
13
17
|
|
|
14
18
|
/**
|
|
15
|
-
* Given a table name, column definitions and constraint definitions,
|
|
19
|
+
* Given a table name, column definitions and constraint definitions,
|
|
16
20
|
* returns structured resulting column definitions and constraints of the table
|
|
17
21
|
*/
|
|
18
|
-
export const getFutureTableSchema = async ({
|
|
22
|
+
export const getFutureTableSchema = async ({
|
|
23
|
+
columnDefs,
|
|
24
|
+
tableName,
|
|
25
|
+
constraintDefs = [],
|
|
26
|
+
db,
|
|
27
|
+
}: Args): Promise<{
|
|
19
28
|
constraints: ColConstraint[];
|
|
20
29
|
cols: ColumnMinimalInfo[];
|
|
21
|
-
}> => {
|
|
30
|
+
}> => {
|
|
22
31
|
const { TransactionMode, isolationLevel } = pgp.txMode;
|
|
23
|
-
|
|
32
|
+
|
|
24
33
|
let constraints: ColConstraint[] = [];
|
|
25
34
|
let cols: ColumnMinimalInfo[] = [];
|
|
26
35
|
const ROLLBACK = "Rollback";
|
|
27
36
|
try {
|
|
28
37
|
const txMode = new TransactionMode({
|
|
29
|
-
tiLevel: isolationLevel.serializable
|
|
38
|
+
tiLevel: isolationLevel.serializable,
|
|
30
39
|
});
|
|
31
|
-
await db.tx({ mode: txMode }, async t => {
|
|
32
|
-
|
|
40
|
+
await db.tx({ mode: txMode }, async (t) => {
|
|
33
41
|
/** To prevent deadlocks we use a random table name -> Not feasible because named constraints cannot be recreated without dropping the existing ones from actual table */
|
|
34
|
-
// const tableEsc = asName(tableName.slice(0, 12) + (await t.oneOrNone(`SELECT md5(now()::text) as md5`)).md5);
|
|
35
|
-
|
|
42
|
+
// const tableEsc = asName(tableName.slice(0, 12) + (await t.oneOrNone(`SELECT md5(now()::text) as md5`)).md5);
|
|
43
|
+
|
|
36
44
|
const tableEsc = asName(tableName);
|
|
37
45
|
|
|
38
|
-
const consQueries = constraintDefs
|
|
39
|
-
|
|
40
|
-
|
|
46
|
+
const consQueries = constraintDefs
|
|
47
|
+
.map(
|
|
48
|
+
(c) =>
|
|
49
|
+
`ALTER TABLE ${tableEsc} ADD ${c.name ? ` CONSTRAINT ${asName(c.name)}` : ""} ${c.content};`,
|
|
50
|
+
)
|
|
51
|
+
.join("\n");
|
|
41
52
|
|
|
42
53
|
const query = `
|
|
43
54
|
DROP TABLE IF EXISTS ${tableEsc} CASCADE;
|
|
@@ -51,18 +62,17 @@ export const getFutureTableSchema = async ({ columnDefs, tableName, constraintDe
|
|
|
51
62
|
|
|
52
63
|
constraints = await getColConstraints({ db: t, table: tableName });
|
|
53
64
|
cols = await getTableColumns({ db: t, table: tableName });
|
|
54
|
-
|
|
65
|
+
|
|
55
66
|
/** Rollback */
|
|
56
67
|
return Promise.reject(new Error(ROLLBACK));
|
|
57
68
|
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if(e instanceof Error && e.message === ROLLBACK) {
|
|
69
|
+
} catch (e: any) {
|
|
70
|
+
if (e instanceof Error && e.message === ROLLBACK) {
|
|
61
71
|
// Ignore
|
|
62
72
|
} else {
|
|
63
73
|
throw e;
|
|
64
74
|
}
|
|
65
75
|
}
|
|
66
|
-
|
|
76
|
+
|
|
67
77
|
return { cols, constraints };
|
|
68
|
-
}
|
|
78
|
+
};
|
|
@@ -13,8 +13,11 @@ type PGIndex = {
|
|
|
13
13
|
size: string;
|
|
14
14
|
description: string | null;
|
|
15
15
|
};
|
|
16
|
-
export const getPGIndexes = async (
|
|
17
|
-
|
|
16
|
+
export const getPGIndexes = async (
|
|
17
|
+
db: DB,
|
|
18
|
+
tableName: string,
|
|
19
|
+
schema: string,
|
|
20
|
+
): Promise<PGIndex[]> => {
|
|
18
21
|
const indexQuery = `
|
|
19
22
|
SELECT n.nspname as schemaname,
|
|
20
23
|
c.relname as indexname,
|
|
@@ -48,6 +51,6 @@ export const getPGIndexes = async (db: DB, tableName: string, schema: string): P
|
|
|
48
51
|
AND c2.relname = \${tableName}
|
|
49
52
|
AND n.nspname = \${schema}
|
|
50
53
|
ORDER BY 1,2;
|
|
51
|
-
|
|
54
|
+
`;
|
|
52
55
|
return db.any(indexQuery, { tableName, schema });
|
|
53
|
-
};
|
|
56
|
+
};
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
getKeys,
|
|
3
|
+
asName as _asName,
|
|
4
|
+
isObject,
|
|
5
|
+
asName,
|
|
6
|
+
getObjectEntries,
|
|
7
|
+
} from "prostgles-types";
|
|
2
8
|
import { DB, DBHandlerServer } from "../Prostgles";
|
|
3
9
|
import { validate_jsonb_schema_sql } from "../JSONBValidation/validate_jsonb_schema_sql";
|
|
4
|
-
import {
|
|
5
|
-
|
|
10
|
+
import {
|
|
11
|
+
getColumnDefinitionQuery,
|
|
12
|
+
getTableColumns,
|
|
13
|
+
} from "./getColumnDefinitionQuery";
|
|
14
|
+
import { TableConfig } from "./TableConfig";
|
|
6
15
|
import { getFutureTableSchema } from "./getFutureTableSchema";
|
|
7
16
|
|
|
8
17
|
type Args = {
|
|
@@ -10,19 +19,26 @@ type Args = {
|
|
|
10
19
|
tableConf: TableConfig[string];
|
|
11
20
|
tableName: string;
|
|
12
21
|
tableHandler: DBHandlerServer[string] | undefined;
|
|
13
|
-
}
|
|
22
|
+
};
|
|
14
23
|
|
|
15
24
|
/**
|
|
16
25
|
* Given a tableHandler, table name, column definitions and constraint definitions,
|
|
17
26
|
* returns the queries to align any existing table with the given column definitions
|
|
18
27
|
*/
|
|
19
|
-
export const getTableColumnQueries = async ({
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
28
|
+
export const getTableColumnQueries = async ({
|
|
29
|
+
db,
|
|
30
|
+
tableConf,
|
|
31
|
+
tableName,
|
|
32
|
+
tableHandler,
|
|
33
|
+
}: Args): Promise<
|
|
34
|
+
| undefined
|
|
35
|
+
| {
|
|
36
|
+
columnDefs: string[];
|
|
37
|
+
newColumnDefs: string[];
|
|
38
|
+
fullQuery: string;
|
|
39
|
+
isCreate: boolean;
|
|
40
|
+
}
|
|
41
|
+
> => {
|
|
26
42
|
let newColumnDefs: string[] = [];
|
|
27
43
|
const droppedColNames: string[] = [];
|
|
28
44
|
const alteredColQueries: string[] = [];
|
|
@@ -32,89 +48,121 @@ export const getTableColumnQueries = async ({ db, tableConf, tableName, tableHan
|
|
|
32
48
|
if (!("columns" in tableConf && tableConf.columns)) {
|
|
33
49
|
return undefined;
|
|
34
50
|
}
|
|
35
|
-
|
|
36
|
-
const hasJSONBValidation = getKeys(tableConf.columns).some(c => {
|
|
51
|
+
|
|
52
|
+
const hasJSONBValidation = getKeys(tableConf.columns).some((c) => {
|
|
37
53
|
const cConf = tableConf.columns?.[c];
|
|
38
|
-
return
|
|
54
|
+
return (
|
|
55
|
+
cConf && isObject(cConf) && (cConf.jsonbSchema || cConf.jsonbSchemaType)
|
|
56
|
+
);
|
|
39
57
|
});
|
|
40
58
|
|
|
41
59
|
/** Must install validation function */
|
|
42
|
-
if(hasJSONBValidation){
|
|
60
|
+
if (hasJSONBValidation) {
|
|
43
61
|
try {
|
|
44
62
|
await db.any(validate_jsonb_schema_sql);
|
|
45
|
-
} catch(err: any){
|
|
46
|
-
console.error(
|
|
63
|
+
} catch (err: any) {
|
|
64
|
+
console.error(
|
|
65
|
+
"Could not install the jsonb validation function due to error: ",
|
|
66
|
+
err,
|
|
67
|
+
);
|
|
47
68
|
throw err;
|
|
48
69
|
}
|
|
49
70
|
}
|
|
50
71
|
|
|
51
72
|
const columns = getObjectEntries(tableConf.columns).filter(([_, colDef]) => {
|
|
52
73
|
/** Exclude NamedJoinColumn */
|
|
53
|
-
return typeof colDef === "string" || !("joinDef" in colDef)
|
|
74
|
+
return typeof colDef === "string" || !("joinDef" in colDef);
|
|
54
75
|
});
|
|
55
76
|
|
|
56
77
|
const colDefs: { name: string; def: string }[] = [];
|
|
57
|
-
|
|
58
|
-
for (const [colName, colConf] of columns) {
|
|
59
78
|
|
|
79
|
+
for (const [colName, colConf] of columns) {
|
|
60
80
|
/* Get column definition */
|
|
61
|
-
const colDef = await getColumnDefinitionQuery({
|
|
62
|
-
|
|
63
|
-
|
|
81
|
+
const colDef = await getColumnDefinitionQuery({
|
|
82
|
+
colConf,
|
|
83
|
+
column: colName.toString(),
|
|
84
|
+
db,
|
|
85
|
+
table: tableName,
|
|
86
|
+
});
|
|
87
|
+
if (colDef) {
|
|
88
|
+
colDefs.push({ name: colName.toString(), def: colDef });
|
|
64
89
|
}
|
|
65
90
|
}
|
|
66
|
-
const columnDefs = colDefs.map(c => c.def);
|
|
91
|
+
const columnDefs = colDefs.map((c) => c.def);
|
|
67
92
|
|
|
68
|
-
if(!colDefs.length){
|
|
93
|
+
if (!colDefs.length) {
|
|
69
94
|
return undefined;
|
|
70
95
|
}
|
|
71
96
|
|
|
72
|
-
|
|
73
97
|
const ALTERQ = `ALTER TABLE ${asName(tableName)}`;
|
|
74
98
|
if (!tableHandler) {
|
|
75
|
-
newColumnDefs.push(...colDefs.map(c => c.def));
|
|
76
|
-
|
|
99
|
+
newColumnDefs.push(...colDefs.map((c) => c.def));
|
|
77
100
|
} else if (tableHandler) {
|
|
78
101
|
const currCols = await getTableColumns({ db, table: tableName });
|
|
79
102
|
|
|
80
103
|
/** Add new columns */
|
|
81
|
-
newColumnDefs = colDefs
|
|
82
|
-
|
|
104
|
+
newColumnDefs = colDefs
|
|
105
|
+
.filter((nc) => !tableHandler.columns?.some((c) => nc.name === c.name))
|
|
106
|
+
.map((c) => c.def);
|
|
107
|
+
|
|
83
108
|
/** Altered/Dropped columns */
|
|
84
|
-
const { cols: futureCols } = await getFutureTableSchema({
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
109
|
+
const { cols: futureCols } = await getFutureTableSchema({
|
|
110
|
+
tableName,
|
|
111
|
+
columnDefs,
|
|
112
|
+
constraintDefs: [],
|
|
113
|
+
db,
|
|
114
|
+
});
|
|
115
|
+
currCols.forEach((c) => {
|
|
116
|
+
const newCol = futureCols.find((nc) => nc.column_name === c.column_name);
|
|
117
|
+
if (!newCol) {
|
|
88
118
|
droppedColNames.push(c.column_name);
|
|
89
|
-
} else if(newCol.nullable !== c.nullable){
|
|
90
|
-
alteredColQueries.push(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
} else if(newCol.
|
|
94
|
-
|
|
95
|
-
|
|
119
|
+
} else if (newCol.nullable !== c.nullable) {
|
|
120
|
+
alteredColQueries.push(
|
|
121
|
+
`${ALTERQ} ALTER COLUMN ${asName(c.column_name)} ${newCol.nullable ? "DROP" : "SET"} NOT NULL;`,
|
|
122
|
+
);
|
|
123
|
+
} else if (newCol.udt_name !== c.udt_name) {
|
|
124
|
+
alteredColQueries.push(
|
|
125
|
+
`${ALTERQ} ALTER COLUMN ${asName(c.column_name)} TYPE ${newCol.udt_name} USING ${asName(c.column_name)}::${newCol.udt_name};`,
|
|
126
|
+
);
|
|
127
|
+
} else if (newCol.column_default !== c.column_default) {
|
|
128
|
+
const colConfig = colDefs.find((cd) => cd.name === c.column_name);
|
|
129
|
+
if (
|
|
130
|
+
["serial", "bigserial"].some((t) =>
|
|
131
|
+
colConfig?.def.toLowerCase().includes(` ${t}`),
|
|
132
|
+
) &&
|
|
133
|
+
c.column_default?.toLowerCase().includes("nextval")
|
|
134
|
+
) {
|
|
96
135
|
/** Ignore SERIAL/BIGSERIAL <> nextval mismatch */
|
|
97
136
|
} else {
|
|
98
|
-
alteredColQueries.push(
|
|
137
|
+
alteredColQueries.push(
|
|
138
|
+
`${ALTERQ} ALTER COLUMN ${asName(c.column_name)} ${newCol.column_default === null ? "DROP DEFAULT" : `SET DEFAULT ${newCol.column_default}`};`,
|
|
139
|
+
);
|
|
99
140
|
}
|
|
100
141
|
}
|
|
101
142
|
});
|
|
102
143
|
}
|
|
103
144
|
|
|
104
|
-
if (
|
|
145
|
+
if (
|
|
146
|
+
!tableHandler ||
|
|
147
|
+
tableConf.dropIfExists ||
|
|
148
|
+
tableConf.dropIfExistsCascade
|
|
149
|
+
) {
|
|
105
150
|
isCreate = true;
|
|
106
151
|
const DROPQ = `DROP TABLE IF EXISTS ${asName(tableName)}`;
|
|
107
|
-
fullQuery =
|
|
108
|
-
...(tableConf.dropIfExists
|
|
152
|
+
fullQuery = [
|
|
153
|
+
...(tableConf.dropIfExists
|
|
154
|
+
? [`${DROPQ};`]
|
|
155
|
+
: tableConf.dropIfExistsCascade
|
|
156
|
+
? [`${DROPQ} CASCADE;`]
|
|
157
|
+
: []),
|
|
109
158
|
`CREATE TABLE ${asName(tableName)} (`,
|
|
110
|
-
|
|
111
|
-
`)
|
|
112
|
-
].join("\n")
|
|
113
|
-
|
|
159
|
+
columnDefs.join(", \n"),
|
|
160
|
+
`);`,
|
|
161
|
+
].join("\n");
|
|
114
162
|
} else {
|
|
115
163
|
fullQuery = [
|
|
116
|
-
...droppedColNames.map(c => `${ALTERQ} DROP COLUMN ${asName(c)};`),
|
|
117
|
-
...newColumnDefs.map(c => `${ALTERQ} ADD COLUMN ${c};`),
|
|
164
|
+
...droppedColNames.map((c) => `${ALTERQ} DROP COLUMN ${asName(c)};`),
|
|
165
|
+
...newColumnDefs.map((c) => `${ALTERQ} ADD COLUMN ${c};`),
|
|
118
166
|
...alteredColQueries,
|
|
119
167
|
].join("\n");
|
|
120
168
|
}
|
|
@@ -124,6 +172,5 @@ export const getTableColumnQueries = async ({ db, tableConf, tableName, tableHan
|
|
|
124
172
|
columnDefs,
|
|
125
173
|
isCreate,
|
|
126
174
|
newColumnDefs,
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
}
|
|
175
|
+
};
|
|
176
|
+
};
|