diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-08-11 16:25:30 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-08-11 16:25:30 +0000 |
commit | 55cc73fc30fceab04bf8ae2b3f0797b9ad2d7550 (patch) | |
tree | cf26888680a83584928d779f33693df21d2a3707 /lib/sqlalchemy/ansisql.py | |
parent | 3c749cba527140aa5d8a5b72ecea3eb87b0a5f8a (diff) | |
download | sqlalchemy-55cc73fc30fceab04bf8ae2b3f0797b9ad2d7550.tar.gz |
- precompiled regexp for anonymous labels
- has_key()->__contains__()
Diffstat (limited to 'lib/sqlalchemy/ansisql.py')
-rw-r--r-- | lib/sqlalchemy/ansisql.py | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/lib/sqlalchemy/ansisql.py b/lib/sqlalchemy/ansisql.py index bfb08d337..1dec5ede0 100644 --- a/lib/sqlalchemy/ansisql.py +++ b/lib/sqlalchemy/ansisql.py @@ -47,6 +47,7 @@ ILLEGAL_INITIAL_CHARACTERS = util.Set(string.digits + '$') BIND_PARAMS = re.compile(r'(?<![:\w\$\x5c]):([\w\$]+)(?![:\w\$])', re.UNICODE) BIND_PARAMS_ESC = re.compile(r'\x5c(:[\w\$]+)(?![:\w\$])', re.UNICODE) +ANONYMOUS_LABEL = re.compile(r'{ANON (-?\d+) (.*)}') OPERATORS = { operator.and_ : 'AND', @@ -447,8 +448,9 @@ class ANSICompiler(engine.Compiled, sql.ClauseVisitor): def _truncated_identifier(self, ident_class, name): if (ident_class, name) in self.generated_ids: return self.generated_ids[(ident_class, name)] - - anonname = self._anonymize(name) + + anonname = ANONYMOUS_LABEL.sub(self._process_anon, name) + if len(anonname) > self.dialect.max_identifier_length(): counter = self.generated_ids.get(ident_class, 1) truncname = name[0:self.dialect.max_identifier_length() - 6] + "_" + hex(counter)[2:] @@ -457,19 +459,20 @@ class ANSICompiler(engine.Compiled, sql.ClauseVisitor): truncname = anonname self.generated_ids[(ident_class, name)] = truncname return truncname + + def _process_anon(self, match): + (ident, derived) = match.group(1,2) + if ('anonymous', ident) in self.generated_ids: + return self.generated_ids[('anonymous', ident)] + else: + anonymous_counter = self.generated_ids.get('anonymous', 1) + newname = derived + "_" + str(anonymous_counter) + self.generated_ids['anonymous'] = anonymous_counter + 1 + self.generated_ids[('anonymous', ident)] = newname + return newname def _anonymize(self, name): - def anon(match): - (ident, derived) = match.group(1,2) - if ('anonymous', ident) in self.generated_ids: - return self.generated_ids[('anonymous', ident)] - else: - anonymous_counter = self.generated_ids.get('anonymous', 1) - newname = derived + "_" + str(anonymous_counter) - self.generated_ids['anonymous'] = anonymous_counter + 1 - self.generated_ids[('anonymous', ident)] = newname - return newname - return re.sub(r'{ANON (-?\d+) (.*)}', anon, name) + return ANONYMOUS_LABEL.sub(self._process_anon, name) def bindparam_string(self, name): return self.bindtemplate % name |