]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed a slight inaccuracy in the sharding example.
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 25 Oct 2009 01:40:17 +0000 (01:40 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 25 Oct 2009 01:40:17 +0000 (01:40 +0000)
Comparing equivalence of columns in the ORM is best
accomplished using col1.shares_lineage(col2).
[ticket:1491]

CHANGES
examples/sharding/attribute_shard.py
test/orm/sharding/test_shard.py

diff --git a/CHANGES b/CHANGES
index 09214ce19ce7b48dce5c73571b37365c351fa2c9..55ffae23ac8c38177c890c59a9729af58b818fd8 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -63,6 +63,11 @@ CHANGES
       the column will be propagated down to 
       subclasses. [ticket:1570]  This is the reverse
       situation as that of [ticket:1523], fixed in 0.5.6.
+
+    - Fixed a slight inaccuracy in the sharding example.
+      Comparing equivalence of columns in the ORM is best 
+      accomplished using col1.shares_lineage(col2).
+      [ticket:1491]
       
 0.5.6
 =====
index 2f03a5a34488874d3307102b9f010be594df241e..2ac0c88ff8cb8ae8797a5080111bf2f91b9867fa 100644 (file)
@@ -134,7 +134,13 @@ def query_chooser(query):
     # and convert to shard ids
     class FindContinent(sql.ClauseVisitor):
         def visit_binary(self, binary):
-            if binary.left is weather_locations.c.continent:
+            # "shares_lineage()" returns True if both columns refer to the same
+            # statement column, adjusting for any annotations present.
+            # (an annotation is an internal clone of a Column object
+            # and occur when using ORM-mapped attributes like 
+            # "WeatherLocation.continent"). A simpler comparison, though less accurate, 
+            # would be "binary.left.key == 'continent'".
+            if binary.left.shares_lineage(weather_locations.c.continent):
                 if binary.operator == operators.eq:
                     ids.append(shard_lookup[binary.right.value])
                 elif binary.operator == operators.in_op:
index 89e23fb759139bff3a55c8aa9aa6b665eac5608c..300e4ccf7ef8044334c189e68827ec50b2cbf853 100644 (file)
@@ -83,7 +83,7 @@ class ShardTest(TestBase):
 
             class FindContinent(sql.ClauseVisitor):
                 def visit_binary(self, binary):
-                    if binary.left is weather_locations.c.continent:
+                    if binary.left.shares_lineage(weather_locations.c.continent):
                         if binary.operator == operators.eq:
                             ids.append(shard_lookup[binary.right.value])
                         elif binary.operator == operators.in_op: