rqlrewrite.py
changeset 10669 155c29e0ed1c
parent 10662 10942ed172de
child 10686 a08d5a657836
equal deleted inserted replaced
10668:4fb62d791073 10669:155c29e0ed1c
    92                 if len(possibletypes) > 1:
    92                 if len(possibletypes) > 1:
    93                     node = n.Function('IN')
    93                     node = n.Function('IN')
    94                     for etype in sorted(possibletypes):
    94                     for etype in sorted(possibletypes):
    95                         node.append(n.Constant(etype, 'etype'))
    95                         node.append(n.Constant(etype, 'etype'))
    96                 else:
    96                 else:
    97                     etype = iter(possibletypes).next()
    97                     etype = next(iter(possibletypes))
    98                     node = n.Constant(etype, 'etype')
    98                     node = n.Constant(etype, 'etype')
    99                 comp = mytyperel.children[1]
    99                 comp = mytyperel.children[1]
   100                 comp.replace(comp.children[0], node)
   100                 comp.replace(comp.children[0], node)
   101             else:
   101             else:
   102                 # variable has already some strict types restriction. new
   102                 # variable has already some strict types restriction. new
   286                     sortterms.append(sortterm.copy(newselect))
   286                     sortterms.append(sortterm.copy(newselect))
   287                     for fnode in sortterm.get_nodes(n.Function):
   287                     for fnode in sortterm.get_nodes(n.Function):
   288                         if fnode.name == 'FTIRANK':
   288                         if fnode.name == 'FTIRANK':
   289                             # we've to fetch the has_text relation as well
   289                             # we've to fetch the has_text relation as well
   290                             var = fnode.children[0].variable
   290                             var = fnode.children[0].variable
   291                             rel = iter(var.stinfo['ftirels']).next()
   291                             rel = next(iter(var.stinfo['ftirels']))
   292                             assert not rel.ored(), 'unsupported'
   292                             assert not rel.ored(), 'unsupported'
   293                             newselect.add_restriction(rel.copy(newselect))
   293                             newselect.add_restriction(rel.copy(newselect))
   294                             # remove relation from the orig select and
   294                             # remove relation from the orig select and
   295                             # cleanup variable stinfo
   295                             # cleanup variable stinfo
   296                             rel.parent.remove(rel)
   296                             rel.parent.remove(rel)
   548                 # XXX dunno how to handle this
   548                 # XXX dunno how to handle this
   549                 self.session.error(
   549                 self.session.error(
   550                     'cant check security of %s, ambigous type for %s in %s',
   550                     'cant check security of %s, ambigous type for %s in %s',
   551                     stmt, varname, key[0]) # key[0] == the rql expression
   551                     stmt, varname, key[0]) # key[0] == the rql expression
   552                 raise Unauthorized()
   552                 raise Unauthorized()
   553             etype = iter(ptypes).next()
   553             etype = next(iter(ptypes))
   554             eschema = self.schema.eschema(etype)
   554             eschema = self.schema.eschema(etype)
   555             if not eschema.has_perm(self.session, action):
   555             if not eschema.has_perm(self.session, action):
   556                 rqlexprs = eschema.get_rqlexprs(action)
   556                 rqlexprs = eschema.get_rqlexprs(action)
   557                 if not rqlexprs:
   557                 if not rqlexprs:
   558                     raise Unauthorized()
   558                     raise Unauthorized()
   682         # rebuild variantes as dict
   682         # rebuild variantes as dict
   683         variantes = [dict(variante) for variante in variantes]
   683         variantes = [dict(variante) for variante in variantes]
   684         # remove variable which have always the same type
   684         # remove variable which have always the same type
   685         for key in self.rewritten:
   685         for key in self.rewritten:
   686             it = iter(variantes)
   686             it = iter(variantes)
   687             etype = it.next()[key]
   687             etype = next(it)[key]
   688             for variante in it:
   688             for variante in it:
   689                 if variante[key] != etype:
   689                 if variante[key] != etype:
   690                     break
   690                     break
   691             else:
   691             else:
   692                 for variante in variantes:
   692                 for variante in variantes: