diff options
Diffstat (limited to 'vendor/github.com/uptrace/bun/query_select.go')
| -rw-r--r-- | vendor/github.com/uptrace/bun/query_select.go | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/vendor/github.com/uptrace/bun/query_select.go b/vendor/github.com/uptrace/bun/query_select.go index db7f42df1..0deb8dc05 100644 --- a/vendor/github.com/uptrace/bun/query_select.go +++ b/vendor/github.com/uptrace/bun/query_select.go @@ -979,20 +979,25 @@ func (q *SelectQuery) scanAndCountConcurrently( var mu sync.Mutex var firstErr error + // FIXME: clone should not be needed, because the query is not modified here + // and should not be implicitly modified by the Bun lib. countQuery := q.Clone() - wg.Add(1) - go func() { - defer wg.Done() - - if err := q.Scan(ctx, dest...); err != nil { - mu.Lock() - if firstErr == nil { - firstErr = err + // Don't scan results if the user explicitly set Limit(-1). + if q.limit >= 0 { + wg.Add(1) + go func() { + defer wg.Done() + + if err := q.Scan(ctx, dest...); err != nil { + mu.Lock() + if firstErr == nil { + firstErr = err + } + mu.Unlock() } - mu.Unlock() - } - }() + }() + } wg.Add(1) go func() { @@ -1016,6 +1021,7 @@ func (q *SelectQuery) scanAndCountConcurrently( func (q *SelectQuery) scanAndCountSeq(ctx context.Context, dest ...interface{}) (int, error) { var firstErr error + // Don't scan results if the user explicitly set Limit(-1). if q.limit >= 0 { firstErr = q.Scan(ctx, dest...) } @@ -1086,12 +1092,13 @@ func (q *SelectQuery) whereExists(ctx context.Context) (bool, error) { return n == 1, nil } +// String returns the generated SQL query string. The SelectQuery instance must not be +// modified during query generation to ensure multiple calls to String() return identical results. func (q *SelectQuery) String() string { buf, err := q.AppendQuery(q.db.Formatter(), nil) if err != nil { panic(err) } - return string(buf) } @@ -1120,13 +1127,17 @@ func (q *SelectQuery) Clone() *SelectQuery { } } + var tableModel TableModel + if q.tableModel != nil { + tableModel = q.tableModel.clone() + } clone := &SelectQuery{ whereBaseQuery: whereBaseQuery{ baseQuery: baseQuery{ db: q.db, table: q.table, model: q.model, - tableModel: q.tableModel, + tableModel: tableModel, with: make([]withQuery, len(q.with)), tables: cloneArgs(q.tables), columns: cloneArgs(q.columns), |
