'return child elements as per the ClauseElement specification.'

def get_children(self, column_collections=True, **kwargs):

    return (((((column_collections and list(self.columns)) or []) + self._raw_columns) + list(self._froms)) + [x for x in (self._whereclause, self._having, self._order_by_clause, self._group_by_clause) if (x is not None)])
