executeMutationWithRelationsAtomic method
Future<Map<String, dynamic> ?>
executeMutationWithRelationsAtomic(
- JsonQuery query, {
- IsolationLevel? isolationLevel,
Execute a mutation with relation operations inside a transaction.
This ensures atomicity - if any relation mutation fails, the entire operation is rolled back.
Example:
final result = await executor.executeMutationWithRelationsAtomic(
JsonQueryBuilder()
.model('SlotOfAppointment')
.action(QueryAction.update)
.where({'id': 'slot-123'})
.data({
'users': {
'connect': [{'id': 'user-1'}],
'disconnect': [{'id': 'user-2'}],
},
})
.build(),
);
Implementation
Future<Map<String, dynamic>?> executeMutationWithRelationsAtomic(
JsonQuery query, {
IsolationLevel? isolationLevel,
}) async {
return executeInTransaction<Map<String, dynamic>?>((txExecutor) async {
// Compile with relation support
final compiled = compiler.compileWithRelations(query);
// Execute main mutation
final result = await txExecutor.transaction.queryRaw(compiled.mainQuery);
// Execute relation mutations
for (final relationQuery in compiled.relationMutations) {
await txExecutor.transaction.executeRaw(relationQuery);
}
// Return the created/updated record
if (result.rows.isNotEmpty) {
return _resultSetToMaps(result).first;
}
return null;
}, isolationLevel: isolationLevel);
}