#30011: Count with filter annotation bug on filter
-------------------------------------+-------------------------------------
               Reporter:  Taqi       |          Owner:  nobody
  Abbas                              |
                   Type:             |         Status:  new
  Uncategorized                      |
              Component:  Database   |        Version:  2.1
  layer (models, ORM)                |       Keywords:  Annotation, Count,
               Severity:  Normal     |  Filter
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 Given these models:
 {{{
 class Ticket(Model):
     heading = models.TextField("One liner for the ticket to explain the
 ticket")
     participants = models.ManyToManyField(common_models.Users,
 related_name='participants')
     assigned_to = models.ForeignKey(common_models.Users,
 on_delete=models.PROTECT, related_name='+', null=True)
     requested_by = models.ForeignKey(common_models.Users,
 on_delete=models.PROTECT, related_name='+')
     category = models.ForeignKey(policy_models.TicketCategory,
 on_delete=models.PROTECT)
     blocker_set = models.ManyToManyField(
         'self', symmetrical=False, through='TicketRelation',
 related_name='blocked_set',
         through_fields=('blocked', 'blocker')
     )
     ...

 class TicketRelation(Model):
     blocked = models.ForeignKey(Ticket, on_delete=models.PROTECT,
 related_name='+')
     blocker = models.ForeignKey(Ticket, on_delete=models.PROTECT,
 related_name='+')
     depth = models.IntegerField(null=True)
     ...

 class TicketUpload(Model):
     ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE,
 related_name='upload_set')
     ...

 class Commit(Model):
     ticket = models.ForeignKey(Ticket, on_delete=models.PROTECT)
     message = models.TextField("Message for the work done")
     ...

 class Comment(Model):
     ticket = models.ForeignKey(ticket_models.Ticket,
 on_delete=models.CASCADE)
     text = models.TextField("The text in the comments")
     ...
 }}}

 I want to query this:
 {{{
     queryset = Ticket.objects.filter(is_deleted=False)\
     .select_related('category')\
     .prefetch_related('upload_set')\
     .annotate(commit_count=Count('commit',
 filter=models.Q(commit__is_deleted=False)))  \
     .annotate(comment_count=Count('comment',
 filter=models.Q(comment__is_deleted=False))) \
     .annotate(upload_count=Count('upload_set',
 filter=models.Q(upload_set__is_deleted=False))) \
     .annotate(blocked_set_count=Count(
         'blocked_set', filter=models.Q(blocked_set__is_deleted=False,
 blocked_set__status__is_terminal=False)
     ))\
     .annotate(blocker_set_count=Count(
         'blocker_set', filter=models.Q(blocker_set__is_deleted=False,
 blocker_set__status__is_terminal=False)
     ))
 }}}

 Which works and results in a query (I have ommited some some columns in
 the models but all the relevant models are up):
 {{{
 print(queryset.query)
 SELECT          "ticketing_ticket"."id",
                 "ticketing_ticket"."uuid",
                 "ticketing_ticket"."created_on",
                 "ticketing_ticket"."updated_on",
                 "ticketing_ticket"."server_created_on",
                 "ticketing_ticket"."server_updated_on",
                 "ticketing_ticket"."is_deleted",
                 "ticketing_ticket"."updated_by_id",
                 "ticketing_ticket"."created_by_id",
                 "ticketing_ticket"."heading",
                 "ticketing_ticket"."description",
                 "ticketing_ticket"."expected_completion_time",
                 "ticketing_ticket"."category_id",
                 "ticketing_ticket"."priority_id",
                 "ticketing_ticket"."status_id",
                 "ticketing_ticket"."assigned_to_id",
                 "ticketing_ticket"."requested_by_id",
                 "ticketing_ticket"."ticket_details_id",
                 Count("ticketing_commit"."id") filter (WHERE
 "ticketing_commit"."is_deleted" = false)             AS "commit_count",
                 count("ticketing_comment"."id") filter (WHERE
 "ticketing_comment"."is_deleted" = false)           AS "comment_count",
                 count("ticketing_ticketupload"."id") filter (WHERE
 "ticketing_ticketupload"."is_deleted" = false) AS "upload_count",
                 count("ticketing_ticketrelation"."blocked_id") filter
 (WHERE (
                                 t6."is_deleted" = false
                 AND             "ticketing_ticketstatus"."is_terminal" =
 false)) AS "blocked_set_count",
                 count(t8."blocker_id") filter (WHERE (
                                 t9."is_deleted" = false
                 AND             t10."is_terminal" = false)) AS
 "blocker_set_count",
                                 concat(
                 CASE
                                 WHEN
 "ticketing_ticketcategory"."department_id" IS NOT NULL THEN
                                                 CASE
                                                                 WHEN
 "department"."key" IS NOT NULL THEN "department"."key"
                                                                 ELSE
 upper(substring("department"."name" FROM (1) FOR (3)))
                                                 END
                                 ELSE sys
                 END, -, "ticketing_ticket"."id"::text) AS "display_name",
                 "ticketing_ticketcategory"."id",
                 "ticketing_ticketcategory"."uuid",
                 "ticketing_ticketcategory"."created_on",
                 "ticketing_ticketcategory"."updated_on",
                 "ticketing_ticketcategory"."server_created_on",
                 "ticketing_ticketcategory"."server_updated_on",
                 "ticketing_ticketcategory"."is_deleted",
                 "ticketing_ticketcategory"."updated_by_id",
                 "ticketing_ticketcategory"."created_by_id",
                 "ticketing_ticketcategory"."name",
                 "ticketing_ticketcategory"."type",
                 "ticketing_ticketcategory"."for_mobile",
                 "ticketing_ticketcategory"."department_id",
                 "ticketing_ticketcategory"."default_priority_id",
                 "ticketing_ticketcategory"."default_assignment_method",
                 "ticketing_ticketcategory"."default_assigned_user_id",
 "ticketing_ticketcategory"."default_assigned_job_title_id",
                 "ticketing_ticketcategory"."ticket_form_id"
 FROM            "ticketing_ticket"
 LEFT OUTER JOIN "ticketing_commit"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_commit"."ticket_id")
 LEFT OUTER JOIN "ticketing_comment"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_comment"."ticket_id")
 LEFT OUTER JOIN "ticketing_ticketupload"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_ticketupload"."ticket_id")
 LEFT OUTER JOIN "ticketing_ticketrelation"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_ticketrelation"."blocker_id")
 LEFT OUTER JOIN "ticketing_ticket" t6
 ON              (
                                 "ticketing_ticketrelation"."blocked_id" =
 t6."id")
 LEFT OUTER JOIN "ticketing_ticketstatus"
 ON              (
                                 t6."status_id" =
 "ticketing_ticketstatus"."id")
 LEFT OUTER JOIN "ticketing_ticketrelation" t8
 ON              (
                                 "ticketing_ticket"."id" = t8."blocked_id")
 LEFT OUTER JOIN "ticketing_ticket" t9
 ON              (
                                 t8."blocker_id" = t9."id")
 LEFT OUTER JOIN "ticketing_ticketstatus" t10
 ON              (
                                 t9."status_id" = t10."id")
 INNER JOIN      "ticketing_ticketcategory"
 ON              (
                                 "ticketing_ticket"."category_id" =
 "ticketing_ticketcategory"."id")
 LEFT OUTER JOIN "department"
 ON              (
                                 "ticketing_ticketcategory"."department_id"
 = "department"."id")
 WHERE           "ticketing_ticket"."is_deleted" = false
 GROUP BY        "ticketing_ticket"."id",
                                 concat(
                 CASE
                                 WHEN
 "ticketing_ticketcategory"."department_id" IS NOT NULL THEN
                                                 CASE
                                                                 WHEN
 "department"."key" IS NOT NULL THEN "department"."key"
                                                                 ELSE
 upper(substring("department"."name" FROM (1) FOR (3)))
                                                 END
                                 ELSE sys
                 END, -, "ticketing_ticket"."id"::text),
                 "ticketing_ticketcategory"."id"
 }}}

 Then I have a filtered_queryset:
 {{{
     filtered_queryset = queryset.filter(Q(heading__icontains=''))
 }}}

 which also works and results in the query
 {{{
     SELECT          "ticketing_ticket"."id",
                 "ticketing_ticket"."uuid",
                 "ticketing_ticket"."created_on",
                 "ticketing_ticket"."updated_on",
                 "ticketing_ticket"."server_created_on",
                 "ticketing_ticket"."server_updated_on",
                 "ticketing_ticket"."is_deleted",
                 "ticketing_ticket"."updated_by_id",
                 "ticketing_ticket"."created_by_id",
                 "ticketing_ticket"."heading",
                 "ticketing_ticket"."description",
                 "ticketing_ticket"."expected_completion_time",
                 "ticketing_ticket"."category_id",
                 "ticketing_ticket"."priority_id",
                 "ticketing_ticket"."status_id",
                 "ticketing_ticket"."assigned_to_id",
                 "ticketing_ticket"."requested_by_id",
                 "ticketing_ticket"."ticket_details_id",
                 Count("ticketing_commit"."id") filter (WHERE
 "ticketing_commit"."is_deleted" = false)             AS "commit_count",
                 count("ticketing_comment"."id") filter (WHERE
 "ticketing_comment"."is_deleted" = false)           AS "comment_count",
                 count("ticketing_ticketupload"."id") filter (WHERE
 "ticketing_ticketupload"."is_deleted" = false) AS "upload_count",
                 count("ticketing_ticketrelation"."blocked_id") filter
 (WHERE (
                                 t6."is_deleted" = false
                 AND             "ticketing_ticketstatus"."is_terminal" =
 false)) AS "blocked_set_count",
                 count(t8."blocker_id") filter (WHERE (
                                 t9."is_deleted" = false
                 AND             t10."is_terminal" = false)) AS
 "blocker_set_count",
                                 concat(
                 CASE
                                 WHEN
 "ticketing_ticketcategory"."department_id" IS NOT NULL THEN
                                                 CASE
                                                                 WHEN
 "department"."key" IS NOT NULL THEN "department"."key"
                                                                 ELSE
 upper(substring("department"."name" FROM (1) FOR (3)))
                                                 END
                                 ELSE sys
                 END, -, "ticketing_ticket"."id"::text) AS "display_name",
                 "ticketing_ticketcategory"."id",
                 "ticketing_ticketcategory"."uuid",
                 "ticketing_ticketcategory"."created_on",
                 "ticketing_ticketcategory"."updated_on",
                 "ticketing_ticketcategory"."server_created_on",
                 "ticketing_ticketcategory"."server_updated_on",
                 "ticketing_ticketcategory"."is_deleted",
                 "ticketing_ticketcategory"."updated_by_id",
                 "ticketing_ticketcategory"."created_by_id",
                 "ticketing_ticketcategory"."name",
                 "ticketing_ticketcategory"."type",
                 "ticketing_ticketcategory"."for_mobile",
                 "ticketing_ticketcategory"."department_id",
                 "ticketing_ticketcategory"."default_priority_id",
                 "ticketing_ticketcategory"."default_assignment_method",
                 "ticketing_ticketcategory"."default_assigned_user_id",
 "ticketing_ticketcategory"."default_assigned_job_title_id",
                 "ticketing_ticketcategory"."ticket_form_id"
 FROM            "ticketing_ticket"
 LEFT OUTER JOIN "ticketing_commit"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_commit"."ticket_id")
 LEFT OUTER JOIN "ticketing_comment"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_comment"."ticket_id")
 LEFT OUTER JOIN "ticketing_ticketupload"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_ticketupload"."ticket_id")
 LEFT OUTER JOIN "ticketing_ticketrelation"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_ticketrelation"."blocker_id")
 LEFT OUTER JOIN "ticketing_ticket" t6
 ON              (
                                 "ticketing_ticketrelation"."blocked_id" =
 t6."id")
 LEFT OUTER JOIN "ticketing_ticketstatus"
 ON              (
                                 t6."status_id" =
 "ticketing_ticketstatus"."id")
 LEFT OUTER JOIN "ticketing_ticketrelation" t8
 ON              (
                                 "ticketing_ticket"."id" = t8."blocked_id")
 LEFT OUTER JOIN "ticketing_ticket" t9
 ON              (
                                 t8."blocker_id" = t9."id")
 LEFT OUTER JOIN "ticketing_ticketstatus" t10
 ON              (
                                 t9."status_id" = t10."id")
 INNER JOIN      "ticketing_ticketcategory"
 ON              (
                                 "ticketing_ticket"."category_id" =
 "ticketing_ticketcategory"."id")
 LEFT OUTER JOIN "department"
 ON              (
                                 "ticketing_ticketcategory"."department_id"
 = "department"."id")
 WHERE           (
                                 "ticketing_ticket"."is_deleted" = false
                 AND             upper("ticketing_ticket"."heading"::text)
 LIKE upper(%%))
 GROUP BY        "ticketing_ticket"."id",
                                 concat(
                 CASE
                                 WHEN
 "ticketing_ticketcategory"."department_id" IS NOT NULL THEN
                                                 CASE
                                                                 WHEN
 "department"."key" IS NOT NULL THEN "department"."key"
                                                                 ELSE
 upper(substring("department"."name" FROM (1) FOR (3)))
                                                 END
                                 ELSE sys
                 END, -, "ticketing_ticket"."id"::text),
                 "ticketing_ticketcategory"."id"
 }}}

 All of this is fine. I have separately done the following and all of these
 work:
 {{{
     filtered_queryset.filter(id=33)
     filtered_queryset.filter(id__in=[33])
     queryset.filter(id=33)
     queryset.filter(id__in=[33])
 }}}

 However, when I try doing this:
 {{{
     queryset.filter(id__in=filtered_queryset.values('id))
 }}}

 It blows up on evaluation. And now both queryset are mutated and can not
 be evaluated. So any filter or get calls on them separately fail.
 I checked the query for the that specific query:
 {{{
     print(queryset.filter(id__in=filtered_queryset.values('id)).query)
     SELECT          "ticketing_ticket"."id",
                 "ticketing_ticket"."uuid",
                 "ticketing_ticket"."created_on",
                 "ticketing_ticket"."updated_on",
                 "ticketing_ticket"."server_created_on",
                 "ticketing_ticket"."server_updated_on",
                 "ticketing_ticket"."is_deleted",
                 "ticketing_ticket"."updated_by_id",
                 "ticketing_ticket"."created_by_id",
                 "ticketing_ticket"."heading",
                 "ticketing_ticket"."description",
                 "ticketing_ticket"."expected_completion_time",
                 "ticketing_ticket"."category_id",
                 "ticketing_ticket"."priority_id",
                 "ticketing_ticket"."status_id",
                 "ticketing_ticket"."assigned_to_id",
                 "ticketing_ticket"."requested_by_id",
                 "ticketing_ticket"."ticket_details_id",
                 Count("ticketing_commit"."id",
 "ticketing_commit"."is_deleted" = false, "ticketing_commit"."is_deleted" =
 false) filter (WHERE "ticketing_commit"."is_deleted" = false)
 AS "commit_count",
                 count("ticketing_comment"."id",
 "ticketing_comment"."is_deleted" = false, "ticketing_comment"."is_deleted"
 = false) filter (WHERE "ticketing_comment"."is_deleted" = false)
 AS "comment_count",
                 count("ticketing_ticketupload"."id",
 "ticketing_ticketupload"."is_deleted" = false,
 "ticketing_ticketupload"."is_deleted" = false) filter (WHERE
 "ticketing_ticketupload"."is_deleted" = false) AS "upload_count",
                 count("ticketing_ticketrelation"."blocked_id",
 (t6."is_deleted" = false
 AND             "ticketing_ticketstatus"."is_terminal" = false),
 (t6."is_deleted" = false
 AND             "ticketing_ticketstatus"."is_terminal" = false)) filter
 (WHERE (
                                 t6."is_deleted" = false
                 AND             "ticketing_ticketstatus"."is_terminal" =
 false)) AS "blocked_set_count",
                 count(t8."blocker_id", (t9."is_deleted" = false
 AND             t10."is_terminal" = false), (t9."is_deleted" = false
 AND             t10."is_terminal" = false)) filter (WHERE (
                                 t9."is_deleted" = false
                 AND             t10."is_terminal" = false)) AS
 "blocker_set_count",
                                 concat(
                 CASE
                                 WHEN
 "ticketing_ticketcategory"."department_id" IS NOT NULL THEN
                                                 CASE
                                                                 WHEN
 "department"."key" IS NOT NULL THEN "department"."key"
                                                                 ELSE
 upper(substring("department"."name" FROM (1) FOR (3)))
                                                 END
                                 ELSE sys
                 END, -, "ticketing_ticket"."id"::text) AS "display_name",
                 "ticketing_ticketcategory"."id",
                 "ticketing_ticketcategory"."uuid",
                 "ticketing_ticketcategory"."created_on",
                 "ticketing_ticketcategory"."updated_on",
                 "ticketing_ticketcategory"."server_created_on",
                 "ticketing_ticketcategory"."server_updated_on",
                 "ticketing_ticketcategory"."is_deleted",
                 "ticketing_ticketcategory"."updated_by_id",
                 "ticketing_ticketcategory"."created_by_id",
                 "ticketing_ticketcategory"."name",
                 "ticketing_ticketcategory"."type",
                 "ticketing_ticketcategory"."for_mobile",
                 "ticketing_ticketcategory"."department_id",
                 "ticketing_ticketcategory"."default_priority_id",
                 "ticketing_ticketcategory"."default_assignment_method",
                 "ticketing_ticketcategory"."default_assigned_user_id",
 "ticketing_ticketcategory"."default_assigned_job_title_id",
                 "ticketing_ticketcategory"."ticket_form_id"
 FROM            "ticketing_ticket"
 LEFT OUTER JOIN "ticketing_commit"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_commit"."ticket_id")
 LEFT OUTER JOIN "ticketing_comment"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_comment"."ticket_id")
 LEFT OUTER JOIN "ticketing_ticketupload"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_ticketupload"."ticket_id")
 LEFT OUTER JOIN "ticketing_ticketrelation"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_ticketrelation"."blocker_id")
 LEFT OUTER JOIN "ticketing_ticket" t6
 ON              (
                                 "ticketing_ticketrelation"."blocked_id" =
 t6."id")
 LEFT OUTER JOIN "ticketing_ticketstatus"
 ON              (
                                 t6."status_id" =
 "ticketing_ticketstatus"."id")
 LEFT OUTER JOIN "ticketing_ticketrelation" t8
 ON              (
                                 "ticketing_ticket"."id" = t8."blocked_id")
 LEFT OUTER JOIN "ticketing_ticket" t9
 ON              (
                                 t8."blocker_id" = t9."id")
 LEFT OUTER JOIN "ticketing_ticketstatus" t10
 ON              (
                                 t9."status_id" = t10."id")
 INNER JOIN      "ticketing_ticketcategory"
 ON              (
                                 "ticketing_ticket"."category_id" =
 "ticketing_ticketcategory"."id")
 LEFT OUTER JOIN "department"
 ON              (
                                 "ticketing_ticketcategory"."department_id"
 = "department"."id")
 WHERE           (
                                 "ticketing_ticket"."is_deleted" = false
                 AND             "ticketing_ticket"."id" IN
                                 (
                                                 SELECT          u0."id"
                                                 FROM
 "ticketing_ticket" u0
                                                 LEFT OUTER JOIN
 "ticketing_commit" u1
                                                 ON              (
 u0."id" = u1."ticket_id")
                                                 LEFT OUTER JOIN
 "ticketing_comment" u2
                                                 ON              (
 u0."id" = u2."ticket_id")
                                                 LEFT OUTER JOIN
 "ticketing_ticketupload" u3
                                                 ON              (
 u0."id" = u3."ticket_id")
                                                 LEFT OUTER JOIN
 "ticketing_ticketrelation" u4
                                                 ON              (
 u0."id" = u4."blocker_id")
                                                 LEFT OUTER JOIN
 "ticketing_ticket" u5
                                                 ON              (
 u4."blocked_id" = u5."id")
                                                 LEFT OUTER JOIN
 "ticketing_ticketstatus" u6
                                                 ON              (
 u5."status_id" = u6."id")
                                                 LEFT OUTER JOIN
 "ticketing_ticketrelation" u7
                                                 ON              (
 u0."id" = u7."blocked_id")
                                                 LEFT OUTER JOIN
 "ticketing_ticket" u8
                                                 ON              (
 u7."blocker_id" = u8."id")
                                                 LEFT OUTER JOIN
 "ticketing_ticketstatus" u9
                                                 ON              (
 u8."status_id" = u9."id")
                                                 INNER JOIN
 "ticketing_ticketcategory" u10
                                                 ON              (
 u0."category_id" = u10."id")
                                                 LEFT OUTER JOIN
 "department" u11
                                                 ON              (
 u10."department_id" = u11."id")
                                                 WHERE
 u0."is_deleted" = false
                                                 GROUP BY        u0."id",
 concat(
                                                                 CASE
 WHEN u10."department_id" IS NOT NULL THEN
 CASE
 WHEN u11."key" IS NOT NULL THEN u11."key"
 ELSE upper(substring(u11."name" FROM (1) FOR (3)))
 END
 ELSE sys
                                                                 END, -,
 u0."id"::text)))
 GROUP BY        "ticketing_ticket"."id",
                                 concat(
                 CASE
                                 WHEN
 "ticketing_ticketcategory"."department_id" IS NOT NULL THEN
                                                 CASE
                                                                 WHEN
 "department"."key" IS NOT NULL THEN "department"."key"
                                                                 ELSE
 upper(substring("department"."name" FROM (1) FOR (3)))
                                                 END
                                 ELSE sys
                 END, -, "ticketing_ticket"."id"::text),
                 "ticketing_ticketcategory"."id"
 }}}

 Now both query printed separately, show:
 {{{
     print(queryset.query)
     SELECT          "ticketing_ticket"."id",
                 "ticketing_ticket"."uuid",
                 "ticketing_ticket"."created_on",
                 "ticketing_ticket"."updated_on",
                 "ticketing_ticket"."server_created_on",
                 "ticketing_ticket"."server_updated_on",
                 "ticketing_ticket"."is_deleted",
                 "ticketing_ticket"."updated_by_id",
                 "ticketing_ticket"."created_by_id",
                 "ticketing_ticket"."heading",
                 "ticketing_ticket"."description",
                 "ticketing_ticket"."expected_completion_time",
                 "ticketing_ticket"."category_id",
                 "ticketing_ticket"."priority_id",
                 "ticketing_ticket"."status_id",
                 "ticketing_ticket"."assigned_to_id",
                 "ticketing_ticket"."requested_by_id",
                 "ticketing_ticket"."ticket_details_id",
                 Count("ticketing_commit"."id",
 "ticketing_commit"."is_deleted" = false, "ticketing_commit"."is_deleted" =
 false) filter (WHERE "ticketing_commit"."is_deleted" = false)
 AS "commit_count",
                 count("ticketing_comment"."id",
 "ticketing_comment"."is_deleted" = false, "ticketing_comment"."is_deleted"
 = false) filter (WHERE "ticketing_comment"."is_deleted" = false)
 AS "comment_count",
                 count("ticketing_ticketupload"."id",
 "ticketing_ticketupload"."is_deleted" = false,
 "ticketing_ticketupload"."is_deleted" = false) filter (WHERE
 "ticketing_ticketupload"."is_deleted" = false) AS "upload_count",
                 count("ticketing_ticketrelation"."blocked_id",
 (t6."is_deleted" = false
 AND             "ticketing_ticketstatus"."is_terminal" = false),
 (t6."is_deleted" = false
 AND             "ticketing_ticketstatus"."is_terminal" = false)) filter
 (WHERE (
                                 t6."is_deleted" = false
                 AND             "ticketing_ticketstatus"."is_terminal" =
 false)) AS "blocked_set_count",
                 count(t8."blocker_id", (t9."is_deleted" = false
 AND             t10."is_terminal" = false), (t9."is_deleted" = false
 AND             t10."is_terminal" = false)) filter (WHERE (
                                 t9."is_deleted" = false
                 AND             t10."is_terminal" = false)) AS
 "blocker_set_count",
                                 concat(
                 CASE
                                 WHEN
 "ticketing_ticketcategory"."department_id" IS NOT NULL THEN
                                                 CASE
                                                                 WHEN
 "department"."key" IS NOT NULL THEN "department"."key"
                                                                 ELSE
 upper(substring("department"."name" FROM (1) FOR (3)))
                                                 END
                                 ELSE sys
                 END, -, "ticketing_ticket"."id"::text) AS "display_name",
                 "ticketing_ticketcategory"."id",
                 "ticketing_ticketcategory"."uuid",
                 "ticketing_ticketcategory"."created_on",
                 "ticketing_ticketcategory"."updated_on",
                 "ticketing_ticketcategory"."server_created_on",
                 "ticketing_ticketcategory"."server_updated_on",
                 "ticketing_ticketcategory"."is_deleted",
                 "ticketing_ticketcategory"."updated_by_id",
                 "ticketing_ticketcategory"."created_by_id",
                 "ticketing_ticketcategory"."name",
                 "ticketing_ticketcategory"."type",
                 "ticketing_ticketcategory"."for_mobile",
                 "ticketing_ticketcategory"."department_id",
                 "ticketing_ticketcategory"."default_priority_id",
                 "ticketing_ticketcategory"."default_assignment_method",
                 "ticketing_ticketcategory"."default_assigned_user_id",
 "ticketing_ticketcategory"."default_assigned_job_title_id",
                 "ticketing_ticketcategory"."ticket_form_id"
 FROM            "ticketing_ticket"
 LEFT OUTER JOIN "ticketing_commit"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_commit"."ticket_id")
 LEFT OUTER JOIN "ticketing_comment"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_comment"."ticket_id")
 LEFT OUTER JOIN "ticketing_ticketupload"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_ticketupload"."ticket_id")
 LEFT OUTER JOIN "ticketing_ticketrelation"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_ticketrelation"."blocker_id")
 LEFT OUTER JOIN "ticketing_ticket" t6
 ON              (
                                 "ticketing_ticketrelation"."blocked_id" =
 t6."id")
 LEFT OUTER JOIN "ticketing_ticketstatus"
 ON              (
                                 t6."status_id" =
 "ticketing_ticketstatus"."id")
 LEFT OUTER JOIN "ticketing_ticketrelation" t8
 ON              (
                                 "ticketing_ticket"."id" = t8."blocked_id")
 LEFT OUTER JOIN "ticketing_ticket" t9
 ON              (
                                 t8."blocker_id" = t9."id")
 LEFT OUTER JOIN "ticketing_ticketstatus" t10
 ON              (
                                 t9."status_id" = t10."id")
 INNER JOIN      "ticketing_ticketcategory"
 ON              (
                                 "ticketing_ticket"."category_id" =
 "ticketing_ticketcategory"."id")
 LEFT OUTER JOIN "department"
 ON              (
                                 "ticketing_ticketcategory"."department_id"
 = "department"."id")
 WHERE           "ticketing_ticket"."is_deleted" = false
 GROUP BY        "ticketing_ticket"."id",
                                 concat(
                 CASE
                                 WHEN
 "ticketing_ticketcategory"."department_id" IS NOT NULL THEN
                                                 CASE
                                                                 WHEN
 "department"."key" IS NOT NULL THEN "department"."key"
                                                                 ELSE
 upper(substring("department"."name" FROM (1) FOR (3)))
                                                 END
                                 ELSE sys
                 END, -, "ticketing_ticket"."id"::text),
                 "ticketing_ticketcategory"."id"
 }}}

 and
 {{{
     SELECT          "ticketing_ticket"."id",
                 "ticketing_ticket"."uuid",
                 "ticketing_ticket"."created_on",
                 "ticketing_ticket"."updated_on",
                 "ticketing_ticket"."server_created_on",
                 "ticketing_ticket"."server_updated_on",
                 "ticketing_ticket"."is_deleted",
                 "ticketing_ticket"."updated_by_id",
                 "ticketing_ticket"."created_by_id",
                 "ticketing_ticket"."heading",
                 "ticketing_ticket"."description",
                 "ticketing_ticket"."expected_completion_time",
                 "ticketing_ticket"."category_id",
                 "ticketing_ticket"."priority_id",
                 "ticketing_ticket"."status_id",
                 "ticketing_ticket"."assigned_to_id",
                 "ticketing_ticket"."requested_by_id",
                 "ticketing_ticket"."ticket_details_id",
                 Count("ticketing_commit"."id",
 "ticketing_commit"."is_deleted" = false, "ticketing_commit"."is_deleted" =
 false) filter (WHERE "ticketing_commit"."is_deleted" = false)
 AS "commit_count",
                 count("ticketing_comment"."id",
 "ticketing_comment"."is_deleted" = false, "ticketing_comment"."is_deleted"
 = false) filter (WHERE "ticketing_comment"."is_deleted" = false)
 AS "comment_count",
                 count("ticketing_ticketupload"."id",
 "ticketing_ticketupload"."is_deleted" = false,
 "ticketing_ticketupload"."is_deleted" = false) filter (WHERE
 "ticketing_ticketupload"."is_deleted" = false) AS "upload_count",
                 count("ticketing_ticketrelation"."blocked_id",
 (t6."is_deleted" = false
 AND             "ticketing_ticketstatus"."is_terminal" = false),
 (t6."is_deleted" = false
 AND             "ticketing_ticketstatus"."is_terminal" = false)) filter
 (WHERE (
                                 t6."is_deleted" = false
                 AND             "ticketing_ticketstatus"."is_terminal" =
 false)) AS "blocked_set_count",
                 count(t8."blocker_id", (t9."is_deleted" = false
 AND             t10."is_terminal" = false), (t9."is_deleted" = false
 AND             t10."is_terminal" = false)) filter (WHERE (
                                 t9."is_deleted" = false
                 AND             t10."is_terminal" = false)) AS
 "blocker_set_count",
                                 concat(
                 CASE
                                 WHEN
 "ticketing_ticketcategory"."department_id" IS NOT NULL THEN
                                                 CASE
                                                                 WHEN
 "department"."key" IS NOT NULL THEN "department"."key"
                                                                 ELSE
 upper(substring("department"."name" FROM (1) FOR (3)))
                                                 END
                                 ELSE sys
                 END, -, "ticketing_ticket"."id"::text) AS "display_name",
                 "ticketing_ticketcategory"."id",
                 "ticketing_ticketcategory"."uuid",
                 "ticketing_ticketcategory"."created_on",
                 "ticketing_ticketcategory"."updated_on",
                 "ticketing_ticketcategory"."server_created_on",
                 "ticketing_ticketcategory"."server_updated_on",
                 "ticketing_ticketcategory"."is_deleted",
                 "ticketing_ticketcategory"."updated_by_id",
                 "ticketing_ticketcategory"."created_by_id",
                 "ticketing_ticketcategory"."name",
                 "ticketing_ticketcategory"."type",
                 "ticketing_ticketcategory"."for_mobile",
                 "ticketing_ticketcategory"."department_id",
                 "ticketing_ticketcategory"."default_priority_id",
                 "ticketing_ticketcategory"."default_assignment_method",
                 "ticketing_ticketcategory"."default_assigned_user_id",
 "ticketing_ticketcategory"."default_assigned_job_title_id",
                 "ticketing_ticketcategory"."ticket_form_id"
 FROM            "ticketing_ticket"
 LEFT OUTER JOIN "ticketing_commit"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_commit"."ticket_id")
 LEFT OUTER JOIN "ticketing_comment"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_comment"."ticket_id")
 LEFT OUTER JOIN "ticketing_ticketupload"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_ticketupload"."ticket_id")
 LEFT OUTER JOIN "ticketing_ticketrelation"
 ON              (
                                 "ticketing_ticket"."id" =
 "ticketing_ticketrelation"."blocker_id")
 LEFT OUTER JOIN "ticketing_ticket" t6
 ON              (
                                 "ticketing_ticketrelation"."blocked_id" =
 t6."id")
 LEFT OUTER JOIN "ticketing_ticketstatus"
 ON              (
                                 t6."status_id" =
 "ticketing_ticketstatus"."id")
 LEFT OUTER JOIN "ticketing_ticketrelation" t8
 ON              (
                                 "ticketing_ticket"."id" = t8."blocked_id")
 LEFT OUTER JOIN "ticketing_ticket" t9
 ON              (
                                 t8."blocker_id" = t9."id")
 LEFT OUTER JOIN "ticketing_ticketstatus" t10
 ON              (
                                 t9."status_id" = t10."id")
 INNER JOIN      "ticketing_ticketcategory"
 ON              (
                                 "ticketing_ticket"."category_id" =
 "ticketing_ticketcategory"."id")
 LEFT OUTER JOIN "department"
 ON              (
                                 "ticketing_ticketcategory"."department_id"
 = "department"."id")
 WHERE           (
                                 "ticketing_ticket"."is_deleted" = false
                 AND             upper("ticketing_ticket"."heading"::text)
 LIKE upper(%%))
 GROUP BY        "ticketing_ticket"."id",
                                 concat(
                 CASE
                                 WHEN
 "ticketing_ticketcategory"."department_id" IS NOT NULL THEN
                                                 CASE
                                                                 WHEN
 "department"."key" IS NOT NULL THEN "department"."key"
                                                                 ELSE
 upper(substring("department"."name" FROM (1) FOR (3)))
                                                 END
                                 ELSE sys
                 END, -, "ticketing_ticket"."id"::text),
                 "ticketing_ticketcategory"."id"
 }}}

 Please guide as to what would kind of test would you need for this or if
 this is some problem from my side.
 I am using Postgres.

 As you can see, the Count is taking more than one (and wrong) arguments in
 both the queries. It starts taking the filter argument as a part of the
 Count argument.
 I did some preliminary debugging and (I could be wrong) but the Count
 __init__ class is called with the correct expressions through out the
 flow.

 TLDR; I am not entirely sure where this breaks but when a queryset with
 Count annotation (with filter kwarg) is called with
 queryset.filter(id__in=filtered_queryset.values('id))
 where filtered_queryset = queryset.filter(heading__icontains='')
 Count adds the filter as a argument to the queryset hence making invalid
 SQL.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/30011>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/050.ee93dacdcf18f90974da8b1aac3547a8%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to