nah ill just take the "if discriminator" line out.  feel free to try  
that locally.

On Jan 6, 2008, at 4:51 PM, Dave Harrison wrote:

>
> Yeah once I'd worked it out I converted the field over to being an
> int field, just didn't see this one coming :-) Maybe something worth
> adding into the doco if it's going to stick around ?
>
> On Monday 07 January 2008 02:03:19 Michael Bayer wrote:
>> yeah thats line 1303 of mapper.py.  i think i might have made that
>> change right in 0.4.2 thinking, nobody would use a boolean "False" as
>> a discriminator....any chance you can go with some plain int or
>> string for that ?
>>
>> On Jan 5, 2008, at 11:47 PM, Dave Harrison wrote:
>>> Hey all,
>>>
>>> More fun with inheritance and mappers.  In the following situation
>>> where the polymorphic type is a Boolean, the mapper for the object
>>> that matches on False incorrectly returns the parent object.
>>>
>>> Cheers
>>> Dave
>>>
>>> ------------------------------
>>> -- testapi.py ----------------
>>> ------------------------------
>>>
>>> from sqlalchemy import *
>>> from sqlalchemy.orm import *
>>>
>>> session = scoped_session(
>>>   sessionmaker(autoflush=False, transactional=True)
>>> )
>>> mapper = session.mapper
>>> metadata = MetaData()
>>>
>>> ANIMAL_TYPE_DOG = True
>>> ANIMAL_TYPE_CAT = False
>>>
>>> VET_TYPE_CITY = 1
>>> VET_TYPE_COUNTRY = 2
>>>
>>> animalTable = Table(
>>>   'animal',
>>>   metadata,
>>>   Column('id', Integer, primary_key=True),
>>>   Column('type', Boolean, nullable=False),
>>>   Column('name', String(100), nullable=False),
>>>   Column('vet_id', Integer, ForeignKey('vet.id')),
>>> )
>>>
>>> vetTable = Table(
>>>   'vet',
>>>   metadata,
>>>   Column('id', Integer, primary_key=True),
>>>   Column('address', String(100), nullable=False),
>>>   Column('kennel', Boolean, nullable=False),
>>> )
>>>
>>> class _Animal(object):
>>>   pass
>>> class Cat(_Animal):
>>>   pass
>>> class Dog(_Animal):
>>>   pass
>>> class Vet(object):
>>>   pass
>>>
>>> vetMapper = mapper(
>>>   Vet,
>>>   vetTable,
>>>   properties = {
>>>       "animals": relation(
>>>           _Animal,
>>>           backref=backref("vet", uselist=False),
>>>           cascade="all, delete-orphan"
>>>       ),
>>>   }
>>> )
>>>
>>> animalMapper = mapper(
>>>   _Animal,
>>>   animalTable,
>>>   polymorphic_on=animalTable.c.type,
>>> )
>>> mapper(
>>>   Dog,
>>>   inherits=animalMapper,
>>>   polymorphic_identity=ANIMAL_TYPE_DOG,
>>> )
>>> mapper(
>>>   Cat,
>>>   inherits=animalMapper,
>>>   polymorphic_identity=ANIMAL_TYPE_CAT,
>>> )
>>>
>>> def connect(uri):
>>>   engine = create_engine(uri, strategy="threadlocal")
>>>   metadata.bind = engine
>>>   return engine
>>>
>>> def create():
>>>   metadata.create_all()
>>>
>>> def drop():
>>>   metadata.drop_all()
>>>
>>> ------------------------------
>>> -- test.py ----------------
>>> ------------------------------
>>>
>>> import sys
>>> import testapi as db
>>>
>>> DB = "sqlite:///memory"
>>> db.connect(DB)
>>> db.create()
>>>
>>> v = db.Vet()
>>> v.address = "12 Foo St"
>>> v.kennel = True
>>>
>>> c1 = db.Cat()
>>> c1.name = "muffin"
>>>
>>> c2 = db.Cat()
>>> c2.name = "bagel"
>>>
>>> d1 = db.Dog()
>>> d1.name = "rex"
>>>
>>> d2 = db.Dog()
>>> d2.name = "bill"
>>>
>>> db.session.flush()
>>> db.session.clear()
>>>
>>> for d in db.Query(db.Dog).all():
>>>   v.animals.append(d)
>>> for c in db.Query(db.Cat).all():
>>>   v.animals.append(c)
>>>
>>> db.session.flush()
>>> db.session.clear()
>>>
>>> v = db.Query(db.Vet).first()
>>> for a in v.animals:
>>>   print a
>>
>>
>
> >


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to