summaryrefslogtreecommitdiff
path: root/test/sql/test_utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/sql/test_utils.py')
-rw-r--r--test/sql/test_utils.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/test/sql/test_utils.py b/test/sql/test_utils.py
new file mode 100644
index 000000000..09d7e98af
--- /dev/null
+++ b/test/sql/test_utils.py
@@ -0,0 +1,78 @@
+from sqlalchemy.testing import fixtures, is_true, is_false
+from sqlalchemy import MetaData, Table, Column, Integer
+from sqlalchemy import and_, or_
+from sqlalchemy.sql.elements import ClauseList
+from sqlalchemy.sql import operators
+
+
+class CompareClausesTest(fixtures.TestBase):
+ def setup(self):
+ m = MetaData()
+ self.a = Table(
+ 'a', m,
+ Column('x', Integer),
+ Column('y', Integer)
+ )
+
+ self.b = Table(
+ 'b', m,
+ Column('y', Integer),
+ Column('z', Integer)
+ )
+
+ def test_compare_clauselist_associative(self):
+
+ l1 = and_(
+ self.a.c.x == self.b.c.y,
+ self.a.c.y == self.b.c.z
+ )
+
+ l2 = and_(
+ self.a.c.y == self.b.c.z,
+ self.a.c.x == self.b.c.y,
+ )
+
+ l3 = and_(
+ self.a.c.x == self.b.c.z,
+ self.a.c.y == self.b.c.y
+ )
+
+ is_true(l1.compare(l1))
+ is_true(l1.compare(l2))
+ is_false(l1.compare(l3))
+
+ def test_compare_clauselist_not_associative(self):
+
+ l1 = ClauseList(
+ self.a.c.x, self.a.c.y, self.b.c.y, operator=operators.sub)
+
+ l2 = ClauseList(
+ self.b.c.y, self.a.c.x, self.a.c.y, operator=operators.sub)
+
+ is_true(l1.compare(l1))
+ is_false(l1.compare(l2))
+
+ def test_compare_clauselist_assoc_different_operator(self):
+
+ l1 = and_(
+ self.a.c.x == self.b.c.y,
+ self.a.c.y == self.b.c.z
+ )
+
+ l2 = or_(
+ self.a.c.y == self.b.c.z,
+ self.a.c.x == self.b.c.y,
+ )
+
+ is_false(l1.compare(l2))
+
+ def test_compare_clauselist_not_assoc_different_operator(self):
+
+ l1 = ClauseList(
+ self.a.c.x, self.a.c.y, self.b.c.y, operator=operators.sub)
+
+ l2 = ClauseList(
+ self.a.c.x, self.a.c.y, self.b.c.y, operator=operators.div)
+
+ is_false(l1.compare(l2))
+