#14008: GeoDjango subquery fails with bad quoting
---------------------------+------------------------------------------------
Reporter: Matthew | Owner: nobody
Status: new | Milestone:
Component: Uncategorized | Version: 1.2
Keywords: | Stage: Unreviewed
Has_patch: 0 |
---------------------------+------------------------------------------------
This code (adapted from source code of http://github.com/mysociety/mapit
):
{{{
areas = Area.objects.filter(
polygons__polygon__contains = location,
generation_low__lte = 13,
generation_high__gte = 13
)
Code.objects.filter( area__in = areas )
}}}
generates the following SQL (on a PostGIS database):
{{{
SELECT "areas_code"."id", "areas_code"."area_id", "areas_code"."type",
"areas_code"."code"
FROM "areas_code"
WHERE "areas_code"."area_id" IN (
SELECT U0."id" FROM "areas_area" U0
INNER JOIN "areas_geometry" U1 ON (U0."id" = U1."area_id")
WHERE (ST_Contains("U1"."polygon",
ST_GeomFromWKB('\\001\\001\\000\\000\\000\\000\\000\\000\\000\\000j\\030A\\000\\000\\000\\000\\200O\\022A',
27700))
AND U0."generation_high_id" >= 13 AND U0."generation_low_id" <= 13 )
);
}}}
which gives this error:
{{{
ERROR: missing FROM-clause entry in subquery for table "U1"
LINE 1: ...U1 ON (U0."id" = U1."area_id") WHERE (ST_Contains("U1"."poly...
}}}
It appears that the "U1" must '''not''' be quoted in the first argument to
ST_Contains, as then it works fine:
{{{
SELECT "areas_code"."id", "areas_code"."area_id", "areas_code"."type",
"areas_code"."code"
FROM "areas_code"
WHERE "areas_code"."area_id" IN (
SELECT U0."id" FROM "areas_area" U0
INNER JOIN "areas_geometry" U1 ON (U0."id" = U1."area_id")
WHERE (ST_Contains(U1."polygon",
ST_GeomFromWKB('\\001\\001\\000\\000\\000\\000\\000\\000\\000\\000j\\030A\\000\\000\\000\\000\\200O\\022A',
27700))
AND U0."generation_high_id" >= 13 AND U0."generation_low_id" <= 13 )
);
id | area_id | type | code
-------+---------+---------+--------
14532 | 9498 | unit_id | 148
14531 | 9498 | ons | 00CUGA
44890 | 65890 | unit_id | 24640
17586 | 11809 | unit_id | 41426
2324 | 2546 | unit_id | 72
2323 | 2546 | ons | 00CU
(6 rows)
}}}
I did look at the code to try and see what does the quoting or inner
joining, but I'm afraid I couldn't work it out, sorry.
--
Ticket URL: <http://code.djangoproject.com/ticket/14008>
Django <http://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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.