diff --git a/internal/sqladapter/collection.go b/internal/sqladapter/collection.go
index 14d4ac8a40fec7ad4d9b22bd0b0b0368284cf015..bb21e27a9e3fe6874374ef958fbfc9b545a26df5 100644
--- a/internal/sqladapter/collection.go
+++ b/internal/sqladapter/collection.go
@@ -85,12 +85,12 @@ func (c *collection) InsertReturning(item interface{}) error {
 		if err != nil {
 			return err
 		}
-		defer tx.Close()
+		defer tx.(Database).Close()
 	}
 
 	var res db.Result
 
-	col := tx.Collection(c.p.Name())
+	col := tx.(Database).Collection(c.p.Name())
 
 	id, err := col.Insert(item)
 	if err != nil {
diff --git a/internal/sqladapter/testing/adapter.go.tpl b/internal/sqladapter/testing/adapter.go.tpl
index b0a18eb313ca632dc89139eee716dbbda8d39317..c8f05b1f31a41fa844c1174a0427c4e42eac1c64 100644
--- a/internal/sqladapter/testing/adapter.go.tpl
+++ b/internal/sqladapter/testing/adapter.go.tpl
@@ -1,3 +1,5 @@
+// +build generated
+
 package ADAPTER
 
 import (
diff --git a/internal/sqladapter/tx.go b/internal/sqladapter/tx.go
index 059c3f8e93ce5a03722fccad5a452ab91ba457ae..ee34446a746884e51c29c14eef21ab26b674b197 100644
--- a/internal/sqladapter/tx.go
+++ b/internal/sqladapter/tx.go
@@ -31,8 +31,10 @@ import (
 
 // Tx represents a database session within a transaction.
 type DatabaseTx interface {
-	Database
+	BaseDatabase
 	BaseTx
+
+	PartialDatabase
 }
 
 // BaseTx defines methods to be implemented by a transaction.
diff --git a/mysql/Makefile b/mysql/Makefile
index a948f6c6cc7cb530e3d9342600f46580ed5ae223..55c17dabab4c3881100324dca499fd9dacc9457c 100644
--- a/mysql/Makefile
+++ b/mysql/Makefile
@@ -36,7 +36,7 @@ reset-db: require-client
 	mysql -uroot -h"$(DB_HOST)" -P$(DB_PORT) <<< $$SQL
 
 test: reset-db generate
-	go test -v -race
+	go test -tags generated -v -race
 
 bench: reset-db generate
-	go test -v -test.bench=. -test.benchtime=$(BENCHTIME) -benchmem
+	go test -tags generated -v -test.bench=. -test.benchtime=$(BENCHTIME) -benchmem
diff --git a/mysql/stubs_test.go b/mysql/stubs_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..4fd997e1c7b886eee462e06e3dd489f2597a4c30
--- /dev/null
+++ b/mysql/stubs_test.go
@@ -0,0 +1,18 @@
+// +build !generated
+
+package mysql
+
+import (
+	"log"
+	"testing"
+
+	"upper.io/db.v2/lib/sqlbuilder"
+)
+
+func mustOpen() sqlbuilder.Database {
+	return nil
+}
+
+func TestMain(*testing.M) {
+	log.Fatal(`Tests use generated code and a custom database, please use "make test".`)
+}
diff --git a/postgresql/Makefile b/postgresql/Makefile
index d173c8e3ae3ece29e5b5453e0fd5006ebb3044dd..fa2e6922fc9efc292e8ba1f962234771bf6518af 100644
--- a/postgresql/Makefile
+++ b/postgresql/Makefile
@@ -43,7 +43,7 @@ reset-db: require-client
 	fi
 
 test: reset-db generate
-	go test -v -race
+	go test -tags generated -v -race
 
 bench: reset-db generate
-	go test -v -test.bench=. -test.benchtime=$(BENCHTIME) -benchmem
+	go test -tags generated -v -test.bench=. -test.benchtime=$(BENCHTIME) -benchmem
diff --git a/postgresql/stubs_test.go b/postgresql/stubs_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..c07cf41230300c889131187e7612d63143fe8763
--- /dev/null
+++ b/postgresql/stubs_test.go
@@ -0,0 +1,18 @@
+// +build !generated
+
+package postgresql
+
+import (
+	"log"
+	"testing"
+
+	"upper.io/db.v2/lib/sqlbuilder"
+)
+
+func mustOpen() sqlbuilder.Database {
+	return nil
+}
+
+func TestMain(*testing.M) {
+	log.Fatal(`Tests use generated code and a custom database, please use "make test".`)
+}
diff --git a/ql/Makefile b/ql/Makefile
index 9b3e657e2b05411123f9806d162e73c3074bd561..25870bbd69d01cb43a68811127f48e4acff10955 100644
--- a/ql/Makefile
+++ b/ql/Makefile
@@ -23,7 +23,7 @@ reset-db: require-client
 	rm -f $(DB_NAME)
 
 test: reset-db generate
-	go test -v
+	go test -tags generated -v
 
 bench: reset-db generate
-	go test -v -bench=. -benchtime=$(BENCHTIME) -benchmem -test.parallel=1 -short -cpu 1
+	go test -tags generated -v -bench=. -benchtime=$(BENCHTIME) -benchmem -test.parallel=1 -short -cpu 1
diff --git a/ql/stubs_test.go b/ql/stubs_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..58dda9591bc9c0fb7fe449effdb8e7edd8ea69d8
--- /dev/null
+++ b/ql/stubs_test.go
@@ -0,0 +1,18 @@
+// +build !generated
+
+package ql
+
+import (
+	"log"
+	"testing"
+
+	"upper.io/db.v2/lib/sqlbuilder"
+)
+
+func mustOpen() sqlbuilder.Database {
+	return nil
+}
+
+func TestMain(*testing.M) {
+	log.Fatal(`Tests use generated code and a custom database, please use "make test".`)
+}
diff --git a/ql/tx.go b/ql/tx.go
index 7bcec59f780fed9e43b05f76eb03d3b807cfb273..146417317cdaa2621725e81f430bdaba09570cd9 100644
--- a/ql/tx.go
+++ b/ql/tx.go
@@ -22,8 +22,8 @@
 package ql
 
 import (
-	"upper.io/db.v2"
 	"upper.io/db.v2/internal/sqladapter"
+	"upper.io/db.v2/lib/sqlbuilder"
 )
 
 type tx struct {
@@ -31,5 +31,5 @@ type tx struct {
 }
 
 var (
-	_ = db.Tx(&tx{})
+	_ = sqlbuilder.Tx(&tx{})
 )
diff --git a/sqlite/Makefile b/sqlite/Makefile
index a88d1bfc9dee8d4f87ec65895785c77f4d3de57c..00945272b826a6bd345bdcaec8f7587c689d596c 100644
--- a/sqlite/Makefile
+++ b/sqlite/Makefile
@@ -23,7 +23,7 @@ reset-db: require-client
 	rm -f $(DB_NAME)
 
 test: reset-db generate
-	go test -v -race
+	go test -tags generated -v -race
 
 bench: reset-db generate
-	go test -v -test.bench=. -test.benchtime=$(BENCHTIME) -benchmem
+	go test -tags generated -v -test.bench=. -test.benchtime=$(BENCHTIME) -benchmem
diff --git a/sqlite/stubs_test.go b/sqlite/stubs_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..cd1dfdbc7673d285c5fe90f9bff2f8f3ef25a1c2
--- /dev/null
+++ b/sqlite/stubs_test.go
@@ -0,0 +1,18 @@
+// +build !generated
+
+package sqlite
+
+import (
+	"log"
+	"testing"
+
+	"upper.io/db.v2/lib/sqlbuilder"
+)
+
+func mustOpen() sqlbuilder.Database {
+	return nil
+}
+
+func TestMain(*testing.M) {
+	log.Fatal(`Tests use generated code and a custom database, please use "make test".`)
+}