# HG changeset patch # User Sylvain Thénault # Date 1253103432 -7200 # Node ID 1ceac4cd4fb78d35839f76a46f7e4b79a746ca40 # Parent 988a72e59b2bf2c7391a01286a2abca429c6781c [ms] fix planning w/ query using identity diff -r 988a72e59b2b -r 1ceac4cd4fb7 server/msplanner.py --- a/server/msplanner.py Wed Sep 16 14:16:19 2009 +0200 +++ b/server/msplanner.py Wed Sep 16 14:17:12 2009 +0200 @@ -344,7 +344,7 @@ # * at least one supported relation specified if not varobj._q_invariant or \ any(imap(source.support_relation, - (r.r_type for r in rels if r.r_type != 'eid'))): + (r.r_type for r in rels if r.r_type not in ('identity', 'eid')))): sourcesterms.setdefault(source, {}).setdefault(varobj, set()).add(i) # if variable is not invariant and is used by a relation # not supported by this source, we'll have to split the diff -r 988a72e59b2b -r 1ceac4cd4fb7 server/test/unittest_msplanner.py --- a/server/test/unittest_msplanner.py Wed Sep 16 14:16:19 2009 +0200 +++ b/server/test/unittest_msplanner.py Wed Sep 16 14:17:12 2009 +0200 @@ -1961,13 +1961,23 @@ None, None, [self.system], {}, [])], {'x': 999998, 'u': 999999}) - def test_nonregr_identity_no_source_access(self): + def test_nonregr_identity_no_source_access_1(self): repo._type_source_cache[999999] = ('CWUser', 'ldap', 999998) self._test('Any S WHERE S identity U, S eid %(s)s, U eid %(u)s', [('OneFetchStep', [('Any 999999 WHERE 999999 identity 999999', [{}])], None, None, [self.system], {}, [])], {'s': 999999, 'u': 999999}) + def test_nonregr_identity_no_source_access_2(self): + repo._type_source_cache[999999] = ('EmailAddress', 'system', 999999) + repo._type_source_cache[999998] = ('CWUser', 'ldap', 999998) + self._test('Any X WHERE O use_email X, ((EXISTS(O identity U)) OR (EXISTS(O in_group G, G name IN("managers", "staff")))) OR (EXISTS(O in_group G2, U in_group G2, NOT G2 name "users")), X eid %(x)s, U eid %(u)s', + [('OneFetchStep', [('Any 999999 WHERE O use_email 999999, ((EXISTS(O identity 999998)) OR (EXISTS(O in_group G, G name IN("managers", "staff")))) OR (EXISTS(O in_group G2, 999998 in_group G2, NOT G2 name "users"))', + [{'G': 'CWGroup', 'G2': 'CWGroup', 'O': 'CWUser'}])], + None, None, [self.system], {}, [])], + {'x': 999999, 'u': 999998}) + + class MSPlannerTwoSameExternalSourcesTC(BasePlannerTC): """test planner related feature on a 3-sources repository: