Beispiel #1
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[:]):
            # 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
Beispiel #2
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[:]):
            # 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())
Beispiel #3
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[:]):
            # 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
Beispiel #4
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[:]):
            # 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())
Beispiel #5
0
    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([])
Beispiel #6
0
    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)
Beispiel #7
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())