THIS IS A TEST INSTANCE ONLY! REPOSITORIES CAN BE DELETED AT ANY TIME!

Browse Source

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
tags/v0.7.8
Lunny Xiao GitHub 1 month ago
parent
commit
691f6e7698
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 2 deletions
  1. +3
    -0
      dialect_mssql.go
  2. +6
    -2
      session_insert.go
  3. +39
    -0
      session_insert_test.go

+ 3
- 0
dialect_mssql.go 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
}


+ 6
- 2
session_insert.go 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 {


+ 39
- 0
session_insert_test.go 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())
}

Loading…
Cancel
Save