diff options
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 15 | ||||
-rw-r--r-- | lib/sqlalchemy/sql/util.py | 17 |
2 files changed, 24 insertions, 8 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 59964178c..99cfa0470 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -212,7 +212,7 @@ class DefaultCompiler(engine.Compiled, visitors.ClauseVisitor): return None - def construct_params(self, params): + def construct_params(self, params=None): """Return a sql.util.ClauseParameters object. Combines the given bind parameter dictionary (string keys to object values) @@ -223,15 +223,20 @@ class DefaultCompiler(engine.Compiled, visitors.ClauseVisitor): d = sql_util.ClauseParameters(self.dialect, self.positiontup) - pd = self.parameters or {} - pd.update(params) + if self.parameters is None: + pd = {} + else: + pd = self.parameters + if params is not None: + pd.update(params) + bind_names = self.bind_names for key, bind in self.binds.iteritems(): - d.set_parameter(bind, pd.get(key, bind.value), self.bind_names[bind]) + d.set_parameter(bind, pd.get(key, bind.value), bind_names[bind]) return d - params = property(lambda self:self.construct_params({}), doc="""Return the `ClauseParameters` corresponding to this compiled object. + params = property(lambda self:self.construct_params(), doc="""Return the `ClauseParameters` corresponding to this compiled object. A shortcut for `construct_params()`.""") def default_from(self): diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py index 2c7294e66..a1d44ccfe 100644 --- a/lib/sqlalchemy/sql/util.py +++ b/lib/sqlalchemy/sql/util.py @@ -12,10 +12,15 @@ class ClauseParameters(object): the ``TypeEngine`` objects present in the ``_BindParamClause`` instances. """ + __slots__ = 'dialect', '__binds', 'positional' + def __init__(self, dialect, positional=None): self.dialect = dialect self.__binds = {} - self.positional = positional or [] + if positional is None: + self.positional = [] + else: + self.positional = positional def get_parameter(self, key): return self.__binds[key] @@ -68,9 +73,15 @@ class ClauseParameters(object): return processors[key](self.__binds[key][2]) else: return self.__binds[key][2] - + def get_raw_list(self, processors): - return [self.__get_processed(key, processors) for key in self.positional] + binds, res = self.__binds, [] + for key in self.positional: + if key in processors: + res.append(processors[key](binds[key][2])) + else: + res.append(binds[key][2]) + return res def get_raw_dict(self, processors, encode_keys=False): if encode_keys: |