

def get_columns(self, with_aliases=False):
    "\n        Returns the list of columns to use in the select statement, as well as\n        a list any extra parameters that need to be included. If no columns\n        have been specified, returns all columns relating to fields in the\n        model.\n\n        If 'with_aliases' is true, any column names that are duplicated\n        (without the table names) are given unique aliases. This is needed in\n        some cases to avoid ambiguity with nested queries.\n        "
    qn = self.quote_name_unless_alias
    qn2 = self.connection.ops.quote_name
    result = [('(%s) AS %s' % (col[0], qn2(alias))) for (alias, col) in six.iteritems(self.query.extra_select)]
    params = []
    aliases = set(self.query.extra_select.keys())
    if with_aliases:
        col_aliases = aliases.copy()
    else:
        col_aliases = set()
    if self.query.select:
        only_load = self.deferred_to_columns()
        for (col, _) in self.query.select:
            if isinstance(col, (list, tuple)):
                (alias, column) = col
                table = self.query.alias_map[alias].table_name
                if ((table in only_load) and (column not in only_load[table])):
                    continue
                r = ('%s.%s' % (qn(alias), qn(column)))
                if with_aliases:
                    if (col[1] in col_aliases):
                        c_alias = ('Col%d' % len(col_aliases))
                        result.append(('%s AS %s' % (r, c_alias)))
                        aliases.add(c_alias)
                        col_aliases.add(c_alias)
                    else:
                        result.append(('%s AS %s' % (r, qn2(col[1]))))
                        aliases.add(r)
                        col_aliases.add(col[1])
                else:
                    result.append(r)
                    aliases.add(r)
                    col_aliases.add(col[1])
            else:
                (col_sql, col_params) = col.as_sql(qn, self.connection)
                result.append(col_sql)
                params.extend(col_params)
                if hasattr(col, 'alias'):
                    aliases.add(col.alias)
                    col_aliases.add(col.alias)
    elif self.query.default_cols:
        (cols, new_aliases) = self.get_default_columns(with_aliases, col_aliases)
        result.extend(cols)
        aliases.update(new_aliases)
    max_name_length = self.connection.ops.max_name_length()
    for (alias, aggregate) in self.query.aggregate_select.items():
        (agg_sql, agg_params) = aggregate.as_sql(qn, self.connection)
        if (alias is None):
            result.append(agg_sql)
        else:
            result.append(('%s AS %s' % (agg_sql, qn(truncate_name(alias, max_name_length)))))
        params.extend(agg_params)
    for ((table, col), _) in self.query.related_select_cols:
        r = ('%s.%s' % (qn(table), qn(col)))
        if (with_aliases and (col in col_aliases)):
            c_alias = ('Col%d' % len(col_aliases))
            result.append(('%s AS %s' % (r, c_alias)))
            col_params.add(c_alias)
            col_aliases.add(c_alias)
        else:
            result.append(r)
            aliases.add(r)
            col_aliases.add(col)
    self._select_aliases = aliases
    return (result, params)

dataset/ETHPy150Open cloudera/hue/desktop/core/ext-py/Django-1.6.10/django/db/models/sql/compiler.py SQLCompiler.get_columns/VarMisuse@638/1008 `aliases`->`col_params`