Oracle alias generation

Issue #733 resolved
Former user created an issue

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)

  1. Log in to comment