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,11 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
AnyObject,
|
|
3
|
+
getKeys,
|
|
4
|
+
InsertParams,
|
|
5
|
+
isDefined,
|
|
6
|
+
isObject,
|
|
7
|
+
} from "prostgles-types";
|
|
2
8
|
import { LocalParams, TableHandlers } from "./DboBuilder";
|
|
3
9
|
import { TableRule } from "../PublishParser/PublishParser";
|
|
4
10
|
import { omitKeys } from "../PubSubManager/PubSubManager";
|
|
5
11
|
import { TableHandler } from "./TableHandler/TableHandler";
|
|
6
12
|
|
|
7
13
|
type InsertNestedRecordsArgs = {
|
|
8
|
-
data:
|
|
14
|
+
data: AnyObject | AnyObject[];
|
|
9
15
|
param2?: InsertParams;
|
|
10
16
|
tableRules?: TableRule;
|
|
11
17
|
localParams?: LocalParams;
|
|
@@ -16,34 +22,29 @@ type InsertNestedRecordsArgs = {
|
|
|
16
22
|
*/
|
|
17
23
|
export async function insertNestedRecords(
|
|
18
24
|
this: TableHandler,
|
|
19
|
-
{
|
|
20
|
-
data,
|
|
21
|
-
param2,
|
|
22
|
-
tableRules,
|
|
23
|
-
localParams = {},
|
|
24
|
-
}: InsertNestedRecordsArgs
|
|
25
|
+
{ data, param2, tableRules, localParams = {} }: InsertNestedRecordsArgs,
|
|
25
26
|
): Promise<{
|
|
26
27
|
data?: AnyObject | AnyObject[];
|
|
27
28
|
insertResult?: AnyObject | AnyObject[];
|
|
28
|
-
}> {
|
|
29
|
+
}> {
|
|
29
30
|
const MEDIA_COL_NAMES = ["data", "name"];
|
|
30
31
|
|
|
31
|
-
const getExtraKeys = (row: AnyObject) =>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (!
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
32
|
+
const getExtraKeys = (row: AnyObject) =>
|
|
33
|
+
getKeys(row).filter((fieldName) => {
|
|
34
|
+
/* If media then use file insert columns */
|
|
35
|
+
if (this.is_media) {
|
|
36
|
+
return !this.column_names.concat(MEDIA_COL_NAMES).includes(fieldName);
|
|
37
|
+
} else if (!this.columns.find((c) => c.name === fieldName)) {
|
|
38
|
+
if (!isObject(row[fieldName]) && !Array.isArray(row[fieldName])) {
|
|
39
|
+
throw new Error("Invalid/Dissalowed field in data: " + fieldName);
|
|
40
|
+
} else if (!this.dboBuilder.dbo[fieldName]) {
|
|
41
|
+
return false;
|
|
42
|
+
// throw new Error("Invalid/Dissalowed nested insert table name in data: " + fieldName)
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
41
45
|
}
|
|
42
|
-
return
|
|
43
|
-
}
|
|
44
|
-
return false;
|
|
45
|
-
});
|
|
46
|
-
|
|
46
|
+
return false;
|
|
47
|
+
});
|
|
47
48
|
|
|
48
49
|
/**
|
|
49
50
|
* True when: nested table data is provided within
|
|
@@ -51,10 +52,15 @@ export async function insertNestedRecords(
|
|
|
51
52
|
* OR
|
|
52
53
|
* [referencing_column] property key
|
|
53
54
|
* If true then will do the full insert within this function
|
|
54
|
-
* Nested insert is not allowed for the file table
|
|
55
|
+
* Nested insert is not allowed for the file table
|
|
55
56
|
* */
|
|
56
57
|
const isMultiInsert = Array.isArray(data);
|
|
57
|
-
const hasNestedInserts = this.is_media
|
|
58
|
+
const hasNestedInserts = this.is_media
|
|
59
|
+
? false
|
|
60
|
+
: (isMultiInsert ? data : [data]).some(
|
|
61
|
+
(d) =>
|
|
62
|
+
getExtraKeys(d).length || getReferenceColumnInserts(this, d).length,
|
|
63
|
+
);
|
|
58
64
|
|
|
59
65
|
/**
|
|
60
66
|
* Make sure nested insert uses a transaction
|
|
@@ -69,242 +75,363 @@ export async function insertNestedRecords(
|
|
|
69
75
|
param2,
|
|
70
76
|
undefined,
|
|
71
77
|
tableRules,
|
|
72
|
-
{ tx: { dbTX, t: _t }, ...localParams }
|
|
73
|
-
)
|
|
74
|
-
)
|
|
75
|
-
}
|
|
78
|
+
{ tx: { dbTX, t: _t }, ...localParams },
|
|
79
|
+
),
|
|
80
|
+
),
|
|
81
|
+
};
|
|
76
82
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const _data = await Promise.all((isMultiInsert ? data : [data]).map(async row => {
|
|
80
|
-
// const { preValidate, validate } = tableRules?.insert ?? {};
|
|
81
|
-
// const { tableConfigurator } = this.dboBuilder.prostgles;
|
|
82
|
-
// if(!tableConfigurator) throw "tableConfigurator missing";
|
|
83
|
-
// let row = await tableConfigurator.getPreInsertRow(this, { dbx: this.getFinalDbo(localParams), validate, localParams, row: _row })
|
|
84
|
-
// if (preValidate) {
|
|
85
|
-
// row = await preValidate({ row, dbx: this.tx?.dbTX || this.dboBuilder.dbo, localParams });
|
|
86
|
-
// }
|
|
87
|
-
|
|
88
|
-
/* Potentially a nested join */
|
|
89
|
-
if (hasNestedInserts) {
|
|
90
|
-
const extraKeys = getExtraKeys(row);
|
|
91
|
-
const colInserts = getReferenceColumnInserts(this, row);
|
|
92
|
-
|
|
93
|
-
/* Ensure we're using the same transaction */
|
|
94
|
-
const _this = this.tx ? this : dbTX![this.name] as TableHandler;
|
|
95
|
-
|
|
96
|
-
const omitedKeys = extraKeys.concat(colInserts.map(c => c.col));
|
|
97
|
-
|
|
98
|
-
const rootData: AnyObject = omitKeys(row, omitedKeys);
|
|
99
|
-
|
|
100
|
-
let insertedChildren: AnyObject[];
|
|
101
|
-
let targetTableRules: TableRule;
|
|
102
|
-
|
|
103
|
-
const colInsertsResult = colInserts.map(ci => ({
|
|
104
|
-
...ci,
|
|
105
|
-
inserted: undefined as AnyObject[] | undefined
|
|
106
|
-
}));
|
|
107
|
-
/** Insert referenced first and then populate root data with referenced keys */
|
|
108
|
-
if (colInserts.length) {
|
|
109
|
-
for await (const colInsert of colInsertsResult) {
|
|
110
|
-
const newLocalParams: LocalParams = {
|
|
111
|
-
...(localParams ?? {}),
|
|
112
|
-
nestedInsert: {
|
|
113
|
-
depth: (localParams.nestedInsert?.depth ?? 0) + 1,
|
|
114
|
-
previousData: rootData,
|
|
115
|
-
previousTable: this.name,
|
|
116
|
-
referencingColumn: colInsert.col
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
const colRows = await referencedInsert(_this, dbTX, newLocalParams, colInsert.tableName, row[colInsert.col]);
|
|
120
|
-
if (!Array.isArray(colRows) || colRows.length !== 1 || [null, undefined].includes(colRows[0]![colInsert.fcol])) {
|
|
121
|
-
throw new Error("Could not do nested column insert: Unexpected return " + JSON.stringify(colRows))
|
|
122
|
-
}
|
|
123
|
-
colInsert.inserted = colRows;
|
|
124
|
-
|
|
125
|
-
const foreignKey = colRows[0]![colInsert.fcol];
|
|
126
|
-
rootData[colInsert.col] = foreignKey;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
const fullRootResult = await _this.insert(rootData, { returning: "*" }, undefined, tableRules, localParams);
|
|
131
|
-
let returnData: AnyObject | undefined;
|
|
132
|
-
const returning = param2?.returning;
|
|
133
|
-
if (returning) {
|
|
134
|
-
returnData = {}
|
|
135
|
-
const returningItems = await this.prepareReturning(returning, this.parseFieldFilter(tableRules?.insert?.returningFields));
|
|
136
|
-
returningItems.filter(s => s.selected).map(rs => {
|
|
137
|
-
const colInsertResult = colInsertsResult.find(({ col }) => col === rs.columnName);
|
|
138
|
-
const inserted = colInsertResult?.singleInsert? colInsertResult.inserted?.[0] : colInsertResult?.inserted;
|
|
139
|
-
returnData![rs.alias] = inserted ?? fullRootResult[rs.alias];
|
|
140
|
-
})
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
await Promise.all(extraKeys.map(async targetTable => {
|
|
144
|
-
const childDataItems = Array.isArray(row[targetTable]) ? row[targetTable] : [row[targetTable]];
|
|
145
|
-
|
|
146
|
-
const childInsert = async (cdata: AnyObject | AnyObject[], tableName: string) => {
|
|
147
|
-
|
|
148
|
-
return referencedInsert(this, dbTX, localParams, tableName, cdata);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
const joinPath = await getJoinPath(this, targetTable);
|
|
152
83
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
84
|
+
const _data = await Promise.all(
|
|
85
|
+
(isMultiInsert ? data : [data]).map(async (row) => {
|
|
86
|
+
// const { preValidate, validate } = tableRules?.insert ?? {};
|
|
87
|
+
// const { tableConfigurator } = this.dboBuilder.prostgles;
|
|
88
|
+
// if(!tableConfigurator) throw "tableConfigurator missing";
|
|
89
|
+
// let row = await tableConfigurator.getPreInsertRow(this, { dbx: this.getFinalDbo(localParams), validate, localParams, row: _row })
|
|
90
|
+
// if (preValidate) {
|
|
91
|
+
// row = await preValidate({ row, dbx: this.tx?.dbTX || this.dboBuilder.dbo, localParams });
|
|
92
|
+
// }
|
|
93
|
+
|
|
94
|
+
/* Potentially a nested join */
|
|
95
|
+
if (hasNestedInserts) {
|
|
96
|
+
const extraKeys = getExtraKeys(row);
|
|
97
|
+
const colInserts = getReferenceColumnInserts(this, row);
|
|
98
|
+
|
|
99
|
+
/* Ensure we're using the same transaction */
|
|
100
|
+
const _this = this.tx ? this : (dbTX![this.name] as TableHandler);
|
|
101
|
+
|
|
102
|
+
const omitedKeys = extraKeys.concat(colInserts.map((c) => c.col));
|
|
103
|
+
|
|
104
|
+
const rootData: AnyObject = omitKeys(row, omitedKeys);
|
|
105
|
+
|
|
106
|
+
let insertedChildren: AnyObject[];
|
|
107
|
+
let targetTableRules: TableRule;
|
|
108
|
+
|
|
109
|
+
const colInsertsResult = colInserts.map((ci) => ({
|
|
110
|
+
...ci,
|
|
111
|
+
inserted: undefined as AnyObject[] | undefined,
|
|
112
|
+
}));
|
|
113
|
+
/** Insert referenced first and then populate root data with referenced keys */
|
|
114
|
+
if (colInserts.length) {
|
|
115
|
+
for await (const colInsert of colInsertsResult) {
|
|
116
|
+
const newLocalParams: LocalParams = {
|
|
117
|
+
...(localParams ?? {}),
|
|
118
|
+
nestedInsert: {
|
|
119
|
+
depth: (localParams.nestedInsert?.depth ?? 0) + 1,
|
|
120
|
+
previousData: rootData,
|
|
121
|
+
previousTable: this.name,
|
|
122
|
+
referencingColumn: colInsert.col,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
const colRows = await referencedInsert(
|
|
126
|
+
_this,
|
|
127
|
+
dbTX,
|
|
128
|
+
newLocalParams,
|
|
129
|
+
colInsert.tableName,
|
|
130
|
+
row[colInsert.col],
|
|
131
|
+
);
|
|
132
|
+
if (
|
|
133
|
+
!Array.isArray(colRows) ||
|
|
134
|
+
colRows.length !== 1 ||
|
|
135
|
+
[null, undefined].includes(colRows[0]![colInsert.fcol])
|
|
136
|
+
) {
|
|
137
|
+
throw new Error(
|
|
138
|
+
"Could not do nested column insert: Unexpected return " +
|
|
139
|
+
JSON.stringify(colRows),
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
colInsert.inserted = colRows;
|
|
191
143
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
cols2.filter(c => c.references?.[0]?.ftable === fileTable).length === 1 &&
|
|
195
|
-
cols2.filter(c => c.references?.[0]?.ftable === _this.name).length === 1
|
|
196
|
-
)) {
|
|
197
|
-
console.log({ tbl1, tbl2, tbl3, name: _this.name, tthisName: this.name })
|
|
198
|
-
throw "Second joining table (" + tbl2 + ") not of expected format. Must contain exactly one reference column for each table (file table and target table) ";
|
|
144
|
+
const foreignKey = colRows[0]![colInsert.fcol];
|
|
145
|
+
rootData[colInsert.col] = foreignKey;
|
|
199
146
|
}
|
|
200
|
-
|
|
201
|
-
insertedChildren = await childInsert(childDataItems, targetTable);
|
|
202
|
-
|
|
203
|
-
/* Insert in key_lookup table */
|
|
204
|
-
await Promise.all(insertedChildren.map(async t3Child => {
|
|
205
|
-
const tbl2Row: AnyObject = {};
|
|
206
|
-
|
|
207
|
-
colsRefT3.map(col => {
|
|
208
|
-
tbl2Row[col.name] = t3Child[col.references![0]!.fcols[0]!];
|
|
209
|
-
})
|
|
210
|
-
colsRefT1.map(col => {
|
|
211
|
-
tbl2Row[col.name] = fullRootResult[col.references![0]!.fcols[0]!];
|
|
212
|
-
})
|
|
213
|
-
|
|
214
|
-
await childInsert(tbl2Row, tbl2!);//.then(() => {});
|
|
215
|
-
}));
|
|
216
|
-
|
|
217
|
-
} else {
|
|
218
|
-
console.error(JSON.stringify({ path, thisTable: this.name, targetTable }, null, 2));
|
|
219
|
-
throw "Unexpected path for Nested inserts";
|
|
220
147
|
}
|
|
221
148
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
149
|
+
const fullRootResult = await _this.insert(
|
|
150
|
+
rootData,
|
|
151
|
+
{ returning: "*" },
|
|
152
|
+
undefined,
|
|
153
|
+
tableRules,
|
|
154
|
+
localParams,
|
|
155
|
+
);
|
|
156
|
+
let returnData: AnyObject | undefined;
|
|
157
|
+
const returning = param2?.returning;
|
|
158
|
+
if (returning) {
|
|
159
|
+
returnData = {};
|
|
160
|
+
const returningItems = await this.prepareReturning(
|
|
161
|
+
returning,
|
|
162
|
+
this.parseFieldFilter(tableRules?.insert?.returningFields),
|
|
163
|
+
);
|
|
164
|
+
returningItems
|
|
165
|
+
.filter((s) => s.selected)
|
|
166
|
+
.map((rs) => {
|
|
167
|
+
const colInsertResult = colInsertsResult.find(
|
|
168
|
+
({ col }) => col === rs.columnName,
|
|
169
|
+
);
|
|
170
|
+
const inserted = colInsertResult?.singleInsert
|
|
171
|
+
? colInsertResult.inserted?.[0]
|
|
172
|
+
: colInsertResult?.inserted;
|
|
173
|
+
returnData![rs.alias] = inserted ?? fullRootResult[rs.alias];
|
|
231
174
|
});
|
|
232
|
-
return res;
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
returnData![targetTable] = clientTargetInserts.length === 1 ? clientTargetInserts[0] : clientTargetInserts;
|
|
236
175
|
}
|
|
237
|
-
}));
|
|
238
176
|
|
|
239
|
-
|
|
240
|
-
|
|
177
|
+
await Promise.all(
|
|
178
|
+
extraKeys.map(async (targetTable) => {
|
|
179
|
+
const childDataItems = Array.isArray(row[targetTable])
|
|
180
|
+
? row[targetTable]
|
|
181
|
+
: [row[targetTable]];
|
|
182
|
+
|
|
183
|
+
const childInsert = async (
|
|
184
|
+
cdata: AnyObject | AnyObject[],
|
|
185
|
+
tableName: string,
|
|
186
|
+
) => {
|
|
187
|
+
return referencedInsert(
|
|
188
|
+
this,
|
|
189
|
+
dbTX,
|
|
190
|
+
localParams,
|
|
191
|
+
tableName,
|
|
192
|
+
cdata,
|
|
193
|
+
);
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
const joinPath = await getJoinPath(this, targetTable);
|
|
197
|
+
|
|
198
|
+
const { path } = joinPath;
|
|
199
|
+
const [tbl1, tbl2, tbl3] = path;
|
|
200
|
+
targetTableRules = await getInsertTableRules(
|
|
201
|
+
this,
|
|
202
|
+
targetTable,
|
|
203
|
+
localParams,
|
|
204
|
+
); // tbl3
|
|
205
|
+
|
|
206
|
+
const cols2 = this.dboBuilder.dbo[tbl2!]!.columns || [];
|
|
207
|
+
if (!this.dboBuilder.dbo[tbl2!])
|
|
208
|
+
throw "Invalid/disallowed table: " + tbl2;
|
|
209
|
+
const colsRefT1 = cols2?.filter((c) =>
|
|
210
|
+
c.references?.some(
|
|
211
|
+
(rc) => rc.cols.length === 1 && rc.ftable === tbl1,
|
|
212
|
+
),
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
if (!path.length) {
|
|
216
|
+
throw (
|
|
217
|
+
"Nested inserts join path not found for " +
|
|
218
|
+
[this.name, targetTable]
|
|
219
|
+
);
|
|
220
|
+
} else if (path.length === 2) {
|
|
221
|
+
if (targetTable !== tbl2) throw "Did not expect this";
|
|
222
|
+
|
|
223
|
+
if (!colsRefT1.length) {
|
|
224
|
+
throw `Target table ${tbl2} does not reference any columns from the root table ${this.name}. Cannot insert nested data`;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
insertedChildren = await childInsert(
|
|
228
|
+
childDataItems.map((d: AnyObject) => {
|
|
229
|
+
const result = { ...d };
|
|
230
|
+
colsRefT1.map((col) => {
|
|
231
|
+
result[col.references![0]!.cols[0]!] =
|
|
232
|
+
fullRootResult[col.references![0]!.fcols[0]!];
|
|
233
|
+
});
|
|
234
|
+
return result;
|
|
235
|
+
}),
|
|
236
|
+
targetTable,
|
|
237
|
+
);
|
|
238
|
+
} else if (path.length === 3) {
|
|
239
|
+
if (targetTable !== tbl3) throw "Did not expect this";
|
|
240
|
+
const colsRefT3 = cols2?.filter((c) =>
|
|
241
|
+
c.references?.some(
|
|
242
|
+
(rc) => rc.cols.length === 1 && rc.ftable === tbl3,
|
|
243
|
+
),
|
|
244
|
+
);
|
|
245
|
+
if (!colsRefT1.length || !colsRefT3.length)
|
|
246
|
+
throw "Incorrectly referenced or missing columns for nested insert";
|
|
247
|
+
|
|
248
|
+
const fileTable =
|
|
249
|
+
this.dboBuilder.prostgles.fileManager?.tableName;
|
|
250
|
+
if (targetTable !== fileTable) {
|
|
251
|
+
throw "Only media allowed to have nested inserts more than 2 tables apart";
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/* We expect tbl2 to have only 2 columns (media_id and foreign_id) */
|
|
255
|
+
if (
|
|
256
|
+
!cols2 ||
|
|
257
|
+
!(
|
|
258
|
+
cols2.filter((c) => c.references?.[0]?.ftable === fileTable)
|
|
259
|
+
.length === 1 &&
|
|
260
|
+
cols2.filter((c) => c.references?.[0]?.ftable === _this.name)
|
|
261
|
+
.length === 1
|
|
262
|
+
)
|
|
263
|
+
) {
|
|
264
|
+
console.log({
|
|
265
|
+
tbl1,
|
|
266
|
+
tbl2,
|
|
267
|
+
tbl3,
|
|
268
|
+
name: _this.name,
|
|
269
|
+
tthisName: this.name,
|
|
270
|
+
});
|
|
271
|
+
throw (
|
|
272
|
+
"Second joining table (" +
|
|
273
|
+
tbl2 +
|
|
274
|
+
") not of expected format. Must contain exactly one reference column for each table (file table and target table) "
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
insertedChildren = await childInsert(childDataItems, targetTable);
|
|
279
|
+
|
|
280
|
+
/* Insert in key_lookup table */
|
|
281
|
+
await Promise.all(
|
|
282
|
+
insertedChildren.map(async (t3Child) => {
|
|
283
|
+
const tbl2Row: AnyObject = {};
|
|
284
|
+
|
|
285
|
+
colsRefT3.map((col) => {
|
|
286
|
+
tbl2Row[col.name] = t3Child[col.references![0]!.fcols[0]!];
|
|
287
|
+
});
|
|
288
|
+
colsRefT1.map((col) => {
|
|
289
|
+
tbl2Row[col.name] =
|
|
290
|
+
fullRootResult[col.references![0]!.fcols[0]!];
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
await childInsert(tbl2Row, tbl2!); //.then(() => {});
|
|
294
|
+
}),
|
|
295
|
+
);
|
|
296
|
+
} else {
|
|
297
|
+
console.error(
|
|
298
|
+
JSON.stringify(
|
|
299
|
+
{ path, thisTable: this.name, targetTable },
|
|
300
|
+
null,
|
|
301
|
+
2,
|
|
302
|
+
),
|
|
303
|
+
);
|
|
304
|
+
throw "Unexpected path for Nested inserts";
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/* Return also the nested inserted data */
|
|
308
|
+
if (targetTableRules && insertedChildren?.length && returning) {
|
|
309
|
+
const targetTableHandler = dbTX![targetTable] as TableHandler;
|
|
310
|
+
const targetReturning = await targetTableHandler.prepareReturning(
|
|
311
|
+
"*",
|
|
312
|
+
targetTableHandler.parseFieldFilter(
|
|
313
|
+
targetTableRules?.insert?.returningFields,
|
|
314
|
+
),
|
|
315
|
+
);
|
|
316
|
+
const clientTargetInserts = insertedChildren.map((d) => {
|
|
317
|
+
const _d = { ...d };
|
|
318
|
+
const res: AnyObject = {};
|
|
319
|
+
targetReturning.map((r) => {
|
|
320
|
+
res[r.alias] = _d[r.alias];
|
|
321
|
+
});
|
|
322
|
+
return res;
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
returnData![targetTable] =
|
|
326
|
+
clientTargetInserts.length === 1
|
|
327
|
+
? clientTargetInserts[0]
|
|
328
|
+
: clientTargetInserts;
|
|
329
|
+
}
|
|
330
|
+
}),
|
|
331
|
+
);
|
|
332
|
+
|
|
333
|
+
return returnData;
|
|
334
|
+
}
|
|
241
335
|
|
|
242
|
-
|
|
243
|
-
|
|
336
|
+
return row;
|
|
337
|
+
}),
|
|
338
|
+
);
|
|
244
339
|
|
|
245
340
|
const result = isMultiInsert ? _data : _data[0];
|
|
246
|
-
const res = hasNestedInserts ?
|
|
247
|
-
{ insertResult: result } :
|
|
248
|
-
{ data: result };
|
|
341
|
+
const res = hasNestedInserts ? { insertResult: result } : { data: result };
|
|
249
342
|
|
|
250
343
|
return res;
|
|
251
344
|
}
|
|
252
345
|
|
|
253
346
|
/* Must be allowed to insert into referenced table */
|
|
254
|
-
export const getInsertTableRules = async (
|
|
255
|
-
|
|
256
|
-
|
|
347
|
+
export const getInsertTableRules = async (
|
|
348
|
+
tableHandler: TableHandler,
|
|
349
|
+
targetTable: string,
|
|
350
|
+
localParams: LocalParams,
|
|
351
|
+
) => {
|
|
352
|
+
const childRules =
|
|
353
|
+
await tableHandler.dboBuilder.publishParser?.getValidatedRequestRuleWusr({
|
|
354
|
+
tableName: targetTable,
|
|
355
|
+
command: "insert",
|
|
356
|
+
localParams,
|
|
357
|
+
});
|
|
358
|
+
if (!childRules || !childRules.insert)
|
|
359
|
+
throw "Dissallowed nested insert into table " + childRules;
|
|
257
360
|
return childRules;
|
|
258
|
-
}
|
|
361
|
+
};
|
|
259
362
|
|
|
260
|
-
const getJoinPath = async (
|
|
363
|
+
const getJoinPath = async (
|
|
364
|
+
tableHandler: TableHandler,
|
|
365
|
+
targetTable: string,
|
|
366
|
+
): Promise<{
|
|
261
367
|
t1: string;
|
|
262
368
|
t2: string;
|
|
263
369
|
path: string[];
|
|
264
370
|
}> => {
|
|
265
|
-
|
|
266
|
-
|
|
371
|
+
const jp = tableHandler.dboBuilder.getShortestJoinPath(
|
|
372
|
+
tableHandler,
|
|
373
|
+
targetTable,
|
|
374
|
+
);
|
|
267
375
|
if (!jp) {
|
|
268
|
-
const pref =
|
|
269
|
-
|
|
376
|
+
const pref =
|
|
377
|
+
tableHandler.dboBuilder.prostgles.opts.joins !== "inferred"
|
|
378
|
+
? "Joins are not inferred! "
|
|
379
|
+
: "";
|
|
380
|
+
throw new Error(
|
|
381
|
+
`${pref}Could not find a single join path for the nested data ( sourceTable: ${tableHandler.name} targetTable: ${targetTable} ) `,
|
|
382
|
+
);
|
|
270
383
|
}
|
|
271
384
|
return jp;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
const referencedInsert = async (tableHandler: TableHandler, dbTX: TableHandlers | undefined, localParams: LocalParams, targetTable: string, targetData: AnyObject | AnyObject[]): Promise<AnyObject[]> => {
|
|
275
|
-
|
|
385
|
+
};
|
|
276
386
|
|
|
387
|
+
const referencedInsert = async (
|
|
388
|
+
tableHandler: TableHandler,
|
|
389
|
+
dbTX: TableHandlers | undefined,
|
|
390
|
+
localParams: LocalParams,
|
|
391
|
+
targetTable: string,
|
|
392
|
+
targetData: AnyObject | AnyObject[],
|
|
393
|
+
): Promise<AnyObject[]> => {
|
|
277
394
|
// const thisInfo = await tableHandler.getInfo();
|
|
278
395
|
await getJoinPath(tableHandler, targetTable);
|
|
279
396
|
|
|
280
|
-
if (
|
|
281
|
-
|
|
397
|
+
if (
|
|
398
|
+
!targetData ||
|
|
399
|
+
!dbTX?.[targetTable] ||
|
|
400
|
+
!("insert" in dbTX[targetTable]!)
|
|
401
|
+
) {
|
|
402
|
+
throw new Error(
|
|
403
|
+
"childInsertErr: Table handler missing for referenced table: " +
|
|
404
|
+
targetTable,
|
|
405
|
+
);
|
|
282
406
|
}
|
|
283
407
|
|
|
284
|
-
const childRules = await getInsertTableRules(
|
|
408
|
+
const childRules = await getInsertTableRules(
|
|
409
|
+
tableHandler,
|
|
410
|
+
targetTable,
|
|
411
|
+
localParams,
|
|
412
|
+
);
|
|
285
413
|
|
|
286
414
|
// if (thisInfo.has_media === "one" && thisInfo.media_table_name === targetTable && Array.isArray(targetData) && targetData.length > 1) {
|
|
287
415
|
// throw "Constraint check fail: Cannot insert more than one record into " + JSON.stringify(targetTable);
|
|
288
416
|
// }
|
|
289
417
|
return Promise.all(
|
|
290
|
-
(Array.isArray(targetData) ? targetData : [targetData])
|
|
291
|
-
|
|
418
|
+
(Array.isArray(targetData) ? targetData : [targetData]).map((m) =>
|
|
419
|
+
(dbTX![targetTable] as TableHandler)
|
|
292
420
|
.insert(m, { returning: "*" }, undefined, childRules, localParams)
|
|
293
|
-
.catch(e => {
|
|
294
|
-
return Promise.reject(e);
|
|
295
|
-
})
|
|
296
|
-
|
|
421
|
+
.catch((e) => {
|
|
422
|
+
return Promise.reject(e);
|
|
423
|
+
}),
|
|
424
|
+
),
|
|
297
425
|
);
|
|
298
|
-
|
|
299
|
-
}
|
|
426
|
+
};
|
|
300
427
|
|
|
301
428
|
type ReferenceColumnInsert<ExpectSingleInsert> = {
|
|
302
429
|
tableName: string;
|
|
303
430
|
col: string;
|
|
304
431
|
fcol: string;
|
|
305
432
|
singleInsert: boolean;
|
|
306
|
-
data: ExpectSingleInsert extends true? AnyObject :
|
|
307
|
-
}
|
|
433
|
+
data: ExpectSingleInsert extends true ? AnyObject : AnyObject | AnyObject[];
|
|
434
|
+
};
|
|
308
435
|
|
|
309
436
|
/**
|
|
310
437
|
* Insert through the reference column. e.g.:
|
|
@@ -313,34 +440,41 @@ type ReferenceColumnInsert<ExpectSingleInsert> = {
|
|
|
313
440
|
* fkey_column: { ...referenced_table_data }
|
|
314
441
|
* }
|
|
315
442
|
*/
|
|
316
|
-
export const getReferenceColumnInserts = <ExpectSingleInsert extends boolean>(
|
|
443
|
+
export const getReferenceColumnInserts = <ExpectSingleInsert extends boolean>(
|
|
444
|
+
tableHandler: TableHandler,
|
|
445
|
+
parentRow: AnyObject,
|
|
446
|
+
expectSingleInsert?: ExpectSingleInsert,
|
|
447
|
+
): ReferenceColumnInsert<ExpectSingleInsert>[] => {
|
|
317
448
|
return Object.entries(parentRow)
|
|
318
449
|
.map(([insertedFieldName, insertedFieldValue]) => {
|
|
319
|
-
if(insertedFieldValue && isObject(insertedFieldValue)){
|
|
320
|
-
const insertedRefCol = tableHandler.columns.find(
|
|
321
|
-
|
|
450
|
+
if (insertedFieldValue && isObject(insertedFieldValue)) {
|
|
451
|
+
const insertedRefCol = tableHandler.columns.find(
|
|
452
|
+
(c) => c.name === insertedFieldName && c.references?.length,
|
|
453
|
+
);
|
|
454
|
+
if (!insertedRefCol) return undefined;
|
|
322
455
|
return {
|
|
323
456
|
insertedRefCol,
|
|
324
|
-
insertedRefColRef: insertedRefCol.references
|
|
325
|
-
}
|
|
457
|
+
insertedRefColRef: insertedRefCol.references!,
|
|
458
|
+
};
|
|
326
459
|
}
|
|
327
|
-
|
|
460
|
+
|
|
328
461
|
return undefined;
|
|
329
462
|
})
|
|
330
463
|
.filter(isDefined)
|
|
331
464
|
.map(({ insertedRefCol, insertedRefColRef }) => {
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
throw "Cannot do a nested insert on column that references multiple tables"
|
|
465
|
+
if (insertedRefColRef.length !== 1) {
|
|
466
|
+
throw "Cannot do a nested insert on column that references multiple tables";
|
|
335
467
|
}
|
|
336
|
-
|
|
337
|
-
const referencesMultipleColumns = insertedRefColRef?.some(
|
|
338
|
-
|
|
339
|
-
|
|
468
|
+
|
|
469
|
+
const referencesMultipleColumns = insertedRefColRef?.some(
|
|
470
|
+
(refs) => refs.fcols.length !== 1,
|
|
471
|
+
);
|
|
472
|
+
if (referencesMultipleColumns) {
|
|
473
|
+
throw "Cannot do a nested insert on multi-column foreign key reference";
|
|
340
474
|
}
|
|
341
475
|
|
|
342
476
|
const singleInsert = !Array.isArray(parentRow[insertedRefCol.name]);
|
|
343
|
-
if(expectSingleInsert && !singleInsert){
|
|
477
|
+
if (expectSingleInsert && !singleInsert) {
|
|
344
478
|
throw "Expected singleInsert";
|
|
345
479
|
}
|
|
346
480
|
const res = {
|
|
@@ -349,7 +483,8 @@ export const getReferenceColumnInserts = <ExpectSingleInsert extends boolean>(ta
|
|
|
349
483
|
fcol: insertedRefCol.references![0]!.fcols[0]!,
|
|
350
484
|
singleInsert,
|
|
351
485
|
data: parentRow[insertedRefCol.name],
|
|
352
|
-
}
|
|
486
|
+
};
|
|
353
487
|
return res;
|
|
354
|
-
})
|
|
355
|
-
|
|
488
|
+
})
|
|
489
|
+
.filter(isDefined);
|
|
490
|
+
};
|