@contember/engine-content-api 1.2.0-rc.3 → 1.3.0-alpha.1
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/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts.map +1 -1
- package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js +6 -0
- package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
- package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts.map +1 -1
- package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js +6 -0
- package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
- package/dist/src/inputProcessing/CreateInputProcessor.d.ts +27 -9
- package/dist/src/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
- package/dist/src/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
- package/dist/src/inputProcessing/CreateInputVisitor.js +10 -2
- package/dist/src/inputProcessing/CreateInputVisitor.js.map +1 -1
- package/dist/src/inputProcessing/UniqueWhereExpander.d.ts +2 -1
- package/dist/src/inputProcessing/UniqueWhereExpander.d.ts.map +1 -1
- package/dist/src/inputProcessing/UniqueWhereExpander.js +4 -0
- package/dist/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
- package/dist/src/inputProcessing/UpdateInputProcessor.d.ts +41 -16
- package/dist/src/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
- package/dist/src/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
- package/dist/src/inputProcessing/UpdateInputVisitor.js +7 -2
- package/dist/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
- package/dist/src/mapper/DataManipulationBuilder.d.ts +7 -0
- package/dist/src/mapper/DataManipulationBuilder.d.ts.map +1 -0
- package/dist/src/mapper/DataManipulationBuilder.js +5 -0
- package/dist/src/mapper/DataManipulationBuilder.js.map +1 -0
- package/dist/src/mapper/Mapper.d.ts +9 -14
- package/dist/src/mapper/Mapper.d.ts.map +1 -1
- package/dist/src/mapper/Mapper.js +48 -15
- package/dist/src/mapper/Mapper.js.map +1 -1
- package/dist/src/mapper/MapperContainer.d.ts.map +1 -1
- package/dist/src/mapper/MapperContainer.js +3 -3
- package/dist/src/mapper/MapperContainer.js.map +1 -1
- package/dist/src/mapper/Result.d.ts +2 -2
- package/dist/src/mapper/Result.d.ts.map +1 -1
- package/dist/src/mapper/Result.js.map +1 -1
- package/dist/src/mapper/delete/DeleteExecutor.d.ts +12 -5
- package/dist/src/mapper/delete/DeleteExecutor.d.ts.map +1 -1
- package/dist/src/mapper/delete/DeleteExecutor.js +143 -77
- package/dist/src/mapper/delete/DeleteExecutor.js.map +1 -1
- package/dist/src/mapper/delete/DeleteState.d.ts +22 -0
- package/dist/src/mapper/delete/DeleteState.d.ts.map +1 -0
- package/dist/src/mapper/delete/DeleteState.js +68 -0
- package/dist/src/mapper/delete/DeleteState.js.map +1 -0
- package/dist/src/mapper/delete/DeletedEntitiesStorage.d.ts +1 -0
- package/dist/src/mapper/delete/DeletedEntitiesStorage.d.ts.map +1 -1
- package/dist/src/mapper/delete/DeletedEntitiesStorage.js +5 -0
- package/dist/src/mapper/delete/DeletedEntitiesStorage.js.map +1 -1
- package/dist/src/mapper/delete/helpers.d.ts +11 -0
- package/dist/src/mapper/delete/helpers.d.ts.map +1 -0
- package/dist/src/mapper/delete/helpers.js +49 -0
- package/dist/src/mapper/delete/helpers.js.map +1 -0
- package/dist/src/mapper/insert/InsertBuilder.d.ts +8 -5
- package/dist/src/mapper/insert/InsertBuilder.d.ts.map +1 -1
- package/dist/src/mapper/insert/InsertBuilder.js +16 -9
- package/dist/src/mapper/insert/InsertBuilder.js.map +1 -1
- package/dist/src/mapper/insert/InsertBuilderFactory.d.ts +3 -1
- package/dist/src/mapper/insert/InsertBuilderFactory.d.ts.map +1 -1
- package/dist/src/mapper/insert/InsertBuilderFactory.js +3 -2
- package/dist/src/mapper/insert/InsertBuilderFactory.js.map +1 -1
- package/dist/src/mapper/insert/Inserter.d.ts +3 -6
- package/dist/src/mapper/insert/Inserter.d.ts.map +1 -1
- package/dist/src/mapper/insert/Inserter.js +6 -9
- package/dist/src/mapper/insert/Inserter.js.map +1 -1
- package/dist/src/mapper/insert/SqlCreateInputProcessor.d.ts +5 -0
- package/dist/src/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
- package/dist/src/mapper/insert/SqlCreateInputProcessor.js +54 -120
- package/dist/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
- package/dist/src/mapper/relations/ManyHasManyInputProcessor.d.ts +32 -0
- package/dist/src/mapper/relations/ManyHasManyInputProcessor.d.ts.map +1 -0
- package/dist/src/mapper/relations/ManyHasManyInputProcessor.js +77 -0
- package/dist/src/mapper/relations/ManyHasManyInputProcessor.js.map +1 -0
- package/dist/src/mapper/relations/ManyHasOneInputProcessor.d.ts +32 -0
- package/dist/src/mapper/relations/ManyHasOneInputProcessor.d.ts.map +1 -0
- package/dist/src/mapper/relations/ManyHasOneInputProcessor.js +108 -0
- package/dist/src/mapper/relations/ManyHasOneInputProcessor.js.map +1 -0
- package/dist/src/mapper/relations/OneHasManyInputProcessor.d.ts +29 -0
- package/dist/src/mapper/relations/OneHasManyInputProcessor.d.ts.map +1 -0
- package/dist/src/mapper/relations/OneHasManyInputProcessor.js +61 -0
- package/dist/src/mapper/relations/OneHasManyInputProcessor.js.map +1 -0
- package/dist/src/mapper/relations/OneHasOneInverseCreateInputProcessor.d.ts +21 -0
- package/dist/src/mapper/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +1 -0
- package/dist/src/mapper/relations/OneHasOneInverseCreateInputProcessor.js +74 -0
- package/dist/src/mapper/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -0
- package/dist/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.d.ts +32 -0
- package/dist/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +1 -0
- package/dist/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.js +125 -0
- package/dist/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -0
- package/dist/src/mapper/relations/OneHasOneOwningCreateInputProcessor.d.ts +21 -0
- package/dist/src/mapper/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +1 -0
- package/dist/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js +72 -0
- package/dist/src/mapper/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -0
- package/dist/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.d.ts +37 -0
- package/dist/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +1 -0
- package/dist/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js +193 -0
- package/dist/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -0
- package/dist/src/mapper/select/JoinBuilder.d.ts +1 -1
- package/dist/src/mapper/select/JoinBuilder.d.ts.map +1 -1
- package/dist/src/mapper/select/JoinBuilder.js.map +1 -1
- package/dist/src/mapper/select/WhereBuilder.d.ts +2 -2
- package/dist/src/mapper/select/WhereBuilder.d.ts.map +1 -1
- package/dist/src/mapper/select/WhereBuilder.js.map +1 -1
- package/dist/src/mapper/select/optimizer/WhereOptimizer.d.ts.map +1 -1
- package/dist/src/mapper/select/optimizer/WhereOptimizer.js +3 -1
- package/dist/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
- package/dist/src/mapper/select/optimizer/WhereReplacer.d.ts +3 -1
- package/dist/src/mapper/select/optimizer/WhereReplacer.d.ts.map +1 -1
- package/dist/src/mapper/select/optimizer/WhereReplacer.js +42 -18
- package/dist/src/mapper/select/optimizer/WhereReplacer.js.map +1 -1
- package/dist/src/mapper/update/SqlUpdateInputProcessor.d.ts +5 -0
- package/dist/src/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
- package/dist/src/mapper/update/SqlUpdateInputProcessor.js +52 -389
- package/dist/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
- package/dist/src/mapper/update/UpdateBuilder.d.ts +7 -4
- package/dist/src/mapper/update/UpdateBuilder.d.ts.map +1 -1
- package/dist/src/mapper/update/UpdateBuilder.js +18 -12
- package/dist/src/mapper/update/UpdateBuilder.js.map +1 -1
- package/dist/src/mapper/update/UpdateBuilderFactory.d.ts +3 -1
- package/dist/src/mapper/update/UpdateBuilderFactory.d.ts.map +1 -1
- package/dist/src/mapper/update/UpdateBuilderFactory.js +3 -2
- package/dist/src/mapper/update/UpdateBuilderFactory.js.map +1 -1
- package/dist/src/mapper/update/Updater.d.ts +1 -4
- package/dist/src/mapper/update/Updater.d.ts.map +1 -1
- package/dist/src/mapper/update/Updater.js +11 -13
- package/dist/src/mapper/update/Updater.js.map +1 -1
- package/dist/src/resolvers/MutationResolver.js +1 -1
- package/dist/src/resolvers/MutationResolver.js.map +1 -1
- package/dist/src/schema/GraphQlSchemaBuilderFactory.d.ts +3 -0
- package/dist/src/schema/GraphQlSchemaBuilderFactory.d.ts.map +1 -1
- package/dist/src/schema/GraphQlSchemaBuilderFactory.js +4 -2
- package/dist/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
- package/dist/src/schema/mutations/ConnectOrCreateRelationInputProvider.d.ts +15 -0
- package/dist/src/schema/mutations/ConnectOrCreateRelationInputProvider.d.ts.map +1 -0
- package/dist/src/schema/mutations/ConnectOrCreateRelationInputProvider.js +43 -0
- package/dist/src/schema/mutations/ConnectOrCreateRelationInputProvider.js.map +1 -0
- package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.d.ts.map +1 -1
- package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js +2 -6
- package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
- package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
- package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js +3 -0
- package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
- package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts +3 -1
- package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts.map +1 -1
- package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js +15 -8
- package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
- package/dist/src/schema/mutations/EntityInputProvider.d.ts.map +1 -1
- package/dist/src/schema/mutations/EntityInputProvider.js +0 -3
- package/dist/src/schema/mutations/EntityInputProvider.js.map +1 -1
- package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.d.ts.map +1 -1
- package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js +2 -6
- package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
- package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
- package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js +3 -0
- package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
- package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts +3 -1
- package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts.map +1 -1
- package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +11 -22
- package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js +2 -2
- package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js +1 -1
- package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js +1 -1
- package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js +0 -3
- package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js +13 -32
- package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js +11 -30
- package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js +62 -45
- package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js +10 -11
- package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js +29 -18
- package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.js +97 -0
- package/dist/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js +58 -22
- package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/{insertRelationCreate.test.js → create.test.js} +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/{insertRelationCreate.test.js → create.test.js} +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.js +99 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/{insertRelationCreate.test.js → create.test.js} +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/{insertRelationConnect.test.js → connect.test.js} +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/{insertRelationCreate.test.js → create.test.js} +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/{insertRelationCreate.test.js → create.test.js} +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/{insertRelationCreate.test.js → create.test.js} +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/{insertRelationEmpty.test.js → empty.test.js} +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js +49 -11
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js +49 -11
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js +83 -49
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js +10 -11
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js +49 -11
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js +103 -0
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js +20 -14
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js +101 -11
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js +17 -11
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.d.ts +1 -0
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.d.ts.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.js +9 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js +8 -6
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js +76 -0
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.js +53 -0
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js +80 -0
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.js +66 -25
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.d.ts +1 -0
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.d.ts.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.js +10 -2
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.js.map +1 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +14 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -5
- package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +14 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +12 -0
- package/dist/tests/cases/integration/graphQlSchema/schema-basic.gql +40 -2
- package/dist/tests/cases/integration/graphQlSchema/schema-bug-66.gql +30 -3
- package/dist/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +40 -2
- package/dist/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +14 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-new-builder.gql +40 -2
- package/dist/tests/cases/unit/whereOptimizer.test.js +114 -13
- package/dist/tests/cases/unit/whereOptimizer.test.js.map +1 -1
- package/dist/tests/src/test.d.ts +0 -1
- package/dist/tests/src/test.d.ts.map +1 -1
- package/dist/tests/src/test.js +1 -27
- package/dist/tests/src/test.js.map +1 -1
- package/dist/tests/src/testGraphql.js +1 -1
- package/dist/tests/src/testGraphql.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/src/input-validation/preValidation/CreateInputPreValidationProcessor.ts +6 -0
- package/src/input-validation/preValidation/UpdateInputPreValidationProcessor.ts +6 -0
- package/src/inputProcessing/CreateInputProcessor.ts +8 -11
- package/src/inputProcessing/CreateInputVisitor.ts +11 -2
- package/src/inputProcessing/UniqueWhereExpander.ts +5 -1
- package/src/inputProcessing/UpdateInputProcessor.ts +18 -18
- package/src/inputProcessing/UpdateInputVisitor.ts +6 -2
- package/src/mapper/DataManipulationBuilder.ts +12 -0
- package/src/mapper/Mapper.ts +75 -47
- package/src/mapper/MapperContainer.ts +10 -6
- package/src/mapper/Result.ts +1 -1
- package/src/mapper/delete/DeleteExecutor.ts +221 -95
- package/src/mapper/delete/DeleteState.ts +80 -0
- package/src/mapper/delete/DeletedEntitiesStorage.ts +6 -0
- package/src/mapper/delete/helpers.ts +68 -0
- package/src/mapper/insert/InsertBuilder.ts +23 -12
- package/src/mapper/insert/InsertBuilderFactory.ts +3 -1
- package/src/mapper/insert/Inserter.ts +6 -10
- package/src/mapper/insert/SqlCreateInputProcessor.ts +61 -139
- package/src/mapper/relations/ManyHasManyInputProcessor.ts +108 -0
- package/src/mapper/relations/ManyHasOneInputProcessor.ts +158 -0
- package/src/mapper/relations/OneHasManyInputProcessor.ts +101 -0
- package/src/mapper/relations/OneHasOneInverseCreateInputProcessor.ts +99 -0
- package/src/mapper/relations/OneHasOneInverseUpdateInputProcessor.ts +164 -0
- package/src/mapper/relations/OneHasOneOwningCreateInputProcessor.ts +92 -0
- package/src/mapper/relations/OneHasOneOwningUpdateInputProcessor.ts +253 -0
- package/src/mapper/select/JoinBuilder.ts +4 -4
- package/src/mapper/select/WhereBuilder.ts +11 -11
- package/src/mapper/select/optimizer/WhereOptimizer.ts +3 -1
- package/src/mapper/select/optimizer/WhereReplacer.ts +45 -18
- package/src/mapper/update/SqlUpdateInputProcessor.ts +55 -484
- package/src/mapper/update/UpdateBuilder.ts +22 -15
- package/src/mapper/update/UpdateBuilderFactory.ts +10 -1
- package/src/mapper/update/Updater.ts +10 -19
- package/src/resolvers/MutationResolver.ts +1 -1
- package/src/schema/GraphQlSchemaBuilderFactory.ts +7 -4
- package/src/schema/mutations/ConnectOrCreateRelationInputProvider.ts +54 -0
- package/src/schema/mutations/CreateEntityInputFieldVisitor.ts +2 -6
- package/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.ts +3 -1
- package/src/schema/mutations/CreateEntityRelationInputFieldVisitor.ts +20 -15
- package/src/schema/mutations/EntityInputProvider.ts +0 -3
- package/src/schema/mutations/UpdateEntityInputFieldVisitor.ts +2 -6
- package/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.ts +3 -1
- package/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.ts +52 -57
- package/tests/cases/integration/graphQlDb/update/deferedConstraints.test.ts +2 -2
- package/tests/cases/integration/graphQlDb/update/failedDelete.test.ts +1 -1
- package/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.ts +1 -1
- package/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.ts +0 -3
- package/tests/cases/integration/graphQlRequests/delete/aclDelete.test.ts +15 -34
- package/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.ts +12 -31
- package/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.ts +68 -46
- package/tests/cases/integration/graphQlRequests/delete/deleteById.test.ts +11 -12
- package/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.ts +30 -19
- package/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.ts +102 -0
- package/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.ts +63 -23
- package/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/{insertRelationCreate.test.ts → create.test.ts} +0 -0
- package/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/{insertRelationCreate.test.ts → create.test.ts} +0 -0
- package/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.ts +106 -0
- package/tests/cases/integration/graphQlRequests/insert/manyHasOne/{insertRelationCreate.test.ts → create.test.ts} +0 -0
- package/tests/cases/integration/graphQlRequests/insert/oneHasMany/{insertRelationConnect.test.ts → connect.test.ts} +0 -0
- package/tests/cases/integration/graphQlRequests/insert/oneHasMany/{insertRelationCreate.test.ts → create.test.ts} +0 -0
- package/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/{insertRelationCreate.test.ts → create.test.ts} +0 -0
- package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/{insertRelationCreate.test.ts → create.test.ts} +0 -0
- package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/{insertRelationEmpty.test.ts → empty.test.ts} +0 -0
- package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.ts +51 -12
- package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.ts +51 -12
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.ts +86 -50
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.ts +11 -12
- package/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.ts +51 -12
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.ts +106 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.ts +20 -14
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.ts +106 -12
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.ts +17 -11
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.ts +13 -0
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +8 -6
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.ts +80 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.ts +51 -0
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.ts +81 -1
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.ts +69 -26
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.ts +14 -1
- package/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +14 -1
- package/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -5
- package/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +14 -1
- package/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +12 -0
- package/tests/cases/integration/graphQlSchema/schema-basic.gql +40 -2
- package/tests/cases/integration/graphQlSchema/schema-bug-66.gql +30 -3
- package/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +40 -2
- package/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +14 -1
- package/tests/cases/integration/graphQlSchema/schema-new-builder.gql +40 -2
- package/tests/cases/unit/whereOptimizer.test.ts +120 -13
- package/tests/src/test.ts +0 -25
- package/tests/src/testGraphql.ts +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.d.ts +0 -2
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.d.ts.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.js.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.d.ts +0 -2
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.d.ts.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.js.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.d.ts +0 -2
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.d.ts.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.js.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.d.ts +0 -2
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.d.ts.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.js.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.d.ts +0 -2
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.d.ts.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.js.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.d.ts +0 -2
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.d.ts.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.js.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.d.ts +0 -2
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.d.ts.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.js.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.d.ts +0 -2
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.d.ts.map +0 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contember/engine-content-api",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0-alpha.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"typings": "dist/src/index.d.ts",
|
|
@@ -10,21 +10,21 @@
|
|
|
10
10
|
"test": "vitest --no-threads"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@contember/database": "^1.
|
|
14
|
-
"@contember/dic": "^1.
|
|
15
|
-
"@contember/logger": "^1.
|
|
16
|
-
"@contember/graphql-utils": "^1.
|
|
17
|
-
"@contember/schema": "^1.
|
|
18
|
-
"@contember/schema-definition": "^1.
|
|
19
|
-
"@contember/schema-utils": "^1.
|
|
13
|
+
"@contember/database": "^1.3.0-alpha.1",
|
|
14
|
+
"@contember/dic": "^1.3.0-alpha.1",
|
|
15
|
+
"@contember/logger": "^1.3.0-alpha.1",
|
|
16
|
+
"@contember/graphql-utils": "^1.3.0-alpha.1",
|
|
17
|
+
"@contember/schema": "^1.3.0-alpha.1",
|
|
18
|
+
"@contember/schema-definition": "^1.3.0-alpha.1",
|
|
19
|
+
"@contember/schema-utils": "^1.3.0-alpha.1",
|
|
20
20
|
"@graphql-tools/schema": "^8.3.5",
|
|
21
21
|
"fast-deep-equal": "^3.1.3",
|
|
22
22
|
"graphql-tag": "^2.12.5"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@contember/database-tester": "^1.
|
|
26
|
-
"@contember/engine-api-tester": "^1.
|
|
27
|
-
"@contember/schema-definition": "^1.
|
|
25
|
+
"@contember/database-tester": "^1.3.0-alpha.1",
|
|
26
|
+
"@contember/engine-api-tester": "^1.3.0-alpha.1",
|
|
27
|
+
"@contember/schema-definition": "^1.3.0-alpha.1",
|
|
28
28
|
"@graphql-codegen/cli": "^2.6.2",
|
|
29
29
|
"@graphql-codegen/typescript": "^2.5.1",
|
|
30
30
|
"@graphql-codegen/typescript-operations": "^2.4.2",
|
|
@@ -17,29 +17,35 @@ export class CreateInputPreValidationProcessor implements CreateInputProcessor<R
|
|
|
17
17
|
manyHasManyInverse: CreateInputProcessor.HasManyRelationProcessor<Model.ManyHasManyInverseContext, Result> = {
|
|
18
18
|
connect: NoResult,
|
|
19
19
|
create: context => this.validateCreate(context),
|
|
20
|
+
connectOrCreate: context => this.validateCreate({ ...context, input: context.input.create }),
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
manyHasManyOwning: CreateInputProcessor.HasManyRelationProcessor<Model.ManyHasManyOwningContext, Result> = {
|
|
23
24
|
connect: NoResult,
|
|
24
25
|
create: context => this.validateCreate(context),
|
|
26
|
+
connectOrCreate: context => this.validateCreate({ ...context, input: context.input.create }),
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
manyHasOne: CreateInputProcessor.HasOneRelationProcessor<Model.ManyHasOneContext, Result> = {
|
|
28
30
|
connect: NoResult,
|
|
29
31
|
create: context => this.validateCreate(context),
|
|
32
|
+
connectOrCreate: context => this.validateCreate({ ...context, input: context.input.create }),
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
oneHasMany: CreateInputProcessor.HasManyRelationProcessor<Model.OneHasManyContext, Result> = {
|
|
33
36
|
connect: NoResult,
|
|
34
37
|
create: context => this.validateCreate(context),
|
|
38
|
+
connectOrCreate: context => this.validateCreate({ ...context, input: context.input.create }),
|
|
35
39
|
}
|
|
36
40
|
oneHasOneInverse: CreateInputProcessor.HasOneRelationProcessor<Model.OneHasOneInverseContext, Result> = {
|
|
37
41
|
connect: NoResult,
|
|
38
42
|
create: context => this.validateCreate(context),
|
|
43
|
+
connectOrCreate: context => this.validateCreate({ ...context, input: context.input.create }),
|
|
39
44
|
}
|
|
40
45
|
oneHasOneOwning: CreateInputProcessor.HasOneRelationProcessor<Model.OneHasOneOwningContext, Result> = {
|
|
41
46
|
connect: NoResult,
|
|
42
47
|
create: context => this.validateCreate(context),
|
|
48
|
+
connectOrCreate: context => this.validateCreate({ ...context, input: context.input.create }),
|
|
43
49
|
}
|
|
44
50
|
|
|
45
51
|
async validateCreate(context: {
|
|
@@ -23,6 +23,7 @@ export class UpdateInputPreValidationProcessor implements UpdateInputProcessor<R
|
|
|
23
23
|
create: ctx => this.processCreate(ctx),
|
|
24
24
|
update: ctx => this.processUpdate({ ...ctx, input: ctx.input.data }),
|
|
25
25
|
upsert: ctx => this.processUpsert(ctx),
|
|
26
|
+
connectOrCreate: ctx => this.processCreate({ ...ctx, input: ctx.input.create }),
|
|
26
27
|
connect: NoResult,
|
|
27
28
|
disconnect: NoResult,
|
|
28
29
|
['delete']: NoResult,
|
|
@@ -31,6 +32,7 @@ export class UpdateInputPreValidationProcessor implements UpdateInputProcessor<R
|
|
|
31
32
|
create: ctx => this.processCreate(ctx),
|
|
32
33
|
update: ctx => this.processUpdate({ ...ctx, input: ctx.input.data }),
|
|
33
34
|
upsert: ctx => this.processUpsert(ctx),
|
|
35
|
+
connectOrCreate: ctx => this.processCreate({ ...ctx, input: ctx.input.create }),
|
|
34
36
|
connect: NoResult,
|
|
35
37
|
disconnect: NoResult,
|
|
36
38
|
['delete']: NoResult,
|
|
@@ -39,6 +41,7 @@ export class UpdateInputPreValidationProcessor implements UpdateInputProcessor<R
|
|
|
39
41
|
create: ctx => this.processCreate(ctx),
|
|
40
42
|
update: ctx => this.processUpdate(ctx),
|
|
41
43
|
upsert: ctx => this.processUpsert(ctx),
|
|
44
|
+
connectOrCreate: ctx => this.processCreate({ ...ctx, input: ctx.input.create }),
|
|
42
45
|
connect: NoResult,
|
|
43
46
|
disconnect: NoResult,
|
|
44
47
|
['delete']: NoResult,
|
|
@@ -47,6 +50,7 @@ export class UpdateInputPreValidationProcessor implements UpdateInputProcessor<R
|
|
|
47
50
|
create: ctx => this.processCreate(ctx),
|
|
48
51
|
update: ctx => this.processUpdate({ ...ctx, input: ctx.input.data }),
|
|
49
52
|
upsert: ctx => this.processUpsert(ctx),
|
|
53
|
+
connectOrCreate: ctx => this.processCreate({ ...ctx, input: ctx.input.create }),
|
|
50
54
|
connect: NoResult,
|
|
51
55
|
disconnect: NoResult,
|
|
52
56
|
['delete']: NoResult,
|
|
@@ -55,6 +59,7 @@ export class UpdateInputPreValidationProcessor implements UpdateInputProcessor<R
|
|
|
55
59
|
create: ctx => this.processCreate(ctx),
|
|
56
60
|
update: ctx => this.processUpdate(ctx),
|
|
57
61
|
upsert: ctx => this.processUpsert(ctx),
|
|
62
|
+
connectOrCreate: ctx => this.processCreate({ ...ctx, input: ctx.input.create }),
|
|
58
63
|
connect: NoResult,
|
|
59
64
|
disconnect: NoResult,
|
|
60
65
|
['delete']: NoResult,
|
|
@@ -64,6 +69,7 @@ export class UpdateInputPreValidationProcessor implements UpdateInputProcessor<R
|
|
|
64
69
|
create: ctx => this.processCreate(ctx),
|
|
65
70
|
update: ctx => this.processUpdate(ctx),
|
|
66
71
|
upsert: ctx => this.processUpsert(ctx),
|
|
72
|
+
connectOrCreate: ctx => this.processCreate({ ...ctx, input: ctx.input.create }),
|
|
67
73
|
connect: NoResult,
|
|
68
74
|
disconnect: NoResult,
|
|
69
75
|
['delete']: NoResult,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Input, Model } from '@contember/schema'
|
|
2
2
|
|
|
3
3
|
interface CreateInputProcessor<Result = void> {
|
|
4
|
-
column(context:
|
|
4
|
+
column(context: Model.ColumnContext & { input: Input.ColumnValue | undefined }): Promise<Result>
|
|
5
5
|
|
|
6
6
|
manyHasManyInverse: CreateInputProcessor.HasManyRelationProcessor<Model.ManyHasManyInverseContext, Result>
|
|
7
7
|
manyHasManyOwning: CreateInputProcessor.HasManyRelationProcessor<Model.ManyHasManyOwningContext, Result>
|
|
@@ -14,21 +14,18 @@ interface CreateInputProcessor<Result = void> {
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
namespace CreateInputProcessor {
|
|
17
|
-
export type ContextWithInput<Context, Input> = Context & { input: Input }
|
|
18
17
|
|
|
19
18
|
export interface HasOneRelationProcessor<Context, Result> {
|
|
20
|
-
nothing?: (context:
|
|
21
|
-
connect: (context:
|
|
22
|
-
create: (context:
|
|
19
|
+
nothing?: (context: Context & { input: undefined }) => Promise<Result>
|
|
20
|
+
connect: (context: Context & { input: Input.UniqueWhere }) => Promise<Result>
|
|
21
|
+
create: (context: Context & { input: Input.CreateDataInput }) => Promise<Result>
|
|
22
|
+
connectOrCreate: (context: Context & { input: Input.ConnectOrCreateInput }) => Promise<Result>
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
export interface HasManyRelationProcessor<Context, Result> {
|
|
26
|
-
connect: (
|
|
27
|
-
|
|
28
|
-
) => Promise<Result>
|
|
29
|
-
create: (
|
|
30
|
-
context: ContextWithInput<Context, Input.CreateDataInput> & { index: number; alias?: string },
|
|
31
|
-
) => Promise<Result>
|
|
26
|
+
connect: (context: Context & { input: Input.UniqueWhere } & { index: number; alias?: string }) => Promise<Result>
|
|
27
|
+
create: (context: Context & { input: Input.CreateDataInput } & { index: number; alias?: string }) => Promise<Result>
|
|
28
|
+
connectOrCreate: (context: Context & { input: Input.ConnectOrCreateInput } & { index: number; alias?: string }) => Promise<Result>
|
|
32
29
|
}
|
|
33
30
|
}
|
|
34
31
|
|
|
@@ -89,6 +89,9 @@ export class CreateInputVisitor<Result> implements
|
|
|
89
89
|
if (isIt<Input.CreateRelationInput>(input, 'create')) {
|
|
90
90
|
return processor.create({ ...context, input: input.create })
|
|
91
91
|
}
|
|
92
|
+
if (isIt<Input.ConnectOrCreateRelationInput>(input, 'connectOrCreate')) {
|
|
93
|
+
return processor.connectOrCreate({ ...context, input: input.connectOrCreate })
|
|
94
|
+
}
|
|
92
95
|
throw new ImplementationException()
|
|
93
96
|
}
|
|
94
97
|
|
|
@@ -113,6 +116,9 @@ export class CreateInputVisitor<Result> implements
|
|
|
113
116
|
if (isIt<Input.CreateRelationInput>(element, 'create')) {
|
|
114
117
|
result = processor.create({ ...context, input: element.create, index: i++, alias })
|
|
115
118
|
}
|
|
119
|
+
if (isIt<Input.ConnectOrCreateRelationInput>(element, 'connectOrCreate')) {
|
|
120
|
+
result = processor.connectOrCreate({ ...context, input: element.connectOrCreate, index: i++, alias })
|
|
121
|
+
}
|
|
116
122
|
if (result !== undefined) {
|
|
117
123
|
results.push(await result)
|
|
118
124
|
}
|
|
@@ -122,9 +128,12 @@ export class CreateInputVisitor<Result> implements
|
|
|
122
128
|
|
|
123
129
|
private verifyOperations(input: object) {
|
|
124
130
|
const keys = Object.keys(input).filter(it => it !== 'alias')
|
|
125
|
-
|
|
131
|
+
const ops = Object.values(Input.CreateRelationOperation) as string[]
|
|
132
|
+
if (keys.length !== 1 || !ops.includes(keys[0])) {
|
|
126
133
|
const found = keys.length === 0 ? 'none' : keys.join(', ')
|
|
127
|
-
throw new UserError(
|
|
134
|
+
throw new UserError(
|
|
135
|
+
`Expected exactly one of: ${ops.join(', ')}. ${found} found.`,
|
|
136
|
+
)
|
|
128
137
|
}
|
|
129
138
|
}
|
|
130
139
|
}
|
|
@@ -2,13 +2,17 @@ import { Input, Model, Writable } from '@contember/schema'
|
|
|
2
2
|
import { getTargetEntity } from '@contember/schema-utils'
|
|
3
3
|
import { UserError } from '../exception'
|
|
4
4
|
import { getFieldsForUniqueWhere } from '../utils'
|
|
5
|
+
import { CheckedPrimary } from '../mapper/CheckedPrimary'
|
|
5
6
|
|
|
6
7
|
type ExtendedUniqueWhere = Input.UniqueWhere<Input.PrimaryValue[]>
|
|
7
8
|
|
|
8
9
|
export class UniqueWhereExpander {
|
|
9
10
|
constructor(private readonly schema: Model.Schema) {}
|
|
10
11
|
|
|
11
|
-
expand(entity: Model.Entity, where: ExtendedUniqueWhere, path: string[] = []): Input.Where {
|
|
12
|
+
expand(entity: Model.Entity, where: ExtendedUniqueWhere | CheckedPrimary, path: string[] = []): Input.Where {
|
|
13
|
+
if (where instanceof CheckedPrimary) {
|
|
14
|
+
return { [entity.primary]: { eq: where.primaryValue } }
|
|
15
|
+
}
|
|
12
16
|
const isFilled = (field: string) => where[field] !== undefined && where[field] !== null
|
|
13
17
|
|
|
14
18
|
const isUnique = (() => {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Input, Model } from '@contember/schema'
|
|
2
2
|
|
|
3
|
+
|
|
3
4
|
interface UpdateInputProcessor<Result = void> {
|
|
4
|
-
column(context:
|
|
5
|
+
column(context: Model.ColumnContext & { input: Input.ColumnValue | undefined }): Promise<Result>
|
|
5
6
|
|
|
6
7
|
manyHasManyInverse: UpdateInputProcessor.HasManyRelationInputProcessor<Model.ManyHasManyInverseContext, Result>
|
|
7
8
|
|
|
@@ -17,7 +18,6 @@ interface UpdateInputProcessor<Result = void> {
|
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
namespace UpdateInputProcessor {
|
|
20
|
-
export type ContextWithInput<Context, Input> = Context & { input: Input }
|
|
21
21
|
export type UpsertInput = { update: Input.UpdateDataInput; create: Input.CreateDataInput }
|
|
22
22
|
export type UpdateManyInput = { where: Input.UniqueWhere; data: Input.UpdateDataInput }
|
|
23
23
|
export type UpsertManyInput = {
|
|
@@ -27,35 +27,35 @@ namespace UpdateInputProcessor {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export interface HasOneRelationInputProcessor<Context, Result> {
|
|
30
|
-
connect(context:
|
|
30
|
+
connect(context: Context & { input: Input.UniqueWhere }): Promise<Result>
|
|
31
|
+
|
|
32
|
+
create(context: Context & { input: Input.CreateDataInput }): Promise<Result>
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
connectOrCreate(context: Context & { input: Input.ConnectOrCreateInput }): Promise<Result>
|
|
33
35
|
|
|
34
|
-
update(context:
|
|
36
|
+
update(context: Context & { input: Input.UpdateDataInput }): Promise<Result>
|
|
35
37
|
|
|
36
|
-
upsert(context:
|
|
38
|
+
upsert(context: Context & { input: UpdateInputProcessor.UpsertInput }): Promise<Result>
|
|
37
39
|
|
|
38
|
-
disconnect(context:
|
|
40
|
+
disconnect(context: Context & { input: undefined }): Promise<Result>
|
|
39
41
|
|
|
40
|
-
delete(context:
|
|
42
|
+
delete(context: Context & { input: undefined }): Promise<Result>
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
export interface HasManyRelationInputProcessor<Context, Result> {
|
|
44
|
-
connect(context:
|
|
46
|
+
connect(context: Context & { input: Input.UniqueWhere; index: number; alias?: string }): Promise<Result>
|
|
47
|
+
|
|
48
|
+
create(context: Context & { input: Input.CreateDataInput; index: number; alias?: string }): Promise<Result>
|
|
45
49
|
|
|
46
|
-
|
|
47
|
-
context: ContextWithInput<Context, Input.CreateDataInput> & { index: number; alias?: string },
|
|
48
|
-
): Promise<Result>
|
|
50
|
+
connectOrCreate(context: Context & { input: Input.ConnectOrCreateInput; index: number; alias?: string }): Promise<Result>
|
|
49
51
|
|
|
50
|
-
update(context:
|
|
52
|
+
update(context: Context & { input: UpdateInputProcessor.UpdateManyInput; index: number; alias?: string }): Promise<Result>
|
|
51
53
|
|
|
52
|
-
upsert(context:
|
|
54
|
+
upsert(context: Context & { input: UpdateInputProcessor.UpsertManyInput; index: number; alias?: string }): Promise<Result>
|
|
53
55
|
|
|
54
|
-
disconnect(
|
|
55
|
-
context: ContextWithInput<Context, Input.UniqueWhere> & { index: number; alias?: string },
|
|
56
|
-
): Promise<Result>
|
|
56
|
+
disconnect(context: Context & { input: Input.UniqueWhere; index: number; alias?: string }): Promise<Result>
|
|
57
57
|
|
|
58
|
-
delete(context:
|
|
58
|
+
delete(context: Context & { input: Input.UniqueWhere; index: number; alias?: string }): Promise<Result>
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
|
|
@@ -85,6 +85,9 @@ export class UpdateInputVisitor<Result> implements
|
|
|
85
85
|
if (isIt<Input.CreateRelationInput>(input, 'create')) {
|
|
86
86
|
return processor.create({ ...context, input: input.create })
|
|
87
87
|
}
|
|
88
|
+
if (isIt<Input.ConnectOrCreateRelationInput>(input, 'connectOrCreate')) {
|
|
89
|
+
return processor.connectOrCreate({ ...context, input: input.connectOrCreate })
|
|
90
|
+
}
|
|
88
91
|
if (isIt<Input.DeleteRelationInput>(input, 'delete')) {
|
|
89
92
|
return processor.delete({ ...context, input: undefined })
|
|
90
93
|
}
|
|
@@ -153,10 +156,11 @@ export class UpdateInputVisitor<Result> implements
|
|
|
153
156
|
|
|
154
157
|
private verifyOperations(input: object) {
|
|
155
158
|
const keys = Object.keys(input).filter(it => it !== 'alias')
|
|
156
|
-
|
|
159
|
+
const ops = Object.values(Input.UpdateRelationOperation) as string[]
|
|
160
|
+
if (keys.length !== 1 || !ops.includes(keys[0])) {
|
|
157
161
|
const found = keys.length === 0 ? 'none' : keys.join(', ')
|
|
158
162
|
throw new UserError(
|
|
159
|
-
`Expected exactly one of:
|
|
163
|
+
`Expected exactly one of: ${ops.join(', ')}. ${found} found.`,
|
|
160
164
|
)
|
|
161
165
|
}
|
|
162
166
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Value } from '@contember/schema'
|
|
2
|
+
|
|
3
|
+
export interface DataManipulationBuilder {
|
|
4
|
+
addFieldValue(
|
|
5
|
+
fieldName: string,
|
|
6
|
+
value: Value.GenericValueLike<Value.AtomicValue<AbortDataManipulation | undefined>>,
|
|
7
|
+
): Promise<Value.AtomicValue<AbortDataManipulation | undefined>>
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
export const AbortDataManipulation = Symbol('AbortDataManipulation')
|
|
12
|
+
export type AbortDataManipulation = typeof AbortDataManipulation
|
package/src/mapper/Mapper.ts
CHANGED
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
import { Input, Model } from '@contember/schema'
|
|
2
|
-
import { getColumnName } from '@contember/schema-utils'
|
|
3
|
-
import {
|
|
4
|
-
|
|
2
|
+
import { acceptFieldVisitor, getColumnName } from '@contember/schema-utils'
|
|
3
|
+
import {
|
|
4
|
+
OrderByHelper,
|
|
5
|
+
PathFactory,
|
|
6
|
+
SelectBuilderFactory,
|
|
7
|
+
SelectGroupedObjects,
|
|
8
|
+
SelectHydrator,
|
|
9
|
+
SelectIndexedResultObjects,
|
|
10
|
+
SelectResultObject,
|
|
11
|
+
WhereBuilder,
|
|
12
|
+
} from './select'
|
|
5
13
|
import * as database from '@contember/database'
|
|
6
|
-
import { Client, SelectBuilder } from '@contember/database'
|
|
7
|
-
import { SelectBuilderFactory } from './select'
|
|
14
|
+
import { Client, ConstraintHelper, SelectBuilder } from '@contember/database'
|
|
8
15
|
import { PredicatesInjector } from '../acl'
|
|
9
|
-
import { WhereBuilder } from './select'
|
|
10
16
|
import { JunctionTableManager } from './JunctionTableManager'
|
|
11
17
|
import { DeletedEntitiesStorage, DeleteExecutor } from './delete'
|
|
12
18
|
import { MutationEntryNotFoundError, MutationResultList } from './Result'
|
|
13
|
-
import { Updater } from './update'
|
|
14
|
-
import { Inserter } from './insert'
|
|
19
|
+
import { UpdateBuilder, Updater } from './update'
|
|
20
|
+
import { InsertBuilder, Inserter } from './insert'
|
|
15
21
|
import { tryMutation } from './ErrorUtils'
|
|
16
|
-
import {
|
|
17
|
-
import { ObjectNode, UniqueWhereExpander } from '../inputProcessing'
|
|
18
|
-
import { UpdateBuilder } from './update'
|
|
22
|
+
import { ObjectNode, UniqueWhereExpander } from '../inputProcessing'
|
|
19
23
|
import { Mutex } from '../utils'
|
|
20
24
|
import { CheckedPrimary } from './CheckedPrimary'
|
|
21
|
-
import { ConstraintHelper } from '@contember/database'
|
|
22
25
|
import { ImplementationException } from '../exception'
|
|
23
26
|
|
|
24
27
|
export class Mapper {
|
|
@@ -43,7 +46,7 @@ export class Mapper {
|
|
|
43
46
|
this.constraintHelper = new ConstraintHelper(db)
|
|
44
47
|
}
|
|
45
48
|
|
|
46
|
-
public async selectField(entity: Model.Entity, where: Input.UniqueWhere, fieldName: string) {
|
|
49
|
+
public async selectField(entity: Model.Entity, where: Input.UniqueWhere | CheckedPrimary, fieldName: string) {
|
|
47
50
|
const columnName = getColumnName(this.schema, entity, fieldName)
|
|
48
51
|
|
|
49
52
|
const qb = SelectBuilder.create() //
|
|
@@ -163,15 +166,20 @@ export class Mapper {
|
|
|
163
166
|
return Object.fromEntries(result)
|
|
164
167
|
}
|
|
165
168
|
|
|
166
|
-
public async insert(
|
|
169
|
+
public async insert(
|
|
170
|
+
entity: Model.Entity,
|
|
171
|
+
data: Input.CreateDataInput,
|
|
172
|
+
builderCb: (builder: InsertBuilder) => void = () => {},
|
|
173
|
+
): Promise<MutationResultList> {
|
|
167
174
|
if (entity.view) {
|
|
168
175
|
throw new ImplementationException()
|
|
169
176
|
}
|
|
177
|
+
const pushId = (id: string) => {
|
|
178
|
+
const where = { [entity.primary]: id }
|
|
179
|
+
this.primaryKeyCache[this.hashWhere(entity.name, where)] = id
|
|
180
|
+
}
|
|
170
181
|
return tryMutation(this.schema, () =>
|
|
171
|
-
this.inserter.insert(this, entity, data,
|
|
172
|
-
const where = { [entity.primary]: id }
|
|
173
|
-
this.primaryKeyCache[this.hashWhere(entity.name, where)] = id
|
|
174
|
-
}),
|
|
182
|
+
this.inserter.insert(this, entity, data, pushId, builderCb),
|
|
175
183
|
)
|
|
176
184
|
}
|
|
177
185
|
|
|
@@ -195,19 +203,20 @@ export class Mapper {
|
|
|
195
203
|
|
|
196
204
|
public async updateInternal(
|
|
197
205
|
entity: Model.Entity,
|
|
198
|
-
by: Input.UniqueWhere,
|
|
199
|
-
predicateFields: string[],
|
|
206
|
+
by: Input.UniqueWhere | CheckedPrimary,
|
|
200
207
|
builderCb: (builder: UpdateBuilder) => void,
|
|
201
208
|
): Promise<MutationResultList> {
|
|
209
|
+
if (entity.view) {
|
|
210
|
+
throw new ImplementationException()
|
|
211
|
+
}
|
|
202
212
|
return tryMutation(this.schema, async () => {
|
|
203
213
|
const primaryValue = await this.getPrimaryValue(entity, by)
|
|
204
214
|
if (primaryValue === undefined) {
|
|
205
|
-
return [new MutationEntryNotFoundError([], by)]
|
|
215
|
+
return [new MutationEntryNotFoundError([], by as Input.UniqueWhere)]
|
|
206
216
|
}
|
|
207
|
-
return await this.updater.updateCb(this, entity, primaryValue,
|
|
217
|
+
return await this.updater.updateCb(this, entity, primaryValue, builderCb)
|
|
208
218
|
})
|
|
209
219
|
}
|
|
210
|
-
|
|
211
220
|
public async upsert(
|
|
212
221
|
entity: Model.Entity,
|
|
213
222
|
by: Input.UniqueWhere,
|
|
@@ -221,10 +230,11 @@ export class Mapper {
|
|
|
221
230
|
return tryMutation(this.schema, async () => {
|
|
222
231
|
const primaryValue = await this.getPrimaryValue(entity, by)
|
|
223
232
|
if (primaryValue === undefined) {
|
|
224
|
-
|
|
233
|
+
const pushIdCallback = (id: string) => {
|
|
225
234
|
const where = { [entity.primary]: id }
|
|
226
235
|
this.primaryKeyCache[this.hashWhere(entity.name, where)] = id
|
|
227
|
-
}
|
|
236
|
+
}
|
|
237
|
+
return await this.inserter.insert(this, entity, create, pushIdCallback, () => {})
|
|
228
238
|
}
|
|
229
239
|
return await this.updater.update(this, entity, primaryValue, update, filter)
|
|
230
240
|
})
|
|
@@ -242,33 +252,51 @@ export class Mapper {
|
|
|
242
252
|
}
|
|
243
253
|
|
|
244
254
|
public async connectJunction(
|
|
245
|
-
|
|
246
|
-
relation: Model.ManyHasManyOwningRelation,
|
|
247
|
-
|
|
248
|
-
|
|
255
|
+
entity: Model.Entity,
|
|
256
|
+
relation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,
|
|
257
|
+
thisPrimary: Input.PrimaryValue,
|
|
258
|
+
otherPrimary: Input.PrimaryValue,
|
|
249
259
|
): Promise<MutationResultList> {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
260
|
+
const err = () => {
|
|
261
|
+
throw new ImplementationException()
|
|
262
|
+
}
|
|
263
|
+
return await acceptFieldVisitor(this.schema, entity, relation, {
|
|
264
|
+
visitManyHasManyOwning: ({ entity, relation }) => {
|
|
265
|
+
return this.junctionTableManager.connectJunction(this.db, entity, relation, thisPrimary, otherPrimary)
|
|
266
|
+
},
|
|
267
|
+
visitManyHasManyInverse: ({ targetEntity, targetRelation }) => {
|
|
268
|
+
return this.junctionTableManager.connectJunction(this.db, targetEntity, targetRelation, otherPrimary, thisPrimary)
|
|
269
|
+
},
|
|
270
|
+
visitColumn: err,
|
|
271
|
+
visitOneHasMany: err,
|
|
272
|
+
visitOneHasOneInverse: err,
|
|
273
|
+
visitOneHasOneOwning: err,
|
|
274
|
+
visitManyHasOne: err,
|
|
275
|
+
})
|
|
257
276
|
}
|
|
258
277
|
|
|
259
278
|
public async disconnectJunction(
|
|
260
|
-
|
|
261
|
-
relation: Model.ManyHasManyOwningRelation,
|
|
262
|
-
|
|
263
|
-
|
|
279
|
+
entity: Model.Entity,
|
|
280
|
+
relation: Model.ManyHasManyOwningRelation | Model.ManyHasManyInverseRelation,
|
|
281
|
+
thisPrimary: Input.PrimaryValue,
|
|
282
|
+
otherPrimary: Input.PrimaryValue,
|
|
264
283
|
): Promise<MutationResultList> {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
284
|
+
const err = () => {
|
|
285
|
+
throw new ImplementationException()
|
|
286
|
+
}
|
|
287
|
+
return await acceptFieldVisitor(this.schema, entity, relation, {
|
|
288
|
+
visitManyHasManyOwning: ({ entity, relation }) => {
|
|
289
|
+
return this.junctionTableManager.disconnectJunction(this.db, entity, relation, thisPrimary, otherPrimary)
|
|
290
|
+
},
|
|
291
|
+
visitManyHasManyInverse: ({ targetEntity, targetRelation }) => {
|
|
292
|
+
return this.junctionTableManager.disconnectJunction(this.db, targetEntity, targetRelation, otherPrimary, thisPrimary)
|
|
293
|
+
},
|
|
294
|
+
visitColumn: err,
|
|
295
|
+
visitOneHasMany: err,
|
|
296
|
+
visitOneHasOneInverse: err,
|
|
297
|
+
visitOneHasOneOwning: err,
|
|
298
|
+
visitManyHasOne: err,
|
|
299
|
+
})
|
|
272
300
|
}
|
|
273
301
|
|
|
274
302
|
public async getPrimaryValue(
|
|
@@ -102,10 +102,15 @@ export const createMapperContainer = ({ permissions, schema, identityVariables,
|
|
|
102
102
|
)
|
|
103
103
|
}
|
|
104
104
|
})())
|
|
105
|
-
.addService(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
105
|
+
.addService(
|
|
106
|
+
'insertBuilderFactory',
|
|
107
|
+
({ whereBuilder, pathFactory, predicateFactory }) =>
|
|
108
|
+
new InsertBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory),
|
|
109
|
+
)
|
|
110
|
+
.addService(
|
|
111
|
+
'updateBuilderFactory',
|
|
112
|
+
({ whereBuilder, pathFactory, predicateFactory }) =>
|
|
113
|
+
new UpdateBuilderFactory(schema.model, whereBuilder, pathFactory, predicateFactory))
|
|
109
114
|
.addService('connectJunctionHandler', () =>
|
|
110
115
|
new JunctionConnectHandler())
|
|
111
116
|
.addService('disconnectJunctionHandler', ({}) =>
|
|
@@ -116,8 +121,7 @@ export const createMapperContainer = ({ permissions, schema, identityVariables,
|
|
|
116
121
|
new DeleteExecutor(schema.model, predicateFactory, whereBuilder, updateBuilderFactory, pathFactory))
|
|
117
122
|
.addService('updater', ({ predicateFactory, updateBuilderFactory }) =>
|
|
118
123
|
new Updater(schema.model, predicateFactory, updateBuilderFactory))
|
|
119
|
-
.addService('inserter', ({
|
|
120
|
-
new Inserter(schema.model, predicateFactory, insertBuilderFactory, providers))
|
|
124
|
+
.addService('inserter', ({ insertBuilderFactory, providers }) => new Inserter(schema.model, insertBuilderFactory, providers))
|
|
121
125
|
.addService('mapperFactory', ({ predicatesInjector, selectBuilderFactory, uniqueWhereExpander, whereBuilder, junctionTableManager, deleteExecutor, updater, inserter, pathFactory }) => {
|
|
122
126
|
return (db: Client) =>
|
|
123
127
|
new Mapper(
|
package/src/mapper/Result.ts
CHANGED
|
@@ -170,7 +170,7 @@ export class MutationEntryNotFoundError implements MutationResultInterface {
|
|
|
170
170
|
hints: MutationResultHint[] = []
|
|
171
171
|
message: string
|
|
172
172
|
|
|
173
|
-
constructor(public readonly paths: Path[], public readonly where: Input.UniqueWhere) {
|
|
173
|
+
constructor(public readonly paths: Path[], public readonly where: Input.UniqueWhere | Input.Where) {
|
|
174
174
|
this.message = 'for input ' + JSON.stringify(where)
|
|
175
175
|
}
|
|
176
176
|
}
|