From: Mike Bayer Date: Sat, 18 May 2019 21:39:22 +0000 (-0400) Subject: Repair anonymous label comparison X-Git-Tag: rel_1_4_0b1~870 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=614dfb5f5b5a2427d5d6ce0bc5f34bf0581bf698;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Repair anonymous label comparison Add a test for comparison of named labels vs. anonymous Change-Id: I57ada3cf79d982ff32a298cf73a748d353b63dac --- diff --git a/lib/sqlalchemy/sql/clause_compare.py b/lib/sqlalchemy/sql/clause_compare.py index 87f9fb2df5..0ea981f1e2 100644 --- a/lib/sqlalchemy/sql/clause_compare.py +++ b/lib/sqlalchemy/sql/clause_compare.py @@ -228,7 +228,7 @@ class StructureComparatorStrategy(object): def compare_label(self, elements, left, right, **kw): return left._type._compare_type_affinity(right._type) and ( left.name == right.name - if not isinstance(left, elements._anonymous_label) + if not isinstance(left.name, elements._anonymous_label) else isinstance(right.name, elements._anonymous_label) ) diff --git a/test/sql/test_compare.py b/test/sql/test_compare.py index 67072a6407..3608851ed6 100644 --- a/test/sql/test_compare.py +++ b/test/sql/test_compare.py @@ -562,6 +562,17 @@ class CompareClausesTest(fixtures.TestBase): is_false(l1.compare(l2)) + def test_compare_labels(self): + is_true(column("q").label(None).compare(column("q").label(None))) + + is_false(column("q").label("foo").compare(column("q").label(None))) + + is_false(column("q").label(None).compare(column("q").label("foo"))) + + is_false(column("q").label("foo").compare(column("q").label("bar"))) + + is_true(column("q").label("foo").compare(column("q").label("foo"))) + def test_compare_binds(self): b1 = bindparam("foo", type_=Integer()) b2 = bindparam("foo", type_=Integer())