Add array integration benchmarks

query-exec-mode
Jack Christensen 2021-12-11 09:19:11 -06:00
parent d9e53647ec
commit 390bd79757
2 changed files with 326 additions and 0 deletions

View File

@ -1290,3 +1290,279 @@ func BenchmarkQueryBinaryFormatDecode_PG_numeric_to_Go_pgtype_Numeric_100_rows_1
}
}
}
func BenchmarkQueryTextFormatDecode_PG_Int4Array_With_Go_Int4Array_10(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, 10) n`,
[]interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQueryTextFormatDecode_PG_Int4Array_With_Go_ArrayType_10(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
conn.ConnInfo().RegisterDataType(pgtype.DataType{
Value: pgtype.NewArrayType("_int4", pgtype.Int4OID, func() pgtype.ValueTranscoder { return &pgtype.Int4{} }),
Name: "_int4",
OID: pgtype.Int4ArrayOID,
})
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, 10) n`,
[]interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQueryBinaryFormatDecode_PG_Int4Array_With_Go_Int4Array_10(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, 10) n`,
[]interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQueryBinaryFormatDecode_PG_Int4Array_With_Go_ArrayType_10(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
conn.ConnInfo().RegisterDataType(pgtype.DataType{
Value: pgtype.NewArrayType("_int4", pgtype.Int4OID, func() pgtype.ValueTranscoder { return &pgtype.Int4{} }),
Name: "_int4",
OID: pgtype.Int4ArrayOID,
})
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, 10) n`,
[]interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQueryTextFormatDecode_PG_Int4Array_With_Go_Int4Array_100(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, 100) n`,
[]interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQueryTextFormatDecode_PG_Int4Array_With_Go_ArrayType_100(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
conn.ConnInfo().RegisterDataType(pgtype.DataType{
Value: pgtype.NewArrayType("_int4", pgtype.Int4OID, func() pgtype.ValueTranscoder { return &pgtype.Int4{} }),
Name: "_int4",
OID: pgtype.Int4ArrayOID,
})
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, 100) n`,
[]interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQueryBinaryFormatDecode_PG_Int4Array_With_Go_Int4Array_100(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, 100) n`,
[]interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQueryBinaryFormatDecode_PG_Int4Array_With_Go_ArrayType_100(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
conn.ConnInfo().RegisterDataType(pgtype.DataType{
Value: pgtype.NewArrayType("_int4", pgtype.Int4OID, func() pgtype.ValueTranscoder { return &pgtype.Int4{} }),
Name: "_int4",
OID: pgtype.Int4ArrayOID,
})
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, 100) n`,
[]interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQueryTextFormatDecode_PG_Int4Array_With_Go_Int4Array_1000(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, 1000) n`,
[]interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQueryTextFormatDecode_PG_Int4Array_With_Go_ArrayType_1000(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
conn.ConnInfo().RegisterDataType(pgtype.DataType{
Value: pgtype.NewArrayType("_int4", pgtype.Int4OID, func() pgtype.ValueTranscoder { return &pgtype.Int4{} }),
Name: "_int4",
OID: pgtype.Int4ArrayOID,
})
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, 1000) n`,
[]interface{}{pgx.QueryResultFormats{pgx.TextFormatCode}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQueryBinaryFormatDecode_PG_Int4Array_With_Go_Int4Array_1000(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, 1000) n`,
[]interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQueryBinaryFormatDecode_PG_Int4Array_With_Go_ArrayType_1000(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
conn.ConnInfo().RegisterDataType(pgtype.DataType{
Value: pgtype.NewArrayType("_int4", pgtype.Int4OID, func() pgtype.ValueTranscoder { return &pgtype.Int4{} }),
Name: "_int4",
OID: pgtype.Int4ArrayOID,
})
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, 1000) n`,
[]interface{}{pgx.QueryResultFormats{pgx.BinaryFormatCode}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}

View File

@ -42,3 +42,53 @@ func BenchmarkQuery<%= format_name %>FormatDecode_PG_<%= pg_type %>_to_Go_<%= go
<% end %>
<% end %>
<% end %>
<% [10, 100, 1000].each do |array_size| %>
<% [["Text", "pgx.TextFormatCode"], ["Binary", "pgx.BinaryFormatCode"]].each do |format_name, format_code| %>
func BenchmarkQuery<%= format_name %>FormatDecode_PG_Int4Array_With_Go_Int4Array_<%= array_size %>(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, <%= array_size %>) n`,
[]interface{}{pgx.QueryResultFormats{<%= format_code %>}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQuery<%= format_name %>FormatDecode_PG_Int4Array_With_Go_ArrayType_<%= array_size %>(b *testing.B) {
conn := testutil.MustConnectPgx(b)
defer testutil.MustCloseContext(b, conn)
conn.ConnInfo().RegisterDataType(pgtype.DataType{
Value: pgtype.NewArrayType("_int4", pgtype.Int4OID, func() pgtype.ValueTranscoder { return &pgtype.Int4{} }),
Name: "_int4",
OID: pgtype.Int4ArrayOID,
})
b.ResetTimer()
var v []int32
for i := 0; i < b.N; i++ {
_, err := conn.QueryFunc(
context.Background(),
`select array_agg(n) from generate_series(1, <%= array_size %>) n`,
[]interface{}{pgx.QueryResultFormats{<%= format_code %>}},
[]interface{}{&v},
func(pgx.QueryFuncRow) error { return nil },
)
if err != nil {
b.Fatal(err)
}
}
}
<% end %>
<% end %>