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 ch...@apache.org on 2017/08/28 05:22:00 UTC

svn commit: r1806402 - /jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java

Author: chetanm
Date: Mon Aug 28 05:21:59 2017
New Revision: 1806402

URL: http://svn.apache.org/viewvc?rev=1806402&view=rev
Log:
OAK-6574 - Lucene index: include/exclude key pattern list

Refactor valuePattern logic to a method

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java?rev=1806402&r1=1806401&r2=1806402&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java Mon Aug 28 05:21:59 2017
@@ -201,26 +201,8 @@ class IndexPlanner {
                         continue;
                     }
 
-                    if (!pd.valuePattern.matchesAll()){
-                        //So we have a valuePattern defined. So determine if
-                        //this index can return a plan based on values
-                        Set<String> values = ValuePatternUtil.getAllValues(pr);
-                        if (values == null) {
-                            // "is not null" condition, but we have a value pattern
-                            // that doesn't match everything
-                            // case of like search
-                            String prefix = ValuePatternUtil.getLongestPrefix(filter, name);
-                            if (!pd.valuePattern.matchesPrefix(prefix)) {
-                                // region match which is not fully in the pattern
-                                continue;
-                            }
-                        } else {
-                            // we have a value pattern, for example (a|b),
-                            // but we search (also) for 'c': can't match
-                            if (!pd.valuePattern.matchesAll(values)) {
-                                continue;
-                            }
-                        }
+                    if (!matchesValuePattern(pr, pd)) {
+                        continue;
                     }
 
                     //A property definition with weight == 0 is only meant to be used
@@ -292,6 +274,31 @@ class IndexPlanner {
         return null;
     }
 
+    private boolean matchesValuePattern(PropertyRestriction pr, PropertyDefinition pd) {
+        if (!pd.valuePattern.matchesAll()){
+            //So we have a valuePattern defined. So determine if
+            //this index can return a plan based on values
+            Set<String> values = ValuePatternUtil.getAllValues(pr);
+            if (values == null) {
+                // "is not null" condition, but we have a value pattern
+                // that doesn't match everything
+                // case of like search
+                String prefix = ValuePatternUtil.getLongestPrefix(filter, pr.propertyName);
+                if (!pd.valuePattern.matchesPrefix(prefix)) {
+                    // region match which is not fully in the pattern
+                    return false;
+                }
+            } else {
+                // we have a value pattern, for example (a|b),
+                // but we search (also) for 'c': can't match
+                if (!pd.valuePattern.matchesAll(values)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
     private boolean wrongIndex() {
         // REMARK: similar code is used in oak-core, PropertyIndex
         // skip index if "option(index ...)" doesn't match