From 9b22fc0a9b5a6e97129096dd5ee8b3eb24895ac4 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Tue, 16 Oct 2007 16:03:59 +0000 Subject: - Fixed SQL compiler's awareness of top-level column labels as used in result-set processing; nested selects which contain the same column names don't affect the result or conflict with result-column metadata. - query.get() and related functions (like many-to-one lazyloading) use compile-time-aliased bind parameter names, to prevent name conflicts with bind parameters that already exist in the mapped selectable. --- lib/sqlalchemy/sql/compiler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/sqlalchemy/sql/compiler.py') diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 05c7a5cf4..5572c2ed4 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -240,7 +240,7 @@ class DefaultCompiler(engine.Compiled, visitors.ClauseVisitor): def visit_label(self, label): labelname = self._truncated_identifier("colident", label.name) - if self.stack and self.stack[-1].get('select'): + if len(self.stack) == 1 and self.stack[-1].get('select'): self.typemap.setdefault(labelname.lower(), label.obj.type) if isinstance(label.obj, sql._ColumnClause): self.column_labels[label.obj._label] = labelname @@ -258,7 +258,7 @@ class DefaultCompiler(engine.Compiled, visitors.ClauseVisitor): else: name = column.name - if self.stack and self.stack[-1].get('select'): + if len(self.stack) == 1 and self.stack[-1].get('select'): # if we are within a visit to a Select, set up the "typemap" # for this column which is used to translate result set values self.typemap.setdefault(name.lower(), column.type) -- cgit v1.2.1