summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/ansisql.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-03-27 16:04:34 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-03-27 16:04:34 +0000
commit32440f2b3b61deda5bd8ee0abf707b76f44c926d (patch)
tree027bb110eed295ad768564049d548c07272a035e /lib/sqlalchemy/ansisql.py
parent363405aa9982fe46096f8b4991a59baf5e09294d (diff)
downloadsqlalchemy-32440f2b3b61deda5bd8ee0abf707b76f44c926d.tar.gz
- preliminary support for unicode table and column names added.
Diffstat (limited to 'lib/sqlalchemy/ansisql.py')
-rw-r--r--lib/sqlalchemy/ansisql.py20
1 files changed, 9 insertions, 11 deletions
diff --git a/lib/sqlalchemy/ansisql.py b/lib/sqlalchemy/ansisql.py
index 0d4fba4e8..37b6366a9 100644
--- a/lib/sqlalchemy/ansisql.py
+++ b/lib/sqlalchemy/ansisql.py
@@ -161,23 +161,23 @@ class ANSICompiler(sql.Compiled):
# this re will search for params like :param
# it has a negative lookbehind for an extra ':' so that it doesnt match
# postgres '::text' tokens
- match = r'(?<!:):([\w_]+)'
+ match = re.compile(r'(?<!:):([\w_]+)', re.UNICODE)
if self.paramstyle=='pyformat':
- self.strings[self.statement] = re.sub(match, lambda m:'%(' + m.group(1) +')s', self.strings[self.statement])
+ self.strings[self.statement] = match.sub(lambda m:'%(' + m.group(1) +')s', self.strings[self.statement])
elif self.positional:
- params = re.finditer(match, self.strings[self.statement])
+ params = match.finditer(self.strings[self.statement])
for p in params:
self.positiontup.append(p.group(1))
if self.paramstyle=='qmark':
- self.strings[self.statement] = re.sub(match, '?', self.strings[self.statement])
+ self.strings[self.statement] = match.sub('?', self.strings[self.statement])
elif self.paramstyle=='format':
- self.strings[self.statement] = re.sub(match, '%s', self.strings[self.statement])
+ self.strings[self.statement] = match.sub('%s', self.strings[self.statement])
elif self.paramstyle=='numeric':
i = [0]
def getnum(x):
i[0] += 1
return str(i[0])
- self.strings[self.statement] = re.sub(match, getnum, self.strings[self.statement])
+ self.strings[self.statement] = match.sub(getnum, self.strings[self.statement])
def get_from_text(self, obj):
return self.froms.get(obj, None)
@@ -188,7 +188,7 @@ class ANSICompiler(sql.Compiled):
def get_whereclause(self, obj):
return self.wheres.get(obj, None)
- def get_params(self, **params):
+ def construct_params(self, params):
"""Return a structure of bind parameters for this compiled object.
This includes bind parameters that might be compiled in via
@@ -214,7 +214,6 @@ class ANSICompiler(sql.Compiled):
else:
bindparams = {}
bindparams.update(params)
-
d = sql.ClauseParameters(self.dialect, self.positiontup)
for b in self.binds.values():
d.set_parameter(b, b.value)
@@ -693,7 +692,7 @@ class ANSICompiler(sql.Compiled):
def to_col(key):
if not isinstance(key, sql._ColumnClause):
- return stmt.table.columns.get(str(key), key)
+ return stmt.table.columns.get(unicode(key), key)
else:
return key
@@ -986,11 +985,10 @@ class ANSIIdentifierPreparer(object):
def _requires_quotes(self, value, case_sensitive):
"""Return True if the given identifier requires quoting."""
-
return \
value in self._reserved_words() \
or (value[0] in self._illegal_initial_characters()) \
- or bool(len([x for x in str(value) if x not in self._legal_characters()])) \
+ or bool(len([x for x in unicode(value) if x not in self._legal_characters()])) \
or (case_sensitive and value.lower() != value)
def __generic_obj_format(self, obj, ident):