You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ba...@apache.org on 2021/03/11 14:20:20 UTC
svn commit: r1887488 -
/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
Author: baedke
Date: Thu Mar 11 14:20:20 2021
New Revision: 1887488
URL: http://svn.apache.org/viewvc?rev=1887488&view=rev
Log:
OAK-9373: LucenePropertyIndex#createLikeQuery() ingnores escaping
Code simplification.
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java?rev=1887488&r1=1887487&r2=1887488&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java Thu Mar 11 14:20:20 2021
@@ -1151,23 +1151,21 @@ public class LucenePropertyIndex extends
}
}
+ private static void replaceWildcard(StringBuilder sb, int position, char oldWildcard, char newWildcard) {
+ if (sb.charAt(position) == oldWildcard) {
+ int escapeCount = 0;
+ for (int m = position - 1; m >= 0 && sb.charAt(m) == WildcardQuery.WILDCARD_ESCAPE; m--,escapeCount++);
+ if (escapeCount % 2 == 0) {
+ sb.setCharAt(position, newWildcard);
+ }
+ }
+ }
+
private static Query createLikeQuery(String name, String first) {
StringBuilder firstBuilder = new StringBuilder(first);
for (int k = 0; k < firstBuilder.length(); k++) {
- if (firstBuilder.charAt(k) == '%') {
- int escapeCount = 0;
- for (int m = k - 1; m >= 0 && firstBuilder.charAt(m) == '\\'; m--,escapeCount++);
- if (escapeCount % 2 == 0) {
- firstBuilder.setCharAt(k, WildcardQuery.WILDCARD_STRING);
- }
- }
- if (firstBuilder.charAt(k) == '_') {
- int escapeCount = 0;
- for (int m = k - 1; m >= 0 && firstBuilder.charAt(m) == '\\'; m--,escapeCount++);
- if (escapeCount % 2 == 0) {
- firstBuilder.setCharAt(k, WildcardQuery.WILDCARD_CHAR);
- }
- }
+ replaceWildcard(firstBuilder, k, '%', WildcardQuery.WILDCARD_STRING);
+ replaceWildcard(firstBuilder, k, '_', WildcardQuery.WILDCARD_CHAR);
}
first = firstBuilder.toString();