From 0e9b2c27ea0cf96d6054aca5bbe2c380144d2264 Mon Sep 17 00:00:00 2001 From: Cr <631807682@qq.com> Date: Fri, 3 Sep 2021 14:23:09 +0800 Subject: [PATCH] fix(orm): txOrm miss debug log --- CHANGELOG.md | 2 +- client/orm/orm.go | 5 ++++ client/orm/orm_test.go | 56 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 80e75c70..c3a7c42f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -65,7 +65,7 @@ - Fix 4734: do not reset id in Delete function. [4738](https://github.com/beego/beego/pull/4738) [4742](https://github.com/beego/beego/pull/4742) - Fix 4699: Remove Remove goyaml2 dependency. [4755](https://github.com/beego/beego/pull/4755) - Fix 4698: Prompt error when config format is incorrect. [4757](https://github.com/beego/beego/pull/4757) - +- Fix 4674: Tx Orm missing debug log [4756](https://github.com/beego/beego/pull/4756) ## Fix Sonar - [4677](https://github.com/beego/beego/pull/4677) diff --git a/client/orm/orm.go b/client/orm/orm.go index 47e46400..0a8fde24 100644 --- a/client/orm/orm.go +++ b/client/orm/orm.go @@ -536,6 +536,11 @@ func (o *orm) BeginWithCtxAndOpts(ctx context.Context, opts *sql.TxOptions) (TxO db: &TxDB{tx: tx}, }, } + + if Debug { + _txOrm.db = newDbQueryLog(o.alias, _txOrm.db) + } + var taskTxOrm TxOrmer = _txOrm return taskTxOrm, nil } diff --git a/client/orm/orm_test.go b/client/orm/orm_test.go index 05f16a34..9aaed233 100644 --- a/client/orm/orm_test.go +++ b/client/orm/orm_test.go @@ -2886,3 +2886,59 @@ func TestContextCanceled(t *testing.T) { _, err = qs.Filter("UserName", "slene").CountWithCtx(ctx) throwFail(t, AssertIs(err, context.Canceled)) } + +func TestDebugLog(t *testing.T) { + + txCommitFn := func() { + o := NewOrm() + o.DoTx(func(ctx context.Context, txOrm TxOrmer) (txerr error) { + _, txerr = txOrm.QueryTable(&User{}).Count() + return + }) + } + + txRollbackFn := func() { + o := NewOrm() + o.DoTx(func(ctx context.Context, txOrm TxOrmer) (txerr error) { + user := NewUser() + user.UserName = "slene" + user.Email = "vslene@gmail.com" + user.Password = "pass" + user.Status = 3 + user.IsStaff = true + user.IsActive = true + + txOrm.Insert(user) + txerr = fmt.Errorf("mock error") + return + }) + } + + Debug = true + output1 := captureDebugLogOutput(txCommitFn) + + assert.Contains(t, output1, "START TRANSACTION") + assert.Contains(t, output1, "COMMIT") + + output2 := captureDebugLogOutput(txRollbackFn) + + assert.Contains(t, output2, "START TRANSACTION") + assert.Contains(t, output2, "ROLLBACK") + + Debug = false + output1 = captureDebugLogOutput(txCommitFn) + assert.EqualValues(t, output1, "") + + output2 = captureDebugLogOutput(txRollbackFn) + assert.EqualValues(t, output2, "") +} + +func captureDebugLogOutput(f func()) string { + var buf bytes.Buffer + DebugLog.SetOutput(&buf) + defer func() { + DebugLog.SetOutput(os.Stderr) + }() + f() + return buf.String() +}