Added support for setting table-level unique constraints (not indexes)

This commit is contained in:
MOZGIII 2017-12-09 20:38:55 +03:00
parent 0a51f6cdc5
commit b29018cc9c

View File

@ -1122,6 +1122,25 @@ func (scope *Scope) createTable() *Scope {
scope.createJoinTable(field)
}
var uniqueConstraints = map[string][]string{}
for _, field := range scope.GetStructFields() {
if name, ok := field.TagSettings["UNIQUE_CONSTRAINT"]; ok {
names := strings.Split(name, ",")
for _, name := range names {
if name == "UNIQUE_CONSTRAINT" || name == "" {
name = fmt.Sprintf("uix_%v_%v", scope.TableName(), field.DBName)
}
uniqueConstraints[name] = append(uniqueConstraints[name], field.DBName)
}
}
}
for _, columns := range uniqueConstraints {
tags = append(tags, fmt.Sprintf("UNIQUE (%s)", strings.Join(columns, ",")))
}
var primaryKeyStr string
if len(primaryKeys) > 0 && !primaryKeyInColumnType {
primaryKeyStr = fmt.Sprintf(", PRIMARY KEY (%v)", strings.Join(primaryKeys, ","))