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:
parent
59ed80ce1a
commit
691f6e7698
|
@ -254,6 +254,9 @@ func (db *mssql) SqlType(c *core.Column) string {
|
||||||
case core.TinyInt:
|
case core.TinyInt:
|
||||||
res = core.TinyInt
|
res = core.TinyInt
|
||||||
c.Length = 0
|
c.Length = 0
|
||||||
|
case core.BigInt:
|
||||||
|
res = core.BigInt
|
||||||
|
c.Length = 0
|
||||||
default:
|
default:
|
||||||
res = t
|
res = t
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -909,3 +909,42 @@ 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())
|
||||||
|
|
||||||
|
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())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue