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 }
80
View as plain text