Author: chetanm
Date: Tue Oct  3 05:11:23 2017
New Revision: 1810652

URL: http://svn.apache.org/viewvc?rev=1810652&view=rev
Log:
OAK-6535 - Synchronous Lucene Property Indexes

Add plan support

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/property/SynchronousPropertyIndexTest.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=1810652&r1=1810651&r2=1810652&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 Oct  3 05:11:23 2017
@@ -286,12 +286,29 @@ public class LucenePropertyIndex impleme
             if (ft != null) {
                 sb.append(" ft:(").append(ft).append(")");
             }
+            addSyncIndexPlan(plan, sb);
             return sb.toString();
         } finally {
             index.release();
         }
     }
 
+    private static void addSyncIndexPlan(IndexPlan plan, StringBuilder sb) {
+        PlanResult pr = getPlanResult(plan);
+        if (pr.hasPropertyIndexResult()) {
+            PropertyIndexResult pres = pr.getPropertyIndexResult();
+            sb.append(" sync:(")
+              .append(pres.propertyName);
+
+            if (!pres.propertyName.equals(pres.pr.propertyName)) {
+               sb.append("[").append(pres.pr.propertyName).append("]");
+            }
+
+            sb.append(" ").append(pres.pr);
+            sb.append(")");
+        }
+    }
+
     @Override
     public Cursor query(final Filter filter, final NodeState root) {
         throw new UnsupportedOperationException("Not supported as implementing 
AdvancedQueryIndex");

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/SynchronousPropertyIndexTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/SynchronousPropertyIndexTest.java?rev=1810652&r1=1810651&r2=1810652&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/SynchronousPropertyIndexTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/SynchronousPropertyIndexTest.java
 Tue Oct  3 05:11:23 2017
@@ -72,8 +72,10 @@ import static java.util.Collections.sing
 import static org.apache.jackrabbit.oak.api.CommitFailedException.CONSTRAINT;
 import static org.apache.jackrabbit.oak.commons.PathUtils.concat;
 import static 
org.apache.jackrabbit.oak.spi.mount.Mounts.defaultMountInfoProvider;
+import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
 
@@ -256,6 +258,20 @@ public class SynchronousPropertyIndexTes
         }
     }
 
+    @Test
+    public void queryPlan() throws Exception{
+        defnb.async("async", "nrt");
+        defnb.indexRule("nt:base").property("foo").sync();
+
+        addIndex(indexPath, defnb);
+        root.commit();
+
+        assertThat(explain("select * from [nt:base] where [jcr:content/foo] = 
'bar'"),
+                containsString("sync:(foo[jcr:content/foo] bar)"));
+        assertThat(explain("select * from [nt:base] where [foo] = 'bar'"),
+                containsString("sync:(foo bar)"));
+    }
+
     private void runAsyncIndex() {
         AsyncIndexUpdate async = (AsyncIndexUpdate) 
WhiteboardUtils.getService(wb,
                 Runnable.class, input -> input instanceof AsyncIndexUpdate);
@@ -267,6 +283,11 @@ public class SynchronousPropertyIndexTes
         root.refresh();
     }
 
+    private String explain(String query){
+        String explain = "explain " + query;
+        return executeQuery(explain, "JCR-SQL2").get(0);
+    }
+
     private void addIndex(String indexPath, IndexDefinitionBuilder defnb){
         defnb.build(createPath(indexPath));
     }


Reply via email to