protected function processSelect(
        PlatformInterface $platform,
        DriverInterface $driver = null,
        ParameterContainer $parameterContainer = null
    ) {
        $expr = 1;

        // process table columns
        $columns = [];
        foreach ($this->columns as $columnIndexOrAs => $column) {

            $colName = '';
            if ($column === self::SQL_STAR) {
                $columns[] = [self::SQL_STAR]; // Sphinx doesn't not support prefix column with table, yet
                continue;
            }

            if ($column instanceof Expression) {
                $columnParts = $this->processExpression(
                    $column,
                    $platform,
                    $driver,
                    $parameterContainer,
                    $this->processInfo['paramPrefix'] . ((is_string($columnIndexOrAs)) ? $columnIndexOrAs : 'column')
                );
                $colName .= $columnParts;
            } else {
                // Sphinx doesn't not support prefix column with table, yet
                $colName .= $platform->quoteIdentifier($column);
            }

            // process As portion
            $columnAs = null;
            if (is_string($columnIndexOrAs)) {
                $columnAs = $columnIndexOrAs;
            } elseif (stripos($colName, ' as ') === false && !is_string($column)) {
                $columnAs = 'Expression' . $expr++;
            }

            $columns[] = isset($columnAs) ? [$colName, $platform->quoteIdentifier($columnAs)] : [$colName];
        }

        if ($this->table) {
            $tableList = $this->table;

            if (is_string($tableList) && strpos($tableList, ',') !== false) {
                $tableList = preg_split('#,\s+#', $tableList);
            } elseif (!is_array($tableList)) {
                $tableList = [$tableList];
            }

            foreach ($tableList as &$table) {

                // create quoted table name to use in FROM clause
                if ($table instanceof Select) {
                    $table = '(' . $this->processSubselect($table, $platform, $driver, $parameterContainer) . ')';
                } else {
                    $table = $platform->quoteIdentifier($table);
                }
            }

            $tableList = implode(', ', $tableList);

            return [$columns, $tableList];
        }

        return [$columns];
    }