Storage: Add support for listing resource history (#84331)
* add support for listing resource history * make watch handle custom label selectors properly * fix tests * Apply suggestions from code review Co-authored-by: Diego Augusto Molina <diegoaugustomolina@gmail.com> * properly handle special characters in json label matcher * tidy up --------- Co-authored-by: Diego Augusto Molina <diegoaugustomolina@gmail.com>
This commit is contained in:
co-authored by
Diego Augusto Molina
parent
9c7a5ed506
commit
89f3b70e17
@@ -1,6 +1,7 @@
|
||||
package sqlstash
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
|
||||
"github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
||||
@@ -71,6 +72,26 @@ func (q *selectQuery) addWhereIn(f string, vals []string) {
|
||||
}
|
||||
}
|
||||
|
||||
const sqlLikeEscape = "#"
|
||||
|
||||
var sqlLikeEscapeReplacer = strings.NewReplacer(
|
||||
sqlLikeEscape, sqlLikeEscape+sqlLikeEscape,
|
||||
"%", sqlLikeEscape+"%",
|
||||
"_", sqlLikeEscape+"_",
|
||||
)
|
||||
|
||||
func escapeJSONStringSQLLike(s string) string {
|
||||
b, _ := json.Marshal(s)
|
||||
return sqlLikeEscapeReplacer.Replace(string(b))
|
||||
}
|
||||
|
||||
func (q *selectQuery) addWhereJsonContainsKV(field string, key string, value string) {
|
||||
escapedKey := escapeJSONStringSQLLike(key)
|
||||
escapedValue := escapeJSONStringSQLLike(value)
|
||||
q.where = append(q.where, q.dialect.Quote(field)+" LIKE ? ESCAPE ?")
|
||||
q.args = append(q.args, "{%"+escapedKey+":"+escapedValue+"%}", sqlLikeEscape)
|
||||
}
|
||||
|
||||
func (q *selectQuery) addOrderBy(field string, direction Direction) {
|
||||
q.orderBy = append(q.orderBy, field)
|
||||
q.direction = append(q.direction, direction)
|
||||
|
||||
Reference in New Issue
Block a user