- changed status to resolved
Oracle alias generation
Issue #733
resolved
Following code produces sql that Oracle does not like. I believe it got broken in r2928
from sqlalchemy import *
from sqlalchemy.orm import mapper, relation, sessionmaker
engine = create_engine('oracle://tiger:scott@localhost', echo=False)
metadata = MetaData(engine)
class User(object): pass
class Address(object): pass
class AddressType(object): pass
def setup():
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(30), nullable=False),
)
address_types = Table('address_types', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(30), nullable=False),
)
addresses = Table('addresses', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', None, ForeignKey('users.id')),
Column('address_type_id', Integer, ForeignKey('address_types.id')),
Column('email_address', String(50), nullable=False))
metadata.drop_all()
metadata.create_all()
mapper(AddressType, address_types)
mapper(Address, addresses, properties={
'address_type': relation(AddressType, lazy=False),
})
mapper(User, users, properties={
'addresses': relation(Address, backref="user")
})
def test():
Session = sessionmaker(bind=engine, autoflush=True, transactional=True)
session = Session()
at = AddressType()
at.id = 1
at.name = 'Work'
ad = Address()
ad.id = 1
ad.email_address = 'hello@world.com'
ad.address_type = at
bob = User()
bob.id = 44
bob.name = 'Bob'
bob.addresses.append(ad)
session.save(bob)
session.commit()
session = Session()
qry = session.query(User)
bob = qry.get(44)
assert bob.name == 'Bob'
assert bob.addresses[0](0).address_type.name == 'Work'
if __name__ == '__main__':
setup()
test()
Produced sql is:
SELECT address_types_1.id AS address_types_1_id,
address_types_1.name AS address_types_1_name,
addresses.id AS addresses_id,
addresses.user_id AS addresses_user_id,
addresses.address_type_id AS addresses_address_type_id,
addresses.email_address AS addresses_email_address
FROM addresses LEFT OUTER JOIN address_types {ANON 16161584 address_types} ON address_types_1.id = addresses.address_type_id
WHERE :param_2 = addresses.user_id
ORDER BY addresses.rowid, address_types_1.id
attached patch fixes it for me but it causes some of the tests to fail.
Comments (2)
-
repo owner -
repo owner - removed milestone
Removing milestone: 0.4.0 (automated comment)
- Log in to comment
this was some missing code in the
visit_alias()
method of oracle dialect, SQL compile test and fix patched in 66142098952f6c1027dbede243a25c003671dee3.