server/sources/rql2sql.py
changeset 339 c0a0ce6c0428
parent 0 b97547f5f1fa
child 340 bfe0e95571aa
equal deleted inserted replaced
338:25aae8a15532 339:c0a0ce6c0428
    74             continue
    74             continue
    75         modified = True
    75         modified = True
    76         unstable.remove(varname)
    76         unstable.remove(varname)
    77         torewrite.add(var)
    77         torewrite.add(var)
    78         newselect = Select()
    78         newselect = Select()
    79         newselect.need_distinct = False
    79         newselect.need_distinct = newselect.need_intersect = False
    80         myunion = Union()
    80         myunion = Union()
    81         myunion.append(newselect)
    81         myunion.append(newselect)
    82         # extract aliases / selection
    82         # extract aliases / selection
    83         newvar = _new_var(newselect, var.name)
    83         newvar = _new_var(newselect, var.name)
    84         newselect.selection = [VariableRef(newvar)]
    84         newselect.selection = [VariableRef(newvar)]
   485                 # sort for test predictability
   485                 # sort for test predictability
   486                 sql.insert(1, 'FROM %s' % ', '.join(sorted(tables)))
   486                 sql.insert(1, 'FROM %s' % ', '.join(sorted(tables)))
   487             elif self._state.restrictions and self.dbms_helper.needs_from_clause:
   487             elif self._state.restrictions and self.dbms_helper.needs_from_clause:
   488                 sql.insert(1, 'FROM (SELECT 1) AS _T')
   488                 sql.insert(1, 'FROM (SELECT 1) AS _T')
   489             sqls.append('\n'.join(sql))
   489             sqls.append('\n'.join(sql))
   490         if distinct:
   490         if select.need_intersect:
       
   491             return '\nINTERSECT\n'.join(sqls)
       
   492         elif distinct:
   491             return '\nUNION\n'.join(sqls)
   493             return '\nUNION\n'.join(sqls)
   492         else:
   494         else:
   493             return '\nUNION ALL\n'.join(sqls)
   495             return '\nUNION ALL\n'.join(sqls)
   494         
   496         
   495     def _selection_sql(self, selected, distinct, needaliasing=False):
   497     def _selection_sql(self, selected, distinct, needaliasing=False):