8 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses |
8 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses |
9 """ |
9 """ |
10 __docformat__ = "restructuredtext en" |
10 __docformat__ = "restructuredtext en" |
11 |
11 |
12 from pprint import pprint |
12 from pprint import pprint |
|
13 |
|
14 from logilab.common.decorators import clear_cache |
13 |
15 |
14 def tuplify(list): |
16 def tuplify(list): |
15 for i in range(len(list)): |
17 for i in range(len(list)): |
16 if type(list[i]) is not type(()): |
18 if type(list[i]) is not type(()): |
17 list[i] = tuple(list[i]) |
19 list[i] = tuple(list[i]) |
113 rqlannotation._select_principal = _select_principal |
115 rqlannotation._select_principal = _select_principal |
114 |
116 |
115 def tearDown(self): |
117 def tearDown(self): |
116 ExecutionPlan._check_permissions = _orig_check_permissions |
118 ExecutionPlan._check_permissions = _orig_check_permissions |
117 rqlannotation._select_principal = _orig_select_principal |
119 rqlannotation._select_principal = _orig_select_principal |
|
120 |
|
121 def set_debug(self, debug): |
|
122 set_debug(debug) |
118 |
123 |
119 def _prepare(self, rql): |
124 def _prepare(self, rql): |
120 #print '******************** prepare', rql |
125 #print '******************** prepare', rql |
121 union = self.rqlhelper.parse(rql) |
126 union = self.rqlhelper.parse(rql) |
122 #print '********* parsed', union.as_string() |
127 #print '********* parsed', union.as_string() |
201 self.session.commit() |
206 self.session.commit() |
202 self.session.set_pool() |
207 self.session.set_pool() |
203 |
208 |
204 |
209 |
205 class BasePlannerTC(BaseQuerierTC): |
210 class BasePlannerTC(BaseQuerierTC): |
|
211 def setup(self): |
|
212 clear_cache(self.repo, 'rel_type_sources') |
|
213 clear_cache(self.repo, 'rel_type_sources') |
|
214 clear_cache(self.repo, 'can_cross_relation') |
|
215 clear_cache(self.repo, 'is_multi_sources_relation') |
|
216 # XXX source_defs |
|
217 self.o = self.repo.querier |
|
218 self.session = self.repo._sessions.values()[0] |
|
219 self.pool = self.session.set_pool() |
|
220 self.schema = self.o.schema |
|
221 self.sources = self.o._repo.sources |
|
222 self.system = self.sources[-1] |
|
223 self.newsources = 0 |
|
224 do_monkey_patch() |
|
225 |
|
226 def add_source(self, sourcecls, uri): |
|
227 self.sources.append(sourcecls(self.repo, self.o.schema, |
|
228 {'uri': uri})) |
|
229 self.repo.sources_by_uri[uri] = self.sources[-1] |
|
230 setattr(self, uri, self.sources[-1]) |
|
231 self.newsources += 1 |
|
232 |
|
233 def tearDown(self): |
|
234 while self.newsources: |
|
235 source = self.sources.pop(-1) |
|
236 del self.repo.sources_by_uri[source.uri] |
|
237 self.newsources -= 1 |
|
238 undo_monkey_patch() |
206 |
239 |
207 def _prepare_plan(self, rql, kwargs=None): |
240 def _prepare_plan(self, rql, kwargs=None): |
208 rqlst = self.o.parse(rql, annotate=True) |
241 rqlst = self.o.parse(rql, annotate=True) |
209 self.o.solutions(self.session, rqlst, kwargs) |
242 self.o.solutions(self.session, rqlst, kwargs) |
210 if rqlst.TYPE == 'select': |
243 if rqlst.TYPE == 'select': |