155 raise SkipTest(str(ex)) |
155 raise SkipTest(str(ex)) |
156 |
156 |
157 def setUp(self): |
157 def setUp(self): |
158 self.repo = FakeRepo(self.schema, config=FakeConfig(apphome=self.datadir)) |
158 self.repo = FakeRepo(self.schema, config=FakeConfig(apphome=self.datadir)) |
159 self.repo.system_source = mock_object(dbdriver=self.backend) |
159 self.repo.system_source = mock_object(dbdriver=self.backend) |
160 self.rqlhelper = RQLHelper(self.schema, special_relations={'eid': 'uid', |
160 self.rqlhelper = RQLHelper(self.schema, |
161 'has_text': 'fti'}, |
161 special_relations={'eid': 'uid', |
|
162 'has_text': 'fti'}, |
162 backend=self.backend) |
163 backend=self.backend) |
163 self.qhelper = QuerierHelper(self.repo, self.schema) |
164 self.qhelper = QuerierHelper(self.repo, self.schema) |
164 ExecutionPlan._check_permissions = _dummy_check_permissions |
165 ExecutionPlan._check_permissions = _dummy_check_permissions |
165 rqlannotation._select_principal = _select_principal |
166 rqlannotation._select_principal = _select_principal |
166 if self.backend is not None: |
167 if self.backend is not None: |
228 # reset uid_func so it don't try to get type from eids |
229 # reset uid_func so it don't try to get type from eids |
229 rqlhelper._analyser.uid_func = None |
230 rqlhelper._analyser.uid_func = None |
230 rqlhelper._analyser.uid_func_mapping = {} |
231 rqlhelper._analyser.uid_func_mapping = {} |
231 return rqlhelper |
232 return rqlhelper |
232 |
233 |
233 def _prepare_plan(self, rql, kwargs=None, simplify=True): |
234 def _prepare_plan(self, cnx, rql, kwargs=None, simplify=True): |
234 rqlhelper = self._rqlhelper() |
235 rqlhelper = self._rqlhelper() |
235 rqlst = rqlhelper.parse(rql) |
236 rqlst = rqlhelper.parse(rql) |
236 rqlhelper.compute_solutions(rqlst, kwargs=kwargs) |
237 rqlhelper.compute_solutions(rqlst, kwargs=kwargs) |
237 if simplify: |
238 if simplify: |
238 rqlhelper.simplify(rqlst) |
239 rqlhelper.simplify(rqlst) |
239 for select in rqlst.children: |
240 for select in rqlst.children: |
240 select.solutions.sort() |
241 select.solutions.sort() |
241 return self.o.plan_factory(rqlst, kwargs, self.session) |
242 return self.o.plan_factory(rqlst, kwargs, cnx) |
242 |
243 |
243 def _prepare(self, rql, kwargs=None): |
244 def _prepare(self, cnx, rql, kwargs=None): |
244 plan = self._prepare_plan(rql, kwargs, simplify=False) |
245 plan = self._prepare_plan(cnx, rql, kwargs, simplify=False) |
245 plan.preprocess(plan.rqlst) |
246 plan.preprocess(plan.rqlst) |
246 rqlst = plan.rqlst.children[0] |
247 rqlst = plan.rqlst.children[0] |
247 rqlst.solutions = remove_unused_solutions(rqlst, rqlst.solutions, {}, self.repo.schema)[0] |
248 rqlst.solutions = remove_unused_solutions(rqlst, rqlst.solutions, {}, self.repo.schema)[0] |
248 return rqlst |
249 return rqlst |
249 |
250 |