mirror of https://github.com/go-gorm/gorm.git
52 lines
1.0 KiB
Go
52 lines
1.0 KiB
Go
package schema
|
|
|
|
import (
|
|
"reflect"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
func ParseTagSetting(str string, sep string) map[string]string {
|
|
settings := map[string]string{}
|
|
names := strings.Split(str, sep)
|
|
|
|
for i := 0; i < len(names); i++ {
|
|
j := i
|
|
if len(names[j]) > 0 {
|
|
for {
|
|
if names[j][len(names[j])-1] == '\\' {
|
|
i++
|
|
names[j] = names[j][0:len(names[j])-1] + sep + names[i]
|
|
names[i] = ""
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
values := strings.Split(names[j], ":")
|
|
k := strings.TrimSpace(strings.ToUpper(values[0]))
|
|
|
|
if len(values) >= 2 {
|
|
settings[k] = strings.Join(values[1:], ":")
|
|
} else if k != "" {
|
|
settings[k] = k
|
|
}
|
|
}
|
|
|
|
return settings
|
|
}
|
|
|
|
func toColumns(val string) (results []string) {
|
|
if val != "" {
|
|
for _, v := range strings.Split(val, ",") {
|
|
results = append(results, strings.TrimSpace(v))
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func removeSettingFromTag(tag reflect.StructTag, name string) reflect.StructTag {
|
|
return reflect.StructTag(regexp.MustCompile(`(?i)(gorm:.*?)(`+name+`:.*?)(;|("))`).ReplaceAllString(string(tag), "${1}${4}"))
|
|
}
|