From ed83a844bb143c5b04514800907726e875bf1e82 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 25 Oct 2009 01:40:23 +0000 Subject: [PATCH] - 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] --- CHANGES | 5 +++++ examples/sharding/attribute_shard.py | 8 +++++++- test/orm/sharding/test_shard.py | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 5697efc993..5a3ba9c45c 100644 --- a/CHANGES +++ b/CHANGES @@ -658,6 +658,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 ===== diff --git a/examples/sharding/attribute_shard.py b/examples/sharding/attribute_shard.py index 2f03a5a344..2ac0c88ff8 100644 --- a/examples/sharding/attribute_shard.py +++ b/examples/sharding/attribute_shard.py @@ -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: diff --git a/test/orm/sharding/test_shard.py b/test/orm/sharding/test_shard.py index e8ffaa7cad..06a38848bd 100644 --- a/test/orm/sharding/test_shard.py +++ b/test/orm/sharding/test_shard.py @@ -87,7 +87,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: -- 2.47.2