github.com/systematiccaos/gorm@v1.22.6/schema/check.go (about) 1 package schema 2 3 import ( 4 "regexp" 5 "strings" 6 ) 7 8 var ( 9 // reg match english letters and midline 10 regEnLetterAndMidline = regexp.MustCompile("^[A-Za-z-_]+$") 11 ) 12 13 type Check struct { 14 Name string 15 Constraint string // length(phone) >= 10 16 *Field 17 } 18 19 // ParseCheckConstraints parse schema check constraints 20 func (schema *Schema) ParseCheckConstraints() map[string]Check { 21 var checks = map[string]Check{} 22 for _, field := range schema.FieldsByDBName { 23 if chk := field.TagSettings["CHECK"]; chk != "" { 24 names := strings.Split(chk, ",") 25 if len(names) > 1 && regEnLetterAndMidline.MatchString(names[0]) { 26 checks[names[0]] = Check{Name: names[0], Constraint: strings.Join(names[1:], ","), Field: field} 27 } else { 28 if names[0] == "" { 29 chk = strings.Join(names[1:], ",") 30 } 31 name := schema.namer.CheckerName(schema.Table, field.DBName) 32 checks[name] = Check{Name: name, Constraint: chk, Field: field} 33 } 34 } 35 } 36 return checks 37 }