fix bug when insert multiple slices with customize table name (#1433)

* fix bug when insert multiple slices with customize table name

* fix tests on mssql

* fix tests
This commit is contained in:
Lunny Xiao 2019-09-25 16:42:24 +08:00 committed by GitHub
parent 59ed80ce1a
commit 691f6e7698
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 2 deletions

View File

@ -254,6 +254,9 @@ func (db *mssql) SqlType(c *core.Column) string {
case core.TinyInt:
res = core.TinyInt
c.Length = 0
case core.BigInt:
res = core.BigInt
c.Length = 0
default:
res = t
}

View File

@ -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 {

View File

@ -909,3 +909,42 @@ 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())
tableName := `prd_nightly_rate_16`
assert.NoError(t, testEngine.Table(tableName).Sync2(new(NightlyRate)))
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},
},
}
_, err = trans.Table(tableName).Insert(rtArr...)
assert.NoError(t, err)
assert.NoError(t, trans.Commit())
}