@@ -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