From 024a82ee7e550fdfe4ba446060698f2b6b60f2b5 Mon Sep 17 00:00:00 2001 From: Farhan Chauhan Date: Mon, 28 Sep 2026 21:29:33 +0530 Subject: [PATCH] Add Tx.Tx accessor for the embedded *sql.Tx --- sequel.go | 5 +++++ sequel_test.go | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/sequel.go b/sequel.go index 2beafaa..bf5f4e2 100644 --- a/sequel.go +++ b/sequel.go @@ -511,6 +511,11 @@ func (t *Tx) rebindModel(query string) string { return query } +// Tx returns the embedded *sql.Tx. +func (t *Tx) Tx() *sql.Tx { + return t.tx.Tx +} + // Commit commits the transaction. func (t *Tx) Commit() error { err := t.tx.Commit() diff --git a/sequel_test.go b/sequel_test.go index 1f6ab40..0c0da65 100644 --- a/sequel_test.go +++ b/sequel_test.go @@ -579,6 +579,22 @@ func TestTxQueries(t *testing.T) { assert.NoError(t, tx.Commit()) }) + t.Run("sql tx", func(t *testing.T) { + tx, err := db.Begin(ctx) + require.NoError(t, err) + defer func() { + assert.NoError(t, tx.Rollback()) + }() + + // A write through the *sql.Tx is visible inside the same transaction. + _, err = tx.Tx().ExecContext(ctx, "UPDATE person_test SET name = $1 WHERE id = $2", "Foo Bar", p1.GetID()) + require.NoError(t, err) + + var name string + require.NoError(t, tx.QueryRow("SELECT name FROM person_test WHERE id = $1", p1.GetID()).Scan(&name)) + assert.Equal(t, "Foo Bar", name) + }) + t.Run("insert error", func(t *testing.T) { tx, err := db.Begin(ctx) require.NoError(t, err)