Skip to content

Commit 1b292e8

Browse files
committed
use SET TRANSACTION to set isolation level
1 parent 55631d4 commit 1b292e8

File tree

1 file changed

+21
-20
lines changed

1 file changed

+21
-20
lines changed

sqlalchemy_iris/base.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -763,25 +763,28 @@ def _get_default_schema_name(self, connection):
763763
return IRISDialect.default_schema_name
764764

765765
def _get_option(self, connection, option):
766-
cursor = connection.cursor()
767-
# cursor = connection.cursor()
768-
cursor.execute('SELECT %SYSTEM_SQL.Util_GetOption(?)', option)
769-
row = cursor.fetchone()
770-
if row:
771-
return row[0]
766+
with connection.cursor() as cursor:
767+
cursor.execute('SELECT %SYSTEM_SQL.Util_GetOption(?)', option)
768+
row = cursor.fetchone()
769+
if row:
770+
return row[0]
772771
return None
773772

774-
def _set_option(self, connection, option, value):
775-
cursor = connection.cursor()
776-
# cursor = connection.cursor()
777-
cursor.execute('SELECT %SYSTEM_SQL.Util_SetOption(?, ?)', [option, value])
778-
row = cursor.fetchone()
779-
if row:
780-
return row[0]
773+
def _set_option(self, connection, option, value):
774+
with connection.cursor() as cursor:
775+
cursor.execute('SELECT %SYSTEM_SQL.Util_SetOption(?, ?)', [option, value])
776+
row = cursor.fetchone()
777+
if row:
778+
return row[0]
781779
return None
782780

783781
def get_isolation_level(self, connection):
784-
level = int(self._get_option(connection, 'IsolationMode'))
782+
try:
783+
level = int(self._get_option(connection, 'IsolationMode'))
784+
except dbapi.InterfaceError:
785+
# caught access violation error
786+
# by default it's 0
787+
level = 0
785788
if level == 0:
786789
return 'READ UNCOMMITTED'
787790
elif level == 1:
@@ -795,12 +798,10 @@ def set_isolation_level(self, connection, level_str):
795798
connection.setAutoCommit(True)
796799
else:
797800
connection.setAutoCommit(False)
798-
level = 0
799-
if level_str == 'READ COMMITTED':
800-
level = 1
801-
elif level_str == 'READ VERIFIED':
802-
level = 3
803-
self._set_option(connection, 'IsolationMode', level)
801+
if level_str not in ['READ COMMITTED', 'READ VERIFIED']:
802+
level_str = 'READ UNCOMMITTED'
803+
with connection.cursor() as cursor:
804+
cursor.execute('SET TRANSACTION ISOLATION LEVEL ' + level_str)
804805

805806
@classmethod
806807
def dbapi(cls):

0 commit comments

Comments
 (0)