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();