mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Query History: Count using SQL, not post query (#82208)
* Count in SQL, not externally * Fix linter
This commit is contained in:
@@ -45,7 +45,7 @@ func (s QueryHistoryService) createQuery(ctx context.Context, user *user.SignedI
|
||||
// searchQueries searches for queries in query history based on provided parameters
|
||||
func (s QueryHistoryService) searchQueries(ctx context.Context, user *user.SignedInUser, query SearchInQueryHistoryQuery) (QueryHistorySearchResult, error) {
|
||||
var dtos []QueryHistoryDTO
|
||||
var allQueries []any
|
||||
var totalCount int
|
||||
|
||||
if query.To <= 0 {
|
||||
query.To = s.now().Unix()
|
||||
@@ -73,7 +73,7 @@ func (s QueryHistoryService) searchQueries(ctx context.Context, user *user.Signe
|
||||
query_history.comment,
|
||||
query_history.queries,
|
||||
`)
|
||||
writeStarredSQL(query, s.store, &dtosBuilder)
|
||||
writeStarredSQL(query, s.store, &dtosBuilder, false)
|
||||
writeFiltersSQL(query, user, s.store, &dtosBuilder)
|
||||
writeSortSQL(query, s.store, &dtosBuilder)
|
||||
writeLimitSQL(query, s.store, &dtosBuilder)
|
||||
@@ -87,9 +87,9 @@ func (s QueryHistoryService) searchQueries(ctx context.Context, user *user.Signe
|
||||
countBuilder := db.SQLBuilder{}
|
||||
countBuilder.Write(`SELECT
|
||||
`)
|
||||
writeStarredSQL(query, s.store, &countBuilder)
|
||||
writeStarredSQL(query, s.store, &countBuilder, true)
|
||||
writeFiltersSQL(query, user, s.store, &countBuilder)
|
||||
err = session.SQL(countBuilder.GetSQLString(), countBuilder.GetParams()...).Find(&allQueries)
|
||||
_, err = session.SQL(countBuilder.GetSQLString(), countBuilder.GetParams()...).Get(&totalCount)
|
||||
return err
|
||||
})
|
||||
|
||||
@@ -99,7 +99,7 @@ func (s QueryHistoryService) searchQueries(ctx context.Context, user *user.Signe
|
||||
|
||||
response := QueryHistorySearchResult{
|
||||
QueryHistory: dtos,
|
||||
TotalCount: len(allQueries),
|
||||
TotalCount: totalCount,
|
||||
Page: query.Page,
|
||||
PerPage: query.Limit,
|
||||
}
|
||||
|
||||
@@ -8,18 +8,29 @@ import (
|
||||
"github.com/grafana/grafana/pkg/services/user"
|
||||
)
|
||||
|
||||
func writeStarredSQL(query SearchInQueryHistoryQuery, sqlStore db.DB, builder *db.SQLBuilder) {
|
||||
if query.OnlyStarred {
|
||||
builder.Write(sqlStore.GetDialect().BooleanStr(true) + ` AS starred
|
||||
FROM query_history
|
||||
INNER JOIN query_history_star ON query_history_star.query_uid = query_history.uid
|
||||
`)
|
||||
} else {
|
||||
builder.Write(` CASE WHEN query_history_star.query_uid IS NULL THEN ` + sqlStore.GetDialect().BooleanStr(false) + ` ELSE ` + sqlStore.GetDialect().BooleanStr(true) + ` END AS starred
|
||||
FROM query_history
|
||||
LEFT JOIN query_history_star ON query_history_star.query_uid = query_history.uid
|
||||
`)
|
||||
func writeStarredSQL(query SearchInQueryHistoryQuery, sqlStore db.DB, builder *db.SQLBuilder, isCount bool) {
|
||||
var sql bytes.Buffer
|
||||
if isCount {
|
||||
sql.WriteString(`COUNT(`)
|
||||
}
|
||||
if query.OnlyStarred {
|
||||
sql.WriteString(sqlStore.GetDialect().BooleanStr(true))
|
||||
} else {
|
||||
sql.WriteString(`CASE WHEN query_history_star.query_uid IS NULL THEN ` + sqlStore.GetDialect().BooleanStr(false) + ` ELSE ` + sqlStore.GetDialect().BooleanStr(true) + ` END`)
|
||||
}
|
||||
if isCount {
|
||||
sql.WriteString(`)`)
|
||||
}
|
||||
sql.WriteString(` AS starred FROM query_history `)
|
||||
|
||||
if query.OnlyStarred {
|
||||
sql.WriteString(`INNER`)
|
||||
} else {
|
||||
sql.WriteString(`LEFT`)
|
||||
}
|
||||
|
||||
sql.WriteString(` JOIN query_history_star ON query_history_star.query_uid = query_history.uid `)
|
||||
builder.Write(sql.String())
|
||||
}
|
||||
|
||||
func writeFiltersSQL(query SearchInQueryHistoryQuery, user *user.SignedInUser, sqlStore db.DB, builder *db.SQLBuilder) {
|
||||
|
||||
Reference in New Issue
Block a user