diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-01-10 11:43:47 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-01-10 11:43:47 -0500 |
commit | f2568b9bdedd12427aaaed393c68dcf20691ea11 (patch) | |
tree | 46d6c04de66ceeb1d84aef63d6982bdb2317e2bb /lib/sqlalchemy | |
parent | d78d2d60aa30b0b6c3c230ddf3cafda2529e6409 (diff) | |
download | sqlalchemy-f2568b9bdedd12427aaaed393c68dcf20691ea11.tar.gz |
- Fixed regression from 0.6 whereby if
"load_on_pending" relationship() flag were used
where a non-"get()" lazy clause needed to be
emitted on a pending object, it would fail
to load.
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 9 | ||||
-rw-r--r-- | lib/sqlalchemy/sql/expression.py | 15 | ||||
-rw-r--r-- | lib/sqlalchemy/sql/util.py | 8 |
3 files changed, 18 insertions, 14 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index aa744e0c1..724e7dc2a 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -305,18 +305,13 @@ class SQLCompiler(engine.Compiled): raise exc.InvalidRequestError( "A value is required for bind parameter %r" % bindparam.key) - elif bindparam.callable: - pd[name] = bindparam.callable() else: - pd[name] = bindparam.value + pd[name] = bindparam.effective_value return pd else: pd = {} for bindparam in self.bind_names: - if bindparam.callable: - pd[self.bind_names[bindparam]] = bindparam.callable() - else: - pd[self.bind_names[bindparam]] = bindparam.value + pd[self.bind_names[bindparam]] = bindparam.effective_value return pd params = property(construct_params, doc=""" diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 15d2970c2..9f2a16195 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -2606,6 +2606,21 @@ class _BindParamClause(ColumnElement): else: self.type = type_ + @property + def effective_value(self): + """Return the value of this bound parameter, + taking into account if the ``callable`` parameter + was set. + + The ``callable`` value will be evaluated + and returned if present, else ``value``. + + """ + if self.callable: + return self.callable() + else: + return self.value + def _clone(self): c = ClauseElement._clone(self) if self.unique: diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py index 33be99d87..97975441e 100644 --- a/lib/sqlalchemy/sql/util.py +++ b/lib/sqlalchemy/sql/util.py @@ -152,13 +152,7 @@ def bind_values(clause): v = [] def visit_bindparam(bind): - value = bind.value - - # evaluate callables - if callable(value): - value = value() - - v.append(value) + v.append(bind.effective_value) visitors.traverse(clause, {}, {'bindparam':visit_bindparam}) return v |