mirror of
https://github.com/Hopiu/django.git
synced 2026-04-26 01:34:48 +00:00
Fixed #31271 -- Preserved ordering when unifying query parameters on Oracle.
This caused misplacing parameters in logged SQL queries.
Regression in 79065b55a7.
Thanks Hans Aarne Liblik for the report.
This commit is contained in:
parent
cbb6531e5b
commit
2a038521c4
3 changed files with 11 additions and 1 deletions
|
|
@ -500,7 +500,10 @@ class FormatStylePlaceholderCursor:
|
|||
# params_dict = {0.75: ':arg0', 2: ':arg1', 'sth': ':arg2'}
|
||||
# args = [':arg0', ':arg1', ':arg0', ':arg2', ':arg0']
|
||||
# params = {':arg0': 0.75, ':arg1': 2, ':arg2': 'sth'}
|
||||
params_dict = {param: ':arg%d' % i for i, param in enumerate(set(params))}
|
||||
params_dict = {
|
||||
param: ':arg%d' % i
|
||||
for i, param in enumerate(dict.fromkeys(params))
|
||||
}
|
||||
args = [params_dict[param] for param in params]
|
||||
params = {value: key for key, value in params_dict.items()}
|
||||
query = query % tuple(args)
|
||||
|
|
|
|||
|
|
@ -20,3 +20,6 @@ Bugfixes
|
|||
related fields or parent link fields with :ref:`multi-table-inheritance` in
|
||||
the ``of`` argument, the corresponding models were not locked
|
||||
(:ticket:`31246`).
|
||||
|
||||
* Fixed a regression in Django 3.0 that caused misplacing parameters in logged
|
||||
SQL queries on Oracle (:ticket:`31271`).
|
||||
|
|
|
|||
|
|
@ -79,6 +79,10 @@ class LastExecutedQueryTest(TestCase):
|
|||
for qs in (
|
||||
Article.objects.filter(pk=1),
|
||||
Article.objects.filter(pk__in=(1, 2), reporter__pk=3),
|
||||
Article.objects.filter(
|
||||
pk=1,
|
||||
reporter__pk=9,
|
||||
).exclude(reporter__pk__in=[2, 1]),
|
||||
):
|
||||
sql, params = qs.query.sql_with_params()
|
||||
with qs.query.get_compiler(DEFAULT_DB_ALIAS).execute_sql(CURSOR) as cursor:
|
||||
|
|
|
|||
Loading…
Reference in a new issue