Fixed #36112 -- Added fallback in last_executed_query() on Oracle and PostgreSQL.

This commit is contained in:
VIZZARD-X
2025-11-22 15:57:33 +05:30
committed by Mariusz Felisiak
parent 6c2780ffe1
commit da19b3897d
3 changed files with 21 additions and 4 deletions

View File

@@ -352,7 +352,11 @@ END;
statement = statement.replace(
key, force_str(params[key], errors="replace")
)
return statement
return (
super().last_executed_query(cursor, sql, params)
if statement is None
else statement
)
def last_insert_id(self, cursor, table_name, pk_name):
sq_name = self._get_sequence_name(cursor, strip_quotes(table_name), pk_name)

View File

@@ -302,11 +302,11 @@ class DatabaseOperations(BaseDatabaseOperations):
try:
return self.compose_sql(sql, params)
except errors.DataError:
return None
return super().last_executed_query(cursor, sql, params)
else:
if cursor._query and cursor._query.query is not None:
return cursor._query.query.decode()
return None
return super().last_executed_query(cursor, sql, params)
else:
@@ -315,7 +315,7 @@ class DatabaseOperations(BaseDatabaseOperations):
# The query attribute is a Psycopg extension to the DB API 2.0.
if cursor.query is not None:
return cursor.query.decode()
return None
return super().last_executed_query(cursor, sql, params)
if is_psycopg3:

View File

@@ -171,6 +171,19 @@ class DatabaseOperationTests(TestCase):
def setUp(self):
self.ops = BaseDatabaseOperations(connection=connection)
def test_last_executed_query_base_fallback(self):
sql = "INVALID SQL"
params = []
with connection.cursor() as cursor:
cursor.close()
try:
cursor.execute(sql, params)
except connection.features.closed_cursor_error_class:
pass
self.assertIsNotNone(
connection.ops.last_executed_query(cursor, sql, params),
)
@skipIfDBFeature("can_distinct_on_fields")
def test_distinct_on_fields(self):
msg = "DISTINCT ON fields is not supported by this database backend"