diff --git a/Makefile b/Makefile
index 926c4a9df8e444869147e7c47fb5217567d87884..a02ce8f0301cc1fd7e1248d43251735aa6c6f390 100644
--- a/Makefile
+++ b/Makefile
@@ -1,15 +1,13 @@
-SHELL := bash
+SHELL := /bin/bash
 
 DB_HOST ?= 127.0.0.1
 
 export DB_HOST
 
 test:
-	go test -v ./lib/... && \
-	go test -v ./internal/... && \
-	$(MAKE) test -C postgresql && \
-	$(MAKE) test -C mysql && \
-	$(MAKE) test -C sqlite && \
-	$(MAKE) test -C ql && \
-	$(MAKE) test -C mongo && \
+	go test -v -bench=. ./lib/... && \
+	go test -v -bench=. ./internal/... && \
+	for ADAPTER in postgresql mysql sqlite ql mongo; do \
+		$(MAKE) -C $$ADAPTER test; \
+	done && \
 	go test -v
diff --git a/internal/sqladapter/testing/adapter_benchmark.go.tpl b/internal/sqladapter/testing/adapter_benchmark.go.tpl
deleted file mode 100644
index 0438aca16b1d75188eda7216c1b714c593631806..0000000000000000000000000000000000000000
--- a/internal/sqladapter/testing/adapter_benchmark.go.tpl
+++ /dev/null
@@ -1,860 +0,0 @@
-package ADAPTER
-
-import (
-	"database/sql"
-	"fmt"
-	"math/rand"
-	"testing"
-
-	"github.com/gocraft/dbr"
-	"upper.io/db.v2"
-	"upper.io/db.v2/lib/sqlbuilder"
-)
-
-const (
-	testRows = 1000
-)
-
-func updatedArtistN(i int) string {
-	return fmt.Sprintf("Updated Artist %d", i%testRows)
-}
-
-func artistN(i int) string {
-	return fmt.Sprintf("Artist %d", i%testRows)
-}
-
-func addFakeRowsAndDisconnect() error {
-	sess, err := connectAndAddFakeRows()
-	if err != nil {
-		return err
-	}
-	sess.Close()
-	return nil
-}
-
-func connectAndAddFakeRows() (db.Database, error) {
-	sess := mustOpen()
-
-	if err := sess.Collection("artist").Truncate(); err != nil {
-		return nil, err
-	}
-
-	type valueT struct {
-		Name string `db:"name"`
-	}
-
-	for i := 0; i < testRows; i++ {
-		value := valueT{artistN(i)}
-		if _, err := sess.Collection("artist").Insert(value); err != nil {
-			return nil, err
-		}
-	}
-
-	return sess, nil
-}
-
-func BenchmarkUpperInsert(b *testing.B) {
-	sess := mustOpen()
-	defer sess.Close()
-
-	artist := sess.Collection("artist")
-	artist.Truncate()
-
-	item := struct {
-		Name string `db:"name"`
-	}{"Hayao Miyazaki"}
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err := artist.Insert(item); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-func BenchmarkUpperInsertVariableArgs(b *testing.B) {
-	sess := mustOpen()
-	defer sess.Close()
-
-	artist := sess.Collection("artist")
-	artist.Truncate()
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		item := struct {
-			Name string `db:"name"`
-		}{fmt.Sprintf("Hayao Miyazaki %d", rand.Int())}
-		if _, err := artist.Insert(item); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-func BenchmarkUpperInsertTransaction(b *testing.B) {
-	sess := mustOpen()
-	defer sess.Close()
-
-	tx, err := sess.NewTx()
-	if err != nil {
-		b.Fatal(err)
-	}
-	defer tx.Close()
-
-	artist := tx.Collection("artist")
-
-	if err = artist.Truncate(); err != nil {
-		b.Fatal(err)
-	}
-
-	item := struct {
-		Name string `db:"name"`
-	}{"Hayao Miyazaki"}
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err = artist.Insert(item); err != nil {
-			b.Fatal(err)
-		}
-	}
-
-	if err = tx.Commit(); err != nil {
-		b.Fatal(err)
-	}
-}
-
-func BenchmarkUpperInsertTransactionWithMap(b *testing.B) {
-	sess := mustOpen()
-	defer sess.Close()
-
-	tx, err := sess.NewTx()
-	if err != nil {
-		b.Fatal(err)
-	}
-	defer tx.Close()
-
-	artist := tx.Collection("artist")
-
-	if err = artist.Truncate(); err != nil {
-		b.Fatal(err)
-	}
-
-	item := map[string]string{
-		"name": "Hayao Miyazaki",
-	}
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err = artist.Insert(item); err != nil {
-			b.Fatal(err)
-		}
-	}
-
-	if err = tx.Commit(); err != nil {
-		b.Fatal(err)
-	}
-}
-
-func BenchmarkUpperFind(b *testing.B) {
-	sess, err := connectAndAddFakeRows()
-	if err != nil {
-		b.Fatal(err)
-	}
-	defer sess.Close()
-
-	artist := sess.Collection("artist")
-
-	type artistType struct {
-		Name string `db:"name"`
-	}
-
-	var item artistType
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		res := artist.Find(db.Cond{"name": artistN(i)})
-		if err = res.One(&item); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-func BenchmarkUpperFindAll(b *testing.B) {
-	sess, err := connectAndAddFakeRows()
-	if err != nil {
-		b.Fatal(err)
-	}
-	defer sess.Close()
-
-	artist := sess.Collection("artist")
-
-	type artistType struct {
-		Name string `db:"name"`
-	}
-
-	var items []artistType
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		res := artist.Find(db.Or(
-			db.Cond{"name": artistN(i)},
-			db.Cond{"name": artistN(i + 1)},
-			db.Cond{"name": artistN(i + 2)},
-		))
-		if err = res.All(&items); err != nil {
-			b.Fatal(err)
-		}
-		if len(items) != 3 {
-			b.Fatal("Expecting 3 results.")
-		}
-	}
-}
-
-func BenchmarkUpperUpdate(b *testing.B) {
-	sess, err := connectAndAddFakeRows()
-	if err != nil {
-		b.Fatal(err)
-	}
-	defer sess.Close()
-
-	artist := sess.Collection("artist")
-
-	type artistType struct {
-		Name string `db:"name"`
-	}
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		newValue := artistType{
-			Name: updatedArtistN(i),
-		}
-		res := artist.Find(db.Cond{"name": artistN(i)})
-		if err = res.Update(newValue); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-// BenchmarkUpperDelete benchmarks
-func BenchmarkUpperDelete(b *testing.B) {
-	sess, err := connectAndAddFakeRows()
-	if err != nil {
-		b.Fatal(err)
-	}
-	defer sess.Close()
-
-	artist := sess.Collection("artist")
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		res := artist.Find(db.Cond{"name": artistN(i)})
-		if err = res.Delete(); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-// BenchmarkUpperGetCollection
-func BenchmarkUpperGetCollection(b *testing.B) {
-	sess, err := Open(settings)
-	if err != nil {
-		b.Fatal(err)
-	}
-	defer sess.Close()
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		sess.Collection("artist")
-	}
-}
-
-func BenchmarkUpperCommitManyTransactions(b *testing.B) {
-	sess, err := Open(settings)
-	if err != nil {
-		b.Fatal(err)
-	}
-	defer sess.Close()
-
-	b.ResetTimer()
-
-	for i := 0; i < b.N; i++ {
-		var tx sqlbuilder.Tx
-		if tx, err = sess.NewTx(); err != nil {
-			b.Fatal(err)
-		}
-
-		artist := tx.Collection("artist")
-
-		if err = artist.Truncate(); err != nil {
-			b.Fatal(err)
-		}
-
-		item := struct {
-			Name string `db:"name"`
-		}{"Hayao Miyazaki"}
-
-		if _, err = artist.Insert(item); err != nil {
-			b.Fatal(err)
-		}
-
-		if err = tx.Commit(); err != nil {
-			b.Fatal(err)
-		}
-
-		tx.Close()
-	}
-}
-
-// BenchmarkUpperRollbackManyTransactions benchmarks
-func BenchmarkUpperRollbackManyTransactions(b *testing.B) {
-	sess, err := Open(settings)
-	if err != nil {
-		b.Fatal(err)
-	}
-	defer sess.Close()
-
-	b.ResetTimer()
-
-	for i := 0; i < b.N; i++ {
-		var tx sqlbuilder.Tx
-		if tx, err = sess.NewTx(); err != nil {
-			b.Fatal(err)
-		}
-
-		artist := tx.Collection("artist")
-
-		if err = artist.Truncate(); err != nil {
-			b.Fatal(err)
-		}
-
-		item := struct {
-			Name string `db:"name"`
-		}{"Hayao Miyazaki"}
-
-		if _, err = artist.Insert(item); err != nil {
-			b.Fatal(err)
-		}
-
-		if err = tx.Rollback(); err != nil {
-			b.Fatal(err)
-		}
-
-		tx.Close()
-	}
-}
-
-// BenchmarkSQLInsert benchmarks raw INSERT SQL queries without using prepared
-// statements nor arguments.
-func BenchmarkSQLInsert(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = Open(settings); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*sql.DB)
-
-	if _, err = driver.Exec(truncateArtist); err != nil {
-		b.Fatal(err)
-	}
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err = driver.Exec(insertHayaoMiyazaki); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-func BenchmarkDBRInsert(b *testing.B) {
-	var err error
-
-	conn, err := dbr.Open(sqlDriver, settings.String(), nil)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	sess := conn.NewSession(nil)
-
-	defer sess.Close()
-
-	if _, err = sess.Exec(truncateArtist); err != nil {
-		b.Fatal(err)
-	}
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err = sess.Exec(insertHayaoMiyazaki); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-func BenchmarkSQLInsertWithArgs(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = Open(settings); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*sql.DB)
-
-	if _, err = driver.Exec(truncateArtist); err != nil {
-		b.Fatal(err)
-	}
-
-	args := []interface{}{
-		"Hayao Miyazaki",
-	}
-
-	var rows *sql.Rows
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if rows, err = driver.Query(insertIntoArtistWithPlaceholderReturningID, args...); err != nil {
-			b.Fatal(err)
-		}
-		rows.Close()
-	}
-}
-
-func BenchmarkDBRInsertWithArgs(b *testing.B) {
-	var err error
-
-	conn, err := dbr.Open(sqlDriver, settings.String(), nil)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	sess := conn.NewSession(nil)
-
-	defer sess.Close()
-
-	if _, err = sess.Exec(truncateArtist); err != nil {
-		b.Fatal(err)
-	}
-
-	args := []interface{}{
-		"Hayao Miyazaki",
-	}
-
-	var rows *sql.Rows
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if rows, err = sess.Query(insertIntoArtistWithPlaceholderReturningID, args...); err != nil {
-			b.Fatal(err)
-		}
-		rows.Close()
-	}
-}
-
-func BenchmarkSQLPreparedInsertNoArguments(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = Open(settings); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*sql.DB)
-
-	if _, err = driver.Exec(truncateArtist); err != nil {
-		b.Fatal(err)
-	}
-
-	stmt, err := driver.Prepare(insertHayaoMiyazaki)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err = stmt.Exec(); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-func BenchmarkSQLPreparedInsertWithArguments(b *testing.B) {
-	sess := mustOpen()
-	defer sess.Close()
-
-	driver := sess.Driver().(*sql.DB)
-
-	if _, err := driver.Exec(truncateArtist); err != nil {
-		b.Fatal(err)
-	}
-
-	stmt, err := driver.Prepare(insertIntoArtistWithPlaceholderReturningID)
-
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	args := []interface{}{
-		"Hayao Miyazaki",
-	}
-
-	var rows *sql.Rows
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if rows, err = stmt.Query(args...); err != nil {
-			b.Fatal(err)
-		}
-		rows.Close()
-	}
-}
-
-func BenchmarkDBRPreparedInsertWithArguments(b *testing.B) {
-	var err error
-
-	conn, err := dbr.Open(sqlDriver, settings.String(), nil)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	sess := conn.NewSession(nil)
-
-	defer sess.Close()
-
-	if _, err = sess.Exec(truncateArtist); err != nil {
-		b.Fatal(err)
-	}
-
-	stmt, err := sess.Prepare(insertIntoArtistWithPlaceholderReturningID)
-
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	args := []interface{}{
-		"Hayao Miyazaki",
-	}
-
-	var rows *sql.Rows
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if rows, err = stmt.Query(args...); err != nil {
-			b.Fatal(err)
-		}
-		rows.Close()
-	}
-}
-
-func BenchmarkSQLPreparedInsertWithVariableArgs(b *testing.B) {
-	sess := mustOpen()
-	defer sess.Close()
-
-	driver := sess.Driver().(*sql.DB)
-
-	if _, err := driver.Exec(truncateArtist); err != nil {
-		b.Fatal(err)
-	}
-
-	stmt, err := driver.Prepare(insertIntoArtistWithPlaceholderReturningID)
-
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	var rows *sql.Rows
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		args := []interface{}{
-			fmt.Sprintf("Hayao Miyazaki %d", rand.Int()),
-		}
-		if rows, err = stmt.Query(args...); err != nil {
-			b.Fatal(err)
-		}
-		rows.Close()
-	}
-}
-
-func BenchmarkDBRPreparedInsertWithVariableArgs(b *testing.B) {
-	var err error
-
-	conn, err := dbr.Open(sqlDriver, settings.String(), nil)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	sess := conn.NewSession(nil)
-
-	defer sess.Close()
-
-	if _, err = sess.Exec(truncateArtist); err != nil {
-		b.Fatal(err)
-	}
-
-	stmt, err := sess.Prepare(insertIntoArtistWithPlaceholderReturningID)
-
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	var rows *sql.Rows
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		args := []interface{}{
-			fmt.Sprintf("Hayao Miyazaki %d", rand.Int()),
-		}
-		if rows, err = stmt.Query(args...); err != nil {
-			b.Fatal(err)
-		}
-		rows.Close()
-	}
-}
-
-func BenchmarkSQLPreparedInsertTransactionWithArgs(b *testing.B) {
-	var err error
-	var sess db.Database
-	var tx *sql.Tx
-
-	if sess, err = Open(settings); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*sql.DB)
-
-	if tx, err = driver.Begin(); err != nil {
-		b.Fatal(err)
-	}
-
-	if _, err = tx.Exec(truncateArtist); err != nil {
-		b.Fatal(err)
-	}
-
-	stmt, err := tx.Prepare(insertIntoArtistWithPlaceholderReturningID)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	args := []interface{}{
-		"Hayao Miyazaki",
-	}
-
-	var rows *sql.Rows
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if rows, err = stmt.Query(args...); err != nil {
-			b.Fatal(err)
-		}
-		rows.Close()
-	}
-
-	if err = tx.Commit(); err != nil {
-		b.Fatal(err)
-	}
-}
-
-// BenchmarkSQLSelect benchmarks SQL SELECT queries.
-func BenchmarkSQLSelect(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*sql.DB)
-
-	var res *sql.Rows
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if res, err = driver.Query(selectFromArtistWhereName, artistN(i)); err != nil {
-			b.Fatal(err)
-		}
-		res.Close()
-	}
-}
-
-func BenchmarkDBRSelect(b *testing.B) {
-	var err error
-
-	if err := addFakeRowsAndDisconnect(); err != nil {
-		b.Fatal(err)
-	}
-
-	conn, err := dbr.Open(sqlDriver, settings.String(), nil)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	sess := conn.NewSession(nil)
-
-	defer sess.Close()
-
-	var res *sql.Rows
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if res, err = sess.Query(selectFromArtistWhereName, artistN(i)); err != nil {
-			b.Fatal(err)
-		}
-		res.Close()
-	}
-}
-
-func BenchmarkSQLPreparedSelect(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-	defer sess.Close()
-
-	driver := sess.Driver().(*sql.DB)
-
-	stmt, err := driver.Prepare(selectFromArtistWhereName)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	var res *sql.Rows
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if res, err = stmt.Query(artistN(i)); err != nil {
-			b.Fatal(err)
-		}
-		res.Close()
-	}
-}
-
-func BenchmarkDBRPreparedSelect(b *testing.B) {
-	var err error
-
-	if err := addFakeRowsAndDisconnect(); err != nil {
-		b.Fatal(err)
-	}
-
-	conn, err := dbr.Open(sqlDriver, settings.String(), nil)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	sess := conn.NewSession(nil)
-
-	stmt, err := sess.Prepare(selectFromArtistWhereName)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	var res *sql.Rows
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if res, err = stmt.Query(artistN(i)); err != nil {
-			b.Fatal(err)
-		}
-		res.Close()
-	}
-}
-
-func BenchmarkSQLUpdate(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*sql.DB)
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err = driver.Exec(updateArtistWhereName, updatedArtistN(i), artistN(i)); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-func BenchmarkSQLPreparedUpdate(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*sql.DB)
-
-	stmt, err := driver.Prepare(updateArtistWhereName)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err = stmt.Exec(updatedArtistN(i), artistN(i)); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-func BenchmarkSQLDelete(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*sql.DB)
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err = driver.Exec(deleteArtistWhereName, artistN(i)); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-func BenchmarkSQLPreparedDelete(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-	defer sess.Close()
-
-	driver := sess.Driver().(*sql.DB)
-
-	stmt, err := driver.Prepare(deleteArtistWhereName)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err = stmt.Exec(artistN(i)); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
diff --git a/mongo/Makefile b/mongo/Makefile
index d72cc3ed9b12aa2171a8f2d61dd01f391d5d4e87..ea4ecd53a9b02338524a0afe652b8f52d280ac17 100644
--- a/mongo/Makefile
+++ b/mongo/Makefile
@@ -6,8 +6,6 @@ DB_NAME 		?= upperio_tests
 DB_PASSWORD ?= upperio_secret
 DB_PORT 		?= 27017
 
-BENCHTIME ?= 10s
-
 export DB_HOST
 export DB_PORT
 export DB_NAME
@@ -32,6 +30,3 @@ reset-db: require-client
 
 test: reset-db
 	go test -v
-
-bench: reset-db
-	go test -v -test.bench=. -test.benchtime=$(BENCHTIME) -benchmem
diff --git a/mongo/benchmark_test.go b/mongo/benchmark_test.go
deleted file mode 100644
index e86c3d44ed13f33b49018b88067c119ed920b103..0000000000000000000000000000000000000000
--- a/mongo/benchmark_test.go
+++ /dev/null
@@ -1,367 +0,0 @@
-package mongo
-
-import (
-	"fmt"
-	"math/rand"
-	"testing"
-
-	"gopkg.in/mgo.v2"
-	"gopkg.in/mgo.v2/bson"
-
-	"upper.io/db.v2"
-)
-
-const (
-	testRows = 1000
-)
-
-func updatedArtistN(i int) string {
-	return fmt.Sprintf("Updated Artist %d", i%testRows)
-}
-
-func artistN(i int) string {
-	return fmt.Sprintf("Artist %d", i%testRows)
-}
-
-func connectAndAddFakeRows() (db.Database, error) {
-	var err error
-	var sess db.Database
-
-	if sess, err = Open(settings); err != nil {
-		return nil, err
-	}
-
-	driver := sess.Driver().(*mgo.Session)
-
-	if err = driver.DB("").C("artist").DropCollection(); err != nil {
-		return nil, err
-	}
-
-	for i := 0; i < testRows; i++ {
-		if err = driver.DB("").C("artist").Insert(bson.M{"name": artistN(i)}); err != nil {
-			return nil, err
-		}
-	}
-
-	return sess, nil
-}
-
-func BenchmarkMgoInsert(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = Open(settings); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*mgo.Session)
-
-	if err = driver.DB("").C("artist").DropCollection(); err != nil {
-		b.Fatal(err)
-	}
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if err = driver.DB("").C("artist").Insert(bson.M{"name": "Hayao Miyazaki"}); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-// BenchmarkUpperInsert benchmarks an insertion by upper.io/db.v2.
-func BenchmarkUpperInsert(b *testing.B) {
-
-	sess, err := Open(settings)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	artist := sess.Collection("artist")
-
-	artist.Truncate()
-
-	item := struct {
-		Name string `bson:"name"`
-	}{"Hayao Miyazaki"}
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err = artist.Insert(item); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-// BenchmarkUpperInsertVariableArgs benchmarks an insertion by upper.io/db.v2
-// with variable parameters.
-func BenchmarkUpperInsertVariableArgs(b *testing.B) {
-
-	sess, err := Open(settings)
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	artist := sess.Collection("artist")
-
-	artist.Truncate()
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		item := struct {
-			Name string `bson:"name"`
-		}{fmt.Sprintf("Hayao Miyazaki %d", rand.Int())}
-		if _, err = artist.Insert(item); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-// BenchmarkMgoSelect benchmarks MongoDB find queries.
-func BenchmarkMgoSelect(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*mgo.Session)
-
-	type artistType struct {
-		Name string `bson:"name"`
-	}
-
-	var item artistType
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if err = driver.DB("").C("artist").Find(bson.M{"name": artistN(i)}).One(&item); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-// BenchmarkMgoSelect benchmarks MongoDB find queries.
-func BenchmarkMgoSelectAll(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*mgo.Session)
-
-	type artistType struct {
-		Name string `bson:"name"`
-	}
-
-	var items []artistType
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if err = driver.DB("").C("artist").Find(bson.M{"name": artistN(i)}).All(&items); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-// BenchmarkUpperFind benchmarks upper.io/db.v2's One method.
-func BenchmarkUpperFind(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	artist := sess.Collection("artist")
-
-	type artistType struct {
-		Name string `bson:"name"`
-	}
-
-	var item artistType
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		res := artist.Find(db.Cond{"name": artistN(i)})
-		if err = res.One(&item); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-// BenchmarkUpperFindAll benchmarks upper.io/db.v2's All method.
-func BenchmarkUpperFindAll(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	artist := sess.Collection("artist")
-
-	type artistType struct {
-		Name string `bson:"name"`
-	}
-
-	var items []artistType
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		res := artist.Find(db.Or(
-			db.Cond{"name": artistN(i)},
-			db.Cond{"name": artistN(i + 1)},
-			db.Cond{"name": artistN(i + 2)},
-		))
-		if err = res.All(&items); err != nil {
-			b.Fatal(err)
-		}
-		if len(items) != 3 {
-			b.Fatal("Expecting 3 results.")
-		}
-	}
-}
-
-// BenchmarkMgoUpdate benchmarks MongoDB update queries.
-func BenchmarkMgoUpdate(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*mgo.Session)
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err = driver.DB("").C("artist").UpdateAll(bson.M{"name": artistN(i)}, bson.M{"$set": bson.M{"name": updatedArtistN(i)}}); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-// BenchmarkUpperUpdate benchmarks upper.io/db.v2's Update method.
-func BenchmarkUpperUpdate(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	artist := sess.Collection("artist")
-
-	type artistType struct {
-		Name string `bson:"name"`
-	}
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		newValue := artistType{
-			Name: updatedArtistN(i),
-		}
-		res := artist.Find(db.Cond{"name": artistN(i)})
-		if err = res.Update(newValue); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-// BenchmarkMgoDelete benchmarks MongoDB delete queries.
-func BenchmarkMgoDelete(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	driver := sess.Driver().(*mgo.Session)
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if _, err = driver.DB("").C("artist").RemoveAll(bson.M{"name": artistN(i)}); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-// BenchmarkUpperDelete benchmarks
-func BenchmarkUpperDelete(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = connectAndAddFakeRows(); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	artist := sess.Collection("artist")
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		res := artist.Find(db.Cond{"name": artistN(i)})
-		if err = res.Delete(); err != nil {
-			b.Fatal(err)
-		}
-	}
-}
-
-// BenchmarkUpperGetCollection
-func BenchmarkUpperGetCollection(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = Open(settings); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		sess.Collection("artist")
-	}
-}
-
-// BenchmarkUpperC
-func BenchmarkUpperC(b *testing.B) {
-	var err error
-	var sess db.Database
-
-	if sess, err = Open(settings); err != nil {
-		b.Fatal(err)
-	}
-
-	defer sess.Close()
-
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		sess.Collection("artist")
-	}
-}
diff --git a/mysql/Makefile b/mysql/Makefile
index 55c17dabab4c3881100324dca499fd9dacc9457c..f6271efc87d8c5ce8adb1068460ec5b2f1d7ef8e 100644
--- a/mysql/Makefile
+++ b/mysql/Makefile
@@ -7,8 +7,6 @@ DB_USERNAME ?= upperio_tests
 DB_PASSWORD ?= upperio_secret
 DB_NAME     ?= upperio_tests
 
-BENCHTIME ?= 5s
-
 export DB_HOST
 export DB_NAME
 export DB_PASSWORD
@@ -37,6 +35,3 @@ reset-db: require-client
 
 test: reset-db generate
 	go test -tags generated -v -race
-
-bench: reset-db generate
-	go test -tags generated -v -test.bench=. -test.benchtime=$(BENCHTIME) -benchmem
diff --git a/mysql/benchmark_test.go b/mysql/benchmark_test.go
deleted file mode 100644
index 1558a9b7aea1f481cadeca64d49838aa345dea1a..0000000000000000000000000000000000000000
--- a/mysql/benchmark_test.go
+++ /dev/null
@@ -1,11 +0,0 @@
-//go:generate bash -c "sed s/ADAPTER/mysql/g ../internal/sqladapter/testing/adapter_benchmark.go.tpl > generated_benchmark_test.go"
-package mysql
-
-const (
-	truncateArtist                             = "TRUNCATE TABLE `artist`"
-	insertHayaoMiyazaki                        = "INSERT INTO `artist` (`name`) VALUES('Hayao Miyazaki')"
-	insertIntoArtistWithPlaceholderReturningID = "INSERT INTO `artist` (`name`) VALUES(?)"
-	selectFromArtistWhereName                  = "SELECT * FROM `artist` WHERE `name` = ?"
-	updateArtistWhereName                      = "UPDATE `artist` SET `name` = ? WHERE `name` = ?"
-	deleteArtistWhereName                      = "DELETE FROM `artis` WHERE `name` = $1"
-)
diff --git a/postgresql/Makefile b/postgresql/Makefile
index fa2e6922fc9efc292e8ba1f962234771bf6518af..ab9f9d90438370aea029c2e01e6d2f1a66bce90c 100644
--- a/postgresql/Makefile
+++ b/postgresql/Makefile
@@ -7,8 +7,6 @@ DB_USERNAME ?= upperio_tests
 DB_PASSWORD ?= upperio_secret
 DB_NAME     ?= upperio_tests
 
-BENCHTIME ?= 5s
-
 export DB_HOST
 export DB_NAME
 export DB_PASSWORD
@@ -44,6 +42,3 @@ reset-db: require-client
 
 test: reset-db generate
 	go test -tags generated -v -race
-
-bench: reset-db generate
-	go test -tags generated -v -test.bench=. -test.benchtime=$(BENCHTIME) -benchmem
diff --git a/postgresql/benchmark_test.go b/postgresql/benchmark_test.go
deleted file mode 100644
index 62a713d2cfa1980ff89a952f046ac7561d7104c5..0000000000000000000000000000000000000000
--- a/postgresql/benchmark_test.go
+++ /dev/null
@@ -1,11 +0,0 @@
-//go:generate bash -c "sed s/ADAPTER/postgresql/g ../internal/sqladapter/testing/adapter_benchmark.go.tpl > generated_benchmark_test.go"
-package postgresql
-
-const (
-	truncateArtist                             = `TRUNCATE TABLE "artist" RESTART IDENTITY`
-	insertHayaoMiyazaki                        = `INSERT INTO "artist" ("name") VALUES('Hayao Miyazaki') RETURNING "id"`
-	insertIntoArtistWithPlaceholderReturningID = `INSERT INTO "artist" ("name") VALUES($1) RETURNING "id"`
-	selectFromArtistWhereName                  = `SELECT * FROM "artist" WHERE "name" = $1`
-	updateArtistWhereName                      = `UPDATE "artist" SET "name" = $1 WHERE "name" = $2`
-	deleteArtistWhereName                      = `DELETE FROM "artist" WHERE "name" = $1`
-)
diff --git a/ql/Makefile b/ql/Makefile
index 25870bbd69d01cb43a68811127f48e4acff10955..892697d85ccb19afcc8e197d34132ae83432d1b6 100644
--- a/ql/Makefile
+++ b/ql/Makefile
@@ -2,8 +2,6 @@ SHELL := bash
 
 DB_NAME ?= ql-test.db
 
-BENCHTIME ?= 5s
-
 export DB_NAME
 
 build:
@@ -24,6 +22,3 @@ reset-db: require-client
 
 test: reset-db generate
 	go test -tags generated -v
-
-bench: reset-db generate
-	go test -tags generated -v -bench=. -benchtime=$(BENCHTIME) -benchmem -test.parallel=1 -short -cpu 1
diff --git a/sqlite/Makefile b/sqlite/Makefile
index 00945272b826a6bd345bdcaec8f7587c689d596c..84a5830580d18032f4109a7a786e7291267eb904 100644
--- a/sqlite/Makefile
+++ b/sqlite/Makefile
@@ -2,8 +2,6 @@ SHELL := bash
 
 DB_NAME ?= sqlite3-test.db
 
-BENCHTIME ?= 5s
-
 export DB_NAME
 
 build:
@@ -24,6 +22,3 @@ reset-db: require-client
 
 test: reset-db generate
 	go test -tags generated -v -race
-
-bench: reset-db generate
-	go test -tags generated -v -test.bench=. -test.benchtime=$(BENCHTIME) -benchmem
diff --git a/sqlite/benchmark_test.go b/sqlite/benchmark_test.go
deleted file mode 100644
index 497af00194ac352ecd9743bb147c80c14040bda1..0000000000000000000000000000000000000000
--- a/sqlite/benchmark_test.go
+++ /dev/null
@@ -1,11 +0,0 @@
-//go:generate bash -c "sed s/ADAPTER/sqlite/g ../internal/sqladapter/testing/adapter_benchmark.go.tpl > generated_benchmark_test.go"
-package sqlite
-
-const (
-	truncateArtist                             = `DELETE FROM "artist"`
-	insertHayaoMiyazaki                        = `INSERT INTO "artist" ("name") VALUES('Hayao Miyazaki')`
-	insertIntoArtistWithPlaceholderReturningID = `INSERT INTO "artist" ("name") VALUES(?)`
-	selectFromArtistWhereName                  = `SELECT * FROM "artist" WHERE "name" = ?`
-	updateArtistWhereName                      = `UPDATE "artist" SET "name" = ? WHERE "name" = ?`
-	deleteArtistWhereName                      = `DELETE FROM "artist" WHERE "name" = ?`
-)