mirror of
https://github.com/django/django.git
synced 2025-07-17 16:19:12 +00:00
[3.0.x] Fixed #31271 -- Preserved ordering when unifying query parameters on Oracle.
This caused misplacing parameters in logged SQL queries. Regression in 79065b55a70cd220820a260a1c54851b7be0615a. Thanks Hans Aarne Liblik for the report. Backport of 2a038521c4eabdc5f6d5026d3dd6d22868e329cd from master
This commit is contained in:
parent
bcf58e3e70
commit
2448b3182c
@ -497,7 +497,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()
|
||||
cursor = qs.query.get_compiler(DEFAULT_DB_ALIAS).execute_sql(CURSOR)
|
||||
|
Loading…
x
Reference in New Issue
Block a user