in spectator-api/src/main/java/com/netflix/spectator/impl/matcher/PatternUtils.java [536:574]
private static boolean toSqlPattern(StringBuilder builder, Matcher matcher) {
if (matcher instanceof TrueMatcher) {
builder.append("%");
return true;
} else if (matcher instanceof AnyMatcher) {
builder.append('_');
return true;
} else if (matcher instanceof StartMatcher || matcher instanceof EndMatcher) {
return true;
} else if (matcher instanceof ZeroOrMoreMatcher) {
ZeroOrMoreMatcher m = matcher.as();
if (m.repeated() == AnyMatcher.INSTANCE) {
builder.append('%');
return toSqlPattern(builder, m.next());
}
} else if (matcher instanceof SeqMatcher) {
SeqMatcher sm = matcher.as();
for (Matcher m : sm.matchers()) {
if (!toSqlPattern(builder, m)) {
return false;
}
}
return true;
} else if (matcher instanceof CharSeqMatcher) {
CharSeqMatcher m = matcher.as();
builder.append(sqlEscape(m.pattern()));
return true;
} else if (matcher instanceof IndexOfMatcher) {
IndexOfMatcher m = matcher.as();
builder.append('%').append(sqlEscape(m.pattern()));
return toSqlPattern(builder, m.next());
} else if (matcher instanceof StartsWithMatcher) {
StartsWithMatcher m = matcher.as();
builder.append(sqlEscape(m.pattern()));
return true;
}
return false;
}