1
0
mirror of https://github.com/rancher/steve.git synced 2025-06-28 15:57:24 +00:00
steve/pkg/stores/queryhelper/safesplit.go
Eric Promislow c1805696ce
SQLite backed cache: Support sorting mgmt clusters on value in a specific condition (#447)
* Replace primary/secondary sort fields with an array of sort directives.

* Allow more than 2 sort-params in a search query.

* Add a virtual 'status.ready' field to clusters.

* Rename status.ready -> status.connected

* Set virtual field 'spec.internal' <- spec.displayName == 'local'

* Need to declare all virtual fields to index.

* Ready clusters have condition[type==Ready && status=True]

* Update the README to reflect generalized sorting.

* Bump lasso to get revised sort directives.

* Review-driven changes, mostly comments and drop unneeded code.

* Add unit tests to verify sort-order stringification.

* Ignore empty-string sort components.

* Fix a rebase mishap.

* Drop unneeded commented-out code.

* Clusters have a 'spec.internal' field, no need to synthesize one.

* Added a note on square-brackets for label references.

This should be added to the README for filter queries in the PR for 46333.

* Bump to latest sqlcache-free lasso
2025-01-27 11:55:09 -08:00

17 lines
584 B
Go

package queryhelper
import "strings"
// SafeSplit breaks a regular "a.b.c" path to the string slice ["a", "b", "c"]
// but if the final part is in square brackets, like "metadata.labels[cattleprod.io/moo]",
// it returns ["metadata", "labels", "cattleprod.io/moo"]
func SafeSplit(fieldPath string) []string {
squareBracketLocation := strings.Index(fieldPath, "[")
if squareBracketLocation == -1 {
return strings.Split(fieldPath, ".")
}
s := strings.Split(fieldPath[0:squareBracketLocation], ".")
s = append(s, fieldPath[squareBracketLocation+1:len(fieldPath)-1])
return s
}