@contember/engine-content-api 2.0.0-alpha.36 → 2.0.0-alpha.38
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/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +31 -6
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +31 -6
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
- package/dist/development/src/input-validation/ColumnValueResolver.cjs.map +1 -1
- package/dist/development/src/input-validation/ColumnValueResolver.js.map +1 -1
- package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
- package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
- package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
- package/dist/development/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
- package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
- package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
- package/dist/development/src/inputProcessing/CreateInputVisitor.cjs +6 -7
- package/dist/development/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
- package/dist/development/src/inputProcessing/CreateInputVisitor.js +6 -7
- package/dist/development/src/inputProcessing/CreateInputVisitor.js.map +1 -1
- package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs +14 -15
- package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
- package/dist/development/src/inputProcessing/UpdateInputVisitor.js +14 -15
- package/dist/development/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
- package/dist/development/src/mapper/ColumnValue.cjs +8 -18
- package/dist/development/src/mapper/ColumnValue.cjs.map +1 -1
- package/dist/development/src/mapper/ColumnValue.js +8 -18
- package/dist/development/src/mapper/ColumnValue.js.map +1 -1
- package/dist/development/src/mapper/EventManager.cjs +1 -1
- package/dist/development/src/mapper/EventManager.cjs.map +1 -1
- package/dist/development/src/mapper/EventManager.js +1 -1
- package/dist/development/src/mapper/EventManager.js.map +1 -1
- package/dist/development/src/mapper/Mapper.cjs +8 -28
- package/dist/development/src/mapper/Mapper.cjs.map +1 -1
- package/dist/development/src/mapper/Mapper.js +8 -28
- package/dist/development/src/mapper/Mapper.js.map +1 -1
- package/dist/development/src/mapper/Result.cjs.map +1 -1
- package/dist/development/src/mapper/Result.js.map +1 -1
- package/dist/development/src/mapper/delete/DeleteExecutor.cjs +4 -8
- package/dist/development/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
- package/dist/development/src/mapper/delete/DeleteExecutor.js +5 -9
- package/dist/development/src/mapper/delete/DeleteExecutor.js.map +1 -1
- package/dist/development/src/mapper/insert/InsertBuilder.cjs +12 -8
- package/dist/development/src/mapper/insert/InsertBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/insert/InsertBuilder.js +13 -9
- package/dist/development/src/mapper/insert/InsertBuilder.js.map +1 -1
- package/dist/development/src/mapper/insert/Inserter.cjs.map +1 -1
- package/dist/development/src/mapper/insert/Inserter.js.map +1 -1
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs +1 -3
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js +1 -3
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs +3 -5
- package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js +4 -6
- package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs +3 -5
- package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js +4 -6
- package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs +4 -3
- package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js +4 -3
- package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs +3 -5
- package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js +4 -6
- package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs +4 -6
- package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js +5 -7
- package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/UpdateBuilder.cjs +12 -5
- package/dist/development/src/mapper/update/UpdateBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/update/UpdateBuilder.js +13 -6
- package/dist/development/src/mapper/update/UpdateBuilder.js.map +1 -1
- package/dist/development/src/mapper/update/Updater.cjs.map +1 -1
- package/dist/development/src/mapper/update/Updater.js.map +1 -1
- package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs +11 -16
- package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js +12 -17
- package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs +6 -7
- package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js +7 -8
- package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs +5 -4
- package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js +5 -4
- package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs +11 -12
- package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js +12 -13
- package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs +8 -12
- package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js +9 -13
- package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +31 -6
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +31 -6
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
- package/dist/production/src/input-validation/ColumnValueResolver.cjs.map +1 -1
- package/dist/production/src/input-validation/ColumnValueResolver.js.map +1 -1
- package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
- package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
- package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
- package/dist/production/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
- package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
- package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
- package/dist/production/src/inputProcessing/CreateInputVisitor.cjs +6 -7
- package/dist/production/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
- package/dist/production/src/inputProcessing/CreateInputVisitor.js +6 -7
- package/dist/production/src/inputProcessing/CreateInputVisitor.js.map +1 -1
- package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs +14 -15
- package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
- package/dist/production/src/inputProcessing/UpdateInputVisitor.js +14 -15
- package/dist/production/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
- package/dist/production/src/mapper/ColumnValue.cjs +8 -18
- package/dist/production/src/mapper/ColumnValue.cjs.map +1 -1
- package/dist/production/src/mapper/ColumnValue.js +8 -18
- package/dist/production/src/mapper/ColumnValue.js.map +1 -1
- package/dist/production/src/mapper/EventManager.cjs +1 -1
- package/dist/production/src/mapper/EventManager.cjs.map +1 -1
- package/dist/production/src/mapper/EventManager.js +1 -1
- package/dist/production/src/mapper/EventManager.js.map +1 -1
- package/dist/production/src/mapper/Mapper.cjs +8 -28
- package/dist/production/src/mapper/Mapper.cjs.map +1 -1
- package/dist/production/src/mapper/Mapper.js +8 -28
- package/dist/production/src/mapper/Mapper.js.map +1 -1
- package/dist/production/src/mapper/Result.cjs.map +1 -1
- package/dist/production/src/mapper/Result.js.map +1 -1
- package/dist/production/src/mapper/delete/DeleteExecutor.cjs +4 -8
- package/dist/production/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
- package/dist/production/src/mapper/delete/DeleteExecutor.js +5 -9
- package/dist/production/src/mapper/delete/DeleteExecutor.js.map +1 -1
- package/dist/production/src/mapper/insert/InsertBuilder.cjs +12 -8
- package/dist/production/src/mapper/insert/InsertBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/insert/InsertBuilder.js +13 -9
- package/dist/production/src/mapper/insert/InsertBuilder.js.map +1 -1
- package/dist/production/src/mapper/insert/Inserter.cjs.map +1 -1
- package/dist/production/src/mapper/insert/Inserter.js.map +1 -1
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs +1 -3
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js +1 -3
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs +3 -5
- package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js +4 -6
- package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs +3 -5
- package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js +4 -6
- package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs +4 -3
- package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js +4 -3
- package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs +3 -5
- package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js +4 -6
- package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs +4 -6
- package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js +5 -7
- package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/UpdateBuilder.cjs +12 -5
- package/dist/production/src/mapper/update/UpdateBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/update/UpdateBuilder.js +13 -6
- package/dist/production/src/mapper/update/UpdateBuilder.js.map +1 -1
- package/dist/production/src/mapper/update/Updater.cjs.map +1 -1
- package/dist/production/src/mapper/update/Updater.js.map +1 -1
- package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs +11 -16
- package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js +12 -17
- package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs +6 -7
- package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js +7 -8
- package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs +5 -4
- package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js +5 -4
- package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs +11 -12
- package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js +12 -13
- package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs +8 -12
- package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js +9 -13
- package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.d.ts.map +1 -0
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts.map +1 -1
- package/dist/types/input-validation/ColumnValueResolver.d.ts +1 -1
- package/dist/types/input-validation/ColumnValueResolver.d.ts.map +1 -1
- package/dist/types/input-validation/ValidationDataSelector.d.ts +1 -1
- package/dist/types/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts +3 -3
- package/dist/types/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts.map +1 -1
- package/dist/types/input-validation/preValidation/InputPreValidator.d.ts +3 -3
- package/dist/types/input-validation/preValidation/InputPreValidator.d.ts.map +1 -1
- package/dist/types/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts +4 -4
- package/dist/types/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts.map +1 -1
- package/dist/types/inputProcessing/CreateInputProcessor.d.ts +8 -6
- package/dist/types/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
- package/dist/types/inputProcessing/CreateInputVisitor.d.ts +3 -2
- package/dist/types/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
- package/dist/types/inputProcessing/UpdateInputProcessor.d.ts +14 -12
- package/dist/types/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/inputProcessing/UpdateInputVisitor.d.ts +3 -2
- package/dist/types/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
- package/dist/types/mapper/ColumnValue.d.ts +4 -8
- package/dist/types/mapper/ColumnValue.d.ts.map +1 -1
- package/dist/types/mapper/EventManager.d.ts +9 -9
- package/dist/types/mapper/EventManager.d.ts.map +1 -1
- package/dist/types/mapper/Mapper.d.ts +6 -7
- package/dist/types/mapper/Mapper.d.ts.map +1 -1
- package/dist/types/mapper/Result.d.ts +5 -4
- package/dist/types/mapper/Result.d.ts.map +1 -1
- package/dist/types/mapper/delete/DeleteExecutor.d.ts.map +1 -1
- package/dist/types/mapper/insert/InsertBuilder.d.ts +3 -4
- package/dist/types/mapper/insert/InsertBuilder.d.ts.map +1 -1
- package/dist/types/mapper/insert/Inserter.d.ts +3 -2
- package/dist/types/mapper/insert/Inserter.d.ts.map +1 -1
- package/dist/types/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/types.d.ts +84 -1
- package/dist/types/mapper/types.d.ts.map +1 -1
- package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts +2 -1
- package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/UpdateBuilder.d.ts +3 -3
- package/dist/types/mapper/update/UpdateBuilder.d.ts.map +1 -1
- package/dist/types/mapper/update/Updater.d.ts +2 -1
- package/dist/types/mapper/update/Updater.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts +6 -4
- package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.d.ts +6 -4
- package/dist/types/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts +6 -4
- package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.ts +35 -2
- package/src/input-validation/ColumnValueResolver.ts +1 -1
- package/src/input-validation/preValidation/CreateInputPreValidationProcessor.ts +2 -2
- package/src/input-validation/preValidation/InputPreValidator.ts +7 -7
- package/src/input-validation/preValidation/UpdateInputPreValidationProcessor.ts +3 -3
- package/src/inputProcessing/CreateInputProcessor.ts +8 -6
- package/src/inputProcessing/CreateInputVisitor.ts +18 -19
- package/src/inputProcessing/UpdateInputProcessor.ts +13 -11
- package/src/inputProcessing/UpdateInputVisitor.ts +25 -24
- package/src/mapper/ColumnValue.ts +11 -25
- package/src/mapper/EventManager.ts +6 -6
- package/src/mapper/Mapper.ts +19 -37
- package/src/mapper/Result.ts +3 -2
- package/src/mapper/delete/DeleteExecutor.ts +4 -8
- package/src/mapper/insert/InsertBuilder.ts +20 -17
- package/src/mapper/insert/Inserter.ts +4 -3
- package/src/mapper/insert/SqlCreateInputProcessor.ts +1 -3
- package/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.ts +8 -8
- package/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.ts +8 -8
- package/src/mapper/insert/relations/OneHasManyCreateInputProcessor.ts +8 -6
- package/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.ts +8 -9
- package/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.ts +9 -9
- package/src/mapper/types.ts +115 -1
- package/src/mapper/update/SqlUpdateInputProcessor.ts +2 -1
- package/src/mapper/update/UpdateBuilder.ts +20 -12
- package/src/mapper/update/Updater.ts +3 -2
- package/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.ts +15 -19
- package/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.ts +11 -11
- package/src/mapper/update/relations/OneHasManyUpdateInputProcessor.ts +9 -7
- package/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.ts +18 -18
- package/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts +14 -17
- package/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.ts +37 -0
- package/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.ts +69 -0
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.ts +0 -5
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.ts +0 -5
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +9 -0
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.ts +0 -5
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.ts +0 -5
- package/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +5 -0
- package/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -0
- package/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +5 -0
- package/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +5 -0
- package/tests/cases/integration/graphQlSchema/schema-basic.gql +11 -0
- package/tests/cases/integration/graphQlSchema/schema-bug-66.gql +6 -0
- package/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +11 -0
- package/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +6 -0
- package/tests/cases/integration/graphQlSchema/schema-new-builder.gql +12 -0
- package/tests/cases/unit/inputPreValidator.test.ts +1 -1
- package/tests/src/testGraphql.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OneHasManyUpdateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasManyUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { MutationResultType } from '../../Result'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\n\ntype Context = Model.OneHasManyContext\n\nexport class OneHasManyUpdateInputProcessor implements UpdateInputProcessor.HasManyRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect(\n\t\t{ entity, targetEntity, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.update(targetEntity, input, {\n\t\t\t\t[targetRelation.name]: { connect:
|
|
1
|
+
{"version":3,"file":"OneHasManyUpdateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasManyUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { MutationResultType } from '../../Result'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { MapperInput } from '../../types'\n\ntype Context = Model.OneHasManyContext\n\nexport class OneHasManyUpdateInputProcessor implements UpdateInputProcessor.HasManyRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect(\n\t\t{ entity, targetEntity, targetRelation, input }: Context & { input: Input.UniqueWhere | CheckedPrimary },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.update(targetEntity, input, {\n\t\t\t\t[targetRelation.name]: { connect: new CheckedPrimary(primary) },\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async create(\n\t\t{ entity, targetEntity, targetRelation, input }: Context & { input: MapperInput.CreateDataInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.insert(targetEntity, {\n\t\t\t\t...input,\n\t\t\t\t[targetRelation.name]: { connect: new CheckedPrimary(primary) },\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async connectOrCreate(\n\t\t{ entity, targetRelation, targetEntity, input: { connect, create } }: Context & { input: MapperInput.ConnectOrCreateInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst connectData = {\n\t\t\t\t[targetRelation.name]: {\n\t\t\t\t\tconnect: new CheckedPrimary(primary),\n\t\t\t\t},\n\t\t\t}\n\t\t\treturn await this.mapper.upsert(targetEntity, connect, connectData, {\n\t\t\t\t...create,\n\t\t\t\t...connectData,\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async update(\n\t\t{ entity, targetEntity, targetRelation, input: { data, where } }: Context & { input: UpdateInputProcessor.UpdateManyInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ ...where, [targetRelation.name]: { [entity.primary]: primary } },\n\t\t\t\t{\n\t\t\t\t\t...data,\n\t\t\t\t\t// [targetRelation.name]: {connect: thisPrimary}\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic async upsert(\n\t\t{ entity, targetEntity, targetRelation, input: { create, update, where } }: Context & { input: UpdateInputProcessor.UpsertManyInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst result = await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ ...where, [targetRelation.name]: { [entity.primary]: primary } },\n\t\t\t\t{\n\t\t\t\t\t...update,\n\t\t\t\t// [targetRelation.name]: {connect: thisPrimary}\n\t\t\t\t},\n\t\t\t)\n\t\t\tif (result[0].result === MutationResultType.notFoundError) {\n\t\t\t\treturn await this.mapper.insert(targetEntity, {\n\t\t\t\t\t...create,\n\t\t\t\t\t[targetRelation.name]: { connect: new CheckedPrimary(primary) },\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t}\n\n\tpublic async disconnect(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ ...input, [targetRelation.name]: { [entity.primary]: primary } },\n\t\t\t\t{ [targetRelation.name]: { disconnect: true } },\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic async delete(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.delete(targetEntity, {\n\t\t\t\t...input,\n\t\t\t\t[targetRelation.name]: { [entity.primary]: primary },\n\t\t\t})\n\t\t}\n\t}\n}\n"],"names":["CheckedPrimary","MutationResultType"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MutationResultType } from "../../Result.js";
|
|
2
|
+
import { CheckedPrimary } from "../../CheckedPrimary.js";
|
|
2
3
|
class OneHasManyUpdateInputProcessor {
|
|
3
4
|
constructor(mapper) {
|
|
4
5
|
this.mapper = mapper;
|
|
@@ -6,7 +7,7 @@ class OneHasManyUpdateInputProcessor {
|
|
|
6
7
|
async connect({ entity, targetEntity, targetRelation, input }) {
|
|
7
8
|
return async ({ primary }) => {
|
|
8
9
|
return await this.mapper.update(targetEntity, input, {
|
|
9
|
-
[targetRelation.name]: { connect:
|
|
10
|
+
[targetRelation.name]: { connect: new CheckedPrimary(primary) }
|
|
10
11
|
});
|
|
11
12
|
};
|
|
12
13
|
}
|
|
@@ -14,7 +15,7 @@ class OneHasManyUpdateInputProcessor {
|
|
|
14
15
|
return async ({ primary }) => {
|
|
15
16
|
return await this.mapper.insert(targetEntity, {
|
|
16
17
|
...input,
|
|
17
|
-
[targetRelation.name]: { connect:
|
|
18
|
+
[targetRelation.name]: { connect: new CheckedPrimary(primary) }
|
|
18
19
|
});
|
|
19
20
|
};
|
|
20
21
|
}
|
|
@@ -22,7 +23,7 @@ class OneHasManyUpdateInputProcessor {
|
|
|
22
23
|
return async ({ primary }) => {
|
|
23
24
|
const connectData = {
|
|
24
25
|
[targetRelation.name]: {
|
|
25
|
-
connect:
|
|
26
|
+
connect: new CheckedPrimary(primary)
|
|
26
27
|
}
|
|
27
28
|
};
|
|
28
29
|
return await this.mapper.upsert(targetEntity, connect, connectData, {
|
|
@@ -56,7 +57,7 @@ class OneHasManyUpdateInputProcessor {
|
|
|
56
57
|
if (result[0].result === MutationResultType.notFoundError) {
|
|
57
58
|
return await this.mapper.insert(targetEntity, {
|
|
58
59
|
...create,
|
|
59
|
-
[targetRelation.name]: { connect:
|
|
60
|
+
[targetRelation.name]: { connect: new CheckedPrimary(primary) }
|
|
60
61
|
});
|
|
61
62
|
}
|
|
62
63
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OneHasManyUpdateInputProcessor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasManyUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { MutationResultType } from '../../Result'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\n\ntype Context = Model.OneHasManyContext\n\nexport class OneHasManyUpdateInputProcessor implements UpdateInputProcessor.HasManyRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect(\n\t\t{ entity, targetEntity, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.update(targetEntity, input, {\n\t\t\t\t[targetRelation.name]: { connect:
|
|
1
|
+
{"version":3,"file":"OneHasManyUpdateInputProcessor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasManyUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { MutationResultType } from '../../Result'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { MapperInput } from '../../types'\n\ntype Context = Model.OneHasManyContext\n\nexport class OneHasManyUpdateInputProcessor implements UpdateInputProcessor.HasManyRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect(\n\t\t{ entity, targetEntity, targetRelation, input }: Context & { input: Input.UniqueWhere | CheckedPrimary },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.update(targetEntity, input, {\n\t\t\t\t[targetRelation.name]: { connect: new CheckedPrimary(primary) },\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async create(\n\t\t{ entity, targetEntity, targetRelation, input }: Context & { input: MapperInput.CreateDataInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.insert(targetEntity, {\n\t\t\t\t...input,\n\t\t\t\t[targetRelation.name]: { connect: new CheckedPrimary(primary) },\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async connectOrCreate(\n\t\t{ entity, targetRelation, targetEntity, input: { connect, create } }: Context & { input: MapperInput.ConnectOrCreateInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst connectData = {\n\t\t\t\t[targetRelation.name]: {\n\t\t\t\t\tconnect: new CheckedPrimary(primary),\n\t\t\t\t},\n\t\t\t}\n\t\t\treturn await this.mapper.upsert(targetEntity, connect, connectData, {\n\t\t\t\t...create,\n\t\t\t\t...connectData,\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async update(\n\t\t{ entity, targetEntity, targetRelation, input: { data, where } }: Context & { input: UpdateInputProcessor.UpdateManyInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ ...where, [targetRelation.name]: { [entity.primary]: primary } },\n\t\t\t\t{\n\t\t\t\t\t...data,\n\t\t\t\t\t// [targetRelation.name]: {connect: thisPrimary}\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic async upsert(\n\t\t{ entity, targetEntity, targetRelation, input: { create, update, where } }: Context & { input: UpdateInputProcessor.UpsertManyInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst result = await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ ...where, [targetRelation.name]: { [entity.primary]: primary } },\n\t\t\t\t{\n\t\t\t\t\t...update,\n\t\t\t\t// [targetRelation.name]: {connect: thisPrimary}\n\t\t\t\t},\n\t\t\t)\n\t\t\tif (result[0].result === MutationResultType.notFoundError) {\n\t\t\t\treturn await this.mapper.insert(targetEntity, {\n\t\t\t\t\t...create,\n\t\t\t\t\t[targetRelation.name]: { connect: new CheckedPrimary(primary) },\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t}\n\n\tpublic async disconnect(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ ...input, [targetRelation.name]: { [entity.primary]: primary } },\n\t\t\t\t{ [targetRelation.name]: { disconnect: true } },\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic async delete(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\treturn await this.mapper.delete(targetEntity, {\n\t\t\t\t...input,\n\t\t\t\t[targetRelation.name]: { [entity.primary]: primary },\n\t\t\t})\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"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"}
|
package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const Result = require("../../Result.cjs");
|
|
4
|
+
const CheckedPrimary = require("../../CheckedPrimary.cjs");
|
|
4
5
|
class OneHasOneInverseUpdateInputProcessor {
|
|
5
6
|
constructor(primaryValue, mapper) {
|
|
6
7
|
this.primaryValue = primaryValue;
|
|
@@ -8,16 +9,14 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
8
9
|
}
|
|
9
10
|
async connect({ input, ...ctx }) {
|
|
10
11
|
return async () => {
|
|
11
|
-
const newOwner = await this.mapper.getPrimaryValue(ctx.targetEntity, input);
|
|
12
|
-
if (
|
|
13
|
-
return [new Result.MutationEntryNotFoundError([], input)];
|
|
14
|
-
}
|
|
12
|
+
const [newOwner, err] = await this.mapper.getPrimaryValue(ctx.targetEntity, input);
|
|
13
|
+
if (err) return [err];
|
|
15
14
|
return await this.connectInternal(ctx, newOwner);
|
|
16
15
|
};
|
|
17
16
|
}
|
|
18
17
|
async connectOrCreate({ input, ...ctx }) {
|
|
19
18
|
return async () => {
|
|
20
|
-
const newOwner = await this.mapper.getPrimaryValue(ctx.targetEntity, input.connect);
|
|
19
|
+
const [newOwner] = await this.mapper.getPrimaryValue(ctx.targetEntity, input.connect);
|
|
21
20
|
if (newOwner) {
|
|
22
21
|
return await this.connectInternal(ctx, newOwner);
|
|
23
22
|
}
|
|
@@ -60,7 +59,7 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
60
59
|
if (!relation.nullable && !targetRelation.orphanRemoval) {
|
|
61
60
|
return [new Result.MutationConstraintViolationError([], Result.ConstraintType.notNull)];
|
|
62
61
|
}
|
|
63
|
-
const currentOwner = await this.mapper.getPrimaryValue(targetEntity, {
|
|
62
|
+
const [currentOwner] = await this.mapper.getPrimaryValue(targetEntity, {
|
|
64
63
|
[targetRelation.name]: { [entity.primary]: this.primaryValue }
|
|
65
64
|
});
|
|
66
65
|
if (!currentOwner) {
|
|
@@ -71,7 +70,7 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
71
70
|
}
|
|
72
71
|
const result = await this.mapper.updateInternal(
|
|
73
72
|
targetEntity,
|
|
74
|
-
|
|
73
|
+
new CheckedPrimary.CheckedPrimary(currentOwner),
|
|
75
74
|
(builder) => {
|
|
76
75
|
builder.addPredicates([targetRelation.name]);
|
|
77
76
|
builder.addFieldValue(targetRelation.name, null);
|
|
@@ -92,7 +91,7 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
92
91
|
};
|
|
93
92
|
}
|
|
94
93
|
async connectInternal({ entity, targetEntity, targetRelation }, newOwner) {
|
|
95
|
-
const currentOwner = await this.mapper.getPrimaryValue(targetEntity, {
|
|
94
|
+
const [currentOwner] = await this.mapper.getPrimaryValue(targetEntity, {
|
|
96
95
|
[targetRelation.name]: { [entity.primary]: this.primaryValue }
|
|
97
96
|
});
|
|
98
97
|
if (newOwner === currentOwner) {
|
|
@@ -103,14 +102,14 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
103
102
|
if (!targetRelation.nullable) {
|
|
104
103
|
return [new Result.MutationConstraintViolationError([], Result.ConstraintType.notNull)];
|
|
105
104
|
}
|
|
106
|
-
const disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity,
|
|
105
|
+
const disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity, new CheckedPrimary.CheckedPrimary(currentOwner), (builder) => {
|
|
107
106
|
builder.addPredicates([targetRelation.name]);
|
|
108
107
|
builder.addFieldValue(targetRelation.name, null);
|
|
109
108
|
});
|
|
110
109
|
result.push(...disconnectFromCurrentOwner);
|
|
111
110
|
}
|
|
112
111
|
const orphanedInverseSide = targetRelation.orphanRemoval ? await this.mapper.selectField(targetEntity, { [targetEntity.primary]: newOwner }, targetRelation.name) : null;
|
|
113
|
-
const connectToNewOwner = await this.mapper.updateInternal(targetEntity,
|
|
112
|
+
const connectToNewOwner = await this.mapper.updateInternal(targetEntity, new CheckedPrimary.CheckedPrimary(newOwner), (builder) => {
|
|
114
113
|
builder.addPredicates([targetRelation.name]);
|
|
115
114
|
builder.addFieldValue(targetRelation.name, this.primaryValue);
|
|
116
115
|
});
|
|
@@ -122,7 +121,7 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
122
121
|
return result;
|
|
123
122
|
}
|
|
124
123
|
async createInternal({ entity, targetEntity, targetRelation, input }) {
|
|
125
|
-
const currentOwner = await this.mapper.getPrimaryValue(targetEntity, {
|
|
124
|
+
const [currentOwner] = await this.mapper.getPrimaryValue(targetEntity, {
|
|
126
125
|
[targetRelation.name]: { [entity.primary]: this.primaryValue }
|
|
127
126
|
});
|
|
128
127
|
if (currentOwner && !targetRelation.nullable) {
|
|
@@ -130,7 +129,7 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
130
129
|
}
|
|
131
130
|
const result = [];
|
|
132
131
|
if (currentOwner) {
|
|
133
|
-
const disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity,
|
|
132
|
+
const disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity, new CheckedPrimary.CheckedPrimary(currentOwner), (builder) => {
|
|
134
133
|
builder.addPredicates([targetRelation.name]);
|
|
135
134
|
builder.addFieldValue(targetRelation.name, null);
|
|
136
135
|
});
|
package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OneHasOneInverseUpdateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.ts"],"sourcesContent":["import {\n\tConstraintType,\n\tMutationConstraintViolationError,\n\tMutationEntryNotFoundError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from '../../Result'\nimport { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\n\ntype Context = Model.OneHasOneInverseContext\n\nexport class OneHasOneInverseUpdateInputProcessor implements UpdateInputProcessor.HasOneRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect({ input, ...ctx }: Model.OneHasOneInverseContext & { input: Input.UniqueWhere }) {\n\t\treturn async () => {\n\t\t\tconst newOwner = await this.mapper.getPrimaryValue(ctx.targetEntity, input)\n\t\t\tif (!newOwner) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], input)]\n\t\t\t}\n\t\t\treturn await this.connectInternal(ctx, newOwner)\n\t\t}\n\t}\n\n\tpublic async connectOrCreate(\n\t\t{ input, ...ctx }: Model.OneHasOneInverseContext & { input: Input.ConnectOrCreateInput },\n\t) {\n\t\treturn async () => {\n\t\t\tconst newOwner = await this.mapper.getPrimaryValue(ctx.targetEntity, input.connect)\n\t\t\tif (newOwner) {\n\t\t\t\treturn await this.connectInternal(ctx, newOwner)\n\t\t\t}\n\t\t\treturn await this.createInternal({ ...ctx, input: input.create })\n\t\t}\n\t}\n\n\n\tpublic async create(ctx: Model.OneHasOneInverseContext & { input: Input.CreateDataInput }) {\n\t\treturn async () => {\n\t\t\treturn await this.createInternal(ctx)\n\t\t}\n\t}\n\n\tpublic async update({ entity, targetEntity, targetRelation, input }: Model.OneHasOneInverseContext & { input: Input.UpdateDataInput }) {\n\t\treturn async () => {\n\t\t\treturn await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ [targetRelation.name]: { [entity.primary]: this.primaryValue } },\n\t\t\t\tinput,\n\t\t\t)\n\t\t}\n\t}\n\tpublic async upsert(context: Model.OneHasOneInverseContext & { input: UpdateInputProcessor.UpsertInput }) {\n\t\treturn async () => {\n\t\t\tconst { targetEntity, targetRelation, entity, input: { update, create } } = context\n\t\t\tconst result = await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ [targetRelation.name]: { [entity.primary]: this.primaryValue } },\n\t\t\t\tupdate,\n\t\t\t)\n\t\t\tif (result[0].result === MutationResultType.notFoundError) {\n\t\t\t\treturn await this.createInternal({\n\t\t\t\t\t...context,\n\t\t\t\t\tinput: create,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t}\n\n\tpublic async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneInverseContext & { input: undefined }) {\n\t\treturn async () => {\n\t\t\tif (!relation.nullable && !targetRelation.orphanRemoval) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\t\t\tconst currentOwner = await this.mapper.getPrimaryValue(targetEntity, {\n\t\t\t\t[targetRelation.name]: { [entity.primary]: this.primaryValue },\n\t\t\t})\n\t\t\tif (!currentOwner) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\tif (currentOwner && !targetRelation.nullable) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\n\t\t\tconst result = await this.mapper.updateInternal(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ [targetEntity.primary]: currentOwner },\n\t\t\t\tbuilder => {\n\t\t\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\t\t\tbuilder.addFieldValue(targetRelation.name, null)\n\t\t\t\t},\n\t\t\t)\n\t\t\tif (targetRelation.orphanRemoval) {\n\t\t\t\tresult.push(...(await this.mapper.delete(entity, { [entity.primary]: this.primaryValue })))\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t}\n\n\tpublic async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneInverseContext & { input: undefined }) {\n\t\treturn async () => {\n\t\t\tif (!relation.nullable && !targetRelation.orphanRemoval) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\t\t\t// orphan removal is handled in mapper.delete\n\t\t\treturn await this.mapper.delete(targetEntity, { [targetRelation.name]: { [entity.primary]: this.primaryValue } })\n\t\t}\n\t}\n\n\tprivate async connectInternal(\n\t\t{ entity, targetEntity, targetRelation }: Model.OneHasOneInverseContext,\n\t\tnewOwner: Input.PrimaryValue,\n\t) {\n\t\tconst currentOwner = await this.mapper.getPrimaryValue(targetEntity, {\n\t\t\t[targetRelation.name]: { [entity.primary]: this.primaryValue },\n\t\t})\n\t\tif (newOwner === currentOwner) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\t\tconst result: MutationResultList = []\n\t\tif (currentOwner) {\n\t\t\tif (!targetRelation.nullable) {\n\t\t\t\t// todo cascade delete support?\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\t\t\tconst disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity, { [targetEntity.primary]: currentOwner }, builder => {\n\t\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\t\tbuilder.addFieldValue(targetRelation.name, null)\n\t\t\t})\n\t\t\tresult.push(...disconnectFromCurrentOwner)\n\t\t}\n\t\tconst orphanedInverseSide = targetRelation.orphanRemoval\n\t\t\t? await this.mapper.selectField(targetEntity, { [targetEntity.primary]: newOwner }, targetRelation.name)\n\t\t\t: null\n\n\t\tconst connectToNewOwner = await this.mapper.updateInternal(targetEntity, { [targetEntity.primary]: newOwner }, builder => {\n\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\tbuilder.addFieldValue(targetRelation.name, this.primaryValue)\n\t\t})\n\t\tresult.push(...connectToNewOwner)\n\n\t\tif (orphanedInverseSide) {\n\t\t\tconst deleteOrphanedInverseSide = await this.mapper.delete(entity, { [entity.primary]: orphanedInverseSide })\n\t\t\tresult.push(...deleteOrphanedInverseSide)\n\t\t}\n\t\treturn result\n\t}\n\n\tprivate async createInternal({ entity, targetEntity, targetRelation, input }: Model.OneHasOneInverseContext & { input: Input.CreateDataInput }) {\n\t\tconst currentOwner = await this.mapper.getPrimaryValue(targetEntity, {\n\t\t\t[targetRelation.name]: { [entity.primary]: this.primaryValue },\n\t\t})\n\t\tif (currentOwner && !targetRelation.nullable) {\n\t\t\t// todo cascade delete support?\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\t\tconst result: MutationResultList = []\n\t\tif (currentOwner) {\n\t\t\tconst disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity, { [targetEntity.primary]: currentOwner }, builder => {\n\t\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\t\tbuilder.addFieldValue(targetRelation.name, null)\n\t\t\t})\n\t\t\tresult.push(...disconnectFromCurrentOwner)\n\t\t}\n\n\t\tconst connectToNewlyCreatedOwner = await this.mapper.insert(targetEntity, input, builder => {\n\t\t\tbuilder.addFieldValue(targetRelation.name, this.primaryValue)\n\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t})\n\t\tresult.push(...connectToNewlyCreatedOwner)\n\n\t\treturn result\n\t}\n}\n"],"names":["MutationEntryNotFoundError","MutationResultType","MutationConstraintViolationError","ConstraintType","MutationNothingToDo","NothingToDoReason"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OneHasOneInverseUpdateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.ts"],"sourcesContent":["import {\n\tConstraintType,\n\tMutationConstraintViolationError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from '../../Result'\nimport { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { MapperInput } from '../../types'\n\ntype Context = Model.OneHasOneInverseContext\n\nexport class OneHasOneInverseUpdateInputProcessor implements UpdateInputProcessor.HasOneRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect({ input, ...ctx }: Model.OneHasOneInverseContext & { input: Input.UniqueWhere | CheckedPrimary }) {\n\t\treturn async () => {\n\t\t\tconst [newOwner, err] = await this.mapper.getPrimaryValue(ctx.targetEntity, input)\n\t\t\tif (err) return [err]\n\t\t\treturn await this.connectInternal(ctx, newOwner)\n\t\t}\n\t}\n\n\tpublic async connectOrCreate(\n\t\t{ input, ...ctx }: Model.OneHasOneInverseContext & { input: MapperInput.ConnectOrCreateInput },\n\t) {\n\t\treturn async () => {\n\t\t\tconst [newOwner] = await this.mapper.getPrimaryValue(ctx.targetEntity, input.connect)\n\t\t\tif (newOwner) {\n\t\t\t\treturn await this.connectInternal(ctx, newOwner)\n\t\t\t}\n\t\t\treturn await this.createInternal({ ...ctx, input: input.create })\n\t\t}\n\t}\n\n\n\tpublic async create(ctx: Model.OneHasOneInverseContext & { input: MapperInput.CreateDataInput }) {\n\t\treturn async () => {\n\t\t\treturn await this.createInternal(ctx)\n\t\t}\n\t}\n\n\tpublic async update({ entity, targetEntity, targetRelation, input }: Model.OneHasOneInverseContext & { input: MapperInput.UpdateDataInput }) {\n\t\treturn async () => {\n\t\t\treturn await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ [targetRelation.name]: { [entity.primary]: this.primaryValue } },\n\t\t\t\tinput,\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic async upsert(context: Model.OneHasOneInverseContext & { input: UpdateInputProcessor.UpsertInput }) {\n\t\treturn async () => {\n\t\t\tconst { targetEntity, targetRelation, entity, input: { update, create } } = context\n\t\t\tconst result = await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ [targetRelation.name]: { [entity.primary]: this.primaryValue } },\n\t\t\t\tupdate,\n\t\t\t)\n\t\t\tif (result[0].result === MutationResultType.notFoundError) {\n\t\t\t\treturn await this.createInternal({\n\t\t\t\t\t...context,\n\t\t\t\t\tinput: create,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t}\n\n\tpublic async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneInverseContext & { input: undefined }) {\n\t\treturn async () => {\n\t\t\tif (!relation.nullable && !targetRelation.orphanRemoval) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\t\t\tconst [currentOwner] = await this.mapper.getPrimaryValue(targetEntity, {\n\t\t\t\t[targetRelation.name]: { [entity.primary]: this.primaryValue },\n\t\t\t})\n\t\t\tif (!currentOwner) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\tif (currentOwner && !targetRelation.nullable) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\n\t\t\tconst result = await this.mapper.updateInternal(\n\t\t\t\ttargetEntity,\n\t\t\t\tnew CheckedPrimary(currentOwner),\n\t\t\t\tbuilder => {\n\t\t\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\t\t\tbuilder.addFieldValue(targetRelation.name, null)\n\t\t\t\t},\n\t\t\t)\n\t\t\tif (targetRelation.orphanRemoval) {\n\t\t\t\tresult.push(...(await this.mapper.delete(entity, { [entity.primary]: this.primaryValue })))\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t}\n\n\tpublic async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneInverseContext & { input: undefined }) {\n\t\treturn async () => {\n\t\t\tif (!relation.nullable && !targetRelation.orphanRemoval) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\t\t\t// orphan removal is handled in mapper.delete\n\t\t\treturn await this.mapper.delete(targetEntity, { [targetRelation.name]: { [entity.primary]: this.primaryValue } })\n\t\t}\n\t}\n\n\tprivate async connectInternal(\n\t\t{ entity, targetEntity, targetRelation }: Model.OneHasOneInverseContext,\n\t\tnewOwner: Input.PrimaryValue,\n\t) {\n\t\tconst [currentOwner] = await this.mapper.getPrimaryValue(targetEntity, {\n\t\t\t[targetRelation.name]: { [entity.primary]: this.primaryValue },\n\t\t})\n\t\tif (newOwner === currentOwner) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\t\tconst result: MutationResultList = []\n\t\tif (currentOwner) {\n\t\t\tif (!targetRelation.nullable) {\n\t\t\t\t// todo cascade delete support?\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\t\t\tconst disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity, new CheckedPrimary(currentOwner), builder => {\n\t\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\t\tbuilder.addFieldValue(targetRelation.name, null)\n\t\t\t})\n\t\t\tresult.push(...disconnectFromCurrentOwner)\n\t\t}\n\t\tconst orphanedInverseSide = targetRelation.orphanRemoval\n\t\t\t? await this.mapper.selectField(targetEntity, { [targetEntity.primary]: newOwner }, targetRelation.name)\n\t\t\t: null\n\n\t\tconst connectToNewOwner = await this.mapper.updateInternal(targetEntity, new CheckedPrimary(newOwner), builder => {\n\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\tbuilder.addFieldValue(targetRelation.name, this.primaryValue)\n\t\t})\n\t\tresult.push(...connectToNewOwner)\n\n\t\tif (orphanedInverseSide) {\n\t\t\tconst deleteOrphanedInverseSide = await this.mapper.delete(entity, { [entity.primary]: orphanedInverseSide })\n\t\t\tresult.push(...deleteOrphanedInverseSide)\n\t\t}\n\t\treturn result\n\t}\n\n\tprivate async createInternal({ entity, targetEntity, targetRelation, input }: Model.OneHasOneInverseContext & { input: MapperInput.CreateDataInput }) {\n\t\tconst [currentOwner] = await this.mapper.getPrimaryValue(targetEntity, {\n\t\t\t[targetRelation.name]: { [entity.primary]: this.primaryValue },\n\t\t})\n\t\tif (currentOwner && !targetRelation.nullable) {\n\t\t\t// todo cascade delete support?\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\t\tconst result: MutationResultList = []\n\t\tif (currentOwner) {\n\t\t\tconst disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity, new CheckedPrimary(currentOwner), builder => {\n\t\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\t\tbuilder.addFieldValue(targetRelation.name, null)\n\t\t\t})\n\t\t\tresult.push(...disconnectFromCurrentOwner)\n\t\t}\n\n\t\tconst connectToNewlyCreatedOwner = await this.mapper.insert(targetEntity, input, builder => {\n\t\t\tbuilder.addFieldValue(targetRelation.name, this.primaryValue)\n\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t})\n\t\tresult.push(...connectToNewlyCreatedOwner)\n\n\t\treturn result\n\t}\n}\n"],"names":["MutationResultType","MutationConstraintViolationError","ConstraintType","MutationNothingToDo","NothingToDoReason","CheckedPrimary"],"mappings":"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"}
|
package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MutationResultType, MutationConstraintViolationError, ConstraintType, MutationNothingToDo, NothingToDoReason } from "../../Result.js";
|
|
2
|
+
import { CheckedPrimary } from "../../CheckedPrimary.js";
|
|
2
3
|
class OneHasOneInverseUpdateInputProcessor {
|
|
3
4
|
constructor(primaryValue, mapper) {
|
|
4
5
|
this.primaryValue = primaryValue;
|
|
@@ -6,16 +7,14 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
6
7
|
}
|
|
7
8
|
async connect({ input, ...ctx }) {
|
|
8
9
|
return async () => {
|
|
9
|
-
const newOwner = await this.mapper.getPrimaryValue(ctx.targetEntity, input);
|
|
10
|
-
if (
|
|
11
|
-
return [new MutationEntryNotFoundError([], input)];
|
|
12
|
-
}
|
|
10
|
+
const [newOwner, err] = await this.mapper.getPrimaryValue(ctx.targetEntity, input);
|
|
11
|
+
if (err) return [err];
|
|
13
12
|
return await this.connectInternal(ctx, newOwner);
|
|
14
13
|
};
|
|
15
14
|
}
|
|
16
15
|
async connectOrCreate({ input, ...ctx }) {
|
|
17
16
|
return async () => {
|
|
18
|
-
const newOwner = await this.mapper.getPrimaryValue(ctx.targetEntity, input.connect);
|
|
17
|
+
const [newOwner] = await this.mapper.getPrimaryValue(ctx.targetEntity, input.connect);
|
|
19
18
|
if (newOwner) {
|
|
20
19
|
return await this.connectInternal(ctx, newOwner);
|
|
21
20
|
}
|
|
@@ -58,7 +57,7 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
58
57
|
if (!relation.nullable && !targetRelation.orphanRemoval) {
|
|
59
58
|
return [new MutationConstraintViolationError([], ConstraintType.notNull)];
|
|
60
59
|
}
|
|
61
|
-
const currentOwner = await this.mapper.getPrimaryValue(targetEntity, {
|
|
60
|
+
const [currentOwner] = await this.mapper.getPrimaryValue(targetEntity, {
|
|
62
61
|
[targetRelation.name]: { [entity.primary]: this.primaryValue }
|
|
63
62
|
});
|
|
64
63
|
if (!currentOwner) {
|
|
@@ -69,7 +68,7 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
69
68
|
}
|
|
70
69
|
const result = await this.mapper.updateInternal(
|
|
71
70
|
targetEntity,
|
|
72
|
-
|
|
71
|
+
new CheckedPrimary(currentOwner),
|
|
73
72
|
(builder) => {
|
|
74
73
|
builder.addPredicates([targetRelation.name]);
|
|
75
74
|
builder.addFieldValue(targetRelation.name, null);
|
|
@@ -90,7 +89,7 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
90
89
|
};
|
|
91
90
|
}
|
|
92
91
|
async connectInternal({ entity, targetEntity, targetRelation }, newOwner) {
|
|
93
|
-
const currentOwner = await this.mapper.getPrimaryValue(targetEntity, {
|
|
92
|
+
const [currentOwner] = await this.mapper.getPrimaryValue(targetEntity, {
|
|
94
93
|
[targetRelation.name]: { [entity.primary]: this.primaryValue }
|
|
95
94
|
});
|
|
96
95
|
if (newOwner === currentOwner) {
|
|
@@ -101,14 +100,14 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
101
100
|
if (!targetRelation.nullable) {
|
|
102
101
|
return [new MutationConstraintViolationError([], ConstraintType.notNull)];
|
|
103
102
|
}
|
|
104
|
-
const disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity,
|
|
103
|
+
const disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity, new CheckedPrimary(currentOwner), (builder) => {
|
|
105
104
|
builder.addPredicates([targetRelation.name]);
|
|
106
105
|
builder.addFieldValue(targetRelation.name, null);
|
|
107
106
|
});
|
|
108
107
|
result.push(...disconnectFromCurrentOwner);
|
|
109
108
|
}
|
|
110
109
|
const orphanedInverseSide = targetRelation.orphanRemoval ? await this.mapper.selectField(targetEntity, { [targetEntity.primary]: newOwner }, targetRelation.name) : null;
|
|
111
|
-
const connectToNewOwner = await this.mapper.updateInternal(targetEntity,
|
|
110
|
+
const connectToNewOwner = await this.mapper.updateInternal(targetEntity, new CheckedPrimary(newOwner), (builder) => {
|
|
112
111
|
builder.addPredicates([targetRelation.name]);
|
|
113
112
|
builder.addFieldValue(targetRelation.name, this.primaryValue);
|
|
114
113
|
});
|
|
@@ -120,7 +119,7 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
120
119
|
return result;
|
|
121
120
|
}
|
|
122
121
|
async createInternal({ entity, targetEntity, targetRelation, input }) {
|
|
123
|
-
const currentOwner = await this.mapper.getPrimaryValue(targetEntity, {
|
|
122
|
+
const [currentOwner] = await this.mapper.getPrimaryValue(targetEntity, {
|
|
124
123
|
[targetRelation.name]: { [entity.primary]: this.primaryValue }
|
|
125
124
|
});
|
|
126
125
|
if (currentOwner && !targetRelation.nullable) {
|
|
@@ -128,7 +127,7 @@ class OneHasOneInverseUpdateInputProcessor {
|
|
|
128
127
|
}
|
|
129
128
|
const result = [];
|
|
130
129
|
if (currentOwner) {
|
|
131
|
-
const disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity,
|
|
130
|
+
const disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity, new CheckedPrimary(currentOwner), (builder) => {
|
|
132
131
|
builder.addPredicates([targetRelation.name]);
|
|
133
132
|
builder.addFieldValue(targetRelation.name, null);
|
|
134
133
|
});
|
package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OneHasOneInverseUpdateInputProcessor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.ts"],"sourcesContent":["import {\n\tConstraintType,\n\tMutationConstraintViolationError,\n\tMutationEntryNotFoundError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from '../../Result'\nimport { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\n\ntype Context = Model.OneHasOneInverseContext\n\nexport class OneHasOneInverseUpdateInputProcessor implements UpdateInputProcessor.HasOneRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect({ input, ...ctx }: Model.OneHasOneInverseContext & { input: Input.UniqueWhere }) {\n\t\treturn async () => {\n\t\t\tconst newOwner = await this.mapper.getPrimaryValue(ctx.targetEntity, input)\n\t\t\tif (!newOwner) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], input)]\n\t\t\t}\n\t\t\treturn await this.connectInternal(ctx, newOwner)\n\t\t}\n\t}\n\n\tpublic async connectOrCreate(\n\t\t{ input, ...ctx }: Model.OneHasOneInverseContext & { input: Input.ConnectOrCreateInput },\n\t) {\n\t\treturn async () => {\n\t\t\tconst newOwner = await this.mapper.getPrimaryValue(ctx.targetEntity, input.connect)\n\t\t\tif (newOwner) {\n\t\t\t\treturn await this.connectInternal(ctx, newOwner)\n\t\t\t}\n\t\t\treturn await this.createInternal({ ...ctx, input: input.create })\n\t\t}\n\t}\n\n\n\tpublic async create(ctx: Model.OneHasOneInverseContext & { input: Input.CreateDataInput }) {\n\t\treturn async () => {\n\t\t\treturn await this.createInternal(ctx)\n\t\t}\n\t}\n\n\tpublic async update({ entity, targetEntity, targetRelation, input }: Model.OneHasOneInverseContext & { input: Input.UpdateDataInput }) {\n\t\treturn async () => {\n\t\t\treturn await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ [targetRelation.name]: { [entity.primary]: this.primaryValue } },\n\t\t\t\tinput,\n\t\t\t)\n\t\t}\n\t}\n\tpublic async upsert(context: Model.OneHasOneInverseContext & { input: UpdateInputProcessor.UpsertInput }) {\n\t\treturn async () => {\n\t\t\tconst { targetEntity, targetRelation, entity, input: { update, create } } = context\n\t\t\tconst result = await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ [targetRelation.name]: { [entity.primary]: this.primaryValue } },\n\t\t\t\tupdate,\n\t\t\t)\n\t\t\tif (result[0].result === MutationResultType.notFoundError) {\n\t\t\t\treturn await this.createInternal({\n\t\t\t\t\t...context,\n\t\t\t\t\tinput: create,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t}\n\n\tpublic async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneInverseContext & { input: undefined }) {\n\t\treturn async () => {\n\t\t\tif (!relation.nullable && !targetRelation.orphanRemoval) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\t\t\tconst currentOwner = await this.mapper.getPrimaryValue(targetEntity, {\n\t\t\t\t[targetRelation.name]: { [entity.primary]: this.primaryValue },\n\t\t\t})\n\t\t\tif (!currentOwner) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\tif (currentOwner && !targetRelation.nullable) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\n\t\t\tconst result = await this.mapper.updateInternal(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ [targetEntity.primary]: currentOwner },\n\t\t\t\tbuilder => {\n\t\t\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\t\t\tbuilder.addFieldValue(targetRelation.name, null)\n\t\t\t\t},\n\t\t\t)\n\t\t\tif (targetRelation.orphanRemoval) {\n\t\t\t\tresult.push(...(await this.mapper.delete(entity, { [entity.primary]: this.primaryValue })))\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t}\n\n\tpublic async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneInverseContext & { input: undefined }) {\n\t\treturn async () => {\n\t\t\tif (!relation.nullable && !targetRelation.orphanRemoval) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\t\t\t// orphan removal is handled in mapper.delete\n\t\t\treturn await this.mapper.delete(targetEntity, { [targetRelation.name]: { [entity.primary]: this.primaryValue } })\n\t\t}\n\t}\n\n\tprivate async connectInternal(\n\t\t{ entity, targetEntity, targetRelation }: Model.OneHasOneInverseContext,\n\t\tnewOwner: Input.PrimaryValue,\n\t) {\n\t\tconst currentOwner = await this.mapper.getPrimaryValue(targetEntity, {\n\t\t\t[targetRelation.name]: { [entity.primary]: this.primaryValue },\n\t\t})\n\t\tif (newOwner === currentOwner) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\t\tconst result: MutationResultList = []\n\t\tif (currentOwner) {\n\t\t\tif (!targetRelation.nullable) {\n\t\t\t\t// todo cascade delete support?\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\t\t\tconst disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity, { [targetEntity.primary]: currentOwner }, builder => {\n\t\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\t\tbuilder.addFieldValue(targetRelation.name, null)\n\t\t\t})\n\t\t\tresult.push(...disconnectFromCurrentOwner)\n\t\t}\n\t\tconst orphanedInverseSide = targetRelation.orphanRemoval\n\t\t\t? await this.mapper.selectField(targetEntity, { [targetEntity.primary]: newOwner }, targetRelation.name)\n\t\t\t: null\n\n\t\tconst connectToNewOwner = await this.mapper.updateInternal(targetEntity, { [targetEntity.primary]: newOwner }, builder => {\n\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\tbuilder.addFieldValue(targetRelation.name, this.primaryValue)\n\t\t})\n\t\tresult.push(...connectToNewOwner)\n\n\t\tif (orphanedInverseSide) {\n\t\t\tconst deleteOrphanedInverseSide = await this.mapper.delete(entity, { [entity.primary]: orphanedInverseSide })\n\t\t\tresult.push(...deleteOrphanedInverseSide)\n\t\t}\n\t\treturn result\n\t}\n\n\tprivate async createInternal({ entity, targetEntity, targetRelation, input }: Model.OneHasOneInverseContext & { input: Input.CreateDataInput }) {\n\t\tconst currentOwner = await this.mapper.getPrimaryValue(targetEntity, {\n\t\t\t[targetRelation.name]: { [entity.primary]: this.primaryValue },\n\t\t})\n\t\tif (currentOwner && !targetRelation.nullable) {\n\t\t\t// todo cascade delete support?\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\t\tconst result: MutationResultList = []\n\t\tif (currentOwner) {\n\t\t\tconst disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity, { [targetEntity.primary]: currentOwner }, builder => {\n\t\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\t\tbuilder.addFieldValue(targetRelation.name, null)\n\t\t\t})\n\t\t\tresult.push(...disconnectFromCurrentOwner)\n\t\t}\n\n\t\tconst connectToNewlyCreatedOwner = await this.mapper.insert(targetEntity, input, builder => {\n\t\t\tbuilder.addFieldValue(targetRelation.name, this.primaryValue)\n\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t})\n\t\tresult.push(...connectToNewlyCreatedOwner)\n\n\t\treturn result\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OneHasOneInverseUpdateInputProcessor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.ts"],"sourcesContent":["import {\n\tConstraintType,\n\tMutationConstraintViolationError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from '../../Result'\nimport { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { MapperInput } from '../../types'\n\ntype Context = Model.OneHasOneInverseContext\n\nexport class OneHasOneInverseUpdateInputProcessor implements UpdateInputProcessor.HasOneRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect({ input, ...ctx }: Model.OneHasOneInverseContext & { input: Input.UniqueWhere | CheckedPrimary }) {\n\t\treturn async () => {\n\t\t\tconst [newOwner, err] = await this.mapper.getPrimaryValue(ctx.targetEntity, input)\n\t\t\tif (err) return [err]\n\t\t\treturn await this.connectInternal(ctx, newOwner)\n\t\t}\n\t}\n\n\tpublic async connectOrCreate(\n\t\t{ input, ...ctx }: Model.OneHasOneInverseContext & { input: MapperInput.ConnectOrCreateInput },\n\t) {\n\t\treturn async () => {\n\t\t\tconst [newOwner] = await this.mapper.getPrimaryValue(ctx.targetEntity, input.connect)\n\t\t\tif (newOwner) {\n\t\t\t\treturn await this.connectInternal(ctx, newOwner)\n\t\t\t}\n\t\t\treturn await this.createInternal({ ...ctx, input: input.create })\n\t\t}\n\t}\n\n\n\tpublic async create(ctx: Model.OneHasOneInverseContext & { input: MapperInput.CreateDataInput }) {\n\t\treturn async () => {\n\t\t\treturn await this.createInternal(ctx)\n\t\t}\n\t}\n\n\tpublic async update({ entity, targetEntity, targetRelation, input }: Model.OneHasOneInverseContext & { input: MapperInput.UpdateDataInput }) {\n\t\treturn async () => {\n\t\t\treturn await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ [targetRelation.name]: { [entity.primary]: this.primaryValue } },\n\t\t\t\tinput,\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic async upsert(context: Model.OneHasOneInverseContext & { input: UpdateInputProcessor.UpsertInput }) {\n\t\treturn async () => {\n\t\t\tconst { targetEntity, targetRelation, entity, input: { update, create } } = context\n\t\t\tconst result = await this.mapper.update(\n\t\t\t\ttargetEntity,\n\t\t\t\t{ [targetRelation.name]: { [entity.primary]: this.primaryValue } },\n\t\t\t\tupdate,\n\t\t\t)\n\t\t\tif (result[0].result === MutationResultType.notFoundError) {\n\t\t\t\treturn await this.createInternal({\n\t\t\t\t\t...context,\n\t\t\t\t\tinput: create,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t}\n\n\tpublic async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneInverseContext & { input: undefined }) {\n\t\treturn async () => {\n\t\t\tif (!relation.nullable && !targetRelation.orphanRemoval) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\t\t\tconst [currentOwner] = await this.mapper.getPrimaryValue(targetEntity, {\n\t\t\t\t[targetRelation.name]: { [entity.primary]: this.primaryValue },\n\t\t\t})\n\t\t\tif (!currentOwner) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\tif (currentOwner && !targetRelation.nullable) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\n\t\t\tconst result = await this.mapper.updateInternal(\n\t\t\t\ttargetEntity,\n\t\t\t\tnew CheckedPrimary(currentOwner),\n\t\t\t\tbuilder => {\n\t\t\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\t\t\tbuilder.addFieldValue(targetRelation.name, null)\n\t\t\t\t},\n\t\t\t)\n\t\t\tif (targetRelation.orphanRemoval) {\n\t\t\t\tresult.push(...(await this.mapper.delete(entity, { [entity.primary]: this.primaryValue })))\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t}\n\n\tpublic async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneInverseContext & { input: undefined }) {\n\t\treturn async () => {\n\t\t\tif (!relation.nullable && !targetRelation.orphanRemoval) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\t\t\t// orphan removal is handled in mapper.delete\n\t\t\treturn await this.mapper.delete(targetEntity, { [targetRelation.name]: { [entity.primary]: this.primaryValue } })\n\t\t}\n\t}\n\n\tprivate async connectInternal(\n\t\t{ entity, targetEntity, targetRelation }: Model.OneHasOneInverseContext,\n\t\tnewOwner: Input.PrimaryValue,\n\t) {\n\t\tconst [currentOwner] = await this.mapper.getPrimaryValue(targetEntity, {\n\t\t\t[targetRelation.name]: { [entity.primary]: this.primaryValue },\n\t\t})\n\t\tif (newOwner === currentOwner) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\t\tconst result: MutationResultList = []\n\t\tif (currentOwner) {\n\t\t\tif (!targetRelation.nullable) {\n\t\t\t\t// todo cascade delete support?\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\t\t\tconst disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity, new CheckedPrimary(currentOwner), builder => {\n\t\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\t\tbuilder.addFieldValue(targetRelation.name, null)\n\t\t\t})\n\t\t\tresult.push(...disconnectFromCurrentOwner)\n\t\t}\n\t\tconst orphanedInverseSide = targetRelation.orphanRemoval\n\t\t\t? await this.mapper.selectField(targetEntity, { [targetEntity.primary]: newOwner }, targetRelation.name)\n\t\t\t: null\n\n\t\tconst connectToNewOwner = await this.mapper.updateInternal(targetEntity, new CheckedPrimary(newOwner), builder => {\n\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\tbuilder.addFieldValue(targetRelation.name, this.primaryValue)\n\t\t})\n\t\tresult.push(...connectToNewOwner)\n\n\t\tif (orphanedInverseSide) {\n\t\t\tconst deleteOrphanedInverseSide = await this.mapper.delete(entity, { [entity.primary]: orphanedInverseSide })\n\t\t\tresult.push(...deleteOrphanedInverseSide)\n\t\t}\n\t\treturn result\n\t}\n\n\tprivate async createInternal({ entity, targetEntity, targetRelation, input }: Model.OneHasOneInverseContext & { input: MapperInput.CreateDataInput }) {\n\t\tconst [currentOwner] = await this.mapper.getPrimaryValue(targetEntity, {\n\t\t\t[targetRelation.name]: { [entity.primary]: this.primaryValue },\n\t\t})\n\t\tif (currentOwner && !targetRelation.nullable) {\n\t\t\t// todo cascade delete support?\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\t\tconst result: MutationResultList = []\n\t\tif (currentOwner) {\n\t\t\tconst disconnectFromCurrentOwner = await this.mapper.updateInternal(targetEntity, new CheckedPrimary(currentOwner), builder => {\n\t\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t\t\tbuilder.addFieldValue(targetRelation.name, null)\n\t\t\t})\n\t\t\tresult.push(...disconnectFromCurrentOwner)\n\t\t}\n\n\t\tconst connectToNewlyCreatedOwner = await this.mapper.insert(targetEntity, input, builder => {\n\t\t\tbuilder.addFieldValue(targetRelation.name, this.primaryValue)\n\t\t\tbuilder.addPredicates([targetRelation.name])\n\t\t})\n\t\tresult.push(...connectToNewlyCreatedOwner)\n\n\t\treturn result\n\t}\n}\n"],"names":[],"mappings":"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"}
|
package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs
CHANGED
|
@@ -11,10 +11,8 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
11
11
|
}
|
|
12
12
|
async connect(context) {
|
|
13
13
|
const { entity, relation, targetEntity, targetRelation, input } = context;
|
|
14
|
-
const newInverseSide = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
15
|
-
if (
|
|
16
|
-
return [new Result.MutationEntryNotFoundError([], input)];
|
|
17
|
-
}
|
|
14
|
+
const [newInverseSide, err] = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
15
|
+
if (err) return [err];
|
|
18
16
|
const currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity);
|
|
19
17
|
const currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide);
|
|
20
18
|
if (currentOwnerResult.some((it) => it.error) || currentOwnerResult.length === 1 && currentOwnerResult[0].result === Result.MutationResultType.nothingToDo) {
|
|
@@ -47,7 +45,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
47
45
|
async connectOrCreate({ input: { connect, create }, ...context }) {
|
|
48
46
|
const { relation, targetRelation, targetEntity, entity } = context;
|
|
49
47
|
const currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity);
|
|
50
|
-
const newInverseSide = await this.mapper.getPrimaryValue(targetEntity, connect);
|
|
48
|
+
const [newInverseSide] = await this.mapper.getPrimaryValue(targetEntity, connect);
|
|
51
49
|
if (newInverseSide) {
|
|
52
50
|
const currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide);
|
|
53
51
|
if (currentOwnerResult.some((it) => it.error) || currentOwnerResult.length === 1 && currentOwnerResult[0].result === Result.MutationResultType.nothingToDo) {
|
|
@@ -84,7 +82,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
84
82
|
if (!inversePrimary) {
|
|
85
83
|
return [new Result.MutationNothingToDo([], Result.NothingToDoReason.emptyRelation)];
|
|
86
84
|
}
|
|
87
|
-
return await this.mapper.update(targetEntity,
|
|
85
|
+
return await this.mapper.update(targetEntity, new CheckedPrimary.CheckedPrimary(inversePrimary), input);
|
|
88
86
|
};
|
|
89
87
|
}
|
|
90
88
|
async upsert({ entity, relation, targetEntity, input: { create, update } }) {
|
|
@@ -99,7 +97,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
99
97
|
return [];
|
|
100
98
|
}
|
|
101
99
|
return async () => {
|
|
102
|
-
return await this.mapper.update(targetEntity,
|
|
100
|
+
return await this.mapper.update(targetEntity, new CheckedPrimary.CheckedPrimary(primary), update);
|
|
103
101
|
};
|
|
104
102
|
}
|
|
105
103
|
async disconnect({ entity, targetEntity, relation, targetRelation }) {
|
|
@@ -113,7 +111,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
113
111
|
this.updateBuilder.addFieldValue(relation.name, null);
|
|
114
112
|
if (relation.orphanRemoval && inversePrimary) {
|
|
115
113
|
return async () => {
|
|
116
|
-
return await this.mapper.delete(targetEntity,
|
|
114
|
+
return await this.mapper.delete(targetEntity, new CheckedPrimary.CheckedPrimary(inversePrimary));
|
|
117
115
|
};
|
|
118
116
|
}
|
|
119
117
|
return [];
|
|
@@ -156,7 +154,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
156
154
|
if (currentInverseSide === newInverseSide) {
|
|
157
155
|
return [new Result.MutationNothingToDo([], Result.NothingToDoReason.alreadyExists)];
|
|
158
156
|
}
|
|
159
|
-
const currentOwnerOfNewInverseSide = await this.mapper.getPrimaryValue(entity, {
|
|
157
|
+
const [currentOwnerOfNewInverseSide] = await this.mapper.getPrimaryValue(entity, {
|
|
160
158
|
[relation.name]: { [targetEntity.primary]: newInverseSide }
|
|
161
159
|
});
|
|
162
160
|
if (currentOwnerOfNewInverseSide === this.primaryValue) {
|
|
@@ -171,9 +169,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
171
169
|
}
|
|
172
170
|
return await this.mapper.updateInternal(
|
|
173
171
|
entity,
|
|
174
|
-
|
|
175
|
-
[entity.primary]: currentOwnerOfNewInverseSide
|
|
176
|
-
},
|
|
172
|
+
new CheckedPrimary.CheckedPrimary(currentOwnerOfNewInverseSide),
|
|
177
173
|
(builder) => {
|
|
178
174
|
builder.addPredicates([relation.name]);
|
|
179
175
|
builder.addFieldValue(relation.name, null);
|
package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OneHasOneOwningUpdateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport {\n\tConstraintType,\n\tgetInsertPrimary,\n\tMutationConstraintViolationError,\n\tMutationEntryNotFoundError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { UpdateBuilder } from '../../update/UpdateBuilder'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\n\ntype Context = Model.OneHasOneOwningContext\n\nexport class OneHasOneOwningUpdateInputProcessor implements UpdateInputProcessor.HasOneRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly updateBuilder: UpdateBuilder,\n\t) {\n\t}\n\n\tpublic async connect(context: Model.OneHasOneOwningContext & { input: Input.UniqueWhere }) {\n\t\tconst { entity, relation, targetEntity, targetRelation, input } = context\n\t\tconst newInverseSide = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\tif (!newInverseSide) {\n\t\t\treturn [new MutationEntryNotFoundError([], input)]\n\t\t}\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)\n\t\tif (currentOwnerResult.some(it => it.error)\n\t\t\t|| (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)\n\t\t) {\n\t\t\treturn currentOwnerResult\n\t\t}\n\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...currentOwnerResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async create(context: Model.OneHasOneOwningContext & { input: Input.CreateDataInput }) {\n\t\tconst { entity, relation, targetEntity, targetRelation } = context\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst createResult = await this.createInternal(context, currentInverseSide)\n\t\tconst newInverseSide = getInsertPrimary(createResult)\n\t\tif (!newInverseSide) {\n\t\t\treturn createResult\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...createResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async connectOrCreate({ input: { connect, create }, ...context }: Model.OneHasOneOwningContext & { input: Input.ConnectOrCreateInput }) {\n\t\tconst { relation, targetRelation, targetEntity, entity } = context\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst newInverseSide = await this.mapper.getPrimaryValue(targetEntity, connect)\n\n\t\tif (newInverseSide) {\n\t\t\tconst currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)\n\t\t\tif (currentOwnerResult.some(it => it.error)\n\t\t\t\t|| (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)\n\t\t\t) {\n\t\t\t\treturn currentOwnerResult\n\t\t\t}\n\t\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\t\t\treturn async () => {\n\t\t\t\treturn [\n\t\t\t\t\t...currentOwnerResult,\n\t\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t\t]\n\t\t\t}\n\n\t\t}\n\n\t\tconst createResult = await this.createInternal({ ...context, input: create }, currentInverseSide)\n\t\tconst newInverseSideCreate = getInsertPrimary(createResult)\n\t\tif (!newInverseSideCreate) {\n\t\t\treturn createResult\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSideCreate)\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...createResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async update({ entity, relation, targetEntity, input }: Model.OneHasOneOwningContext & { input: Input.UpdateDataInput }) {\n\t\treturn async () => {\n\t\t\tconst inversePrimary = await this.mapper.selectField(\n\t\t\t\tentity,\n\t\t\t\t{ [entity.primary]: this.primaryValue },\n\t\t\t\trelation.name,\n\t\t\t)\n\t\t\tif (!inversePrimary) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\treturn await this.mapper.update(targetEntity, { [targetEntity.primary]: inversePrimary }, input)\n\t\t}\n\t}\n\n\tpublic async upsert({ entity, relation, targetEntity, input: { create, update } }: Model.OneHasOneOwningContext & { input: UpdateInputProcessor.UpsertInput }) {\n\t\tconst primary = await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\tif (!primary) {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, create)\n\t\t\tconst insertPrimary = getInsertPrimary(insertResult)\n\t\t\tif (!insertPrimary) {\n\t\t\t\treturn insertResult\n\t\t\t}\n\t\t\tthis.updateBuilder.addFieldValue(relation.name, insertPrimary)\n\t\t\treturn []\n\t\t}\n\n\t\treturn async () => {\n\t\t\treturn await this.mapper.update(targetEntity, { [targetEntity.primary]: primary }, update)\n\t\t}\n\t}\n\n\tpublic async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {\n\t\tif (!relation.nullable) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\tconst inversePrimary = (targetRelation && !targetRelation.nullable) || relation.orphanRemoval\n\t\t\t? await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\t\t: undefined\n\t\tif (inversePrimary && targetRelation && !targetRelation.nullable && !relation.orphanRemoval) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, null)\n\n\t\tif (relation.orphanRemoval && inversePrimary) {\n\t\t\treturn async () => {\n\t\t\t\treturn await this.mapper.delete(targetEntity, { [targetEntity.primary]: inversePrimary })\n\t\t\t}\n\t\t}\n\n\t\treturn []\n\t}\n\n\tpublic async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {\n\t\tif (!relation.nullable && relation.joiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\treturn async () => {\n\t\t\tconst targetPrimary = await this.mapper.selectField(\n\t\t\t\tentity,\n\t\t\t\t{ [entity.primary]: this.primaryValue },\n\t\t\t\trelation.name,\n\t\t\t)\n\t\t\tif (!targetPrimary) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\treturn await this.mapper.delete(targetEntity, new CheckedPrimary(targetPrimary))\n\t\t}\n\t}\n\n\tprivate async createInternal(\n\t\t{ targetEntity, targetRelation, relation, input }: Model.OneHasOneOwningContext & { input: Input.CreateDataInput },\n\t\tcurrentInverseSide: Input.PrimaryValue | undefined,\n\t): Promise<MutationResultList> {\n\t\tif (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\treturn await this.mapper.insert(targetEntity, input)\n\t}\n\n\tprivate async getCurrentInverseSide(targetRelation: Model.OneHasOneInverseRelation | null, relation: Model.OneHasOneOwningRelation, entity: Model.Entity) {\n\t\tif ((targetRelation && !targetRelation.nullable) || relation.orphanRemoval) {\n\t\t\treturn this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\t}\n\t\treturn undefined\n\t}\n\n\tprivate async cleanupOrphan(relation: Model.OneHasOneOwningRelation, targetEntity: Model.Entity, currentInverseSide: Input.PrimaryValue | undefined) {\n\t\tif (relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn await this.mapper.delete(targetEntity, { [targetEntity.primary]: currentInverseSide })\n\t\t}\n\t\treturn []\n\t}\n\n\tprivate async handleStateBeforeConnect(\n\t\t{ targetEntity, targetRelation, relation, entity }: Model.OneHasOneOwningContext,\n\t\tcurrentInverseSide: Input.PrimaryValue | undefined,\n\t\tnewInverseSide: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\n\t\tif (currentInverseSide === newInverseSide) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\n\t\tconst currentOwnerOfNewInverseSide = await this.mapper.getPrimaryValue(entity, {\n\t\t\t[relation.name]: { [targetEntity.primary]: newInverseSide },\n\t\t})\n\n\t\tif (currentOwnerOfNewInverseSide === this.primaryValue) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\n\t\t// orphan removal handled bellow\n\t\tif (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\tif (currentOwnerOfNewInverseSide) {\n\t\t\tif (!relation.nullable) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\n\t\t\treturn await this.mapper.updateInternal(\n\t\t\t\tentity,\n\t\t\t\t{\n\t\t\t\t\t[entity.primary]: currentOwnerOfNewInverseSide,\n\t\t\t\t},\n\t\t\t\tbuilder => {\n\t\t\t\t\tbuilder.addPredicates([relation.name])\n\t\t\t\t\tbuilder.addFieldValue(relation.name, null)\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t\treturn []\n\t}\n}\n"],"names":["MutationEntryNotFoundError","MutationResultType","getInsertPrimary","MutationNothingToDo","NothingToDoReason","MutationConstraintViolationError","ConstraintType","Model","CheckedPrimary"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OneHasOneOwningUpdateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport {\n\tConstraintType,\n\tgetInsertPrimary,\n\tMutationConstraintViolationError,\n\tMutationEntryNotFoundError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { UpdateBuilder } from '../../update/UpdateBuilder'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\nimport { MapperInput } from '../../types'\n\ntype Context = Model.OneHasOneOwningContext\n\nexport class OneHasOneOwningUpdateInputProcessor implements UpdateInputProcessor.HasOneRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly updateBuilder: UpdateBuilder,\n\t) {\n\t}\n\n\tpublic async connect(context: Model.OneHasOneOwningContext & { input: Input.UniqueWhere | CheckedPrimary }) {\n\t\tconst { entity, relation, targetEntity, targetRelation, input } = context\n\t\tconst [newInverseSide, err] = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\tif (err) return [err]\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)\n\t\tif (currentOwnerResult.some(it => it.error)\n\t\t\t|| (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)\n\t\t) {\n\t\t\treturn currentOwnerResult\n\t\t}\n\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...currentOwnerResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async create(context: Model.OneHasOneOwningContext & { input: MapperInput.CreateDataInput }) {\n\t\tconst { entity, relation, targetEntity, targetRelation } = context\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst createResult = await this.createInternal(context, currentInverseSide)\n\t\tconst newInverseSide = getInsertPrimary(createResult)\n\t\tif (!newInverseSide) {\n\t\t\treturn createResult\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...createResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async connectOrCreate({ input: { connect, create }, ...context }: Model.OneHasOneOwningContext & { input: MapperInput.ConnectOrCreateInput }) {\n\t\tconst { relation, targetRelation, targetEntity, entity } = context\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst [newInverseSide] = await this.mapper.getPrimaryValue(targetEntity, connect)\n\n\t\tif (newInverseSide) {\n\t\t\tconst currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)\n\t\t\tif (currentOwnerResult.some(it => it.error)\n\t\t\t\t|| (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)\n\t\t\t) {\n\t\t\t\treturn currentOwnerResult\n\t\t\t}\n\t\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\t\t\treturn async () => {\n\t\t\t\treturn [\n\t\t\t\t\t...currentOwnerResult,\n\t\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t\t]\n\t\t\t}\n\n\t\t}\n\n\t\tconst createResult = await this.createInternal({ ...context, input: create }, currentInverseSide)\n\t\tconst newInverseSideCreate = getInsertPrimary(createResult)\n\t\tif (!newInverseSideCreate) {\n\t\t\treturn createResult\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSideCreate)\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...createResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async update({ entity, relation, targetEntity, input }: Model.OneHasOneOwningContext & { input: MapperInput.UpdateDataInput }) {\n\t\treturn async () => {\n\t\t\tconst inversePrimary = await this.mapper.selectField(\n\t\t\t\tentity,\n\t\t\t\t{ [entity.primary]: this.primaryValue },\n\t\t\t\trelation.name,\n\t\t\t)\n\t\t\tif (!inversePrimary) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\treturn await this.mapper.update(targetEntity, new CheckedPrimary(inversePrimary), input)\n\t\t}\n\t}\n\n\tpublic async upsert({ entity, relation, targetEntity, input: { create, update } }: Model.OneHasOneOwningContext & { input: UpdateInputProcessor.UpsertInput }) {\n\t\tconst primary = await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\tif (!primary) {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, create)\n\t\t\tconst insertPrimary = getInsertPrimary(insertResult)\n\t\t\tif (!insertPrimary) {\n\t\t\t\treturn insertResult\n\t\t\t}\n\t\t\tthis.updateBuilder.addFieldValue(relation.name, insertPrimary)\n\t\t\treturn []\n\t\t}\n\n\t\treturn async () => {\n\t\t\treturn await this.mapper.update(targetEntity, new CheckedPrimary(primary), update)\n\t\t}\n\t}\n\n\tpublic async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {\n\t\tif (!relation.nullable) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\tconst inversePrimary = (targetRelation && !targetRelation.nullable) || relation.orphanRemoval\n\t\t\t? await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\t\t: undefined\n\t\tif (inversePrimary && targetRelation && !targetRelation.nullable && !relation.orphanRemoval) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, null)\n\n\t\tif (relation.orphanRemoval && inversePrimary) {\n\t\t\treturn async () => {\n\t\t\t\treturn await this.mapper.delete(targetEntity, new CheckedPrimary(inversePrimary))\n\t\t\t}\n\t\t}\n\n\t\treturn []\n\t}\n\n\tpublic async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {\n\t\tif (!relation.nullable && relation.joiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\treturn async () => {\n\t\t\tconst targetPrimary = await this.mapper.selectField(\n\t\t\t\tentity,\n\t\t\t\t{ [entity.primary]: this.primaryValue },\n\t\t\t\trelation.name,\n\t\t\t)\n\t\t\tif (!targetPrimary) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\treturn await this.mapper.delete(targetEntity, new CheckedPrimary(targetPrimary))\n\t\t}\n\t}\n\n\tprivate async createInternal(\n\t\t{ targetEntity, targetRelation, relation, input }: Model.OneHasOneOwningContext & { input: MapperInput.CreateDataInput },\n\t\tcurrentInverseSide: Input.PrimaryValue | undefined,\n\t): Promise<MutationResultList> {\n\t\tif (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\treturn await this.mapper.insert(targetEntity, input)\n\t}\n\n\tprivate async getCurrentInverseSide(targetRelation: Model.OneHasOneInverseRelation | null, relation: Model.OneHasOneOwningRelation, entity: Model.Entity) {\n\t\tif ((targetRelation && !targetRelation.nullable) || relation.orphanRemoval) {\n\t\t\treturn this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\t}\n\t\treturn undefined\n\t}\n\n\tprivate async cleanupOrphan(relation: Model.OneHasOneOwningRelation, targetEntity: Model.Entity, currentInverseSide: Input.PrimaryValue | undefined) {\n\t\tif (relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn await this.mapper.delete(targetEntity, { [targetEntity.primary]: currentInverseSide })\n\t\t}\n\t\treturn []\n\t}\n\n\tprivate async handleStateBeforeConnect(\n\t\t{ targetEntity, targetRelation, relation, entity }: Model.OneHasOneOwningContext,\n\t\tcurrentInverseSide: Input.PrimaryValue | undefined,\n\t\tnewInverseSide: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\n\t\tif (currentInverseSide === newInverseSide) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\n\t\tconst [currentOwnerOfNewInverseSide] = await this.mapper.getPrimaryValue(entity, {\n\t\t\t[relation.name]: { [targetEntity.primary]: newInverseSide },\n\t\t})\n\n\t\tif (currentOwnerOfNewInverseSide === this.primaryValue) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\n\t\t// orphan removal handled bellow\n\t\tif (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\tif (currentOwnerOfNewInverseSide) {\n\t\t\tif (!relation.nullable) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\n\t\t\treturn await this.mapper.updateInternal(\n\t\t\t\tentity,\n\t\t\t\tnew CheckedPrimary(currentOwnerOfNewInverseSide),\n\t\t\t\tbuilder => {\n\t\t\t\t\tbuilder.addPredicates([relation.name])\n\t\t\t\t\tbuilder.addFieldValue(relation.name, null)\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t\treturn []\n\t}\n}\n"],"names":["MutationResultType","getInsertPrimary","MutationNothingToDo","NothingToDoReason","CheckedPrimary","MutationConstraintViolationError","ConstraintType","Model"],"mappings":"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"}
|