From: Mike Bayer Date: Sun, 25 Oct 2009 01:40:23 +0000 (+0000) Subject: - Fixed a slight inaccuracy in the sharding example. X-Git-Tag: rel_0_6beta1~225 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ed83a844bb143c5b04514800907726e875bf1e82;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - 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] --- 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: