@@ -566,3 +566,43 @@ func TestTraceConnect(t *testing.T) {
566
566
require .True (t , traceConnectStartCalled )
567
567
require .True (t , traceConnectEndCalled )
568
568
}
569
+
570
+ // Ensure tracer runs within a transaction.
571
+ //
572
+ // https://github.com/jackc/pgx/issues/2304
573
+ func TestTraceWithinTx (t * testing.T ) {
574
+ t .Parallel ()
575
+
576
+ tracer := & testTracer {}
577
+
578
+ ctr := defaultConnTestRunner
579
+ ctr .CreateConfig = func (ctx context.Context , t testing.TB ) * pgx.ConnConfig {
580
+ config := defaultConnTestRunner .CreateConfig (ctx , t )
581
+ config .Tracer = tracer
582
+ return config
583
+ }
584
+
585
+ ctx , cancel := context .WithTimeout (context .Background (), 120 * time .Second )
586
+ defer cancel ()
587
+
588
+ pgxtest .RunWithQueryExecModes (ctx , t , ctr , nil , func (ctx context.Context , t testing.TB , conn * pgx.Conn ) {
589
+ var queries []string
590
+ tracer .traceQueryStart = func (ctx context.Context , conn * pgx.Conn , data pgx.TraceQueryStartData ) context.Context {
591
+ queries = append (queries , data .SQL )
592
+ return ctx
593
+ }
594
+
595
+ tx , err := conn .Begin (ctx )
596
+ require .NoError (t , err )
597
+ defer tx .Rollback (ctx )
598
+ _ , err = tx .Exec (ctx , `select $1::text` , "testing" )
599
+ require .NoError (t , err )
600
+ err = tx .Commit (ctx )
601
+ require .NoError (t , err )
602
+
603
+ require .Len (t , queries , 3 )
604
+ require .Equal (t , `begin` , queries [0 ])
605
+ require .Equal (t , `select $1::text` , queries [1 ])
606
+ require .Equal (t , `commit` , queries [2 ])
607
+ })
608
+ }
0 commit comments