def rollback_to_savepoint(self, name): """Rollsback the store to a previous savepoint that was saved using :meth:`.savepoint` :param name: savepoint to move back to """ self._check_obsolete() if not is_sql_identifier(name): raise ValueError("Invalid savepoint name: %r" % name) if not name in self._savepoints: raise ValueError("Unknown savepoint: %r" % name) self.execute('ROLLBACK TO SAVEPOINT %s' % name) for savepoint in reversed(self._savepoints[:]): # Objects may have changed in this transaction. # Make sure to autorelad the original values after the rollback for obj in self._modified_object_sets.pop(): self.autoreload(obj) self._created_object_sets.pop() self._deleted_object_sets.pop() if self._savepoints.pop() == name: break
def rollback_to_savepoint(self, name): """Rollsback the store to a previous savepoint that was saved using :meth:`.savepoint` :param name: savepoint to move back to """ self._check_obsolete() if not is_sql_identifier(name): raise ValueError("Invalid savepoint name: %r" % name) if not name in self._savepoints: raise ValueError("Unknown savepoint: %r" % name) self.execute('ROLLBACK TO SAVEPOINT %s' % name) for savepoint in reversed(self._savepoints[:]): # Do the same thing that Store.rollback does for obj_info, pending in self._dirties.pop(): if pending is PENDING_ADD: del obj_info["store"] elif pending is PENDING_REMOVE: self._enable_lazy_resolving(obj_info) self._savepoints.remove(savepoint) if savepoint == name: break # Objects may have changed in this transaction. # Make sure to autorelad the original values after the rollback for obj_info in self._cache.get_cached(): self.autoreload(obj_info.get_obj())
def rollback_to_savepoint(self, name): """Rollsback the store to a previous savepoint that was saved using :meth:`.savepoint` :param name: savepoint to move back to """ self._check_obsolete() if not is_sql_identifier(name): raise ValueError("Invalid savepoint name: %r" % name) if not name in self._savepoints: raise ValueError("Unknown savepoint: %r" % name) self.execute("ROLLBACK TO SAVEPOINT %s" % name) for savepoint in reversed(self._savepoints[:]): # Objects may have changed in this transaction. # Make sure to autorelad the original values after the rollback for obj in self._modified_object_sets.pop(): self.autoreload(obj) self._created_object_sets.pop() self._deleted_object_sets.pop() if self._savepoints.pop() == name: break
def savepoint(self, name): """Creates a database savepoint. This can be rolled back to using :meth:`.rollback_to_savepoint`. :param name: name of the savepoint """ self._check_obsolete() if not is_sql_identifier(name): raise ValueError("Invalid savepoint name: %r" % name) self.execute('SAVEPOINT %s' % name) self._savepoints.append(name) self._dirties.append([])
def savepoint(self, name): """Creates a database savepoint. This can be rolled back to using :meth:`.rollback_to_savepoint`. :param name: name of the savepoint """ self._check_obsolete() if not is_sql_identifier(name): raise ValueError("Invalid savepoint name: %r" % name) self.execute('SAVEPOINT %s' % name) self._savepoints.append(name) self._pending_count.append(0)
def rollback_to_savepoint(self, name): """Rollsback the store to a previous savepoint that was saved using :meth:`.savepoint` :param name: savepoint to move back to """ self._check_obsolete() if not is_sql_identifier(name): raise ValueError("Invalid savepoint name: %r" % name) if not name in self._savepoints: raise ValueError("Unknown savepoint: %r" % name) self.execute('ROLLBACK TO SAVEPOINT %s' % name) for savepoint in reversed(self._savepoints[:]): self._savepoints.remove(savepoint) self._pending_count.pop() if savepoint == name: break # Objects may have changed in this transaction. # Make sure to autorelad the original values after the rollback for obj_info in self._cache.get_cached(): self.autoreload(obj_info.get_obj())