Panic if found duplicated column name
This commit is contained in:
parent
f984bc8515
commit
471eda5a12
@ -14,13 +14,13 @@ type HNPost struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type EngadgetPost struct {
|
type EngadgetPost struct {
|
||||||
BasePost
|
BasePost BasePost `gorm:"embedded"`
|
||||||
ImageUrl string
|
ImageUrl string
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSaveAndQueryEmbeddedStruct(t *testing.T) {
|
func TestSaveAndQueryEmbeddedStruct(t *testing.T) {
|
||||||
|
DB.Save(&HNPost{BasePost: BasePost{Title: "news"}})
|
||||||
DB.Save(&HNPost{BasePost: BasePost{Title: "hn_news"}})
|
DB.Save(&HNPost{BasePost: BasePost{Title: "hn_news"}})
|
||||||
|
|
||||||
var news HNPost
|
var news HNPost
|
||||||
if err := DB.First(&news, "title = ?", "hn_news").Error; err != nil {
|
if err := DB.First(&news, "title = ?", "hn_news").Error; err != nil {
|
||||||
t.Errorf("no error should happen when query with embedded struct, but got %v", err)
|
t.Errorf("no error should happen when query with embedded struct, but got %v", err)
|
||||||
@ -29,4 +29,14 @@ func TestSaveAndQueryEmbeddedStruct(t *testing.T) {
|
|||||||
t.Errorf("embedded struct's value should be scanned correctly")
|
t.Errorf("embedded struct's value should be scanned correctly")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DB.Save(&EngadgetPost{BasePost: BasePost{Title: "engadget_news"}})
|
||||||
|
var egNews EngadgetPost
|
||||||
|
if err := DB.First(&egNews, "title = ?", "engadget_news").Error; err != nil {
|
||||||
|
t.Errorf("no error should happen when query with embedded struct, but got %v", err)
|
||||||
|
} else {
|
||||||
|
if egNews.BasePost.Title != "engadget_news" {
|
||||||
|
t.Errorf("embedded struct's value should be scanned correctly")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
13
scope.go
13
scope.go
@ -263,11 +263,6 @@ func (scope *Scope) fieldFromStruct(fieldStruct reflect.StructField) []*Field {
|
|||||||
// Search for primary key tag identifier
|
// Search for primary key tag identifier
|
||||||
settings := parseTagSetting(fieldStruct.Tag.Get("gorm"))
|
settings := parseTagSetting(fieldStruct.Tag.Get("gorm"))
|
||||||
|
|
||||||
prefix := settings["PREFIX"]
|
|
||||||
if prefix == "-" {
|
|
||||||
prefix = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
if scope.PrimaryKey() == field.DBName {
|
if scope.PrimaryKey() == field.DBName {
|
||||||
field.IsPrimaryKey = true
|
field.IsPrimaryKey = true
|
||||||
}
|
}
|
||||||
@ -322,7 +317,7 @@ func (scope *Scope) fieldFromStruct(fieldStruct reflect.StructField) []*Field {
|
|||||||
if embedded != "" {
|
if embedded != "" {
|
||||||
var fields []*Field
|
var fields []*Field
|
||||||
for _, field := range scope.New(field.Field.Addr().Interface()).Fields() {
|
for _, field := range scope.New(field.Field.Addr().Interface()).Fields() {
|
||||||
field.DBName = prefix + field.DBName
|
field.DBName = field.DBName
|
||||||
fields = append(fields, field)
|
fields = append(fields, field)
|
||||||
}
|
}
|
||||||
return fields
|
return fields
|
||||||
@ -356,7 +351,11 @@ func (scope *Scope) Fields() map[string]*Field {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
for _, field := range scope.fieldFromStruct(fieldStruct) {
|
for _, field := range scope.fieldFromStruct(fieldStruct) {
|
||||||
fields[field.DBName] = field
|
if _, ok := fields[field.DBName]; ok {
|
||||||
|
panic(fmt.Sprintf("Duplicated column name for %v (%v)\n", scope.typeName(), fileWithLineNum()))
|
||||||
|
} else {
|
||||||
|
fields[field.DBName] = field
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user