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 {