mirror of
https://github.com/jackc/pgx.git
synced 2025-09-04 19:37:10 +00:00
96 lines
2.1 KiB
Go
96 lines
2.1 KiB
Go
package pgx_test
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"github.com/JackC/pgx"
|
|
_ "github.com/lib/pq"
|
|
"math/rand"
|
|
"testing"
|
|
)
|
|
|
|
var db *sql.DB
|
|
|
|
func init() {
|
|
var err error
|
|
db, err = sql.Open("postgres", "host=/private/tmp user=pgx_md5 password=secret dbname=pgx_test sslmode=disable")
|
|
if err != nil {
|
|
fmt.Println("Error:", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
type narrow struct {
|
|
id int32
|
|
a int32
|
|
b int32
|
|
c int32
|
|
d int32
|
|
}
|
|
|
|
func BenchmarkSQLPgxSelect10RowsByID(b *testing.B) {
|
|
conn := getSharedConnection(b)
|
|
createNarrowTestData(b, conn)
|
|
|
|
// Get random ids outside of timing
|
|
ids := make([]int32, b.N)
|
|
for i := 0; i < b.N; i++ {
|
|
ids[i] = 1 + rand.Int31n(9999)
|
|
}
|
|
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
records := make([]narrow, 0)
|
|
onDataRow := func(r *pgx.DataRowReader) error {
|
|
var rec narrow
|
|
rec.id = r.ReadValue().(int32)
|
|
rec.a = r.ReadValue().(int32)
|
|
rec.b = r.ReadValue().(int32)
|
|
rec.c = r.ReadValue().(int32)
|
|
rec.d = r.ReadValue().(int32)
|
|
records = append(records, rec)
|
|
return nil
|
|
}
|
|
err := conn.SelectFunc("getMultipleNarrowById", onDataRow, ids[i], ids[i]+10)
|
|
|
|
if err != nil {
|
|
b.Fatalf("SelectFunc unexpectedly failed with %v: %v", "getMultipleNarrowById", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkSQLPqSelect10RowsByID(b *testing.B) {
|
|
conn := getSharedConnection(b)
|
|
createNarrowTestData(b, conn)
|
|
|
|
// Get random ids outside of timing
|
|
ids := make([]int32, b.N)
|
|
for i := 0; i < b.N; i++ {
|
|
ids[i] = 1 + rand.Int31n(9999)
|
|
}
|
|
|
|
stmt, err := db.Prepare("select * from narrow where id between $1 and $2")
|
|
if err != nil {
|
|
b.Fatalf("db.Prepare unexpectedly failed: %v", err)
|
|
}
|
|
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
records := make([]narrow, 0)
|
|
rows, err := stmt.Query(ids[i], ids[i]+10)
|
|
if err != nil {
|
|
b.Fatalf("stmt.Query unexpectedly failed: %v", err)
|
|
}
|
|
for rows.Next() {
|
|
var rec narrow
|
|
if err := rows.Scan(&rec.id, &rec.a, &rec.b, &rec.c, &rec.d); err != nil {
|
|
b.Fatalf("rows.Scan unexpectedly failed: %v", err)
|
|
}
|
|
records = append(records, rec)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
b.Fatalf("rows.Err unexpectedly is: %v", err)
|
|
}
|
|
}
|
|
}
|