# HG changeset patch # User Sylvain Thénault # Date 1288162394 -7200 # Node ID 18d159a2d1badaab1476a76d605386c533e0260d # Parent 52d1568af412f72a689cf8ea76339517197b71ec [ms planner] fix changeset 6650:72f2fd93a622: we should sometime complete input map anyway diff -r 52d1568af412 -r 18d159a2d1ba devtools/repotest.py --- a/devtools/repotest.py Wed Oct 27 08:51:50 2010 +0200 +++ b/devtools/repotest.py Wed Oct 27 08:53:14 2010 +0200 @@ -363,15 +363,15 @@ from cubicweb.server.msplanner import PartPlanInformation except ImportError: class PartPlanInformation(object): - def merge_input_maps(self, *args): + def merge_input_maps(self, *args, **kwargs): pass def _choose_term(self, sourceterms): pass _orig_merge_input_maps = PartPlanInformation.merge_input_maps _orig_choose_term = PartPlanInformation._choose_term -def _merge_input_maps(*args): - return sorted(_orig_merge_input_maps(*args)) +def _merge_input_maps(*args, **kwargs): + return sorted(_orig_merge_input_maps(*args, **kwargs)) def _choose_term(self, sourceterms): # predictable order for test purpose diff -r 52d1568af412 -r 18d159a2d1ba server/msplanner.py --- a/server/msplanner.py Wed Oct 27 08:51:50 2010 +0200 +++ b/server/msplanner.py Wed Oct 27 08:53:14 2010 +0200 @@ -1094,7 +1094,7 @@ if not sourceterms: del self._sourcesterms[source] - def merge_input_maps(self, allsolindices): + def merge_input_maps(self, allsolindices, complete=True): """inputmaps is a dictionary with tuple of solution indices as key with an associated input map as value. This function compute for each solution its necessary input map and return them grouped @@ -1113,7 +1113,7 @@ # compute a single map for each solution for solindices, basemap in self._inputmaps.iteritems(): for solindex in solindices: - if not solindex in allsolindices: + if not (complete or solindex in allsolindices): continue solmap = mapbysol.setdefault(solindex, {}) solmap.update(basemap) @@ -1294,13 +1294,15 @@ ppi.temptable = atemptable vfilter = TermsFiltererVisitor(self.schema, ppi) steps = [] + multifinal = len([x for x in stepdefs if x[-1]]) >= 2 for sources, terms, solindices, scope, needsel, final in stepdefs: # extract an executable query using only the specified terms if sources[0].uri == 'system': # in this case we have to merge input maps before call to # filter so already processed restriction are correctly # removed - solsinputmaps = ppi.merge_input_maps(solindices) + solsinputmaps = ppi.merge_input_maps(solindices, + complete=not (final and multifinal)) for solindices, inputmap in solsinputmaps: minrqlst, insertedvars = vfilter.filter( sources, terms, scope, set(solindices), needsel, final) diff -r 52d1568af412 -r 18d159a2d1ba server/test/unittest_msplanner.py --- a/server/test/unittest_msplanner.py Wed Oct 27 08:51:50 2010 +0200 +++ b/server/test/unittest_msplanner.py Wed Oct 27 08:53:14 2010 +0200 @@ -2296,13 +2296,6 @@ _test = test_plan - def test_crossed_relation_eid_1_noninvariant(self): - repo._type_source_cache[999999] = ('Note', 'cards', 999999) - self.set_debug('DBG_MS') - self._test('Any Y,YT WHERE X eid %(x)s, X multisource_crossed_rel Y, Y type YT', - [], - {'x': 999999}) - def test_linked_external_entities(self): repo._type_source_cache[999999] = ('Tag', 'system', 999999) self._test('Any X,XT WHERE X is Card, X title XT, T tags X, T eid %(t)s',