mirror of
https://github.com/django/django.git
synced 2025-10-23 21:59:11 +00:00
Fixed #17886 -- Fixed join promotion in ORed nullable queries
The ORM generated a query with INNER JOIN instead of LEFT OUTER JOIN in a somewhat complicated case. The main issue was that there was a chain of nullable FK -> non-nullble FK, and the join promotion logic didn't see the need to promote the non-nullable FK even if the previous nullable FK was already promoted to LOUTER JOIN. This resulted in a query like a LOUTER b INNER c, which incorrectly prunes results.
This commit is contained in:
@@ -385,3 +385,18 @@ class NullableName(models.Model):
|
||||
|
||||
class Meta:
|
||||
ordering = ['id']
|
||||
|
||||
class ModelD(models.Model):
|
||||
name = models.TextField()
|
||||
|
||||
class ModelC(models.Model):
|
||||
name = models.TextField()
|
||||
|
||||
class ModelB(models.Model):
|
||||
name = models.TextField()
|
||||
c = models.ForeignKey(ModelC)
|
||||
|
||||
class ModelA(models.Model):
|
||||
name = models.TextField()
|
||||
b = models.ForeignKey(ModelB, null=True)
|
||||
d = models.ForeignKey(ModelD)
|
||||
|
||||
Reference in New Issue
Block a user