diff --git a/driver_test.go b/driver_test.go index 09823331f..f4a930eae 100644 --- a/driver_test.go +++ b/driver_test.go @@ -1032,3 +1032,87 @@ func TestConcurrent(t *testing.T) { dbt.Logf("Reached %d concurrent connections \r\n", max) }) } + +// BENCHMARKS +var sample []byte + +func initBenchmarks() ([]byte, int, int) { + if sample == nil { + sample = []byte(strings.Repeat("0123456789abcdef", 1024*1024)) + } + return sample, 16, len(sample) +} + +func BenchmarkRoundtripText(b *testing.B) { + sample, min, max := initBenchmarks() + db, err := sql.Open("mysql", dsn) + if err != nil { + b.Fatalf("crashed") + } + defer db.Close() + var result string + for i := 0; i < b.N; i++ { + length := min + i + if length > max { + length = max + } + test := string(sample[0:length]) + rows, err := db.Query("SELECT \"" + test + "\"") + if err != nil { + b.Fatalf("crashed") + } + if !rows.Next() { + rows.Close() + b.Fatalf("crashed") + } + err = rows.Scan(&result) + if err != nil { + rows.Close() + b.Fatalf("crashed") + } + if result != test { + rows.Close() + b.Errorf("mismatch") + } + rows.Close() + } +} + +func BenchmarkRoundtripPrepared(b *testing.B) { + sample, min, max := initBenchmarks() + db, err := sql.Open("mysql", dsn) + if err != nil { + b.Fatalf("crashed") + } + defer db.Close() + var result string + stmt, err := db.Prepare("SELECT ?") + if err != nil { + b.Fatalf("crashed") + } + for i := 0; i < b.N; i++ { + length := min + i + if length > max { + length = max + } + test := string(sample[0:length]) + rows, err := stmt.Query(test) + if err != nil { + b.Fatalf("crashed") + } + if !rows.Next() { + rows.Close() + b.Fatalf("crashed") + } + err = rows.Scan(&result) + if err != nil { + rows.Close() + b.Fatalf("crashed") + } + if result != test { + rows.Close() + b.Errorf("mismatch") + } + rows.Close() + } +}