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="n...@unique.com", 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="n...@unique.com", 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 sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to