func (ta *Table) fetchIndexes(conn mysql.Executer) error { r, err := conn.Execute(fmt.Sprintf("show index from %s.%s", ta.Schema, ta.Name)) if err != nil { return errors.Trace(err) } var currentIndex *Index currentName := "" for i := 0; i < r.RowNumber(); i++ { indexName, _ := r.GetString(i, 2) if currentName != indexName { currentIndex = ta.AddIndex(indexName) currentName = indexName } cardinality, _ := r.GetUint(i, 6) colName, _ := r.GetString(i, 4) currentIndex.AddColumn(colName, cardinality) } if len(ta.Indexes) == 0 { return nil } pkIndex := ta.Indexes[0] if pkIndex.Name != "PRIMARY" { return nil } ta.PKColumns = make([]int, len(pkIndex.Columns)) for i, pkCol := range pkIndex.Columns { ta.PKColumns[i] = ta.FindColumn(pkCol) } return nil }
func (ta *Table) fetchColumns(conn mysql.Executer) error { r, err := conn.Execute(fmt.Sprintf("describe %s.%s", ta.Schema, ta.Name)) if err != nil { return errors.Trace(err) } for i := 0; i < r.RowNumber(); i++ { name, _ := r.GetString(i, 0) colType, _ := r.GetString(i, 1) extra, _ := r.GetString(i, 5) ta.AddColumn(name, colType, extra) } return nil }