|
|
@@ -1035,3 +1035,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()
|
|
|
+ }
|
|
|
+}
|