protected function findColumns($index)
    {
        $sql = 'DESCRIBE ' . $this->quoteSimpleIndexName($index->name);
        try {
            $columns = $this->db->createCommand($sql)->queryAll();
        } catch (\Exception $e) {
            $previous = $e->getPrevious();
            if ($previous instanceof \PDOException && strpos($previous->getMessage(), 'SQLSTATE[42S02') !== false) {
                // index does not exist
                // https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html#error_er_bad_table_error
                return false;
            }
            throw $e;
        }

        if (empty($columns[0]['Agent'])) {
            foreach ($columns as $info) {
                $column = $this->loadColumnSchema($info);
                if (isset($index->columns[$column->name])) {
                    $column = $this->mergeColumnSchema($index->columns[$column->name], $column);
                }
                $index->columns[$column->name] = $column;
                if ($column->isPrimaryKey) {
                    $index->primaryKey = $column->name;
                }
            }

            return true;
        }

        // Distributed index :
        foreach ($columns as $column) {
            if (!empty($column['Type']) && strcasecmp('local', $column['Type']) !== 0) {
                // skip type 'agent'
                continue;
            }

            $agent = $this->getIndexSchema($column['Agent']);
            if ($agent !== null) {
                $index->columns = $agent->columns;
                $index->primaryKey = $agent->primaryKey;
                return true;
            }
        }

        $this->applyDefaultColumns($index);

        return true;
    }
protected function findColumns($index)
    {
        $sql = 'DESCRIBE ' . $this->quoteSimpleIndexName($index->name);
        try {
            $columns = $this->db->createCommand($sql)->queryAll();
        } catch (\Exception $e) {
            $previous = $e->getPrevious();
            if ($previous instanceof \PDOException && strpos($previous->getMessage(), 'SQLSTATE[42S02') !== false) {
                // index does not exist
                // https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html#error_er_bad_table_error
                return false;
            }
            throw $e;
        }

        if (empty($columns[0]['Agent'])) {
            foreach ($columns as $info) {
                $column = $this->loadColumnSchema($info);
                if (isset($index->columns[$column->name])) {
                    $column = $this->mergeColumnSchema($index->columns[$column->name], $column);
                }
                $index->columns[$column->name] = $column;
                if ($column->isPrimaryKey) {
                    $index->primaryKey = $column->name;
                }
            }

            return true;
        }

        // Distributed index :
        foreach ($columns as $column) {
            if (!empty($column['Type']) && strcasecmp('local', $column['Type']) !== 0) {
                // skip type 'agent'
                continue;
            }

            $agent = $this->getIndexSchema($column['Agent']);
            if ($agent !== null) {
                $index->columns = $agent->columns;
                $index->primaryKey = $agent->primaryKey;
                return true;
            }
        }

        $this->applyDefaultColumns($index);

        return true;
    }
protected function findColumns ( $ index ) { $ sql = 'DESCRIBE ' . $ this -> quoteSimpleIndexName ( $ index -> name ) ; try { $ columns = $ this -> db -> createCommand ( $ sql ) -> queryAll ( ) ; } catch ( \ Exception $ e ) { $ previous = $ e -> getPrevious ( ) ; if ( $ previous instanceof \ PDOException && strpos ( $ previous -> getMessage ( ) , 'SQLSTATE[42S02' ) !== false ) { // index does not exist // https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html#error_er_bad_table_error return false ; } throw $ e ; } if ( empty ( $ columns [ 0 ] [ 'Agent' ] ) ) { foreach ( $ columns as $ info ) { $ column = $ this -> loadColumnSchema ( $ info ) ; if ( isset ( $ index -> columns [ $ column -> name ] ) ) { $ column = $ this -> mergeColumnSchema ( $ index -> columns [ $ column -> name ] , $ column ) ; } $ index -> columns [ $ column -> name ] = $ column ; if ( $ column -> isPrimaryKey ) { $ index -> primaryKey = $ column -> name ; } } return true ; } // Distributed index : foreach ( $ columns as $ column ) { if ( ! empty ( $ column [ 'Type' ] ) && strcasecmp ( 'local' , $ column [ 'Type' ] ) !== 0 ) { // skip type 'agent' continue ; } $ agent = $ this -> getIndexSchema ( $ column [ 'Agent' ] ) ; if ( $ agent !== null ) { $ index -> columns = $ agent -> columns ; $ index -> primaryKey = $ agent -> primaryKey ; return true ; } } $ this -> applyDefaultColumns ( $ index ) ; return true ; }
Collects the metadata of index columns.
@param IndexSchema $index the index metadata
@return bool whether the index exists in the database
@throws \Exception if DB query fails
Collects the metadata of index columns .