equal
deleted
inserted
replaced
1475 |
1475 |
1476 def visit_function(self, func): |
1476 def visit_function(self, func): |
1477 """generate SQL name for a function""" |
1477 """generate SQL name for a function""" |
1478 if func.name == 'FTIRANK': |
1478 if func.name == 'FTIRANK': |
1479 try: |
1479 try: |
1480 rel = iter(func.children[0].variable.stinfo['ftirels']).next() |
1480 rel = next(iter(func.children[0].variable.stinfo['ftirels'])) |
1481 except KeyError: |
1481 except KeyError: |
1482 raise BadRQLQuery("can't use FTIRANK on variable not used in an" |
1482 raise BadRQLQuery("can't use FTIRANK on variable not used in an" |
1483 " 'has_text' relation (eg full-text search)") |
1483 " 'has_text' relation (eg full-text search)") |
1484 const = rel.get_parts()[1].children[0] |
1484 const = rel.get_parts()[1].children[0] |
1485 return self.dbhelper.fti_rank_order( |
1485 return self.dbhelper.fti_rank_order( |
1561 sql = '%s.eid' % vtablename |
1561 sql = '%s.eid' % vtablename |
1562 if variable.stinfo['typerel'] is not None: |
1562 if variable.stinfo['typerel'] is not None: |
1563 # add additional restriction on entities.type column |
1563 # add additional restriction on entities.type column |
1564 pts = variable.stinfo['possibletypes'] |
1564 pts = variable.stinfo['possibletypes'] |
1565 if len(pts) == 1: |
1565 if len(pts) == 1: |
1566 etype = iter(variable.stinfo['possibletypes']).next() |
1566 etype = next(iter(variable.stinfo['possibletypes'])) |
1567 restr = "%s.type='%s'" % (vtablename, etype) |
1567 restr = "%s.type='%s'" % (vtablename, etype) |
1568 else: |
1568 else: |
1569 etypes = ','.join("'%s'" % et for et in pts) |
1569 etypes = ','.join("'%s'" % et for et in pts) |
1570 restr = '%s.type IN (%s)' % (vtablename, etypes) |
1570 restr = '%s.type IN (%s)' % (vtablename, etypes) |
1571 self._state.add_restriction(restr) |
1571 self._state.add_restriction(restr) |
1668 try: |
1668 try: |
1669 return self._varmap[variable.name] |
1669 return self._varmap[variable.name] |
1670 except KeyError: |
1670 except KeyError: |
1671 pass |
1671 pass |
1672 rel = (variable.stinfo.get('principal') or |
1672 rel = (variable.stinfo.get('principal') or |
1673 iter(variable.stinfo['rhsrelations']).next()) |
1673 next(iter(variable.stinfo['rhsrelations']))) |
1674 linkedvar = rel.children[0].variable |
1674 linkedvar = rel.children[0].variable |
1675 if rel.r_type == 'eid': |
1675 if rel.r_type == 'eid': |
1676 return linkedvar.accept(self) |
1676 return linkedvar.accept(self) |
1677 if isinstance(linkedvar, ColumnAlias): |
1677 if isinstance(linkedvar, ColumnAlias): |
1678 raise BadRQLQuery('variable %s should be selected by the subquery' |
1678 raise BadRQLQuery('variable %s should be selected by the subquery' |