moving transaction savepoint statements to NoTransactionDelegate

This commit is contained in:
BananaMasterz 2023-07-24 15:57:09 +03:00
parent 43f75dd3af
commit 72368c9171
2 changed files with 24 additions and 5 deletions

View File

@ -3,6 +3,12 @@ import 'dart:async' show FutureOr;
import 'package:drift/drift.dart';
import 'package:drift/src/runtime/executor/helpers/results.dart';
String _defaultSavepoint(int depth) => 'SAVEPOINT s$depth';
String _defaultRelease(int depth) => 'RELEASE s$depth';
String _defaultRollbackToSavepoint(int depth) => 'ROLLBACK TO s$depth';
/// An interface that supports sending database queries. Used as a backend for
/// drift.
///
@ -132,6 +138,18 @@ class NoTransactionDelegate extends TransactionDelegate {
/// database engine.
final String rollback;
/// The statement that will create a savepoint for a given depth of a transaction
/// on this database engine.
final String Function(int depth) savepoint;
/// The statement that will release a savepoint for a given depth of a transaction
/// on this database engine.
final String Function(int depth) release;
/// The statement that will perform a rollback to a savepoint for a given depth
/// of a transaction on this database engine.
final String Function(int depth) rollbackToSavepoint;
/// Construct a transaction delegate indicating that native transactions
/// aren't supported and need to be emulated by issuing statements and
/// locking the database.
@ -139,6 +157,9 @@ class NoTransactionDelegate extends TransactionDelegate {
this.start = 'BEGIN TRANSACTION',
this.commit = 'COMMIT TRANSACTION',
this.rollback = 'ROLLBACK TRANSACTION',
this.savepoint = _defaultSavepoint,
this.release = _defaultRelease,
this.rollbackToSavepoint = _defaultRollbackToSavepoint,
});
}

View File

@ -187,11 +187,9 @@ class _StatementBasedTransactionExecutor extends _TransactionExecutor {
_StatementBasedTransactionExecutor.nested(
_StatementBasedTransactionExecutor this._parent, int depth)
: _delegate = _parent._delegate,
_startCommand = 'SAVEPOINT s$depth',
_commitCommand = _parent._db.dialect == SqlDialect.mariadb
? 'RELEASE SAVEPOINT s$depth' : 'RELEASE s$depth',
_rollbackCommand = _parent._db.dialect == SqlDialect.mariadb
? 'ROLLBACK TO SAVEPOINT s$depth' : 'ROLLBACK TO s$depth',
_startCommand = _parent._delegate.savepoint(depth),
_commitCommand = _parent._delegate.release(depth),
_rollbackCommand = _parent._delegate.rollbackToSavepoint(depth),
super(_parent._db);
@override