dialect/sql: include nested builder errors on join (#1533)

* sql.Builder Join include Querier's error

* sql.Builder Join ignore nil error

Co-authored-by: Ariel Mashraki <7413593+a8m@users.noreply.github.com>

Co-authored-by: Ariel Mashraki <7413593+a8m@users.noreply.github.com>
This commit is contained in:
陈杨文
2021-05-05 22:09:55 +08:00
committed by GitHub
parent 1910b0b614
commit 6d3df1469c
2 changed files with 20 additions and 1 deletions

View File

@@ -29,6 +29,11 @@ type Querier interface {
Query() (string, []interface{})
}
// querierErr allowed propagate Querier's inner error
type querierErr interface {
Err() error
}
// ColumnBuilder is a builder for column definition in table creation.
type ColumnBuilder struct {
Builder
@@ -2091,6 +2096,7 @@ func (s *Selector) Query() (string, []interface{}) {
b.WriteString(strconv.Itoa(*s.offset))
}
s.total = b.total
s.AddError(b.Err())
return b.String(), b.args
}
@@ -2326,7 +2332,10 @@ func (b *Builder) Reset() *Builder {
// AddError appends an error to the builder errors.
func (b *Builder) AddError(err error) *Builder {
b.errs = append(b.errs, err)
// allowed nil error make build process easier
if err != nil {
b.errs = append(b.errs, err)
}
return b
}
@@ -2488,6 +2497,11 @@ func (b *Builder) join(qs []Querier, sep string) *Builder {
b.WriteString(query)
b.args = append(b.args, args...)
b.total += len(args)
if qe, ok := q.(querierErr); ok {
if err := qe.Err(); err != nil {
b.AddError(err)
}
}
}
return b
}