mssql aliasing of schema-tables in subqueries with nesting

Issue #1943 resolved
Mike Bayer repo owner created an issue

test + patch:

diff -r ee9102622c8538bd7e2594b05dd8bdc72317d3d0 lib/sqlalchemy/dialects/mssql/base.py
--- a/lib/sqlalchemy/dialects/mssql/base.py Sun Oct 03 13:11:41 2010 -0400
+++ b/lib/sqlalchemy/dialects/mssql/base.py Sat Oct 09 11:18:02 2010 -0400
@@ -755,20 +755,20 @@
             return None

     def visit_table(self, table, mssql_aliased=False, **kwargs):
-        if mssql_aliased:
+        if mssql_aliased is table:
             return super(MSSQLCompiler, self).visit_table(table, **kwargs)

         # alias schema-qualified tables
         alias = self._schema_aliased_table(table)
         if alias is not None:
-            return self.process(alias, mssql_aliased=True, **kwargs)
+            return self.process(alias, mssql_aliased=table, **kwargs)
         else:
             return super(MSSQLCompiler, self).visit_table(table, **kwargs)

     def visit_alias(self, alias, **kwargs):
         # translate for schema-qualified table aliases
         self.tablealiases[alias.original](alias.original) = alias
-        kwargs['mssql_aliased']('mssql_aliased') = True
+        kwargs['mssql_aliased']('mssql_aliased') = alias.original
         return super(MSSQLCompiler, self).visit_alias(alias, **kwargs)

     def visit_extract(self, extract, **kw):
diff -r ee9102622c8538bd7e2594b05dd8bdc72317d3d0 test/dialect/test_mssql.py
--- a/test/dialect/test_mssql.py    Sun Oct 03 13:11:41 2010 -0400
+++ b/test/dialect/test_mssql.py    Sat Oct 09 11:18:02 2010 -0400
@@ -127,7 +127,6 @@

         s = table4.select(use_labels=True)
         c = s.compile(dialect=self.__dialect__)
-        print c.result_map
         assert table4.c.rem_id \
             in set(c.result_map['remote_owner_remotetable_rem_id']('remote_owner_remotetable_rem_id')[1](1))
         self.assert_compile(table4.select(),
@@ -151,7 +150,20 @@
                             'remotetable_1.value FROM mytable JOIN '
                             'remote_owner.remotetable AS remotetable_1 '
                             'ON remotetable_1.rem_id = mytable.myid')
-
+        
+        self.assert_compile(select([               table4.c.value](table4.c.rem_id,
+)).apply_labels().union(select([               table1.c.description](table1.c.myid,
+)).apply_labels()).alias().select(),
+                "SELECT anon_1.remote_owner_remotetable_rem_id, "
+                "anon_1.remote_owner_remotetable_value FROM "
+                "(SELECT remotetable_1.rem_id AS remote_owner_remotetable_rem_id, "
+                "remotetable_1.value AS remote_owner_remotetable_value "
+                "FROM remote_owner.remotetable AS remotetable_1 UNION "
+                "SELECT mytable.myid AS mytable_myid, mytable.description "
+                "AS mytable_description FROM mytable) AS anon_1"
+            )
+        
+        
     def test_delete_schema(self):
         metadata = MetaData()
         tbl = Table('test', metadata, Column('id', Integer,

Comments (2)

  1. Log in to comment