summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/compiler.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-01-28 14:20:25 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2012-01-28 14:20:25 -0500
commitc6e07f6a591b7172382370a09ca511e94d239723 (patch)
tree92adb4058910c90a080a777c321d7597ab4e4605 /lib/sqlalchemy/sql/compiler.py
parent029ae72b2fffc5a69acf7fc610377cd0a148870e (diff)
downloadsqlalchemy-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.py33
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