summaryrefslogtreecommitdiff
path: root/test/orm
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-01-31 19:14:08 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2014-01-31 19:14:08 -0500
commit6b3ecd14eae1a557cffd19da6c82d967586a6d74 (patch)
tree362fa6f32cb2f7a0f4d32722259ef573b222cdd2 /test/orm
parentb360dbf7ebb7cc5bb290847fdd9818d205244a94 (diff)
downloadsqlalchemy-6b3ecd14eae1a557cffd19da6c82d967586a6d74.tar.gz
- Added a new parameter :paramref:`.Operators.op.is_comparison`. This
flag allows a custom op from :meth:`.Operators.op` to be considered as a "comparison" operator, thus usable for custom :paramref:`.relationship.primaryjoin` conditions.
Diffstat (limited to 'test/orm')
-rw-r--r--test/orm/test_relationships.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/orm/test_relationships.py b/test/orm/test_relationships.py
index 8f7e2bd55..ccd54284a 100644
--- a/test/orm/test_relationships.py
+++ b/test/orm/test_relationships.py
@@ -1517,6 +1517,45 @@ class TypedAssociationTable(fixtures.MappedTest):
assert t3.count().scalar() == 1
+class CustomOperatorTest(fixtures.MappedTest, AssertsCompiledSQL):
+ """test op() in conjunction with join conditions"""
+
+ run_create_tables = run_deletes = None
+
+ __dialect__ = 'default'
+
+ @classmethod
+ def define_tables(cls, metadata):
+ Table('a', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('foo', String(50))
+ )
+ Table('b', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('foo', String(50))
+ )
+
+ def test_join_on_custom_op(self):
+ class A(fixtures.BasicEntity):
+ pass
+ class B(fixtures.BasicEntity):
+ pass
+
+ mapper(A, self.tables.a, properties={
+ 'bs': relationship(B,
+ primaryjoin=self.tables.a.c.foo.op(
+ '&*', is_comparison=True
+ )(foreign(self.tables.b.c.foo)),
+ viewonly=True
+ )
+ })
+ mapper(B, self.tables.b)
+ self.assert_compile(
+ Session().query(A).join(A.bs),
+ "SELECT a.id AS a_id, a.foo AS a_foo FROM a JOIN b ON a.foo &* b.foo"
+ )
+
+
class ViewOnlyHistoryTest(fixtures.MappedTest):
@classmethod
def define_tables(cls, metadata):