From 55cc73fc30fceab04bf8ae2b3f0797b9ad2d7550 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 11 Aug 2007 16:25:30 +0000 Subject: [PATCH] - precompiled regexp for anonymous labels - has_key()->__contains__() --- lib/sqlalchemy/ansisql.py | 29 ++++++++++++++++------------- lib/sqlalchemy/sql.py | 6 +++--- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/lib/sqlalchemy/ansisql.py b/lib/sqlalchemy/ansisql.py index bfb08d3376..1dec5ede0f 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'(? 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 diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 28b750c4ad..ee64e82f27 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -2577,7 +2577,7 @@ class Alias(FromClause): alias = '{ANON %d %s}' % (id(self), alias or 'anon') self.name = alias self.encodedname = alias.encode('ascii', 'backslashreplace') - + def is_derived_from(self, fromclause): x = self.selectable while True: @@ -2780,7 +2780,7 @@ class _ColumnClause(ColumnElement): if self.table is not None and self.table.named_with_column(): self.__label = self.table.name + "_" + self.name counter = 1 - while self.table.c.has_key(self.__label): + while self.__label in self.table.c: self.__label = self.__label + "_%d" % counter counter += 1 else: @@ -2837,7 +2837,7 @@ class TableClause(FromClause): self.encodedname = self.name.encode('ascii', 'backslashreplace') self._oid_column = _ColumnClause('oid', self, _is_oid=True) self._export_columns(columns) - + def _clone(self): # TableClause is immutable return self -- 2.47.3