fix bug when insert multiple slices with customize table name

This commit is contained in:
Lunny Xiao 2019-09-25 10:01:13 +08:00
parent 59ed80ce1a
commit 829d68c673
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
2 changed files with 44 additions and 2 deletions

View File

@ -25,6 +25,12 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) {
defer session.Close() defer session.Close()
} }
session.autoResetStatement = false
defer func() {
session.autoResetStatement = true
session.resetStatement()
}()
for _, bean := range beans { for _, bean := range beans {
switch bean.(type) { switch bean.(type) {
case map[string]interface{}: case map[string]interface{}:
@ -35,7 +41,6 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) {
affected += cnt affected += cnt
case []map[string]interface{}: case []map[string]interface{}:
s := bean.([]map[string]interface{}) s := bean.([]map[string]interface{})
session.autoResetStatement = false
for i := 0; i < len(s); i++ { for i := 0; i < len(s); i++ {
cnt, err := session.insertMapInterface(s[i]) cnt, err := session.insertMapInterface(s[i])
if err != nil { if err != nil {
@ -51,7 +56,6 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) {
affected += cnt affected += cnt
case []map[string]string: case []map[string]string:
s := bean.([]map[string]string) s := bean.([]map[string]string)
session.autoResetStatement = false
for i := 0; i < len(s); i++ { for i := 0; i < len(s); i++ {
cnt, err := session.insertMapString(s[i]) cnt, err := session.insertMapString(s[i])
if err != nil { if err != nil {

View File

@ -909,3 +909,41 @@ func TestInsertWhere(t *testing.T) {
assert.EqualValues(t, "trest3", j3.Name) assert.EqualValues(t, "trest3", j3.Name)
assert.EqualValues(t, 3, j3.Index) assert.EqualValues(t, 3, j3.Index)
} }
type NightlyRate struct {
ID int64 `xorm:"'id' not null pk BIGINT(20)" json:"id"`
}
func (NightlyRate) TableName() string {
return "prd_nightly_rate"
}
func TestMultipleInsertTableName(t *testing.T) {
assert.NoError(t, prepareEngine())
trans := testEngine.NewSession()
defer trans.Close()
err := trans.Begin()
assert.NoError(t, err)
rtArr := []interface{}{
[]*NightlyRate{
{ID: 1},
{ID: 2},
},
[]*NightlyRate{
{ID: 3},
{ID: 4},
},
[]*NightlyRate{
{ID: 5},
},
}
tableName := `prd_nightly_rate_16`
assert.NoError(t, testEngine.Table(tableName).Sync2(new(NightlyRate)))
_, err = trans.Table(tableName).Insert(rtArr...)
assert.NoError(t, err)
assert.NoError(t, trans.Commit())
}