My understanding of this query_chooser is that it's used when you want
to execute orm's sql rather than raw sql.
I don't quite understand what is visit_binary function do from
attribute_shard.py example. What does it mean binary.operator,
binary.left, binary.right.clause and query._criterion?
The sharding design behind our application is that we have a master
lookup table and shards. What shard to execute sql is based on
querying master lookup table.
taken from sqlalchemy attribute_shard.py example:
def query_chooser(query):
ids = []
# here we will traverse through the query's criterion, searching
# for SQL constructs. we'll grab continent names as we find them
# and convert to shard ids
class FindContinent(sql.ClauseVisitor):
def visit_binary(self, binary):
if binary.left is weather_locations.c.continent:
if binary.operator == operators.eq:
ids.append(shard_lookup[binary.right.value])
elif binary.operator == operators.in_op:
for bind in binary.right.clauses:
ids.append(shard_lookup[bind.value])
FindContinent().traverse(query._criterion)
if len(ids) == 0:
return ['north_america', 'asia', 'europe', 'south_america']
else:
return ids
thank you.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---