github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/chunk/opts.go (about) 1 package chunk 2 3 import ( 4 "strings" 5 "unicode/utf8" 6 ) 7 8 // Bitmap used by func isRegexMetaCharacter to check whether a character needs to be escaped. 9 var regexMetaCharacterBytes [16]byte 10 11 // isRegexMetaCharacter reports whether byte b needs to be escaped. 12 func isRegexMetaCharacter(b byte) bool { 13 return b < utf8.RuneSelf && regexMetaCharacterBytes[b%16]&(1<<(b/16)) != 0 14 } 15 16 func init() { 17 for _, b := range []byte(`.+*?()|[]{}^$`) { 18 regexMetaCharacterBytes[b%16] |= 1 << (b / 16) 19 } 20 } 21 22 // FindSetMatches returns list of values that can be equality matched on. 23 // copied from Prometheus querier.go, removed check for Prometheus wrapper. 24 func FindSetMatches(pattern string) []string { 25 escaped := false 26 sets := []*strings.Builder{{}} 27 for i := 0; i < len(pattern); i++ { 28 if escaped { 29 switch { 30 case isRegexMetaCharacter(pattern[i]): 31 sets[len(sets)-1].WriteByte(pattern[i]) 32 case pattern[i] == '\\': 33 sets[len(sets)-1].WriteByte('\\') 34 default: 35 return nil 36 } 37 escaped = false 38 } else { 39 switch { 40 case isRegexMetaCharacter(pattern[i]): 41 if pattern[i] == '|' { 42 sets = append(sets, &strings.Builder{}) 43 } else { 44 return nil 45 } 46 case pattern[i] == '\\': 47 escaped = true 48 default: 49 sets[len(sets)-1].WriteByte(pattern[i]) 50 } 51 } 52 } 53 matches := make([]string, 0, len(sets)) 54 for _, s := range sets { 55 if s.Len() > 0 { 56 matches = append(matches, s.String()) 57 } 58 } 59 return matches 60 }