On Mon, Oct 20, 2008 at 7:46 PM, Michael Bayer <[EMAIL PROTECTED]> wrote:
>
> its not a known issue but sounds like a bug.   a very concise test
> case which we can use as a unit test would help here.

I hope this is good enough:



from sqlalchemy import *
from sqlalchemy.orm import *

engine = create_engine('sqlite://', echo=True)
metadata =MetaData(engine)
Session = scoped_session(sessionmaker(bind=engine))

refugees_table = Table('refugee', metadata,
    Column('refugee_fid', Integer, primary_key=True),
    Column('refugee_name', Unicode, key='name'))

offices_table = Table('office', metadata,
    Column('office_fid', Integer, primary_key=True),
    Column('office_name', Unicode, key='name'))

pjoin = polymorphic_union({
    'refugee': refugees_table,
    'office': offices_table
}, 'type', 'pjoin')

metadata.create_all()

class Location(object):
    pass

class Refugee(Location):
    pass

class Office(Location):
    pass

location_mapper = mapper(Location, pjoin, polymorphic_on=pjoin.c.type,
                         polymorphic_identity='location')
refugee_mapper  = mapper(Refugee, refugees_table, inherits=location_mapper,
                         concrete=True, polymorphic_identity='refugee')
office_mapper   = mapper(Office, offices_table, inherits=location_mapper,
                         concrete=True, polymorphic_identity='office')

engine.execute("insert into refugee values(1, \"refugee1\")")
engine.execute("insert into refugee values(2, \"refugee2\")")
engine.execute("insert into office values(1, \"office1\")")
engine.execute("insert into office values(2, \"office2\")")

# these two pass, good!
assert Session.query(Refugee).get(1).name == "refugee1"
assert Session.query(Refugee).get(2).name == "refugee2"

#assert Session.query(Office).get(1).office_name == "office1"
#assert Session.query(Office).get(2).office_name == "office2"

# these two fail, bad!
assert Session.query(Office).get(1).name == "office1"
assert Session.query(Office).get(2).name == "office2"

--
Eric

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
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
-~----------~----~----~----~------~----~------~--~---

from sqlalchemy import *
from sqlalchemy.orm import *

engine = create_engine('sqlite://', echo=True)
metadata =MetaData(engine)
Session = scoped_session(sessionmaker(bind=engine))

refugees_table = Table('refugee', metadata,
    Column('refugee_fid', Integer, primary_key=True),
    Column('refugee_name', Unicode, key='name'))

offices_table = Table('office', metadata,
    Column('office_fid', Integer, primary_key=True),
    Column('office_name', Unicode, key='name'))

pjoin = polymorphic_union({
    'refugee': refugees_table,
    'office': offices_table
}, 'type', 'pjoin')

metadata.create_all()

class Location(object):
    pass

class Refugee(Location):
    pass

class Office(Location):
    pass

location_mapper = mapper(Location, pjoin, polymorphic_on=pjoin.c.type,
                         polymorphic_identity='location')
refugee_mapper  = mapper(Refugee, refugees_table, inherits=location_mapper,
                         concrete=True, polymorphic_identity='refugee')
office_mapper   = mapper(Office, offices_table, inherits=location_mapper,
                         concrete=True, polymorphic_identity='office')

engine.execute("insert into refugee values(1, \"refugee1\")")
engine.execute("insert into refugee values(2, \"refugee2\")")
engine.execute("insert into office values(1, \"office1\")")
engine.execute("insert into office values(2, \"office2\")")

# these two pass, good!
assert Session.query(Refugee).get(1).name == "refugee1"
assert Session.query(Refugee).get(2).name == "refugee2"

#assert Session.query(Office).get(1).office_name == "office1"
#assert Session.query(Office).get(2).office_name == "office2"

# these two fail, bad!
assert Session.query(Office).get(1).name == "office1"
assert Session.query(Office).get(2).name == "office2"

Reply via email to