diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-01-28 14:20:25 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-01-28 14:20:25 -0500 |
commit | c6e07f6a591b7172382370a09ca511e94d239723 (patch) | |
tree | 92adb4058910c90a080a777c321d7597ab4e4605 /lib/sqlalchemy/sql/compiler.py | |
parent | 029ae72b2fffc5a69acf7fc610377cd0a148870e (diff) | |
download | sqlalchemy-c6e07f6a591b7172382370a09ca511e94d239723.tar.gz |
- [bug] Fixed issue where the "required" exception
would not be raised for bindparam() with required=True,
if the statement were given no parameters at all.
[ticket:2381]
Diffstat (limited to 'lib/sqlalchemy/sql/compiler.py')
-rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index c63ae1aea..93e2473d9 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -289,7 +289,7 @@ class SQLCompiler(engine.Compiled): def sql_compiler(self): return self - def construct_params(self, params=None, _group_number=None): + def construct_params(self, params=None, _group_number=None, _check=True): """return a dictionary of bind parameter keys and values""" if params: @@ -299,29 +299,40 @@ class SQLCompiler(engine.Compiled): pd[name] = params[bindparam.key] elif name in params: pd[name] = params[name] - elif bindparam.required: + elif _check and bindparam.required: if _group_number: raise exc.InvalidRequestError( - "A value is required for bind parameter %r, " - "in parameter group %d" % - (bindparam.key, _group_number)) + "A value is required for bind parameter %r, " + "in parameter group %d" % + (bindparam.key, _group_number)) else: raise exc.InvalidRequestError( - "A value is required for bind parameter %r" - % bindparam.key) + "A value is required for bind parameter %r" + % bindparam.key) else: pd[name] = bindparam.effective_value return pd else: pd = {} for bindparam in self.bind_names: + if _check and bindparam.required: + if _group_number: + raise exc.InvalidRequestError( + "A value is required for bind parameter %r, " + "in parameter group %d" % + (bindparam.key, _group_number)) + else: + raise exc.InvalidRequestError( + "A value is required for bind parameter %r" + % bindparam.key) pd[self.bind_names[bindparam]] = bindparam.effective_value return pd - params = property(construct_params, doc=""" - Return the bind params for this compiled object. - - """) + @property + def params(self): + """Return the bind param dictionary embedded into this + compiled object, for those values that are present.""" + return self.construct_params(_check=False) def default_from(self): """Called when a SELECT statement has no froms, and no FROM clause is |