Add PDB.release_savepoint.
This commit is contained in:
parent
bcd13b9ae4
commit
108ba8bd95
1 changed files with 25 additions and 0 deletions
|
@ -710,6 +710,31 @@ class PDBSQLMixin:
|
||||||
tables = set(row[0] for row in cur.fetchall())
|
tables = set(row[0] for row in cur.fetchall())
|
||||||
return tables
|
return tables
|
||||||
|
|
||||||
|
def release_savepoint(self, savepoint, allow_commit=False):
|
||||||
|
'''
|
||||||
|
Releasing a savepoint removes that savepoint from the timeline, so that
|
||||||
|
you can no longer roll back to it. Then your choices are to commit
|
||||||
|
everything, or roll back to a previous point. If you release the
|
||||||
|
earliest savepoint, the database will commit.
|
||||||
|
'''
|
||||||
|
if savepoint not in self.savepoints:
|
||||||
|
self.log.warn('Tried to release nonexistent savepoint %s.', savepoint)
|
||||||
|
return
|
||||||
|
|
||||||
|
is_commit = savepoint == self.savepoints[0]
|
||||||
|
if is_commit and not allow_commit:
|
||||||
|
self.log.debug('Not committing %s without allow_commit=True.', savepoint)
|
||||||
|
return
|
||||||
|
|
||||||
|
if is_commit:
|
||||||
|
# We want to perform the on_commit_queue so let's use our commit
|
||||||
|
# method instead of allowing sql's release to commit.
|
||||||
|
self.commit()
|
||||||
|
else:
|
||||||
|
self.log.debug('Releasing savepoint %s', savepoint)
|
||||||
|
self.sql_execute(f'RELEASE "{savepoint}"')
|
||||||
|
self.savepoints = helpers.slice_before(self.savepoints, savepoint)
|
||||||
|
|
||||||
def rollback(self, savepoint=None):
|
def rollback(self, savepoint=None):
|
||||||
'''
|
'''
|
||||||
Given a savepoint, roll the database back to the moment before that
|
Given a savepoint, roll the database back to the moment before that
|
||||||
|
|
Loading…
Reference in a new issue