summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/ansisql.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-08-18 20:12:39 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-08-18 20:12:39 +0000
commitfc17f7e65933cc5b3329436a9dd5f28a094dcc7a (patch)
tree99673e6ff5127a9586282137a4ec14d8d10df722 /lib/sqlalchemy/ansisql.py
parentc48177f0fed3a43b3b8b02c18243cb1664ce0abb (diff)
downloadsqlalchemy-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.py29
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. """