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  }