oracle: fix closing cursors

This commit is contained in:
Benjamin Renard 2022-12-09 12:20:01 +01:00
parent 651e1a1a6c
commit c643fd30ac
2 changed files with 24 additions and 12 deletions

View file

@ -125,7 +125,6 @@ class OracleDB:
log.debug("Just-try mode : do not really execute SQL query '%s'", sql) log.debug("Just-try mode : do not really execute SQL query '%s'", sql)
return True return True
cursor = self._conn.cursor()
try: try:
log.debug( log.debug(
'Run SQL query "%s" %s', 'Run SQL query "%s" %s',
@ -135,10 +134,11 @@ class OracleDB:
for key, value in params.items() for key, value in params.items()
]) if params else "without params" ]) if params else "without params"
) )
if isinstance(params, dict): with self._conn.cursor() as cursor:
cursor.execute(sql, **params) if isinstance(params, dict):
else: cursor.execute(sql, **params)
cursor.execute(sql) else:
cursor.execute(sql)
self._conn.commit() self._conn.commit()
return True return True
except Exception: except Exception:
@ -164,7 +164,6 @@ class OracleDB:
:return: List of selected rows as dict on success, False otherwise :return: List of selected rows as dict on success, False otherwise
:rtype: list, bool :rtype: list, bool
""" """
cursor = self._conn.cursor()
try: try:
log.debug( log.debug(
'Run SQL SELECT query "%s" %s', 'Run SQL SELECT query "%s" %s',
@ -174,12 +173,15 @@ class OracleDB:
for key, value in params.items() for key, value in params.items()
]) if params else "without params" ]) if params else "without params"
) )
if isinstance(params, dict): with self._conn.cursor() as cursor:
cursor.execute(sql, **params) if isinstance(params, dict):
else: cursor.execute(sql, **params)
cursor.execute(sql) else:
cursor.rowfactory = lambda *args: dict(zip([d[0] for d in cursor.description], args)) cursor.execute(sql)
results = cursor.fetchall() cursor.rowfactory = lambda *args: dict(
zip([d[0] for d in cursor.description], args)
)
results = cursor.fetchall()
return results return results
except Exception: except Exception:
log.error( log.error(

View file

@ -15,8 +15,10 @@ class FakeCXOracleCursor:
self.expected_return = expected_return self.expected_return = expected_return
self.expected_just_try = expected_just_try self.expected_just_try = expected_just_try
self.expected_exception = expected_exception self.expected_exception = expected_exception
self.opened = True
def execute(self, sql, **params): def execute(self, sql, **params):
assert self.opened
if self.expected_exception: if self.expected_exception:
raise Exception("%s.execute(%s, %s): expected exception" % (self, sql, params)) raise Exception("%s.execute(%s, %s): expected exception" % (self, sql, params))
if self.expected_just_try and not sql.lower().startswith('select '): if self.expected_just_try and not sql.lower().startswith('select '):
@ -26,8 +28,16 @@ class FakeCXOracleCursor:
return self.expected_return return self.expected_return
def fetchall(self): def fetchall(self):
assert self.opened
return self.expected_return return self.expected_return
def __enter__(self):
self.opened = True
return self
def __exit__(self, *args):
self.opened = False
def __repr__(self): def __repr__(self):
return "FakeCXOracleCursor(%s, %s, %s, %s)" % ( return "FakeCXOracleCursor(%s, %s, %s, %s)" % (
self.expected_sql, self.expected_params, self.expected_sql, self.expected_params,