in pkg/datasource/sql/undo/executor/sql.go [86:150]
func addEscape(colName string, dbType types.DBType, escape string) string {
if colName == "" {
return colName
}
if string(colName[0]) == escape && string(colName[len(colName)-1]) == escape {
return colName
}
if !checkEscape(colName, dbType) {
return colName
}
if strings.Contains(colName, Dot) {
// like "scheme".id `scheme`.id
str := escape + Dot
dotIndex := strings.Index(colName, str)
if dotIndex > -1 {
tempStr := strings.Builder{}
tempStr.WriteString(colName[0 : dotIndex+len(str)])
tempStr.WriteString(escape)
tempStr.WriteString(colName[dotIndex+len(str):])
tempStr.WriteString(escape)
return tempStr.String()
}
// like scheme."id" scheme.`id`
str = Dot + escape
dotIndex = strings.Index(colName, str)
if dotIndex > -1 {
tempStr := strings.Builder{}
tempStr.WriteString(escape)
tempStr.WriteString(colName[0:dotIndex])
tempStr.WriteString(escape)
tempStr.WriteString(colName[dotIndex:])
return tempStr.String()
}
str = Dot
dotIndex = strings.Index(colName, str)
if dotIndex > -1 {
tempStr := strings.Builder{}
tempStr.WriteString(escape)
tempStr.WriteString(colName[0:dotIndex])
tempStr.WriteString(escape)
tempStr.WriteString(Dot)
tempStr.WriteString(escape)
tempStr.WriteString(colName[dotIndex+len(str):])
tempStr.WriteString(escape)
return tempStr.String()
}
}
buf := make([]byte, len(colName)+2)
buf[0], buf[len(buf)-1] = escape[0], escape[0]
for key := range colName {
buf[key+1] = colName[key]
}
return string(buf)
}