107 newsolutions.append(newsol) |
107 newsolutions.append(newsol) |
108 solutions.remove(newsol) |
108 solutions.remove(newsol) |
109 return newsolutions |
109 return newsolutions |
110 |
110 |
111 |
111 |
112 class Unsupported(Exception): pass |
112 class Unsupported(Exception): |
|
113 """raised when an rql expression can't be inserted in some rql query |
|
114 because it create an unresolvable query (eg no solutions found) |
|
115 """ |
113 |
116 |
114 |
117 |
115 class RQLRewriter(object): |
118 class RQLRewriter(object): |
116 """insert some rql snippets into another rql syntax tree |
119 """insert some rql snippets into another rql syntax tree |
117 |
120 |
438 # generate an identifier for the substitution |
441 # generate an identifier for the substitution |
439 argname = select.allocate_varname() |
442 argname = select.allocate_varname() |
440 while argname in self.kwargs: |
443 while argname in self.kwargs: |
441 argname = select.allocate_varname() |
444 argname = select.allocate_varname() |
442 # insert "U eid %(u)s" |
445 # insert "U eid %(u)s" |
443 var = select.get_variable(self.u_varname) |
446 select.add_constant_restriction( |
444 select.add_constant_restriction(select.get_variable(self.u_varname), |
447 select.get_variable(self.u_varname), |
445 'eid', unicode(argname), 'Substitute') |
448 'eid', unicode(argname), 'Substitute') |
446 self.kwargs[argname] = self.session.user.eid |
449 self.kwargs[argname] = self.session.user.eid |
447 return self.u_varname |
450 return self.u_varname |
448 key = (self.current_expr, self.varmap, vname) |
451 key = (self.current_expr, self.varmap, vname) |
449 try: |
452 try: |
450 return self.rewritten[key] |
453 return self.rewritten[key] |