check.go 859 B

1234567891011121314151617181920212223242526272829303132
  1. package schema
  2. import (
  3. "regexp"
  4. "strings"
  5. )
  6. type Check struct {
  7. Name string
  8. Constraint string // length(phone) >= 10
  9. *Field
  10. }
  11. // ParseCheckConstraints parse schema check constraints
  12. func (schema *Schema) ParseCheckConstraints() map[string]Check {
  13. var checks = map[string]Check{}
  14. for _, field := range schema.FieldsByDBName {
  15. if chk := field.TagSettings["CHECK"]; chk != "" {
  16. names := strings.Split(chk, ",")
  17. if len(names) > 1 && regexp.MustCompile("^[A-Za-z-_]+$").MatchString(names[0]) {
  18. checks[names[0]] = Check{Name: names[0], Constraint: strings.Join(names[1:], ","), Field: field}
  19. } else {
  20. if names[0] == "" {
  21. chk = strings.Join(names[1:], ",")
  22. }
  23. name := schema.namer.CheckerName(schema.Table, field.DBName)
  24. checks[name] = Check{Name: name, Constraint: chk, Field: field}
  25. }
  26. }
  27. }
  28. return checks
  29. }