summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-12-28 19:54:58 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-12-28 19:54:58 +0000
commitd245397bd2ba562993f1c9b5880f1c818050585c (patch)
tree9ab47b5a0b15e9bf21a5132050f548fd17e07806 /lib
parenta848e2ac4719ef8c1fdedd8ee1dd57daa18969b2 (diff)
downloadsqlalchemy-d245397bd2ba562993f1c9b5880f1c818050585c.tar.gz
- Fixed shard_id argument on ShardedSession.execute().
[ticket:1072]
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/orm/query.py2
-rw-r--r--lib/sqlalchemy/orm/session.py37
-rw-r--r--lib/sqlalchemy/orm/shard.py2
3 files changed, 15 insertions, 26 deletions
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index 5a0c3faff..876471c13 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -1101,7 +1101,7 @@ class Query(object):
return self._execute_and_instances(context)
def _execute_and_instances(self, querycontext):
- result = self.session.execute(querycontext.statement, params=self._params, mapper=self._mapper_zero_or_none(), _state=self._refresh_state)
+ result = self.session.execute(querycontext.statement, params=self._params, mapper=self._mapper_zero_or_none())
return self.instances(result, querycontext)
def instances(self, cursor, __context=None):
diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py
index 3bc3fb4fc..3be8dac39 100644
--- a/lib/sqlalchemy/orm/session.py
+++ b/lib/sqlalchemy/orm/session.py
@@ -690,7 +690,7 @@ class Session(object):
self.transaction.prepare()
- def connection(self, mapper=None, clause=None, _state=None):
+ def connection(self, mapper=None, clause=None):
"""Return the active Connection.
Retrieves the ``Connection`` managing the current transaction. Any
@@ -712,7 +712,7 @@ class Session(object):
Optional, any ``ClauseElement``
"""
- return self.__connection(self.get_bind(mapper, clause, _state))
+ return self.__connection(self.get_bind(mapper, clause))
def __connection(self, engine, **kwargs):
if self.transaction is not None:
@@ -720,7 +720,7 @@ class Session(object):
else:
return engine.contextual_connect(**kwargs)
- def execute(self, clause, params=None, mapper=None, _state=None):
+ def execute(self, clause, params=None, mapper=None, **kw):
"""Execute a clause within the current transaction.
Returns a ``ResultProxy`` of execution results. `autocommit` Sessions
@@ -741,21 +741,23 @@ class Session(object):
mapper
Optional, a ``mapper`` or mapped class
- _state
- Optional, an instance of a mapped class
-
+ \**kw
+ Additional keyword arguments are sent to :method:`get_bind()`
+ which locates a connectable to use for the execution.
+ Subclasses of :class:`Session` may override this.
+
"""
clause = expression._literal_as_text(clause)
- engine = self.get_bind(mapper, clause=clause, _state=_state)
+ engine = self.get_bind(mapper, clause=clause, **kw)
return self.__connection(engine, close_with_result=True).execute(
clause, params or {})
- def scalar(self, clause, params=None, mapper=None, _state=None):
+ def scalar(self, clause, params=None, mapper=None):
"""Like execute() but return a scalar result."""
- engine = self.get_bind(mapper, clause=clause, _state=_state)
+ engine = self.get_bind(mapper, clause=clause)
return self.__connection(engine, close_with_result=True).scalar(
clause, params or {})
@@ -838,7 +840,7 @@ class Session(object):
"""
self.__binds[table] = bind
- def get_bind(self, mapper, clause=None, _state=None):
+ def get_bind(self, mapper, clause=None):
"""Return an engine corresponding to the given arguments.
All arguments are optional.
@@ -849,11 +851,8 @@ class Session(object):
clause
Optional, A ClauseElement (i.e. select(), text(), etc.)
- _state
- Optional, SA internal representation of a mapped instance
-
"""
- if mapper is clause is _state is None:
+ if mapper is clause is None:
if self.bind:
return self.bind
else:
@@ -862,16 +861,10 @@ class Session(object):
"Connection, and no context was provided to locate "
"a binding.")
- s_mapper = _state is not None and _state_mapper(_state) or None
c_mapper = mapper is not None and _class_to_mapper(mapper) or None
# manually bound?
if self.__binds:
- if s_mapper:
- if s_mapper.base_mapper in self.__binds:
- return self.__binds[s_mapper.base_mapper]
- elif s_mapper.mapped_table in self.__binds:
- return self.__binds[s_mapper.mapped_table]
if c_mapper:
if c_mapper.base_mapper in self.__binds:
return self.__binds[c_mapper.base_mapper]
@@ -888,8 +881,6 @@ class Session(object):
if isinstance(clause, sql.expression.ClauseElement) and clause.bind:
return clause.bind
- if s_mapper and s_mapper.mapped_table.bind:
- return s_mapper.mapped_table.bind
if c_mapper and c_mapper.mapped_table.bind:
return c_mapper.mapped_table.bind
@@ -898,8 +889,6 @@ class Session(object):
context.append('mapper %s' % c_mapper)
if clause is not None:
context.append('SQL expression')
- if _state is not None:
- context.append('state %r' % _state)
raise sa_exc.UnboundExecutionError(
"Could not locate a bind configured on %s or this Session" % (
diff --git a/lib/sqlalchemy/orm/shard.py b/lib/sqlalchemy/orm/shard.py
index f769b206f..b59d284c2 100644
--- a/lib/sqlalchemy/orm/shard.py
+++ b/lib/sqlalchemy/orm/shard.py
@@ -65,7 +65,7 @@ class ShardedSession(Session):
else:
return self.get_bind(mapper, shard_id=shard_id, instance=instance).contextual_connect(**kwargs)
- def get_bind(self, mapper, shard_id=None, instance=None, clause=None):
+ def get_bind(self, mapper, shard_id=None, instance=None, clause=None, **kw):
if shard_id is None:
shard_id = self.shard_chooser(mapper, instance, clause=clause)
return self.__binds[shard_id]