rqlrewrite.py
branchstable
changeset 4721 8f63691ccb7f
parent 4719 aaed3f813ef8
child 4906 9a50539f01d1
equal deleted inserted replaced
4720:ddf4f19eb07a 4721:8f63691ccb7f
   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]