summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2022-09-15 08:42:34 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2022-09-15 08:42:34 -0400
commit0ee7d693b805c0f1aea0da5ebc11ea6e52b42c71 (patch)
tree5e02dfd91e339c646dad15f182a3e0937ccdcfc6 /lib/sqlalchemy/dialects
parent310dd2e6a741c606e5be40ef35cac6ed63e10bfe (diff)
downloadsqlalchemy-0ee7d693b805c0f1aea0da5ebc11ea6e52b42c71.tar.gz
catch exception for system_views also
Fixed yet another regression in SQL Server isolation level fetch (see :ticket:`8231`, :ticket:`8475`), this time with "Microsoft Dynamics CRM Database via Azure Active Directory", which apparently lacks the ``system_views`` view entirely. Error catching has been extended that under no circumstances will this method ever fail, provided database connectivity is present. Fixes: #8525 Change-Id: I76a429e3329926069a0367d2e77ca1124b9a059d
Diffstat (limited to 'lib/sqlalchemy/dialects')
-rw-r--r--lib/sqlalchemy/dialects/mssql/base.py54
1 files changed, 28 insertions, 26 deletions
diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py
index 82a5bb6f7..c7e88a643 100644
--- a/lib/sqlalchemy/dialects/mssql/base.py
+++ b/lib/sqlalchemy/dialects/mssql/base.py
@@ -2995,10 +2995,13 @@ class MSDialect(default.DefaultDialect):
def get_isolation_level(self, dbapi_connection):
cursor = dbapi_connection.cursor()
+ view_name = "sys.system_views"
try:
cursor.execute(
- "SELECT name FROM sys.system_views WHERE name IN "
- "('dm_exec_sessions', 'dm_pdw_nodes_exec_sessions')"
+ (
+ "SELECT name FROM {} WHERE name IN "
+ "('dm_exec_sessions', 'dm_pdw_nodes_exec_sessions')"
+ ).format(view_name)
)
row = cursor.fetchone()
if not row:
@@ -3009,31 +3012,30 @@ class MSDialect(default.DefaultDialect):
view_name = "sys.{}".format(row[0])
- try:
- cursor.execute(
- """
- SELECT CASE transaction_isolation_level
- WHEN 0 THEN NULL
- WHEN 1 THEN 'READ UNCOMMITTED'
- WHEN 2 THEN 'READ COMMITTED'
- WHEN 3 THEN 'REPEATABLE READ'
- WHEN 4 THEN 'SERIALIZABLE'
- WHEN 5 THEN 'SNAPSHOT' END
- AS TRANSACTION_ISOLATION_LEVEL
- FROM {}
- where session_id = @@SPID
- """.format(
- view_name
- )
+ cursor.execute(
+ """
+ SELECT CASE transaction_isolation_level
+ WHEN 0 THEN NULL
+ WHEN 1 THEN 'READ UNCOMMITTED'
+ WHEN 2 THEN 'READ COMMITTED'
+ WHEN 3 THEN 'REPEATABLE READ'
+ WHEN 4 THEN 'SERIALIZABLE'
+ WHEN 5 THEN 'SNAPSHOT' END
+ AS TRANSACTION_ISOLATION_LEVEL
+ FROM {}
+ where session_id = @@SPID
+ """.format(
+ view_name
)
- except self.dbapi.Error as err:
- raise NotImplementedError(
- "Can't fetch isolation level; encountered error {} when "
- 'attempting to query the "{}" view.'.format(err, view_name)
- ) from err
- else:
- row = cursor.fetchone()
- return row[0].upper()
+ )
+ except self.dbapi.Error as err:
+ raise NotImplementedError(
+ "Can't fetch isolation level; encountered error {} when "
+ 'attempting to query the "{}" view.'.format(err, view_name)
+ ) from err
+ else:
+ row = cursor.fetchone()
+ return row[0].upper()
finally:
cursor.close()