Added separate function to generate primary keys
This commit is contained in:
parent
e84e58d3c0
commit
133176c3fb
@ -20,6 +20,8 @@ type Dialect interface {
|
||||
BindVar(i int) string
|
||||
// Quote quotes field name to avoid SQL parsing exceptions by using a reserved word as a field name
|
||||
Quote(key string) string
|
||||
// PrimaryKeys used to define the primary keys of a table
|
||||
PrimaryKeys(keys []string) string
|
||||
// DataTypeOf return data's sql type
|
||||
DataTypeOf(field *StructField) string
|
||||
|
||||
|
@ -32,6 +32,10 @@ func (commonDialect) Quote(key string) string {
|
||||
return fmt.Sprintf(`"%s"`, key)
|
||||
}
|
||||
|
||||
func (commonDialect) PrimaryKeys(keys []string) string {
|
||||
return fmt.Sprintf("PRIMARY KEY (%v)", strings.Join(keys, ","))
|
||||
}
|
||||
|
||||
func (commonDialect) DataTypeOf(field *StructField) string {
|
||||
var dataValue, sqlType, size, additionalType = ParseFieldStructForDialect(field)
|
||||
|
||||
|
@ -42,6 +42,10 @@ func (mssql) Quote(key string) string {
|
||||
return fmt.Sprintf(`"%s"`, key)
|
||||
}
|
||||
|
||||
func (mssql) PrimaryKeys(keys []string) string {
|
||||
return fmt.Sprintf("PRIMARY KEY (%v)", strings.Join(keys, ","))
|
||||
}
|
||||
|
||||
func (mssql) DataTypeOf(field *gorm.StructField) string {
|
||||
var dataValue, sqlType, size, additionalType = gorm.ParseFieldStructForDialect(field)
|
||||
|
||||
|
15
scope.go
15
scope.go
@ -80,6 +80,17 @@ func (scope *Scope) Quote(str string) string {
|
||||
return scope.Dialect().Quote(str)
|
||||
}
|
||||
|
||||
// PrimaryKeys used to define the primary keys of a table
|
||||
func (scope *Scope) PrimaryKeys(keys []string) string {
|
||||
res := scope.Dialect().PrimaryKeys(keys)
|
||||
|
||||
if res != "" {
|
||||
return fmt.Sprintf(", %v", res)
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
// Err add error to Scope
|
||||
func (scope *Scope) Err(err error) error {
|
||||
if err != nil {
|
||||
@ -1027,7 +1038,7 @@ func (scope *Scope) createJoinTable(field *StructField) {
|
||||
}
|
||||
}
|
||||
|
||||
scope.Err(scope.NewDB().Exec(fmt.Sprintf("CREATE TABLE %v (%v, PRIMARY KEY (%v)) %s", scope.Quote(joinTable), strings.Join(sqlTypes, ","), strings.Join(primaryKeys, ","), scope.getTableOptions())).Error)
|
||||
scope.Err(scope.NewDB().Exec(fmt.Sprintf("CREATE TABLE %v (%v %v) %s", scope.Quote(joinTable), strings.Join(sqlTypes, ","), scope.PrimaryKeys(primaryKeys), scope.getTableOptions())).Error)
|
||||
}
|
||||
scope.NewDB().Table(joinTable).AutoMigrate(joinTableHandler)
|
||||
}
|
||||
@ -1059,7 +1070,7 @@ func (scope *Scope) createTable() *Scope {
|
||||
|
||||
var primaryKeyStr string
|
||||
if len(primaryKeys) > 0 && !primaryKeyInColumnType {
|
||||
primaryKeyStr = fmt.Sprintf(", PRIMARY KEY (%v)", strings.Join(primaryKeys, ","))
|
||||
primaryKeyStr = scope.PrimaryKeys(primaryKeys)
|
||||
}
|
||||
|
||||
scope.Raw(fmt.Sprintf("CREATE TABLE %v (%v %v) %s", scope.QuotedTableName(), strings.Join(tags, ","), primaryKeyStr, scope.getTableOptions())).Exec()
|
||||
|
Loading…
x
Reference in New Issue
Block a user