﻿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
35836	ORM can produce invalid SQL when subclassing Query	Ben Pearman		"We have observed a bug in the ORM where invalid SQL can be produced. 

A reproduction can be seen here:
https://github.com/benpearman/django-orm-bug
And specifically:
https://github.com/benpearman/django-orm-bug/blob/master/demo/models.py

It is caused with the following steps:
1. Subclassing {{{django.db.models.sql.Query}}} and using it in a Queryset mixin
2. Creating a queryset with an {{{exclude()}}} expression which includes a subquery. EG {{{Classroom.objects.exclude(student_set__id=student_A.id)}}}
3. Then before calling {{{super().get_compiler}}} from our subclassed Query: 
 -  Clone the query
 -  Adding a simple expression via {{{cloned_query.add_q}}} eg {{{cloned_query.add_q(Q(school_id=1))}}}
 -  Passing the cloned query into {{{super().get_compiler}}}
4. Then evaluate the queryset, which produces invalid SQL and raises  {{{django.db.utils.OperationalError}}}

Note the issue happens when get_compiler is invoked for the subquery, not on the main query itself.

This was working for us in Django 3.2, but not for Django 4.1

git bisect shows the breakage was introduced by this commit:
https://github.com/django/django/commit/14c8504a37afad96ab93cf82f47b13bcc4d00621


"	Bug	closed	Database layer (models, ORM)	5.0	Normal	invalid		Ben Pearman Craig de Stigter	Unreviewed	0	0	0	0	0	0
