diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-08-18 20:12:39 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-08-18 20:12:39 +0000 |
commit | fc17f7e65933cc5b3329436a9dd5f28a094dcc7a (patch) | |
tree | 99673e6ff5127a9586282137a4ec14d8d10df722 /lib/sqlalchemy/ansisql.py | |
parent | c48177f0fed3a43b3b8b02c18243cb1664ce0abb (diff) | |
download | sqlalchemy-fc17f7e65933cc5b3329436a9dd5f28a094dcc7a.tar.gz |
[ticket:280] statement execution supports using the same BindParam
object more than once in an expression; simplified handling of positional
parameters. nice job by Bill Noon figuring out the basic idea.
Diffstat (limited to 'lib/sqlalchemy/ansisql.py')
-rw-r--r-- | lib/sqlalchemy/ansisql.py | 29 |
1 files changed, 5 insertions, 24 deletions
diff --git a/lib/sqlalchemy/ansisql.py b/lib/sqlalchemy/ansisql.py index 36ae93bc6..031c63328 100644 --- a/lib/sqlalchemy/ansisql.py +++ b/lib/sqlalchemy/ansisql.py @@ -74,6 +74,7 @@ class ANSICompiler(sql.Compiled): self.bindtemplate = ":%s" self.paramstyle = dialect.paramstyle self.positional = dialect.positional + self.positiontup = [] self.preparer = dialect.preparer() def after_compile(self): @@ -84,7 +85,6 @@ class ANSICompiler(sql.Compiled): if self.paramstyle=='pyformat': self.strings[self.statement] = re.sub(match, lambda m:'%(' + m.group(1) +')s', self.strings[self.statement]) elif self.positional: - self.positiontup = [] params = re.finditer(match, self.strings[self.statement]) for p in params: self.positiontup.append(p.group(1)) @@ -128,15 +128,10 @@ class ANSICompiler(sql.Compiled): bindparams = {} bindparams.update(params) - d = sql.ClauseParameters(self.dialect) - if self.positional: - for k in self.positiontup: - b = self.binds[k] - d.set_parameter(k, b.value, b) - else: - for b in self.binds.values(): - d.set_parameter(b.key, b.value, b) - + d = sql.ClauseParameters(self.dialect, self.positiontup) + for b in self.binds.values(): + d.set_parameter(b.key, b.value, b) + for key, value in bindparams.iteritems(): try: b = self.binds[key] @@ -146,20 +141,6 @@ class ANSICompiler(sql.Compiled): return d - def get_named_params(self, parameters): - """given the results of the get_params method, returns the parameters - in dictionary format. For a named paramstyle, this just returns the - same dictionary. For a positional paramstyle, the given parameters are - assumed to be in list format and are converted back to a dictionary. - """ - if self.positional: - p = {} - for i in range(0, len(self.positiontup)): - p[self.positiontup[i]] = parameters[i] - return p - else: - return parameters - def default_from(self): """called when a SELECT statement has no froms, and no FROM clause is to be appended. gives Oracle a chance to tack on a "FROM DUAL" to the string output. """ |