Skip to content

Commit 9e97f82

Browse files
committed
🩹 修复模型中没有由数据库分配的默认值字段时批量创建数据失败的问题
ORA-00933: SQL 命令未正确结束 Refs: a270d2a Close: #50
1 parent 0d58817 commit 9e97f82

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

create.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,14 @@ func outputInserted(db *gorm.DB) (lenDefaultValue int) {
9595
return
9696
}
9797
lenDefaultValue = len(stmtSchema.FieldsWithDefaultDBValue)
98-
if lenDefaultValue > 0 {
99-
columns := make([]clause.Column, lenDefaultValue)
100-
for idx, field := range stmtSchema.FieldsWithDefaultDBValue {
101-
columns[idx] = clause.Column{Name: field.DBName}
102-
}
103-
db.Statement.AddClauseIfNotExists(clause.Returning{Columns: columns})
98+
if lenDefaultValue == 0 {
99+
return
100+
}
101+
columns := make([]clause.Column, lenDefaultValue)
102+
for idx, field := range stmtSchema.FieldsWithDefaultDBValue {
103+
columns[idx] = clause.Column{Name: field.DBName}
104104
}
105+
db.Statement.AddClauseIfNotExists(clause.Returning{Columns: columns})
105106
db.Statement.Build("RETURNING")
106107

107108
_, _ = db.Statement.WriteString(" INTO ")

create_test.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,29 @@ func TestOra03146TTC(t *testing.T) {
225225
t.Log("执行成功,影响行数:", result.RowsAffected)
226226
}
227227

228+
type testNoDefaultDBValues struct {
229+
UID string `gorm:"column:uid;type:varchar(50);comment:用户身份标识" json:"uid"`
230+
Name string `gorm:"column:name;size:50;comment:用户姓名" json:"name"`
231+
232+
Account string `gorm:"column:account;type:varchar(50);comment:登录账号" json:"account"`
233+
Password string `gorm:"column:password;type:varchar(512);comment:登录密码(密文)" json:"password"`
234+
235+
Email string `gorm:"column:email;type:varchar(128);comment:邮箱地址" json:"email"`
236+
PhoneNumber string `gorm:"column:phone_number;type:varchar(15);comment:E.164" json:"phoneNumber"`
237+
238+
Sex string `gorm:"column:sex;type:char(1);comment:性别" json:"sex"`
239+
Birthday *time.Time `gorm:"column:birthday;->:false;<-:create;comment:生日" json:"birthday,omitempty"`
240+
241+
UserType int `gorm:"column:user_type;size:8;comment:用户类型" json:"userType"`
242+
243+
Enabled bool `gorm:"column:enabled;comment:是否可用" json:"enabled"`
244+
Remark string `gorm:"column:remark;size:1024;comment:备注信息" json:"remark"`
245+
}
246+
247+
func (testNoDefaultDBValues) TableName() string {
248+
return "test_no_default_db_values"
249+
}
250+
228251
func TestCreateInBatches(t *testing.T) {
229252
db, err := dbNamingCase, dbErrors[0]
230253
if err != nil {
@@ -235,8 +258,8 @@ func TestCreateInBatches(t *testing.T) {
235258
return
236259
}
237260

238-
model := TestTableUser{}
239-
migrator := db.Set("gorm:table_comments", "用户信息表").Migrator()
261+
model := testNoDefaultDBValues{}
262+
migrator := db.Set("gorm:table_comments", "没有由数据库分配的默认值字段测试表").Migrator()
240263
if migrator.HasTable(model) {
241264
if err = migrator.DropTable(model); err != nil {
242265
t.Fatalf("DropTable() error = %v", err)
@@ -248,7 +271,7 @@ func TestCreateInBatches(t *testing.T) {
248271
t.Log("AutoMigrate() success!")
249272
}
250273

251-
data := []TestTableUser{
274+
data := []testNoDefaultDBValues{
252275
{UID: "U1", Name: "Lisa", Account: "lisa", Password: "H6aLDNr", PhoneNumber: "+8616666666666", Sex: "0", UserType: 1, Enabled: true},
253276
{UID: "U2", Name: "Daniela", Account: "daniela", Password: "Si7l1sRIC79", PhoneNumber: "+8619999999999", Sex: "1", UserType: 1, Enabled: true},
254277
{UID: "U3", Name: "Tom", Account: "tom", Password: "********", PhoneNumber: "+8618888888888", Sex: "1", UserType: 1, Enabled: true},

0 commit comments

Comments
 (0)