in pkg/datasource/sql/datasource/mysql/trigger.go [167:222]
func (m *mysqlTrigger) getIndexes(ctx context.Context, dbName string, tableName string, conn *sql.Conn) ([]types.IndexMeta, error) {
tableName = executor.DelEscape(tableName, types.DBTypeMySQL)
result := make([]types.IndexMeta, 0)
indexMetaSql := "SELECT `INDEX_NAME`, `COLUMN_NAME`, `NON_UNIQUE` FROM `INFORMATION_SCHEMA`.`STATISTICS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?"
stmt, err := conn.PrepareContext(ctx, indexMetaSql)
if err != nil {
return nil, err
}
defer stmt.Close()
rows, err := stmt.Query(dbName, tableName)
if err != nil {
return nil, err
}
defer rows.Close()
for rows.Next() {
var (
indexName string
columnName string
nonUnique int64
)
err = rows.Scan(&indexName, &columnName, &nonUnique)
if err != nil {
return nil, err
}
index := types.IndexMeta{
Schema: dbName,
Table: tableName,
Name: indexName,
ColumnName: columnName,
Columns: make([]types.ColumnMeta, 0),
}
if nonUnique == 1 {
index.NonUnique = true
}
if "primary" == strings.ToLower(indexName) {
index.IType = types.IndexTypePrimaryKey
} else if !index.NonUnique {
index.IType = types.IndexUnique
} else {
index.IType = types.IndexNormal
}
result = append(result, index)
}
if err := rows.Err(); err != nil {
return nil, err
}
return result, nil
}