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/09 17:59:01 UTC

svn commit: r1887389 - in /jackrabbit/oak/trunk/oak-lucene/src: main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java

Author: baedke
Date: Tue Mar  9 17:59:00 2021
New Revision: 1887389

URL: http://svn.apache.org/viewvc?rev=1887389&view=rev
Log:
OAK-9373: LucenePropertyIndex#createLikeQuery() ingnores escaping

Fixed.

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.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=1887389&r1=1887388&r2=1887389&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 Tue Mar  9 17:59:00 2021
@@ -1152,8 +1152,16 @@ public class LucenePropertyIndex extends
     }
 
     private static Query createLikeQuery(String name, String first) {
-        first = first.replace('%', WildcardQuery.WILDCARD_STRING);
-        first = first.replace('_', WildcardQuery.WILDCARD_CHAR);
+        StringBuilder firstBuilder = new StringBuilder(first);
+        for (int k = 0; k < firstBuilder.length(); k++) {
+            if (firstBuilder.charAt(k) == '%' && !(k > 0 && firstBuilder.charAt(k-1) == '\\')) {
+                firstBuilder.setCharAt(k, WildcardQuery.WILDCARD_STRING);
+            }
+            if (firstBuilder.charAt(k) == '_' && !(k > 0 && firstBuilder.charAt(k-1) == '\\')) {
+                firstBuilder.setCharAt(k, WildcardQuery.WILDCARD_CHAR);
+            }
+        }
+        first = firstBuilder.toString();
 
         int indexOfWS = first.indexOf(WildcardQuery.WILDCARD_STRING);
         int indexOfWC = first.indexOf(WildcardQuery.WILDCARD_CHAR);

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java?rev=1887389&r1=1887388&r2=1887389&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java Tue Mar  9 17:59:00 2021
@@ -1256,7 +1256,6 @@ public class LucenePropertyIndexTest ext
     }
 
     @Test
-    @Ignore("OAK-9373")
     public void likeQueriesWithEscapedChars() throws Exception {
         Tree idx = createIndex("test1", of("propa", "propb"));
         idx.addChild(PROP_NODE).addChild("propa");