Sorry Michael, 'self-contained' wasn't a proper term for that test
given that it required an initial DB state containing a single row.
I've modified your version to try and reproduce the bug.
Since yours didn't use elixir at all and I'm not familiar with
elixir's internals, I was able to reproduce only what I believe to be
the equivalent in sqlalchemy. Please note you'll need to create a
mysql database and fill in the connection string, as the test does not
fail with sqlite!
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
e = create_engine('mysql://user:p...@localhost/test', echo=True)
Base = declarative_base()
class InviteCode(Base):
__tablename__ = 'test_invite_codes'
id = Column(Integer, primary_key=True)
used = Column(Integer, default=0)
users = relationship("User", backref="invite_code")
class User(Base):
__tablename__ = 'test_users'
id = Column(Integer, primary_key=True)
invite_code_id = Column(Integer,
ForeignKey('test_invite_codes.id'))
email = Column(String(128), unique=True)
Base.metadata.create_all(e)
session = Session(e, autocommit=True)
session.query(User).delete()
session.query(InviteCode).delete()
invite_code = InviteCode()
session.add(invite_code)
session.flush()
assert invite_code.used == 0
session.close()
session.begin()
user_row = User(email="[email protected]", invite_code_id=None)
session.add(user_row)
session.commit()
invite_code = session.query(InviteCode).first()
assert invite_code.used == 0
session.begin()
invite_code.used = invite_code.used + 1
session.add(invite_code)
session.flush()
user_row_2 = User(email="[email protected]", invite_code_id=None)
session.add(user_row_2)
rolled_back = False
try:
session.commit()
except:
rolled_back = True
session.rollback()
assert rolled_back
assert invite_code.used == 0
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.