package migrate import ( "fmt" "strings" "github.com/dchest/uniuri" ) func fetchColumns(sql string) ([]string, error) { if !strings.HasPrefix(sql, "CREATE ") { return []string{}, fmt.Errorf("Sql input is not a DDL statement.") } parenIdx := strings.Index(sql, "(") return strings.Split(sql[parenIdx+1:strings.LastIndex(sql, ")")], ","), nil } func selectName(columns []string) []string { var results []string for _, column := range columns { col := strings.SplitN(strings.Trim(column, " \n\t"), " ", 2) results = append(results, col[0]) } return results } func setForUpdate(left []string, right []string) string { var results []string for k, str := range left { results = append(results, fmt.Sprintf("%s = %s", str, right[k])) } return strings.Join(results, ", ") } func proxyName(tableName string) string { return fmt.Sprintf("%s_%s", tableName, uniuri.NewLen(16)) } func indexName(tableName string, columns []string) string { return fmt.Sprintf("idx_%s_on_%s", tableName, strings.Join(columns, "_and_")) }