- Improved error message when query() is called with
a non-SQL /entity expression. [ticket:1476]
+
+ - Using False or 0 as a polymorphic discriminator now
+ works on the base class as well as a subclass.
+ [ticket:1440]
- sql
- Fixed a bug in extract() introduced in 0.5.4 whereby
else:
self.mapped_table = self.local_table
- if self.polymorphic_identity and not self.concrete:
+ if self.polymorphic_identity is not None and not self.concrete:
self._identity_class = self.inherits._identity_class
else:
self._identity_class = self.class_
self._all_tables = set()
self.base_mapper = self
self.mapped_table = self.local_table
- if self.polymorphic_identity:
+ if self.polymorphic_identity is not None:
self.polymorphic_map[self.polymorphic_identity] = self
self._identity_class = self.class_
@classmethod
def define_tables(cls, metadata):
global t1
- t1 = Table('t1', metadata, Column('id', Integer, primary_key=True), Column('type', Integer, nullable=False))
+ t1 = Table('t1', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('type', Integer, nullable=False)
+ )
- def test_false_discriminator(self):
+ def test_false_on_sub(self):
class Foo(object):pass
class Bar(Foo):pass
- mapper(Foo, t1, polymorphic_on=t1.c.type, polymorphic_identity=1)
- mapper(Bar, inherits=Foo, polymorphic_identity=0)
+ mapper(Foo, t1, polymorphic_on=t1.c.type, polymorphic_identity=True)
+ mapper(Bar, inherits=Foo, polymorphic_identity=False)
sess = create_session()
- f1 = Bar()
- sess.add(f1)
+ b1 = Bar()
+ sess.add(b1)
sess.flush()
- assert f1.type == 0
+ assert b1.type is False
sess.expunge_all()
assert isinstance(sess.query(Foo).one(), Bar)
+
+ def test_false_on_base(self):
+ class Ding(object):pass
+ class Bat(Ding):pass
+ mapper(Ding, t1, polymorphic_on=t1.c.type, polymorphic_identity=False)
+ mapper(Bat, inherits=Ding, polymorphic_identity=True)
+ sess = create_session()
+ d1 = Ding()
+ sess.add(d1)
+ sess.flush()
+ assert d1.type is False
+ sess.expunge_all()
+ assert sess.query(Ding).one() is not None
class PolymorphicSynonymTest(_base.MappedTest):
@classmethod