Hi all,

using Django 1.3 with Python 2.6.5 on Ubuntu 10.04 and mod_wsgi, with Oracle database, in addition to http://code.djangoproject.com/ticket/15766, I seem to have come over another problem with select_related():

The same queryset produces different results (number of returned database rows) depending on the presence of select_related().

Please consider this shell session:


>>> ErsterTag
datetime.date(2010, 12, 27)

>>> LetzterTag
datetime.date(2011, 1, 31)


>>> ZeitenQS = m.erfasst_set.filter(datum__range=(ErsterTag, LetzterTag)).order_by('datum')

>>> print ZeitenQS.query
SELECT "ERFASST"."ID", "ERFASST"."KEY", "ERFASST"."DATUM", "ERFASST"."CODE", "ERFASST"."STATUS", "ERFASST"."ANFANG", "ERFASST"."ENDE", "ERFASST"."PAUSE", "ERFASST"."ANFANGSOLL", "ERFASST"."ENDESOLL", "ERFASST"."PAUSESOLL", "ERFASST"."TAGESSOLL", "ERFASST"."DOPPELT", "ERFASST"."FLAG", "ERFASST"."APLAN", "ERFASST"."REALKST", "ERFASST"."PAUSEVOR", "ERFASST"."PAUSENACH", "ERFASST"."VORBLENDPLAN", "ERFASST"."LOCATION" FROM "ERFASST" WHERE ("ERFASST"."KEY" = F1744 AND "ERFASST"."DATUM" BETWEEN 2010-12-27 and 2011-01-31) ORDER BY "ERFASST"."DATUM" ASC

>>> len(list(ZeitenQS))
36


>>> ZeitenQS = m.erfasst_set.filter(datum__range=(ErsterTag, LetzterTag)).order_by('datum').select_related()

>>> print ZeitenQS.query
SELECT "ERFASST"."ID", "ERFASST"."KEY", "ERFASST"."DATUM", "ERFASST"."CODE", "ERFASST"."STATUS", "ERFASST"."ANFANG", "ERFASST"."ENDE", "ERFASST"."PAUSE", "ERFASST"."ANFANGSOLL", "ERFASST"."ENDESOLL", "ERFASST"."PAUSESOLL", "ERFASST"."TAGESSOLL", "ERFASST"."DOPPELT", "ERFASST"."FLAG", "ERFASST"."APLAN", "ERFASST"."REALKST", "ERFASST"."PAUSEVOR", "ERFASST"."PAUSENACH", "ERFASST"."VORBLENDPLAN", "ERFASST"."LOCATION", "MITARBEITER"."ID", "MITARBEITER"."PERSNO", "MITARBEITER"."KEY", "MITARBEITER"."NAME", "MITARBEITER"."VORNAME", "MITARBEITER"."TYP", "MITARBEITER"."CODE", "MITARBEITER"."LOCATION", "MITARBEITER"."GEBURTSTAG", "MITARBEITER"."EINTRITT", "MITARBEITER"."SPERRE", "MITARBEITER"."BEHINDERUNG", "MITARBEITER"."FAHRGEM", "CODE"."ID", "CODE"."WERT", "CODE"."TAGESSOLL", "CODE"."LOCATION", "CODE"."FEIERTAGWERT", "CODE"."URLAUBWERT", "CODE"."TEXT", "CODE"."TYP", "CODE"."TEILURLZEIT", "CODE"."KRANKWERT", "CODE"."TAGE", "CODE"."ABZUG", "CODE"."GRENZWERT", T4."ID", T4."WERT", T4."TAGESSOLL", T4."LOCATION", T4."FEIERTAGWERT", T4."URLAUBWERT", T4."TEXT", T4."TYP", T4."TEILURLZEIT", T4."KRANKWERT", T4."TAGE", T4."ABZUG", T4."GRENZWERT", "STATUS"."ID", "STATUS"."STATUS", "STATUS"."STATUSTEXT", "KOSTENSTELLE"."ID", "KOSTENSTELLE"."NAME", "KOSTENSTELLE"."LOCATION", "KOSTENSTELLE"."HOL_GRP_ID" FROM "ERFASST" INNER JOIN "MITARBEITER" ON ("ERFASST"."KEY" = "MITARBEITER"."KEY") INNER JOIN "CODE" ON ("MITARBEITER"."CODE" = "CODE"."ID") INNER JOIN "CODE" T4 ON ("ERFASST"."CODE" = T4."ID") INNER JOIN "STATUS" ON ("ERFASST"."STATUS" = "STATUS"."ID") INNER JOIN "KOSTENSTELLE" ON ("ERFASST"."REALKST" = "KOSTENSTELLE"."ID") WHERE ("ERFASST"."KEY" = F1744 AND "ERFASST"."DATUM" BETWEEN 2010-12-27 and 2011-01-31) ORDER BY "ERFASST"."DATUM" ASC

>>> len(list(ZeitenQS))
16


When I run the raw SQL statements manually in the database shell, the observed result is the same, i.e. 36 rows in the first case, but only 16 rows in the latter case (36 expected as well).

I'm not safe enough in SQL to pinpoint the source of the problem (there is no table "T4" in the database).

What can I do?
Please help!

Thank you very much,
Carsten



--
   Cafu - the open-source Game and Graphics Engine
for multiplayer, cross-platform, real-time 3D Action
          Learn more at http://www.cafu.de

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to