diff --git a/lib/sqlbuilder/delete.go b/lib/sqlbuilder/delete.go
index 8f24f5feaf80e892a393d57e0b97db713b03ec89..15f78746ec8761020ad8e99f5d2d5cb10e364e23 100644
--- a/lib/sqlbuilder/delete.go
+++ b/lib/sqlbuilder/delete.go
@@ -115,7 +115,7 @@ func (del *deleter) Exec() (sql.Result, error) {
 	if err != nil {
 		return nil, err
 	}
-	return del.builder.sess.StatementExec(dq.statement(), dq.arguments...)
+	return del.Builder().sess.StatementExec(dq.statement(), dq.arguments...)
 }
 
 func (del *deleter) statement() *exql.Statement {
diff --git a/lib/sqlbuilder/insert.go b/lib/sqlbuilder/insert.go
index da512533c31ad41197c4dcb14e78ccc9f7d095a2..54c5de1fd016cb415e28c746362a4b180edf0974 100644
--- a/lib/sqlbuilder/insert.go
+++ b/lib/sqlbuilder/insert.go
@@ -55,6 +55,19 @@ type inserter struct {
 	prev *inserter
 }
 
+func (ins *inserter) Builder() *sqlBuilder {
+	p := &ins
+	for {
+		if (*p).builder != nil {
+			return (*p).builder
+		}
+		if (*p).prev == nil {
+			return nil
+		}
+		p = &(*p).prev
+	}
+}
+
 func (ins *inserter) Stringer() *stringer {
 	p := &ins
 	for {
@@ -79,7 +92,7 @@ func (ins *inserter) String() string {
 }
 
 func (ins *inserter) frame(fn func(*inserterQuery) error) *inserter {
-	return &inserter{prev: ins, fn: fn, builder: ins.builder}
+	return &inserter{prev: ins, fn: fn}
 }
 
 func (ins *inserter) clone() *inserter {
@@ -112,7 +125,7 @@ func (ins *inserter) Exec() (sql.Result, error) {
 	if err != nil {
 		return nil, err
 	}
-	return ins.builder.sess.StatementExec(iq.statement(), iq.arguments...)
+	return ins.Builder().sess.StatementExec(iq.statement(), iq.arguments...)
 }
 
 func (ins *inserter) Query() (*sql.Rows, error) {
@@ -120,7 +133,7 @@ func (ins *inserter) Query() (*sql.Rows, error) {
 	if err != nil {
 		return nil, err
 	}
-	return ins.builder.sess.StatementQuery(iq.statement(), iq.arguments...)
+	return ins.Builder().sess.StatementQuery(iq.statement(), iq.arguments...)
 }
 
 func (ins *inserter) QueryRow() (*sql.Row, error) {
@@ -128,7 +141,7 @@ func (ins *inserter) QueryRow() (*sql.Row, error) {
 	if err != nil {
 		return nil, err
 	}
-	return ins.builder.sess.StatementQueryRow(iq.statement(), iq.arguments...)
+	return ins.Builder().sess.StatementQueryRow(iq.statement(), iq.arguments...)
 }
 
 func (ins *inserter) Iterator() Iterator {
diff --git a/lib/sqlbuilder/select.go b/lib/sqlbuilder/select.go
index 270e5081bdbfb05bfdc33f1dbf5a6897964df639..72d6f7425bf60dcf55b00d6ae2e84b24eed3fd04 100644
--- a/lib/sqlbuilder/select.go
+++ b/lib/sqlbuilder/select.go
@@ -113,6 +113,19 @@ type selector struct {
 	prev *selector
 }
 
+func (sel *selector) Builder() *sqlBuilder {
+	p := &sel
+	for {
+		if (*p).builder != nil {
+			return (*p).builder
+		}
+		if (*p).prev == nil {
+			return nil
+		}
+		p = &(*p).prev
+	}
+}
+
 func (sel *selector) Stringer() *stringer {
 	p := &sel
 	for {
@@ -397,7 +410,7 @@ func (sel *selector) QueryRow() (*sql.Row, error) {
 		return nil, err
 	}
 
-	return sel.builder.sess.StatementQueryRow(sq.statement(), sq.arguments()...)
+	return sel.Builder().sess.StatementQueryRow(sq.statement(), sq.arguments()...)
 }
 
 func (sel *selector) Query() (*sql.Rows, error) {
@@ -405,7 +418,7 @@ func (sel *selector) Query() (*sql.Rows, error) {
 	if err != nil {
 		return nil, err
 	}
-	return sel.builder.sess.StatementQuery(sq.statement(), sq.arguments()...)
+	return sel.Builder().sess.StatementQuery(sq.statement(), sq.arguments()...)
 }
 
 func (sel *selector) Iterator() Iterator {
@@ -414,7 +427,7 @@ func (sel *selector) Iterator() Iterator {
 		return &iterator{nil, err}
 	}
 
-	rows, err := sel.builder.sess.StatementQuery(sq.statement(), sq.arguments()...)
+	rows, err := sel.Builder().sess.StatementQuery(sq.statement(), sq.arguments()...)
 	return &iterator{rows, err}
 }
 
diff --git a/lib/sqlbuilder/update.go b/lib/sqlbuilder/update.go
index d58072a46cf9874e3295427c0f153c60cc056573..f3bb9f1799e2e0b15bb6a63e7aa732c7a4757f01 100644
--- a/lib/sqlbuilder/update.go
+++ b/lib/sqlbuilder/update.go
@@ -158,7 +158,7 @@ func (upd *updater) Exec() (sql.Result, error) {
 	if err != nil {
 		return nil, err
 	}
-	return upd.builder.sess.StatementExec(uq.statement(), uq.arguments()...)
+	return upd.Builder().sess.StatementExec(uq.statement(), uq.arguments()...)
 }
 
 func (upd *updater) Limit(limit int) Updater {