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,4 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
AnyObject,
|
|
3
|
+
ColumnInfo,
|
|
4
|
+
FieldFilter,
|
|
5
|
+
ValidatedColumnInfo,
|
|
6
|
+
asName,
|
|
7
|
+
getKeys,
|
|
8
|
+
isEmpty,
|
|
9
|
+
isObject,
|
|
10
|
+
pickKeys,
|
|
11
|
+
unpatchText,
|
|
12
|
+
} from "prostgles-types/dist";
|
|
2
13
|
import { ValidateRowBasic } from "../../PublishParser/PublishParser";
|
|
3
14
|
import { DBHandlerServer } from "../../Prostgles";
|
|
4
15
|
import { asValue } from "../../PubSubManager/PubSubManager";
|
|
@@ -11,14 +22,14 @@ type RowFieldDataPlain = {
|
|
|
11
22
|
type: "plain";
|
|
12
23
|
column: TableSchemaColumn;
|
|
13
24
|
fieldValue: any;
|
|
14
|
-
}
|
|
25
|
+
};
|
|
15
26
|
|
|
16
27
|
type RowFieldDataFunction = {
|
|
17
28
|
type: "function";
|
|
18
29
|
column: TableSchemaColumn;
|
|
19
30
|
funcName: string;
|
|
20
31
|
args: any[];
|
|
21
|
-
}
|
|
32
|
+
};
|
|
22
33
|
type RowFieldData = RowFieldDataPlain | RowFieldDataFunction;
|
|
23
34
|
|
|
24
35
|
type ParsedRowFieldData = {
|
|
@@ -34,8 +45,8 @@ type ParseDataArgs = {
|
|
|
34
45
|
validationOptions: {
|
|
35
46
|
localParams: undefined | LocalParams;
|
|
36
47
|
validate: undefined | ValidateRowBasic;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
48
|
+
};
|
|
49
|
+
};
|
|
39
50
|
|
|
40
51
|
export class DataValidator {
|
|
41
52
|
rowFieldData?: RowFieldData[][];
|
|
@@ -47,67 +58,102 @@ export class DataValidator {
|
|
|
47
58
|
|
|
48
59
|
parse = async (args: ParseDataArgs) => {
|
|
49
60
|
const { command } = args;
|
|
50
|
-
const rowFieldData = await getValidatedRowFieldData(
|
|
61
|
+
const rowFieldData = await getValidatedRowFieldData(
|
|
62
|
+
args,
|
|
63
|
+
this.tableHandler,
|
|
64
|
+
);
|
|
51
65
|
const parsedRowFieldData = await getParsedRowFieldData(rowFieldData, args);
|
|
52
66
|
if (command === "update") {
|
|
53
|
-
if (rowFieldData.some(rowParts => rowParts.length === 0)) {
|
|
67
|
+
if (rowFieldData.some((rowParts) => rowParts.length === 0)) {
|
|
54
68
|
throw "Empty row. No data provided for update";
|
|
55
69
|
}
|
|
56
70
|
}
|
|
57
71
|
|
|
58
72
|
return {
|
|
59
73
|
parsedRowFieldData,
|
|
60
|
-
getQuery: () =>
|
|
61
|
-
|
|
62
|
-
|
|
74
|
+
getQuery: () =>
|
|
75
|
+
getQuery(command, parsedRowFieldData, this.tableHandler.escapedName),
|
|
76
|
+
};
|
|
77
|
+
};
|
|
63
78
|
}
|
|
64
79
|
|
|
65
|
-
const getQuery = (
|
|
80
|
+
const getQuery = (
|
|
81
|
+
type: "insert" | "update",
|
|
82
|
+
parsedRowFieldData: ParsedRowFieldData[][],
|
|
83
|
+
escapedTableName: string,
|
|
84
|
+
): string => {
|
|
66
85
|
if (type === "insert") {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
86
|
+
const uniqueColumns = Array.from(
|
|
87
|
+
new Set(
|
|
88
|
+
parsedRowFieldData.flatMap((row) => row.map((r) => r.escapedCol)),
|
|
89
|
+
),
|
|
90
|
+
);
|
|
91
|
+
const values = parsedRowFieldData
|
|
92
|
+
.map(
|
|
93
|
+
(row) =>
|
|
94
|
+
`(${uniqueColumns.map((colName) => row.find((r) => r.escapedCol === colName)?.escapedVal ?? "DEFAULT")})`,
|
|
95
|
+
)
|
|
96
|
+
.join(",\n");
|
|
97
|
+
const whatToInsert = !uniqueColumns.length
|
|
98
|
+
? "DEFAULT VALUES"
|
|
99
|
+
: `(${uniqueColumns}) VALUES ${values}`;
|
|
71
100
|
return `INSERT INTO ${escapedTableName} ${whatToInsert} `;
|
|
72
101
|
} else {
|
|
73
|
-
const query =
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
102
|
+
const query =
|
|
103
|
+
parsedRowFieldData
|
|
104
|
+
.map((rowParts) => {
|
|
105
|
+
return (
|
|
106
|
+
`UPDATE ${escapedTableName} SET ` +
|
|
107
|
+
rowParts
|
|
108
|
+
.map((r) => `${r.escapedCol} = ${r.escapedVal} `)
|
|
109
|
+
.join(",\n")
|
|
110
|
+
);
|
|
111
|
+
})
|
|
112
|
+
.join(";\n") + " ";
|
|
113
|
+
|
|
77
114
|
return query;
|
|
78
115
|
}
|
|
79
|
-
}
|
|
116
|
+
};
|
|
80
117
|
|
|
81
118
|
type PrepareFieldValuesArgs = {
|
|
82
|
-
row: AnyObject | undefined;
|
|
83
|
-
forcedData: AnyObject | undefined;
|
|
119
|
+
row: AnyObject | undefined;
|
|
120
|
+
forcedData: AnyObject | undefined;
|
|
84
121
|
allowedCols: FieldFilter | undefined;
|
|
85
122
|
removeDisallowedFields?: boolean;
|
|
86
123
|
tableHandler: TableHandler;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Apply forcedData, remove disallowed columns, validate against allowed columns:
|
|
90
|
-
* @example ({ item_id: 1 }, { user_id: 32 }) => { item_id: 1, user_id: 32 }
|
|
91
|
-
* OR
|
|
92
|
-
* ({ a: 1 }, { b: 32 }, ["c", "d"]) => throw "a field is not allowed"
|
|
93
|
-
* @param {Object} obj - initial data
|
|
94
|
-
* @param {Object} forcedData - set/override property
|
|
95
|
-
* @param {string[]} allowed_cols - allowed columns (excluding forcedData) from table rules
|
|
96
|
-
*/
|
|
97
|
-
const getValidatedRow = ({
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Apply forcedData, remove disallowed columns, validate against allowed columns:
|
|
127
|
+
* @example ({ item_id: 1 }, { user_id: 32 }) => { item_id: 1, user_id: 32 }
|
|
128
|
+
* OR
|
|
129
|
+
* ({ a: 1 }, { b: 32 }, ["c", "d"]) => throw "a field is not allowed"
|
|
130
|
+
* @param {Object} obj - initial data
|
|
131
|
+
* @param {Object} forcedData - set/override property
|
|
132
|
+
* @param {string[]} allowed_cols - allowed columns (excluding forcedData) from table rules
|
|
133
|
+
*/
|
|
134
|
+
const getValidatedRow = ({
|
|
135
|
+
row = {},
|
|
136
|
+
forcedData = {},
|
|
137
|
+
allowedCols,
|
|
138
|
+
removeDisallowedFields = false,
|
|
139
|
+
tableHandler,
|
|
140
|
+
}: PrepareFieldValuesArgs): AnyObject => {
|
|
98
141
|
const column_names = tableHandler.column_names.slice(0);
|
|
99
142
|
if (!column_names.length) {
|
|
100
143
|
throw "table column_names mising";
|
|
101
144
|
}
|
|
102
|
-
const validatedAllowedColumns = tableHandler.parseFieldFilter(
|
|
103
|
-
|
|
145
|
+
const validatedAllowedColumns = tableHandler.parseFieldFilter(
|
|
146
|
+
allowedCols,
|
|
147
|
+
false,
|
|
148
|
+
);
|
|
149
|
+
|
|
104
150
|
let finalRow = { ...row };
|
|
105
151
|
if (removeDisallowedFields && !isEmpty(finalRow)) {
|
|
106
152
|
finalRow = pickKeys(finalRow, validatedAllowedColumns);
|
|
107
153
|
}
|
|
108
154
|
|
|
109
155
|
/* If has keys check against allowed_cols */
|
|
110
|
-
validateObj(finalRow, validatedAllowedColumns)
|
|
156
|
+
validateObj(finalRow, validatedAllowedColumns);
|
|
111
157
|
|
|
112
158
|
/** Apply forcedData */
|
|
113
159
|
if (!isEmpty(forcedData)) {
|
|
@@ -117,14 +163,22 @@ const getValidatedRow = ({ row = {}, forcedData = {}, allowedCols, removeDisallo
|
|
|
117
163
|
/** Validate forcedData */
|
|
118
164
|
validateObj(finalRow, column_names.slice(0));
|
|
119
165
|
return finalRow;
|
|
120
|
-
}
|
|
166
|
+
};
|
|
121
167
|
|
|
122
168
|
/**
|
|
123
169
|
* Add synced_field value if missing
|
|
124
170
|
* prepareFieldValues(): Apply forcedData, remove disallowed columns, validate against allowed columns
|
|
125
171
|
* tableConfigurator?.checkColVal(): Validate column min/max/isText/lowerCased/trimmed values
|
|
126
172
|
*/
|
|
127
|
-
export const prepareNewData = async ({
|
|
173
|
+
export const prepareNewData = async ({
|
|
174
|
+
row,
|
|
175
|
+
forcedData,
|
|
176
|
+
allowedFields,
|
|
177
|
+
tableRules,
|
|
178
|
+
removeDisallowedFields = false,
|
|
179
|
+
tableConfigurator,
|
|
180
|
+
tableHandler,
|
|
181
|
+
}: ValidatedParams) => {
|
|
128
182
|
const synced_field = (tableRules ?? {})?.sync?.synced_field;
|
|
129
183
|
|
|
130
184
|
/* Update synced_field if sync is on and missing */
|
|
@@ -132,26 +186,45 @@ export const prepareNewData = async ({ row, forcedData, allowedFields, tableRule
|
|
|
132
186
|
row[synced_field] = Date.now();
|
|
133
187
|
}
|
|
134
188
|
|
|
135
|
-
const data = getValidatedRow({
|
|
189
|
+
const data = getValidatedRow({
|
|
190
|
+
tableHandler,
|
|
191
|
+
row,
|
|
192
|
+
forcedData,
|
|
193
|
+
allowedCols: allowedFields,
|
|
194
|
+
removeDisallowedFields,
|
|
195
|
+
});
|
|
136
196
|
const dataKeys = getKeys(data);
|
|
137
197
|
|
|
138
|
-
dataKeys.forEach(col => {
|
|
139
|
-
tableConfigurator?.checkColVal({
|
|
140
|
-
|
|
141
|
-
|
|
198
|
+
dataKeys.forEach((col) => {
|
|
199
|
+
tableConfigurator?.checkColVal({
|
|
200
|
+
table: tableHandler.name,
|
|
201
|
+
col,
|
|
202
|
+
value: data[col],
|
|
203
|
+
});
|
|
204
|
+
const colConfig = tableConfigurator?.getColumnConfig(
|
|
205
|
+
tableHandler.name,
|
|
206
|
+
col,
|
|
207
|
+
);
|
|
208
|
+
if (
|
|
209
|
+
colConfig &&
|
|
210
|
+
isObject(colConfig) &&
|
|
211
|
+
"isText" in colConfig &&
|
|
212
|
+
data[col]
|
|
213
|
+
) {
|
|
142
214
|
if (colConfig.lowerCased) {
|
|
143
|
-
data[col] = data[col].toString().toLowerCase()
|
|
215
|
+
data[col] = data[col].toString().toLowerCase();
|
|
144
216
|
}
|
|
145
217
|
if (colConfig.trimmed) {
|
|
146
|
-
data[col] = data[col].toString().trim()
|
|
218
|
+
data[col] = data[col].toString().trim();
|
|
147
219
|
}
|
|
148
220
|
}
|
|
149
|
-
})
|
|
150
|
-
|
|
151
|
-
const allowedCols = tableHandler.columns.filter(c => dataKeys.includes(c.name)).map(c => c.name);
|
|
152
|
-
return { data, allowedCols }
|
|
153
|
-
}
|
|
221
|
+
});
|
|
154
222
|
|
|
223
|
+
const allowedCols = tableHandler.columns
|
|
224
|
+
.filter((c) => dataKeys.includes(c.name))
|
|
225
|
+
.map((c) => c.name);
|
|
226
|
+
return { data, allowedCols };
|
|
227
|
+
};
|
|
155
228
|
|
|
156
229
|
/**
|
|
157
230
|
* Ensures:
|
|
@@ -160,76 +233,95 @@ export const prepareNewData = async ({ row, forcedData, allowedFields, tableRule
|
|
|
160
233
|
* - update is not empty
|
|
161
234
|
* - no duplicate column names ( could update with $func and plain value for same column )
|
|
162
235
|
*/
|
|
163
|
-
const getValidatedRowFieldData = async (
|
|
236
|
+
const getValidatedRowFieldData = async (
|
|
237
|
+
{ allowedCols, rows, validationOptions, dbTx, command }: ParseDataArgs,
|
|
238
|
+
tableHandler: TableHandler,
|
|
239
|
+
) => {
|
|
164
240
|
if (!allowedCols.length && command === "update") {
|
|
165
241
|
throw "allowedColumns cannot be empty";
|
|
166
242
|
}
|
|
167
243
|
const rowFieldData = await Promise.all(
|
|
168
|
-
rows.map(async nonvalidatedRow => {
|
|
169
|
-
|
|
244
|
+
rows.map(async (nonvalidatedRow) => {
|
|
170
245
|
let row = pickKeys(nonvalidatedRow, allowedCols);
|
|
171
246
|
const initialRowKeys = Object.keys(row);
|
|
172
247
|
if (validationOptions.validate) {
|
|
173
|
-
if(!validationOptions.localParams){
|
|
248
|
+
if (!validationOptions.localParams) {
|
|
174
249
|
throw "localParams missing for validate";
|
|
175
250
|
}
|
|
176
|
-
row = await validationOptions.validate({
|
|
251
|
+
row = await validationOptions.validate({
|
|
252
|
+
row,
|
|
253
|
+
dbx: dbTx,
|
|
254
|
+
localParams: validationOptions.localParams,
|
|
255
|
+
});
|
|
177
256
|
}
|
|
178
|
-
const keysAddedDuringValidate = Object.keys(row).filter(
|
|
257
|
+
const keysAddedDuringValidate = Object.keys(row).filter(
|
|
258
|
+
(newKey) => !initialRowKeys.includes(newKey),
|
|
259
|
+
);
|
|
179
260
|
|
|
180
261
|
const getColumn = (fieldName: string) => {
|
|
181
262
|
if (!allowedCols.concat(keysAddedDuringValidate).includes(fieldName)) {
|
|
182
263
|
throw `Unexpected/Dissallowed column name: ${fieldName}`;
|
|
183
264
|
}
|
|
184
|
-
const column = tableHandler.columns.find(c => c.name === fieldName);
|
|
265
|
+
const column = tableHandler.columns.find((c) => c.name === fieldName);
|
|
185
266
|
if (!column) {
|
|
186
267
|
throw `Invalid column: ${fieldName}`;
|
|
187
268
|
}
|
|
188
269
|
return column;
|
|
189
270
|
};
|
|
190
271
|
|
|
191
|
-
const rowPartValues = Object.entries(row).map(
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
272
|
+
const rowPartValues = Object.entries(row).map(
|
|
273
|
+
([fieldName, fieldValue]) => {
|
|
274
|
+
const column = getColumn(fieldName);
|
|
275
|
+
if (isObject(fieldValue)) {
|
|
276
|
+
// const textPatch = getTextPatch(column, fieldValue);
|
|
277
|
+
// if(textPatch){
|
|
278
|
+
// return {
|
|
279
|
+
// type: "plain",
|
|
280
|
+
// column,
|
|
281
|
+
// fieldValue: textPatch,
|
|
282
|
+
// } satisfies RowFieldData;
|
|
283
|
+
// }
|
|
284
|
+
|
|
285
|
+
const [firstKey, ...otherkeys] = Object.keys(fieldValue);
|
|
286
|
+
const func =
|
|
287
|
+
firstKey && !otherkeys.length
|
|
288
|
+
? convertionFuncs.some((f) => `$${f.name}` === firstKey)
|
|
289
|
+
: undefined;
|
|
290
|
+
if (func) {
|
|
291
|
+
const { funcName, args } = parseFunctionObject(fieldValue);
|
|
292
|
+
return {
|
|
293
|
+
type: "function",
|
|
294
|
+
column,
|
|
295
|
+
funcName,
|
|
296
|
+
args,
|
|
297
|
+
} satisfies RowFieldData;
|
|
298
|
+
}
|
|
214
299
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
|
|
300
|
+
return {
|
|
301
|
+
type: "plain",
|
|
302
|
+
column: getColumn(fieldName),
|
|
303
|
+
fieldValue,
|
|
304
|
+
} satisfies RowFieldData;
|
|
305
|
+
},
|
|
306
|
+
);
|
|
307
|
+
|
|
223
308
|
return rowPartValues;
|
|
224
|
-
})
|
|
309
|
+
}),
|
|
310
|
+
);
|
|
225
311
|
|
|
226
312
|
return rowFieldData;
|
|
227
|
-
}
|
|
313
|
+
};
|
|
228
314
|
|
|
229
315
|
const getTextPatch = async (c: TableSchemaColumn, fieldValue: any) => {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
316
|
+
if (
|
|
317
|
+
c.data_type === "text" &&
|
|
318
|
+
fieldValue &&
|
|
319
|
+
isObject(fieldValue) &&
|
|
320
|
+
!["from", "to"].find((key) => typeof fieldValue[key] !== "number")
|
|
321
|
+
) {
|
|
322
|
+
const unrecProps = Object.keys(fieldValue).filter(
|
|
323
|
+
(k) => !["from", "to", "text", "md5"].includes(k),
|
|
324
|
+
);
|
|
233
325
|
if (unrecProps.length) {
|
|
234
326
|
throw "Unrecognised params in textPatch field: " + unrecProps.join(", ");
|
|
235
327
|
}
|
|
@@ -238,10 +330,10 @@ const getTextPatch = async (c: TableSchemaColumn, fieldValue: any) => {
|
|
|
238
330
|
from: number;
|
|
239
331
|
to: number;
|
|
240
332
|
text: string;
|
|
241
|
-
md5: string
|
|
333
|
+
md5: string;
|
|
242
334
|
} = {
|
|
243
|
-
...fieldValue,
|
|
244
|
-
fieldName: c.name
|
|
335
|
+
...fieldValue,
|
|
336
|
+
fieldName: c.name,
|
|
245
337
|
} as any;
|
|
246
338
|
|
|
247
339
|
// if (tableRules && !tableRules.select) throw "Select needs to be permitted to patch data";
|
|
@@ -251,18 +343,20 @@ const getTextPatch = async (c: TableSchemaColumn, fieldValue: any) => {
|
|
|
251
343
|
// throw "Cannot patch data within a filter that affects more/less than 1 row";
|
|
252
344
|
// }
|
|
253
345
|
// return unpatchText(rows[0][p.fieldName], patchedTextData);
|
|
254
|
-
const rawValue = `OVERLAY(${asName(c.name)} PLACING ${asValue(patchedTextData.text)} FROM ${asValue(patchedTextData.from)} FOR ${asValue(patchedTextData.to - patchedTextData.from + 1)})
|
|
346
|
+
const rawValue = `OVERLAY(${asName(c.name)} PLACING ${asValue(patchedTextData.text)} FROM ${asValue(patchedTextData.from)} FOR ${asValue(patchedTextData.to - patchedTextData.from + 1)})`;
|
|
255
347
|
return rawValue;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
return undefined
|
|
259
|
-
}
|
|
348
|
+
}
|
|
260
349
|
|
|
261
|
-
|
|
350
|
+
return undefined;
|
|
351
|
+
};
|
|
262
352
|
|
|
263
|
-
|
|
353
|
+
const getParsedRowFieldDataFunction = async (
|
|
354
|
+
rowPart: RowFieldDataFunction,
|
|
355
|
+
args: ParseDataArgs,
|
|
356
|
+
) => {
|
|
357
|
+
const func = convertionFuncs.find((f) => `$${f.name}` === rowPart.funcName);
|
|
264
358
|
if (!func) {
|
|
265
|
-
throw `Unknown function: ${rowPart.funcName}. Expecting one of: ${convertionFuncs.map(f => f.name).join(", ")}`;
|
|
359
|
+
throw `Unknown function: ${rowPart.funcName}. Expecting one of: ${convertionFuncs.map((f) => f.name).join(", ")}`;
|
|
266
360
|
}
|
|
267
361
|
if (func.onlyAllowedFor && func.onlyAllowedFor !== args.command) {
|
|
268
362
|
throw `Function ${rowPart.funcName} is only allowed for ${func.onlyAllowedFor} but not ${args.command}`;
|
|
@@ -270,35 +364,43 @@ const getParsedRowFieldDataFunction = async (rowPart: RowFieldDataFunction, args
|
|
|
270
364
|
return func.getQuery(rowPart);
|
|
271
365
|
};
|
|
272
366
|
|
|
273
|
-
const getParsedRowFieldData = async (
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
367
|
+
const getParsedRowFieldData = async (
|
|
368
|
+
rowFieldData: RowFieldData[][],
|
|
369
|
+
args: ParseDataArgs,
|
|
370
|
+
) => {
|
|
371
|
+
const parsedRowFieldData = Promise.all(
|
|
372
|
+
rowFieldData.map((rowParts) => {
|
|
373
|
+
return Promise.all(
|
|
374
|
+
rowParts.map(async (rowPart) => {
|
|
375
|
+
let escapedVal: string;
|
|
376
|
+
if (rowPart.type === "function") {
|
|
377
|
+
escapedVal = await getParsedRowFieldDataFunction(rowPart, args);
|
|
378
|
+
} else {
|
|
379
|
+
/** Prevent pg-promise formatting jsonb */
|
|
380
|
+
const colIsJSON = ["json", "jsonb"].includes(
|
|
381
|
+
rowPart.column.data_type,
|
|
382
|
+
);
|
|
383
|
+
escapedVal = pgp.as.format(colIsJSON ? "$1:json" : "$1", [
|
|
384
|
+
rowPart.fieldValue,
|
|
385
|
+
]);
|
|
386
|
+
}
|
|
285
387
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
388
|
+
/**
|
|
389
|
+
* Cast to type to avoid array errors (they do not cast automatically)
|
|
390
|
+
*/
|
|
391
|
+
escapedVal += `::${rowPart.column.udt_name}`;
|
|
290
392
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
393
|
+
return {
|
|
394
|
+
escapedCol: asName(rowPart.column.name),
|
|
395
|
+
escapedVal,
|
|
396
|
+
};
|
|
397
|
+
}),
|
|
398
|
+
);
|
|
399
|
+
}),
|
|
400
|
+
);
|
|
297
401
|
|
|
298
402
|
return parsedRowFieldData;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
|
|
403
|
+
};
|
|
302
404
|
|
|
303
405
|
type ConvertionFunc = {
|
|
304
406
|
name: string;
|
|
@@ -315,31 +417,36 @@ const convertionFuncs: ConvertionFunc[] = [
|
|
|
315
417
|
"ST_MakePointM",
|
|
316
418
|
"ST_PointFromText",
|
|
317
419
|
"ST_GeomFromEWKT",
|
|
318
|
-
"ST_GeomFromGeoJSON"
|
|
319
|
-
].map(
|
|
320
|
-
name
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
420
|
+
"ST_GeomFromGeoJSON",
|
|
421
|
+
].map(
|
|
422
|
+
(name) =>
|
|
423
|
+
({
|
|
424
|
+
name,
|
|
425
|
+
getQuery: ({ args }) => {
|
|
426
|
+
const argList = args.map((arg) => asValue(arg)).join(", ");
|
|
427
|
+
return `${name}(${argList})`;
|
|
428
|
+
},
|
|
429
|
+
}) satisfies ConvertionFunc,
|
|
430
|
+
),
|
|
326
431
|
{
|
|
327
432
|
name: "to_timestamp",
|
|
328
|
-
getQuery: ({ args }) =>
|
|
329
|
-
|
|
433
|
+
getQuery: ({ args }) =>
|
|
434
|
+
`to_timestamp(${asValue(args[0])}::BIGINT/1000.0)::timestamp`,
|
|
435
|
+
},
|
|
436
|
+
{
|
|
330
437
|
name: "merge",
|
|
331
|
-
description:
|
|
438
|
+
description:
|
|
439
|
+
"Merge the provided jsonb objects into the existing column value, ensuring that a null source value will be coalesced with provided values",
|
|
332
440
|
onlyAllowedFor: "update",
|
|
333
441
|
getQuery: ({ args, column }) => {
|
|
334
442
|
if (!args.length) throw "merge function requires at least one argument";
|
|
335
|
-
const argVals = args.map(arg => asValue(arg))
|
|
443
|
+
const argVals = args.map((arg) => asValue(arg));
|
|
336
444
|
const argList = argVals.join(" || ");
|
|
337
445
|
return `COALESCE(${asName(column.name)}, ${argVals.join(", ")}) || ${argList}`;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
446
|
+
},
|
|
447
|
+
},
|
|
340
448
|
];
|
|
341
449
|
|
|
342
|
-
|
|
343
450
|
export class ColSet {
|
|
344
451
|
opts: {
|
|
345
452
|
columns: ColumnInfo[];
|
|
@@ -348,10 +455,9 @@ export class ColSet {
|
|
|
348
455
|
};
|
|
349
456
|
|
|
350
457
|
constructor(columns: ColumnInfo[], tableName: string) {
|
|
351
|
-
this.opts = { columns, tableName, colNames: columns.map(c => c.name) }
|
|
458
|
+
this.opts = { columns, tableName, colNames: columns.map((c) => c.name) };
|
|
352
459
|
}
|
|
353
460
|
|
|
354
|
-
|
|
355
461
|
// private async getRow(data: any, allowedCols: string[], dbTx: DBHandlerServer, validate: ValidateRow | undefined, command: "update" | "insert", localParams: LocalParams | undefined): Promise<ParsedRowFieldData[]> {
|
|
356
462
|
// const badCol = allowedCols.find(c => !this.opts.colNames.includes(c))
|
|
357
463
|
// if (!allowedCols || badCol) {
|
|
@@ -388,7 +494,6 @@ export class ColSet {
|
|
|
388
494
|
// escapedVal = func.getQuery(funcArgs);
|
|
389
495
|
// } else if (col.udt_name === "text") {
|
|
390
496
|
|
|
391
|
-
|
|
392
497
|
// } else {
|
|
393
498
|
// /** Prevent pg-promise formatting jsonb */
|
|
394
499
|
// const colIsJSON = ["json", "jsonb"].includes(col.data_type);
|
|
@@ -425,4 +530,4 @@ export class ColSet {
|
|
|
425
530
|
// }))).join(";\n") + " ";
|
|
426
531
|
// return res;
|
|
427
532
|
// }
|
|
428
|
-
}
|
|
533
|
+
}
|