#33282: django.db.utils.ProgrammingError: more than one row returned by a 
subquery
used as an expression
-------------------------------------+-------------------------------------
     Reporter:  Antonio Terceiro     |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:  3.2
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------

Comment (by Antonio Terceiro):

 FWIW the generated query  that causes this is:

 {{{
 SELECT
 COUNT (*)
 AS "__count" FROM "lava_scheduler_app_testjob"
 WHERE (((NOT "lava_scheduler_app_testjob".
          "is_public" AND "lava_scheduler_app_testjob"."submitter_id" =
          %s) OR ("lava_scheduler_app_testjob".
                  "is_public" AND "lava_scheduler_app_testjob".
                  "id" IN (SELECT U0.
                           "id" FROM "lava_scheduler_app_testjob" U0 LEFT
 OUTER
                           JOIN "lava_scheduler_app_testjob_viewing_groups"
 U1
                           ON (U0."id" =
                               U1."testjob_id") WHERE U1.
                           "group_id" IS NULL)
                  AND (("lava_scheduler_app_testjob".
                        "actual_device_id" IS NOT NULL AND
                        "lava_scheduler_app_testjob".
                        "actual_device_id" IN (SELECT V0.
                                               "hostname" FROM
                                               "lava_scheduler_app_device"
 V0
                                               LEFT OUTER JOIN
 "lava_scheduler_app_groupdevicepermission"
                                               V1 ON (V0."hostname" =
                                                      V1.
                                                      "device_id") LEFT
 OUTER
                                               JOIN "auth_group" V2 ON (V1.
 "group_id"
                                                                        =
                                                                        V2.
 "id")
                                               LEFT OUTER JOIN
                                               "auth_user_groups" V3 ON
 (V2.
 "id" =
 V3.
 "group_id")
                                               LEFT OUTER JOIN
                                               "auth_permission" V5 ON (V1.
 "permission_id"
                                                                        =
                                                                        V5.
 "id")
                                               GROUP BY V0."hostname",
                                               (SELECT U0.
                                                "name" FROM
 "lava_scheduler_app_devicetype"
                                                U0 LEFT OUTER JOIN
 "lava_scheduler_app_groupdevicetypepermission"
                                                U1 ON (U0."name" =
                                                       U1.
                                                       "devicetype_id")
 LEFT
                                                OUTER JOIN "auth_group" U2
                                                ON (U1."group_id" =
                                                    U2.
                                                    "id") LEFT OUTER JOIN
                                                "auth_user_groups" U3 ON
 (U2.
 "id"
                                                                          =
 U3.
 "group_id")
                                                LEFT OUTER JOIN
                                                "auth_permission" U5 ON
 (U1.
 "permission_id"
                                                                         =
 U5.
 "id")
                                                GROUP BY U0.
                                                "name"
                                                HAVING (SUM
                                                        (CASE
                                                         WHEN
 (U5."codename" =
                                                               %s) THEN %
                                                         s ELSE % s END) =
                                                        %s OR
                                                        NOT (SUM
                                                             (CASE
                                                              WHEN (U3.
 "user_id" =
                                                                    %s AND
 U5.
 "codename"
                                                                    IN (%s,
 %s,
 %s))
                                                              THEN % s ELSE
 %
                                                              s END) =
                                                             %s)))
                                               HAVING ((SUM
                                                        (CASE
                                                         WHEN
 (V5."codename" =
                                                               %s) THEN %
                                                         s ELSE % s END) =
                                                        %s AND V0.
                                                        "device_type_id"
                                                        IN (SELECT U0.
                                                            "name" FROM
 "lava_scheduler_app_devicetype"
                                                            U0 LEFT OUTER
 JOIN
 "lava_scheduler_app_groupdevicetypepermission"
                                                            U1 ON
 (U0."name" =
                                                                   U1.
 "devicetype_id")
                                                            LEFT OUTER JOIN
                                                            "auth_group" U2
                                                            ON
 (U1."group_id" =
                                                                U2.
                                                                "id") LEFT
                                                            OUTER JOIN
 "auth_user_groups"
                                                            U3 ON (U2."id"
 =
                                                                   U3.
 "group_id")
                                                            LEFT OUTER JOIN
 "auth_permission"
                                                            U5 ON (U1.
 "permission_id"
                                                                   =
                                                                   U5.
                                                                   "id")
 GROUP
                                                            BY U0.
                                                            "name"
                                                            HAVING (SUM
                                                                    (CASE
                                                                     WHEN
 (U5.
 "codename"
 =
 %s)
                                                                     THEN %
                                                                     s ELSE
 %
                                                                     s END)
 =
                                                                    %s OR
                                                                    NOT
 (SUM
 (CASE
 WHEN
 (U3.
 "user_id"
 =
 %s
 AND
 U5.
 "codename"
 IN
 (%s,
 %s,
 %s))
 THEN
                                                                          %
                                                                          s
 ELSE
                                                                          %
                                                                          s
 END)
                                                                         =
 %s))))
                                                       OR
                                                       NOT (SUM
                                                            (CASE
                                                             WHEN (V3.
 "user_id" =
                                                                   %s AND
 V5.
 "codename"
                                                                   IN (%s,
 %s,
                                                                       %s))
                                                             THEN % s ELSE
 %
                                                             s END) =
                                                            %s))))
                       OR ("lava_scheduler_app_testjob".
                           "actual_device_id" IS NULL AND
                           "lava_scheduler_app_testjob".
                           "requested_device_type_id" IN (SELECT U0.
                                                          "name" FROM
 "lava_scheduler_app_devicetype"
                                                          U0 LEFT OUTER
 JOIN
 "lava_scheduler_app_groupdevicetypepermission"
                                                          U1 ON (U0."name"
 =
                                                                 U1.
 "devicetype_id")
                                                          LEFT OUTER JOIN
                                                          "auth_group" U2
                                                          ON (U1."group_id"
 =
                                                              U2.
                                                              "id") LEFT
 OUTER
                                                          JOIN
 "auth_user_groups" U3
                                                          ON (U2."id" =
                                                              U3.
                                                              "group_id")
 LEFT
                                                          OUTER JOIN
                                                          "auth_permission"
 U5
                                                          ON (U1.
 "permission_id" =
                                                              U5.
                                                              "id") GROUP
 BY
                                                          U0.
                                                          "name"
                                                          HAVING (SUM
                                                                  (CASE
                                                                   WHEN
 (U5.
 "codename"
                                                                         =
 %s)
                                                                   THEN %
                                                                   s ELSE %
                                                                   s END) =
                                                                  %s OR
                                                                  NOT (SUM
 (CASE
 WHEN
 (U3.
 "user_id"
                                                                         =
                                                                         %s
 AND
 U5.
 "codename"
                                                                         IN
 (%s,
 %s,
 %s))
 THEN %
                                                                        s
 ELSE
                                                                        %
                                                                        s
 END)
                                                                       =
 %s))))))
         OR (NOT
             ("lava_scheduler_app_testjob".
              "id" IN (SELECT U0.
                       "id" FROM "lava_scheduler_app_testjob" U0 LEFT OUTER
                       JOIN "lava_scheduler_app_testjob_viewing_groups" U1
                       ON (U0."id" =
                           U1."testjob_id") WHERE U1.
                       "group_id" IS NULL)) AND NOT (EXISTS (SELECT (1) AS
 "a"
                                                             FROM
 "lava_scheduler_app_testjob_viewing_groups"
                                                             V1 WHERE (V1.
 "group_id"
                                                                       IN
 (SELECT
                                                                        U0.
 "id"
 FROM
 "auth_group"
                                                                        U0
 WHERE
                                                                        NOT
 (U0.
 "id"
                                                                         IN
 (%s)))
                                                                       AND
 V1.
 "testjob_id"
                                                                       =
 ("lava_scheduler_app_testjob".
 "id"))
                                                             LIMIT 1))))
 AND
        "lava_scheduler_app_testjob"."submitter_id" =
        %s AND "lava_scheduler_app_testjob"."state" IN (%s, %s))
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33282#comment:2>
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/066.4076072e866af66b74d5cc618c9a524b%40djangoproject.com.

Reply via email to