diff --git a/dialect_mssql.go b/dialect_mssql.go index 61061cb25..ce4dd00c1 100644 --- a/dialect_mssql.go +++ b/dialect_mssql.go @@ -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 } diff --git a/session_insert.go b/session_insert.go index de6452909..1e19ce7a4 100644 --- a/session_insert.go +++ b/session_insert.go @@ -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 { diff --git a/session_insert_test.go b/session_insert_test.go index cc3e663b6..88879ef65 100644 --- a/session_insert_test.go +++ b/session_insert_test.go @@ -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()) +}