From 17354bfbe6596bfcf2567147c02455bc4084425e Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Wed, 23 Feb 2022 06:49:33 -0600 Subject: [PATCH] Search: fix PostgreSQL query (#45305) (#45780) * Search: fix PostgreSQL query * Apply suggestion from code review (cherry picked from commit 5a1d8cbea76a98c0dd0a12a6a2583f31a40cff49) Co-authored-by: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com> --- pkg/services/sqlstore/searchstore/builder.go | 26 ++++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/pkg/services/sqlstore/searchstore/builder.go b/pkg/services/sqlstore/searchstore/builder.go index 6f084b62ba7..c27451bd7e7 100644 --- a/pkg/services/sqlstore/searchstore/builder.go +++ b/pkg/services/sqlstore/searchstore/builder.go @@ -115,15 +115,31 @@ func (b *Builder) applyFilters() (ordering string) { b.params = append(b.params, whereParams...) } - if len(groups) > 0 { - b.sql.WriteString(fmt.Sprintf(" GROUP BY %s", strings.Join(groups, ", "))) - b.params = append(b.params, groupParams...) - } - if len(orders) < 1 { orders = append(orders, TitleSorter{}.OrderBy()) } + if len(groups) > 0 { + cols := make([]string, 0, len(orders)+len(groups)) + for _, o := range orders { + o := strings.TrimSuffix(o, " DESC") + o = strings.TrimSuffix(o, " ASC") + exists := false + for _, g := range groups { + if g == o { + exists = true + break + } + } + if !exists { + cols = append(cols, o) + } + } + cols = append(cols, groups...) + b.sql.WriteString(fmt.Sprintf(" GROUP BY %s", strings.Join(cols, ", "))) + b.params = append(b.params, groupParams...) + } + orderBy := fmt.Sprintf(" ORDER BY %s", strings.Join(orders, ", ")) b.sql.WriteString(orderBy)