diff --git a/stdlib/sql.go b/stdlib/sql.go index 3dd060ef..1aac8888 100644 --- a/stdlib/sql.go +++ b/stdlib/sql.go @@ -257,6 +257,11 @@ type Conn struct { connConfig pgx.ConnConfig } +// Conn returns the underlying *pgx.Conn +func (c *Conn) Conn() *pgx.Conn { + return c.conn +} + func (c *Conn) Prepare(query string) (driver.Stmt, error) { return c.PrepareContext(context.Background(), query) } diff --git a/stdlib/sql_test.go b/stdlib/sql_test.go index f17560f7..a551e34b 100644 --- a/stdlib/sql_test.go +++ b/stdlib/sql_test.go @@ -561,6 +561,21 @@ func TestAcquireConn(t *testing.T) { }) } +func TestConnRaw(t *testing.T) { + testWithAndWithoutPreferSimpleProtocol(t, func(t *testing.T, db *sql.DB) { + conn, err := db.Conn(context.Background()) + require.NoError(t, err) + + var n int + err = conn.Raw(func(driverConn interface{}) error { + conn := driverConn.(*stdlib.Conn).Conn() + return conn.QueryRow(context.Background(), "select 42").Scan(&n) + }) + require.NoError(t, err) + assert.EqualValues(t, 42, n) + }) +} + // https://github.com/jackc/pgx/issues/673 func TestReleaseConnWithTxInProgress(t *testing.T) { testWithAndWithoutPreferSimpleProtocol(t, func(t *testing.T, db *sql.DB) {