server/sources/rql2sql.py
branchstable
changeset 4794 81075b09ebf1
parent 4719 aaed3f813ef8
child 4831 c5aec27c1bf7
child 4836 3e3c4917e94e
equal deleted inserted replaced
4792:e46c6e01117b 4794:81075b09ebf1
    38 from rql.nodes import (SortTerm, VariableRef, Constant, Function, Not,
    38 from rql.nodes import (SortTerm, VariableRef, Constant, Function, Not,
    39                        Variable, ColumnAlias, Relation, SubQuery, Exists)
    39                        Variable, ColumnAlias, Relation, SubQuery, Exists)
    40 
    40 
    41 from cubicweb.server.sqlutils import SQL_PREFIX
    41 from cubicweb.server.sqlutils import SQL_PREFIX
    42 from cubicweb.server.utils import cleanup_solutions
    42 from cubicweb.server.utils import cleanup_solutions
       
    43 
       
    44 ColumnAlias._q_invariant = False # avoid to check for ColumnAlias / Variable
    43 
    45 
    44 def _new_var(select, varname):
    46 def _new_var(select, varname):
    45     newvar = select.get_variable(varname)
    47     newvar = select.get_variable(varname)
    46     if not 'relations' in newvar.stinfo:
    48     if not 'relations' in newvar.stinfo:
    47         # not yet initialized
    49         # not yet initialized
   709             if rhsvar._q_invariant:
   711             if rhsvar._q_invariant:
   710                 return self._extra_join_sql(relation, lhssql, rhsvar)
   712                 return self._extra_join_sql(relation, lhssql, rhsvar)
   711         return '%s=%s' % (lhssql, rhsvar.accept(self))
   713         return '%s=%s' % (lhssql, rhsvar.accept(self))
   712 
   714 
   713     def _process_relation_term(self, relation, rid, termvar, termconst, relfield):
   715     def _process_relation_term(self, relation, rid, termvar, termconst, relfield):
   714         if termconst or isinstance(termvar, ColumnAlias) or not termvar._q_invariant:
   716         if termconst or not termvar._q_invariant:
   715             termsql = termconst and termconst.accept(self) or termvar.accept(self)
   717             termsql = termconst and termconst.accept(self) or termvar.accept(self)
   716             yield '%s.%s=%s' % (rid, relfield, termsql)
   718             yield '%s.%s=%s' % (rid, relfield, termsql)
   717         elif termvar._q_invariant:
   719         elif termvar._q_invariant:
   718             # if the variable is mapped, generate restriction anyway
   720             # if the variable is mapped, generate restriction anyway
   719             if termvar.name in self._varmap:
   721             if termvar.name in self._varmap: