256 from cubicweb.server.msplanner import PartPlanInformation |
256 from cubicweb.server.msplanner import PartPlanInformation |
257 except ImportError: |
257 except ImportError: |
258 class PartPlanInformation(object): |
258 class PartPlanInformation(object): |
259 def merge_input_maps(*args): |
259 def merge_input_maps(*args): |
260 pass |
260 pass |
261 def _choose_var(self, sourcevars): |
261 def _choose_term(self, sourceterms): |
262 pass |
262 pass |
263 _orig_merge_input_maps = PartPlanInformation.merge_input_maps |
263 _orig_merge_input_maps = PartPlanInformation.merge_input_maps |
264 _orig_choose_var = PartPlanInformation._choose_var |
264 _orig_choose_term = PartPlanInformation._choose_term |
265 |
265 |
266 def _merge_input_maps(*args): |
266 def _merge_input_maps(*args): |
267 return sorted(_orig_merge_input_maps(*args)) |
267 return sorted(_orig_merge_input_maps(*args)) |
268 |
268 |
269 def _choose_var(self, sourcevars): |
269 def _choose_term(self, sourceterms): |
270 # predictable order for test purpose |
270 # predictable order for test purpose |
271 def get_key(x): |
271 def get_key(x): |
272 try: |
272 try: |
273 # variable |
273 # variable |
274 return x.name |
274 return x.name |
277 # relation |
277 # relation |
278 return x.r_type |
278 return x.r_type |
279 except AttributeError: |
279 except AttributeError: |
280 # const |
280 # const |
281 return x.value |
281 return x.value |
282 varsinorder = sorted(sourcevars, key=get_key) |
282 varsinorder = sorted(sourceterms, key=get_key) |
283 if len(self._sourcesvars) > 1: |
283 if len(self._sourcesterms) > 1: |
284 for var in varsinorder: |
284 for var in varsinorder: |
285 if not var.scope is self.rqlst: |
285 if not var.scope is self.rqlst: |
286 return var, sourcevars.pop(var) |
286 return var, sourceterms.pop(var) |
287 else: |
287 else: |
288 for var in varsinorder: |
288 for var in varsinorder: |
289 if var.scope is self.rqlst: |
289 if var.scope is self.rqlst: |
290 return var, sourcevars.pop(var) |
290 return var, sourceterms.pop(var) |
291 var = varsinorder[0] |
291 var = varsinorder[0] |
292 return var, sourcevars.pop(var) |
292 return var, sourceterms.pop(var) |
293 |
293 |
294 |
294 |
295 def do_monkey_patch(): |
295 def do_monkey_patch(): |
296 RQLRewriter.insert_snippets = _insert_snippets |
296 RQLRewriter.insert_snippets = _insert_snippets |
297 RQLRewriter.build_variantes = _build_variantes |
297 RQLRewriter.build_variantes = _build_variantes |
298 ExecutionPlan._check_permissions = _check_permissions |
298 ExecutionPlan._check_permissions = _check_permissions |
299 ExecutionPlan.tablesinorder = None |
299 ExecutionPlan.tablesinorder = None |
300 ExecutionPlan.init_temp_table = _init_temp_table |
300 ExecutionPlan.init_temp_table = _init_temp_table |
301 PartPlanInformation.merge_input_maps = _merge_input_maps |
301 PartPlanInformation.merge_input_maps = _merge_input_maps |
302 PartPlanInformation._choose_var = _choose_var |
302 PartPlanInformation._choose_term = _choose_term |
303 |
303 |
304 def undo_monkey_patch(): |
304 def undo_monkey_patch(): |
305 RQLRewriter.insert_snippets = _orig_insert_snippets |
305 RQLRewriter.insert_snippets = _orig_insert_snippets |
306 RQLRewriter.build_variantes = _orig_build_variantes |
306 RQLRewriter.build_variantes = _orig_build_variantes |
307 ExecutionPlan._check_permissions = _orig_check_permissions |
307 ExecutionPlan._check_permissions = _orig_check_permissions |
308 ExecutionPlan.init_temp_table = _orig_init_temp_table |
308 ExecutionPlan.init_temp_table = _orig_init_temp_table |
309 PartPlanInformation.merge_input_maps = _orig_merge_input_maps |
309 PartPlanInformation.merge_input_maps = _orig_merge_input_maps |
310 PartPlanInformation._choose_var = _orig_choose_var |
310 PartPlanInformation._choose_term = _orig_choose_term |
311 |
311 |