in pkg/datasource/sql/datasource/mysql/trigger.go [95:164]
func (m *mysqlTrigger) getColumnMetas(ctx context.Context, dbName string, table string, conn *sql.Conn) ([]types.ColumnMeta, error) {
table = executor.DelEscape(table, types.DBTypeMySQL)
var columnMetas []types.ColumnMeta
columnMetaSql := "SELECT `TABLE_NAME`, `TABLE_SCHEMA`, `COLUMN_NAME`, `DATA_TYPE`, `COLUMN_TYPE`, `COLUMN_KEY`, `IS_NULLABLE`, `COLUMN_DEFAULT`, `EXTRA` FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?"
stmt, err := conn.PrepareContext(ctx, columnMetaSql)
if err != nil {
return nil, err
}
defer stmt.Close()
rows, err := stmt.Query(dbName, table)
if err != nil {
return nil, err
}
defer rows.Close()
for rows.Next() {
var (
tableName string
tableSchema string
columnName string
dataType string
columnType string
columnKey string
isNullable string
columnDefault []byte
extra string
)
columnMeta := types.ColumnMeta{}
if err = rows.Scan(
&tableName,
&tableSchema,
&columnName,
&dataType,
&columnType,
&columnKey,
&isNullable,
&columnDefault,
&extra); err != nil {
return nil, err
}
columnMeta.Schema = tableSchema
columnMeta.Table = tableName
columnMeta.ColumnName = strings.Trim(columnName, "` ")
columnMeta.DatabaseType = types.GetSqlDataType(dataType)
columnMeta.DatabaseTypeString = dataType
columnMeta.ColumnType = columnType
columnMeta.ColumnKey = columnKey
if strings.ToLower(isNullable) == "yes" {
columnMeta.IsNullable = 1
} else {
columnMeta.IsNullable = 0
}
columnMeta.ColumnDef = columnDefault
columnMeta.Extra = extra
columnMeta.Autoincrement = strings.Contains(strings.ToLower(extra), "auto_increment")
columnMetas = append(columnMetas, columnMeta)
}
if err := rows.Err(); err != nil {
return nil, err
}
if len(columnMetas) == 0 {
return nil, fmt.Errorf("can't find column")
}
return columnMetas, nil
}