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,6 +134,7 @@ class OracleDB:
for key, value in params.items() for key, value in params.items()
]) if params else "without params" ]) if params else "without params"
) )
with self._conn.cursor() as cursor:
if isinstance(params, dict): if isinstance(params, dict):
cursor.execute(sql, **params) cursor.execute(sql, **params)
else: else:
@ -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,11 +173,14 @@ class OracleDB:
for key, value in params.items() for key, value in params.items()
]) if params else "without params" ]) if params else "without params"
) )
with self._conn.cursor() as cursor:
if isinstance(params, dict): if isinstance(params, dict):
cursor.execute(sql, **params) cursor.execute(sql, **params)
else: else:
cursor.execute(sql) cursor.execute(sql)
cursor.rowfactory = lambda *args: dict(zip([d[0] for d in cursor.description], args)) cursor.rowfactory = lambda *args: dict(
zip([d[0] for d in cursor.description], args)
)
results = cursor.fetchall() results = cursor.fetchall()
return results return results
except Exception: except Exception:

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,