support reuse session to transaction (#650)
This commit is contained in:
parent
305eb27bcf
commit
c412be2365
|
@ -24,6 +24,7 @@ func (session *Session) Rollback() error {
|
||||||
if !session.IsAutoCommit && !session.IsCommitedOrRollbacked {
|
if !session.IsAutoCommit && !session.IsCommitedOrRollbacked {
|
||||||
session.saveLastSQL(session.Engine.dialect.RollBackStr())
|
session.saveLastSQL(session.Engine.dialect.RollBackStr())
|
||||||
session.IsCommitedOrRollbacked = true
|
session.IsCommitedOrRollbacked = true
|
||||||
|
session.IsAutoCommit = true
|
||||||
return session.Tx.Rollback()
|
return session.Tx.Rollback()
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -34,6 +35,7 @@ func (session *Session) Commit() error {
|
||||||
if !session.IsAutoCommit && !session.IsCommitedOrRollbacked {
|
if !session.IsAutoCommit && !session.IsCommitedOrRollbacked {
|
||||||
session.saveLastSQL("COMMIT")
|
session.saveLastSQL("COMMIT")
|
||||||
session.IsCommitedOrRollbacked = true
|
session.IsCommitedOrRollbacked = true
|
||||||
|
session.IsAutoCommit = true
|
||||||
var err error
|
var err error
|
||||||
if err = session.Tx.Commit(); err == nil {
|
if err = session.Tx.Commit(); err == nil {
|
||||||
// handle processors after tx committed
|
// handle processors after tx committed
|
||||||
|
|
|
@ -190,3 +190,34 @@ func TestCombineTransactionSameMapper(t *testing.T) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReuseTransaction(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
sess := testEngine.NewSession()
|
||||||
|
defer sess.Close()
|
||||||
|
|
||||||
|
type ReuseTx struct {
|
||||||
|
Id int64
|
||||||
|
Name string
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSync(t, new(ReuseTx))
|
||||||
|
|
||||||
|
records := []ReuseTx{
|
||||||
|
{
|
||||||
|
Name: "1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "3",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "2",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, r := range records {
|
||||||
|
assert.NoError(t, sess.Begin())
|
||||||
|
_, err := sess.Insert(&r)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.NoError(t, sess.Commit())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue