From: Mike Bayer Date: Fri, 8 Nov 2013 23:19:41 +0000 (-0500) Subject: - add proof of concept for versioning, [ticket:2861] X-Git-Tag: rel_0_9_0~135 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ac54ba0f2d8df5a76b6852841b6b3321c0e6c0e2;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - add proof of concept for versioning, [ticket:2861] --- diff --git a/examples/versioning/test_versioning.py b/examples/versioning/test_versioning.py index c1d9c98783..ca70c9ac01 100644 --- a/examples/versioning/test_versioning.py +++ b/examples/versioning/test_versioning.py @@ -3,8 +3,9 @@ from sqlalchemy.ext.declarative import declarative_base from .history_meta import Versioned, versioned_session from sqlalchemy import create_engine, Column, Integer, String, ForeignKey from sqlalchemy.orm import clear_mappers, Session, deferred, relationship -from sqlalchemy.testing import AssertsCompiledSQL, eq_ +from sqlalchemy.testing import AssertsCompiledSQL, eq_, assert_raises from sqlalchemy.testing.entities import BasicEntity, ComparableEntity +from sqlalchemy.orm import exc as orm_exc engine = None @@ -93,6 +94,35 @@ class TestVersioning(TestCase, AssertsCompiledSQL): ] ) + def test_w_mapper_versioning(self): + class SomeClass(Versioned, self.Base, ComparableEntity): + __tablename__ = 'sometable' + + id = Column(Integer, primary_key=True) + name = Column(String(50)) + + SomeClass.__mapper__.version_id_col = SomeClass.__table__.c.version + + self.create_tables() + sess = self.session + sc = SomeClass(name='sc1') + sess.add(sc) + sess.commit() + + s2 = Session(sess.bind) + sc2 = s2.query(SomeClass).first() + sc2.name = 'sc1modified' + + sc.name = 'sc1modified_again' + sess.commit() + + eq_(sc.version, 2) + + assert_raises( + orm_exc.StaleDataError, + s2.flush + ) + def test_from_null(self): class SomeClass(Versioned, self.Base, ComparableEntity): __tablename__ = 'sometable'