diff --git a/model/labels/regexp.go b/model/labels/regexp.go index de4cfc3b1c..e6909dbeac 100644 --- a/model/labels/regexp.go +++ b/model/labels/regexp.go @@ -366,7 +366,7 @@ func optimizeAlternatingLiterals(s string) (StringMatcher, []string) { // If there are no alternates, check if the string is a literal if estimatedAlternates == 1 { if regexp.QuoteMeta(s) == s { - return &equalStringMatcher{s: s, caseSensitive: true}, nil + return &equalStringMatcher{s: s, caseSensitive: true}, []string{s} } return nil, nil } diff --git a/model/labels/regexp_test.go b/model/labels/regexp_test.go index f0e21b2d5c..a03bbd261d 100644 --- a/model/labels/regexp_test.go +++ b/model/labels/regexp_test.go @@ -342,6 +342,14 @@ func TestFindSetMatches(t *testing.T) { matches, actualCaseSensitive := findSetMatches(parsed) require.Equal(t, c.expMatches, matches) require.Equal(t, c.expCaseSensitive, actualCaseSensitive) + + if c.expCaseSensitive { + // When the regexp is case sensitive, we want to ensure that the + // set matches are maintained in the final matcher. + r, err := newFastRegexMatcherWithoutCache(c.pattern) + require.NoError(t, err) + require.Equal(t, c.expMatches, r.SetMatches()) + } }) } }