diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-04-23 18:38:01 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-04-23 18:38:01 -0400 |
| commit | 02fa8bacaa69f1a4b246bed0f0b89998e33ae847 (patch) | |
| tree | 4879a8c0384d659cca11229e4f4f9023775ac57a /lib/sqlalchemy/ext | |
| parent | 24e6c56da8cd38a203021639172da0f6fad87f3b (diff) | |
| download | sqlalchemy-02fa8bacaa69f1a4b246bed0f0b89998e33ae847.tar.gz | |
- added Query.with_session() method, switches
Query to use a different session.
- horizontal shard query should use execution
options per connection as per [ticket:2131]
Diffstat (limited to 'lib/sqlalchemy/ext')
| -rw-r--r-- | lib/sqlalchemy/ext/horizontal_shard.py | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/lib/sqlalchemy/ext/horizontal_shard.py b/lib/sqlalchemy/ext/horizontal_shard.py index dfd471c78..6aafb2274 100644 --- a/lib/sqlalchemy/ext/horizontal_shard.py +++ b/lib/sqlalchemy/ext/horizontal_shard.py @@ -40,20 +40,21 @@ class ShardedQuery(Query): return q def _execute_and_instances(self, context): - if self._shard_id is not None: - context.attributes['shard_id'] = self._shard_id - result = self.session.connection( + def iter_for_shard(shard_id): + context.attributes['shard_id'] = shard_id + result = self._connection_from_session( mapper=self._mapper_zero(), - shard_id=self._shard_id).execute(context.statement, self._params) + shard_id=shard_id).execute( + context.statement, + self._params) return self.instances(result, context) + + if self._shard_id is not None: + return iter_for_shard(self._shard_id) else: partial = [] for shard_id in self.query_chooser(self): - context.attributes['shard_id'] = shard_id - result = self.session.connection( - mapper=self._mapper_zero(), - shard_id=shard_id).execute(context.statement, self._params) - partial = partial + list(self.instances(result, context)) + partial.extend(iter_for_shard(shard_id)) # if some kind of in memory 'sorting' # were done, this is where it would happen |
