summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/go-sql-driver/mysql/benchmark_go18_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/go-sql-driver/mysql/benchmark_go18_test.go')
-rw-r--r--vendor/github.com/go-sql-driver/mysql/benchmark_go18_test.go93
1 files changed, 93 insertions, 0 deletions
diff --git a/vendor/github.com/go-sql-driver/mysql/benchmark_go18_test.go b/vendor/github.com/go-sql-driver/mysql/benchmark_go18_test.go
new file mode 100644
index 000000000..d6a7e9d6e
--- /dev/null
+++ b/vendor/github.com/go-sql-driver/mysql/benchmark_go18_test.go
@@ -0,0 +1,93 @@
+// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
+//
+// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved.
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this file,
+// You can obtain one at http://mozilla.org/MPL/2.0/.
+
+// +build go1.8
+
+package mysql
+
+import (
+ "context"
+ "database/sql"
+ "fmt"
+ "runtime"
+ "testing"
+)
+
+func benchmarkQueryContext(b *testing.B, db *sql.DB, p int) {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+ db.SetMaxIdleConns(p * runtime.GOMAXPROCS(0))
+
+ tb := (*TB)(b)
+ stmt := tb.checkStmt(db.PrepareContext(ctx, "SELECT val FROM foo WHERE id=?"))
+ defer stmt.Close()
+
+ b.SetParallelism(p)
+ b.ReportAllocs()
+ b.ResetTimer()
+ b.RunParallel(func(pb *testing.PB) {
+ var got string
+ for pb.Next() {
+ tb.check(stmt.QueryRow(1).Scan(&got))
+ if got != "one" {
+ b.Fatalf("query = %q; want one", got)
+ }
+ }
+ })
+}
+
+func BenchmarkQueryContext(b *testing.B) {
+ db := initDB(b,
+ "DROP TABLE IF EXISTS foo",
+ "CREATE TABLE foo (id INT PRIMARY KEY, val CHAR(50))",
+ `INSERT INTO foo VALUES (1, "one")`,
+ `INSERT INTO foo VALUES (2, "two")`,
+ )
+ defer db.Close()
+ for _, p := range []int{1, 2, 3, 4} {
+ b.Run(fmt.Sprintf("%d", p), func(b *testing.B) {
+ benchmarkQueryContext(b, db, p)
+ })
+ }
+}
+
+func benchmarkExecContext(b *testing.B, db *sql.DB, p int) {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+ db.SetMaxIdleConns(p * runtime.GOMAXPROCS(0))
+
+ tb := (*TB)(b)
+ stmt := tb.checkStmt(db.PrepareContext(ctx, "DO 1"))
+ defer stmt.Close()
+
+ b.SetParallelism(p)
+ b.ReportAllocs()
+ b.ResetTimer()
+ b.RunParallel(func(pb *testing.PB) {
+ for pb.Next() {
+ if _, err := stmt.ExecContext(ctx); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+}
+
+func BenchmarkExecContext(b *testing.B) {
+ db := initDB(b,
+ "DROP TABLE IF EXISTS foo",
+ "CREATE TABLE foo (id INT PRIMARY KEY, val CHAR(50))",
+ `INSERT INTO foo VALUES (1, "one")`,
+ `INSERT INTO foo VALUES (2, "two")`,
+ )
+ defer db.Close()
+ for _, p := range []int{1, 2, 3, 4} {
+ b.Run(fmt.Sprintf("%d", p), func(b *testing.B) {
+ benchmarkQueryContext(b, db, p)
+ })
+ }
+}