cubicweb/rqlrewrite.py
branch3.25
changeset 12086 39c9e548f0ce
parent 11855 e6cdc4d3add5
child 12087 9f668acfa6c3
equal deleted inserted replaced
12084:2c83063b28e3 12086:39c9e548f0ce
   903     """Insert some rql snippets into another rql syntax tree, replacing computed
   903     """Insert some rql snippets into another rql syntax tree, replacing computed
   904     relations by their associated rule.
   904     relations by their associated rule.
   905 
   905 
   906     This class *isn't thread safe*.
   906     This class *isn't thread safe*.
   907     """
   907     """
   908     def __init__(self, session):
       
   909         super(RQLRelationRewriter, self).__init__(session)
       
   910         self.rules = {}
       
   911         for rschema in self.schema.iter_computed_relations():
       
   912             self.rules[rschema.type] = RRQLExpression(rschema.rule)
       
   913 
   908 
   914     def rewrite(self, union, kwargs=None):
   909     def rewrite(self, union, kwargs=None):
   915         self.kwargs = kwargs
   910         self.kwargs = kwargs
   916         self.removing_ambiguity = False
   911         self.removing_ambiguity = False
   917         self.existingvars = None
   912         self.existingvars = None
   918         self.pending_keys = None
   913         self.pending_keys = None
       
   914         rules = self.schema.rules_rqlexpr_mapping
   919         for relation in union.iget_nodes(n.Relation):
   915         for relation in union.iget_nodes(n.Relation):
   920             if relation.r_type in self.rules:
   916             if relation.r_type in rules:
   921                 self.select = relation.stmt
   917                 self.select = relation.stmt
   922                 self.solutions = solutions = self.select.solutions[:]
   918                 self.solutions = solutions = self.select.solutions[:]
   923                 self.current_expr = self.rules[relation.r_type]
   919                 self.current_expr = rules[relation.r_type]
   924                 self._insert_scope = relation.scope
   920                 self._insert_scope = relation.scope
   925                 self.rewritten = {}
   921                 self.rewritten = {}
   926                 lhs, rhs = relation.get_variable_parts()
   922                 lhs, rhs = relation.get_variable_parts()
   927                 varmap = {lhs.name: 'S', rhs.name: 'O'}
   923                 varmap = {lhs.name: 'S', rhs.name: 'O'}
   928                 self.init_from_varmap(tuple(sorted(varmap.items())))
   924                 self.init_from_varmap(tuple(sorted(varmap.items())))