may break queries with literal expressions that do not have labels
applied (i.e. literal('foo'), etc.)
[ticket:1568]
+
+ - relation primaryjoin and secondaryjoin now check that they
+ are column-expressions, not just clause elements. this prohibits
+ things like FROM expressions being placed there directly.
+ [ticket:1622]
- the "dont_load=True" flag on Session.merge() is deprecated
and is now "load=False".
for attr in ('primaryjoin', 'secondaryjoin'):
val = getattr(self, attr)
if val is not None:
- util.assert_arg_type(val, sql.ClauseElement, attr)
+ util.assert_arg_type(val, sql.ColumnElement, attr)
setattr(self, attr, _orm_deannotate(val))
if self.order_by is not False and self.order_by is not None:
c2 = relation(C1, primaryjoin="x"=="y")
assert_raises(sa.exc.ArgumentError, compile_mappers)
-
+
+ def test_only_column_elements(self):
+ m = MetaData()
+ t1 = Table('t1', m,
+ Column('id', Integer, primary_key=True),
+ Column('foo_id', Integer, ForeignKey('t2.id')),
+ )
+ t2 = Table('t2', m,
+ Column('id', Integer, primary_key=True),
+ )
+ class C1(object):
+ pass
+ class C2(object):
+ pass
+
+ mapper(C1, t1, properties={'c2':relation(C2, primaryjoin=t1.join(t2))})
+ mapper(C2, t2)
+ assert_raises(sa.exc.ArgumentError, compile_mappers)
def test_fk_error_raised(self):
m = MetaData()