fix bug when insert multiple slices with customize table name #1433
|
@ -25,6 +25,12 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) {
|
|||
defer session.Close()
|
||||
}
|
||||
|
||||
session.autoResetStatement = false
|
||||
defer func() {
|
||||
session.autoResetStatement = true
|
||||
session.resetStatement()
|
||||
}()
|
||||
|
||||
for _, bean := range beans {
|
||||
switch bean.(type) {
|
||||
case map[string]interface{}:
|
||||
|
@ -35,7 +41,6 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) {
|
|||
affected += cnt
|
||||
case []map[string]interface{}:
|
||||
s := bean.([]map[string]interface{})
|
||||
session.autoResetStatement = false
|
||||
for i := 0; i < len(s); i++ {
|
||||
cnt, err := session.insertMapInterface(s[i])
|
||||
if err != nil {
|
||||
|
@ -51,7 +56,6 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) {
|
|||
affected += cnt
|
||||
case []map[string]string:
|
||||
s := bean.([]map[string]string)
|
||||
session.autoResetStatement = false
|
||||
for i := 0; i < len(s); i++ {
|
||||
cnt, err := session.insertMapString(s[i])
|
||||
if err != nil {
|
||||
|
|
|
@ -909,3 +909,41 @@ func TestInsertWhere(t *testing.T) {
|
|||
assert.EqualValues(t, "trest3", j3.Name)
|
||||
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())
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user