﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
29229	QuerySet.values_list() combined with .extra() or .annotate() may produce wrong .union()	master	nobody	"Regression introduced in 2.0, still present in 2.0.3 [Edit: and backported in 1.11.8].

Easy context to reproduce the problem: suppose a Message model, in a postman app. Only one ordinary field is enough for the demo.

{{{#!python
qs1 = Message.objects.extra(select={'count': 0}).values_list('id', 'count').order_by()
print(qs1.query)  # as expected:
# SELECT (0) AS ""count"", ""postman_message"".""id""
# FROM ""postman_message""

qs2 = Message.objects.values('somefield').annotate(count=models.Count('pk')).annotate(id=models.Max('pk')).values_list('id', 'count').order_by()
print(qs2.query)  # as expected:
# SELECT COUNT(""postman_message"".""id"") AS ""count"",  MAX(""postman_message"".""id"") AS ""id""
# FROM ""postman_message"" GROUP BY ""postman_message"".""somefield""

print(qs1.union(qs2).query)  # !! WRONG !! the qs2 part is truncated:
# SELECT (0) AS ""count"", ""postman_message"".""id"" FROM ""postman_message""
# UNION
# SELECT MAX(""postman_message"".""id"") AS ""id"" FROM ""postman_message"" GROUP BY ""postman_message"".""somefield""
}}}

Compared to version 1.11 [Edit: I run 1.11.7 precisely], it comes from this addition in db/models/sql/compiler.py/get_combinator_sql():
{{{#!python
if not compiler.query.values_select and self.query.values_select:
    compiler.query.set_values(self.query.values_select)
}}}
Here, self.query.values_select is ('id',).
For qs2, values_select is indeed empty, as coded in db/models/sql/query.py/set_values(),
because in this case the two values_list() arguments are managed in annotation_names[].
"	Bug	closed	Database layer (models, ORM)	1.11	Release blocker	fixed	union values_list		Ready for checkin	1	0	0	0	0	0
