From 2886673a3cb7c26f72fc5d3cc132a8177bdd1fa5 Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Sat, 28 Aug 2021 14:07:13 -0500 Subject: [PATCH] Add full query decoding benchmarks --- integration_benchmark_test.go | 1292 +++++++++++++++++++++++++++++ integration_benchmark_test.go.erb | 44 + integration_benchmark_test_gen.sh | 2 + 3 files changed, 1338 insertions(+) create mode 100644 integration_benchmark_test.go create mode 100644 integration_benchmark_test.go.erb create mode 100755 integration_benchmark_test_gen.sh diff --git a/integration_benchmark_test.go b/integration_benchmark_test.go new file mode 100644 index 00000000..d3af7c31 --- /dev/null +++ b/integration_benchmark_test.go @@ -0,0 +1,1292 @@ +// Code generated by erb. DO NOT EDIT. + +package pgtype_test + +import ( + "context" + "testing" + + "github.com/jackc/pgtype" + "github.com/jackc/pgtype/testutil" + "github.com/jackc/pgx/v4" +) + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_int16_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int16 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_int16_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int16 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_int16_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int16 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_int16_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int16 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_int16_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int16 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_int16_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int16 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_int16_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int16 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_int16_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int16 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_int32_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int32 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_int32_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int32 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_int32_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int32 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_int32_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int32 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_int32_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int32 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_int32_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int32 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_int32_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int32 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_int32_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int32 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_int64_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_int64_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_int64_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_int64_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_int64_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_int64_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_int64_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_int64_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_uint64_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]uint64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_uint64_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]uint64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_uint64_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]uint64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_uint64_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]uint64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_uint64_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]uint64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_uint64_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]uint64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_uint64_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]uint64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_uint64_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]uint64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_pgtype_Int4_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]pgtype.Int4 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_pgtype_Int4_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]pgtype.Int4 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_pgtype_Int4_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]pgtype.Int4 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_pgtype_Int4_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]pgtype.Int4 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_pgtype_Int4_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]pgtype.Int4 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_pgtype_Int4_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]pgtype.Int4 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_int4_to_Go_pgtype_Int4_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]pgtype.Int4 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_int4_to_Go_pgtype_Int4_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]pgtype.Int4 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::int4 + 0, n::int4 + 1, n::int4 + 2, n::int4 + 3, n::int4 + 4, n::int4 + 5, n::int4 + 6, n::int4 + 7, n::int4 + 8, n::int4 + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_numeric_to_Go_int64_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_int64_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_numeric_to_Go_int64_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0, n::numeric + 1, n::numeric + 2, n::numeric + 3, n::numeric + 4, n::numeric + 5, n::numeric + 6, n::numeric + 7, n::numeric + 8, n::numeric + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_int64_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0, n::numeric + 1, n::numeric + 2, n::numeric + 3, n::numeric + 4, n::numeric + 5, n::numeric + 6, n::numeric + 7, n::numeric + 8, n::numeric + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_numeric_to_Go_int64_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_int64_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_numeric_to_Go_int64_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0, n::numeric + 1, n::numeric + 2, n::numeric + 3, n::numeric + 4, n::numeric + 5, n::numeric + 6, n::numeric + 7, n::numeric + 8, n::numeric + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_int64_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]int64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0, n::numeric + 1, n::numeric + 2, n::numeric + 3, n::numeric + 4, n::numeric + 5, n::numeric + 6, n::numeric + 7, n::numeric + 8, n::numeric + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_numeric_to_Go_float64_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]float64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_float64_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]float64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_numeric_to_Go_float64_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]float64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0, n::numeric + 1, n::numeric + 2, n::numeric + 3, n::numeric + 4, n::numeric + 5, n::numeric + 6, n::numeric + 7, n::numeric + 8, n::numeric + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_float64_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]float64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0, n::numeric + 1, n::numeric + 2, n::numeric + 3, n::numeric + 4, n::numeric + 5, n::numeric + 6, n::numeric + 7, n::numeric + 8, n::numeric + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_numeric_to_Go_float64_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]float64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_float64_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]float64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_numeric_to_Go_float64_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]float64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0, n::numeric + 1, n::numeric + 2, n::numeric + 3, n::numeric + 4, n::numeric + 5, n::numeric + 6, n::numeric + 7, n::numeric + 8, n::numeric + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_float64_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]float64 + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0, n::numeric + 1, n::numeric + 2, n::numeric + 3, n::numeric + 4, n::numeric + 5, n::numeric + 6, n::numeric + 7, n::numeric + 8, n::numeric + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_numeric_to_Go_pgtype_Numeric_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]pgtype.Numeric + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_pgtype_Numeric_1_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]pgtype.Numeric + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_numeric_to_Go_pgtype_Numeric_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]pgtype.Numeric + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0, n::numeric + 1, n::numeric + 2, n::numeric + 3, n::numeric + 4, n::numeric + 5, n::numeric + 6, n::numeric + 7, n::numeric + 8, n::numeric + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_pgtype_Numeric_1_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]pgtype.Numeric + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0, n::numeric + 1, n::numeric + 2, n::numeric + 3, n::numeric + 4, n::numeric + 5, n::numeric + 6, n::numeric + 7, n::numeric + 8, n::numeric + 9 from generate_series(1, 1) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_numeric_to_Go_pgtype_Numeric_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]pgtype.Numeric + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_pgtype_Numeric_10_rows_1_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [1]pgtype.Numeric + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0 from generate_series(1, 10) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryTextFormatDecode_PG_numeric_to_Go_pgtype_Numeric_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]pgtype.Numeric + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0, n::numeric + 1, n::numeric + 2, n::numeric + 3, n::numeric + 4, n::numeric + 5, n::numeric + 6, n::numeric + 7, n::numeric + 8, n::numeric + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_pgtype_Numeric_100_rows_10_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [10]pgtype.Numeric + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select n::numeric + 0, n::numeric + 1, n::numeric + 2, n::numeric + 3, n::numeric + 4, n::numeric + 5, n::numeric + 6, n::numeric + 7, n::numeric + 8, n::numeric + 9 from generate_series(1, 100) n`, + []interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}}, + []interface{}{&v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} diff --git a/integration_benchmark_test.go.erb b/integration_benchmark_test.go.erb new file mode 100644 index 00000000..037c96c3 --- /dev/null +++ b/integration_benchmark_test.go.erb @@ -0,0 +1,44 @@ +// Code generated by erb. DO NOT EDIT. + +package pgtype_test + +import ( + "context" + "testing" + + "github.com/jackc/pgtype/testutil" + "github.com/jackc/pgx/v4" +) + +<% + [ + ["int4", ["int16", "int32", "int64", "uint64", "pgtype.Int4"], [[1, 1], [1, 10], [10, 1], [100, 10]]], + ["numeric", ["int64", "float64", "pgtype.Numeric"], [[1, 1], [1, 10], [10, 1], [100, 10]]], + ].each do |pg_type, go_types, rows_columns| +%> +<% go_types.each do |go_type| %> +<% rows_columns.each do |rows, columns| %> +<% [["Text", "pgx.TextFormatCode"], ["Binary", "pgx.BinaryFormatCode"]].each do |formatName, formatCode| %> +func BenchmarkQuery<%= formatName %>FormatDecode_PG_<%= pg_type %>_to_Go_<%= go_type.gsub(/\W/, "_") %>_<%= rows %>_rows_<%= columns %>_columns(b *testing.B) { + conn := testutil.MustConnectPgx(b) + defer testutil.MustCloseContext(b, conn) + + b.ResetTimer() + var v [<%= columns %>]<%= go_type %> + for i := 0; i < b.N; i++ { + _, err := conn.QueryFunc( + context.Background(), + `select <% columns.times do |col_idx| %><% if col_idx != 0 %>, <% end %>n::<%= pg_type %> + <%= col_idx%><% end %> from generate_series(1, <%= rows %>) n`, + []interface{}{pgx.QueryResultFormats{<%= formatCode %>}}, + []interface{}{<% columns.times do |col_idx| %><% if col_idx != 0 %>, <% end %>&v[<%= col_idx%>]<% end %>}, + func(pgx.QueryFuncRow) error { return nil }, + ) + if err != nil { + b.Fatal(err) + } + } +} +<% end %> +<% end %> +<% end %> +<% end %> diff --git a/integration_benchmark_test_gen.sh b/integration_benchmark_test_gen.sh new file mode 100755 index 00000000..22ac01aa --- /dev/null +++ b/integration_benchmark_test_gen.sh @@ -0,0 +1,2 @@ +erb integration_benchmark_test.go.erb > integration_benchmark_test.go +goimports -w integration_benchmark_test.go