From: Michael Trier Date: Tue, 23 Dec 2008 06:01:09 +0000 (+0000) Subject: Added MSSQL support for introspecting the default schema name for the logged in user... X-Git-Tag: rel_0_5_0~72 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=88aad2a374074e2b5992e9e9e110967707da0bc1;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Added MSSQL support for introspecting the default schema name for the logged in user. Thanks Randall Smith. Fixes #1258. --- diff --git a/CHANGES b/CHANGES index 020459071d..c278e62d17 100644 --- a/CHANGES +++ b/CHANGES @@ -202,6 +202,10 @@ CHANGES new doc section "Custom Comparators". - mssql + - ``get_default_schema_name`` is now reflected from the + database based on the user's default schema. This only works + with MSSQL 2005 and later. [ticket:1258] + - Added collation support through the use of a new collation argument. This is supported on the following types: char, nchar, varchar, nvarchar, text, ntext. [ticket:1248] diff --git a/lib/sqlalchemy/databases/mssql.py b/lib/sqlalchemy/databases/mssql.py index 7d2cae5b90..ecf8b24628 100644 --- a/lib/sqlalchemy/databases/mssql.py +++ b/lib/sqlalchemy/databases/mssql.py @@ -955,7 +955,25 @@ class MSSQLDialect(default.DefaultDialect): newobj.dialect = self return newobj + @base.connection_memoize(('dialect', 'default_schema_name')) def get_default_schema_name(self, connection): + query = "SELECT user_name() as user_name;" + user_name = connection.scalar(sql.text(query)) + if user_name is not None: + # now, get the default schema + query = """ + SELECT default_schema_name FROM + sys.database_principals + WHERE name = :user_name + AND type = 'S' + """ + try: + default_schema_name = connection.scalar(sql.text(query), + user_name=user_name) + if default_schema_name is not None: + return default_schema_name + except: + pass return self.schema_name def table_names(self, connection, schema):