github.com/jackc/pgx/v5@v5.5.5/pipeline_test.go (about) 1 package pgx_test 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/jackc/pgx/v5" 8 "github.com/jackc/pgx/v5/pgconn" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestPipelineWithoutPreparedOrDescribedStatements(t *testing.T) { 13 t.Parallel() 14 15 defaultConnTestRunner.RunTest(context.Background(), t, func(ctx context.Context, t testing.TB, conn *pgx.Conn) { 16 pipeline := conn.PgConn().StartPipeline(ctx) 17 18 eqb := pgx.ExtendedQueryBuilder{} 19 20 err := eqb.Build(conn.TypeMap(), nil, []any{1, 2}) 21 require.NoError(t, err) 22 pipeline.SendQueryParams(`select $1::bigint + $2::bigint`, eqb.ParamValues, nil, eqb.ParamFormats, eqb.ResultFormats) 23 24 err = eqb.Build(conn.TypeMap(), nil, []any{3, 4, 5}) 25 require.NoError(t, err) 26 pipeline.SendQueryParams(`select $1::bigint + $2::bigint + $3::bigint`, eqb.ParamValues, nil, eqb.ParamFormats, eqb.ResultFormats) 27 28 err = pipeline.Sync() 29 require.NoError(t, err) 30 31 results, err := pipeline.GetResults() 32 require.NoError(t, err) 33 rr, ok := results.(*pgconn.ResultReader) 34 require.True(t, ok) 35 rows := pgx.RowsFromResultReader(conn.TypeMap(), rr) 36 37 rowCount := 0 38 var n int64 39 for rows.Next() { 40 err = rows.Scan(&n) 41 require.NoError(t, err) 42 rowCount++ 43 } 44 require.NoError(t, rows.Err()) 45 require.Equal(t, 1, rowCount) 46 require.Equal(t, "SELECT 1", rows.CommandTag().String()) 47 require.EqualValues(t, 3, n) 48 49 results, err = pipeline.GetResults() 50 require.NoError(t, err) 51 rr, ok = results.(*pgconn.ResultReader) 52 require.True(t, ok) 53 rows = pgx.RowsFromResultReader(conn.TypeMap(), rr) 54 55 rowCount = 0 56 n = 0 57 for rows.Next() { 58 err = rows.Scan(&n) 59 require.NoError(t, err) 60 rowCount++ 61 } 62 require.NoError(t, rows.Err()) 63 require.Equal(t, 1, rowCount) 64 require.Equal(t, "SELECT 1", rows.CommandTag().String()) 65 require.EqualValues(t, 12, n) 66 67 results, err = pipeline.GetResults() 68 require.NoError(t, err) 69 _, ok = results.(*pgconn.PipelineSync) 70 require.True(t, ok) 71 72 results, err = pipeline.GetResults() 73 require.NoError(t, err) 74 require.Nil(t, results) 75 76 err = pipeline.Close() 77 require.NoError(t, err) 78 }) 79 }