summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/query_select.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/query_select.go')
-rw-r--r--vendor/github.com/uptrace/bun/query_select.go37
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),