Menu

#14 alsoFetch limits result of Join when constant value present

open
None
5
2003-08-26
2003-08-26
Boris Popov
No

query := Query returningManyOf: Company where: nil.
query alsoFetch: [:value | value defaultAddress
asOuterJoin].
query alsoFetch: [:value | value defaultEmail
asOuterJoin].
query alsoFetch: [:value | value defaultPhone
asOuterJoin].

results in:

SELECT t2.ID, t2.TYPE, t2.UNIT, t2.STREET, t2.CITY,
t2.STATE, t2.COUNTRY, t2.POSTAL, t2.IS_DEFAULT,
t4.ID, t4.TYPE, t4.ADDRESS, t4.IS_DEFAULT, t3.ID,
t3.TYPE, t3.COUNTRY_CODE, t3.AREA_CODE, t3.NUM,
t3.IS_DEFAULT, t1.CONTACT_TYPE, t1.ID,
t1.IS_FLAGGED, t1.DONOR_LISTING, t1.NAME

FROM (((CONTACT t1 INNER JOIN EMAIL t4 ON (t1.ID =
t4.CONTACT_ID)) INNER JOIN PHONE t3 ON (t1.ID =
t3.CONTACT_ID)) INNER JOIN ADDRESS t2 ON (t1.ID =
t2.CONTACT_ID))

WHERE ((true = t2.IS_DEFAULT) AND ((true =
t3.IS_DEFAULT) AND ((true = t4.IS_DEFAULT) AND
((t1.CONTACT_TYPE = 'C')))));

when ideally it should result in:

SELECT t2.ID, t2.TYPE, t2.UNIT, t2.STREET, t2.CITY,
t2.STATE, t2.COUNTRY, t2.POSTAL, t2.IS_DEFAULT,
t4.ID, t4.TYPE, t4.ADDRESS, t4.IS_DEFAULT, t3.ID,
t3.TYPE, t3.COUNTRY_CODE, t3.AREA_CODE, t3.NUM,
t3.IS_DEFAULT, t1.CONTACT_TYPE, t1.ID,
t1.IS_FLAGGED, t1.DONOR_LISTING, t1.NAME

FROM (((CONTACT t1 LEFT JOIN EMAIL t4 ON (t1.ID =
t4.CONTACT_ID)) LEFT JOIN PHONE t3 ON (t1.ID =
t3.CONTACT_ID)) LEFT JOIN ADDRESS t2 ON (t1.ID =
t2.CONTACT_ID))

WHERE ((true = t2.IS_DEFAULT OR t2.IS_DEFAULT IS
NULL) AND ((true = t3.IS_DEFAULT OR t3.IS_DEFAULT
IS NULL) AND ((true = t4.IS_DEFAULT OR
t4.IS_DEFAULT IS NULL) AND ((t1.CONTACT_TYPE
= 'C')))));

Discussion


Log in to post a comment.