]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Use schema_name() for SQL Server default schema
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 4 Oct 2016 15:32:20 +0000 (11:32 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 4 Oct 2016 15:33:02 +0000 (11:33 -0400)
Changed the query used to get "default schema name", from one that
queries the database principals table to using the
"schema_name()" function, as issues have been reported that the
former system was unavailable on the Azure Data Warehouse edition.
It is hoped that this will finally work across all SQL Server
versions and authentication styles.

Change-Id: Ic11bd4162c0d6a60432ae44876e86512703c1f81
Fixes: #3810
(cherry picked from commit 562e37ee7eaab8b19a9f081d4b170b95fce4f619)

doc/build/changelog/changelog_10.rst
lib/sqlalchemy/dialects/mssql/base.py

index 3411b0ca63cd2eb71f29c0a62f6d081bec7d4c96..cfe8ed27b696f6ec0c228a86dd059ed0e2432f57 100644 (file)
 .. changelog::
     :version: 1.0.16
 
+    .. change::
+        :tags: bug, mssql
+        :tickets: 3810
+        :versions: 1.1.0
+
+        Changed the query used to get "default schema name", from one that
+        queries the database principals table to using the
+        "schema_name()" function, as issues have been reported that the
+        former system was unavailable on the Azure Data Warehouse edition.
+        It is hoped that this will finally work across all SQL Server
+        versions and authentication styles.
+
     .. change::
         :tags: bug, mssql
         :tickets: 3814
index 4acc1d0f09874b4bd4ad1ed175bccc2a3561033a..a221072a7baeddf9a90cba81392fbafbdc24e95f 100644 (file)
@@ -1646,17 +1646,13 @@ class MSDialect(default.DefaultDialect):
     def _get_default_schema_name(self, connection):
         if self.server_version_info < MS_2005_VERSION:
             return self.schema_name
-
-        query = sql.text("""
-            SELECT default_schema_name FROM
-            sys.database_principals
-            WHERE principal_id=database_principal_id()
-        """)
-        default_schema_name = connection.scalar(query)
-        if default_schema_name is not None:
-            return util.text_type(default_schema_name)
         else:
-            return self.schema_name
+            query = sql.text("SELECT schema_name()")
+            default_schema_name = connection.scalar(query)
+            if default_schema_name is not None:
+                return util.text_type(default_schema_name)
+            else:
+                return self.schema_name
 
     @_db_plus_owner
     def has_table(self, connection, tablename, dbname, owner, schema):