Author: catholicon
Date: Fri Dec 22 15:38:09 2017
New Revision: 1819048

URL: http://svn.apache.org/viewvc?rev=1819048&view=rev
Log:
OAK-7078: NullPointerException in FilteredSortedSetDocValuesFacetCounts during 
query evaluation

Modified:
    
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FilteredSortedSetDocValuesFacetCounts.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FilteredSortedSetDocValuesFacetCounts.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FilteredSortedSetDocValuesFacetCounts.java?rev=1819048&r1=1819047&r2=1819048&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FilteredSortedSetDocValuesFacetCounts.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FilteredSortedSetDocValuesFacetCounts.java
 Fri Dec 22 15:38:09 2017
@@ -60,6 +60,10 @@ class FilteredSortedSetDocValuesFacetCou
     public FacetResult getTopChildren(int topN, String dim, String... path) 
throws IOException {
         FacetResult topChildren = super.getTopChildren(topN, dim, path);
 
+        if (topChildren == null) {
+            return null;
+        }
+
         LabelAndValue[] labelAndValues = topChildren.labelValues;
 
         for (ScoreDoc scoreDoc : docs.scoreDocs) {

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java?rev=1819048&r1=1819047&r2=1819048&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java
 Fri Dec 22 15:38:09 2017
@@ -25,6 +25,8 @@ import javax.jcr.Session;
 import javax.jcr.query.Query;
 import javax.jcr.query.QueryManager;
 import javax.jcr.query.QueryResult;
+import javax.jcr.query.RowIterator;
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.jackrabbit.core.query.AbstractQueryTest;
@@ -602,6 +604,35 @@ public class FacetTest extends AbstractQ
         assertEquals(7, facets.size());
     }
 
+    // OAK-7078
+    public void testFacetsOfResultSetThatDoesntContainDim() throws Exception {
+        Node content = testRootNode.addNode("absentDimFacets");
+
+        // create a document with a simple/tags property
+        Node foo = content.addNode("foo");
+        Node fooSimple = foo.addNode("jc");
+        foo.setProperty("text", "lorem lorem");
+        fooSimple.setProperty("text", new String[]{"tag1", "tag2"});
+        // now create a document without simple/tags property
+        Node bar = content.addNode("bar");
+        bar.setProperty("text", "lorem ipsum");
+
+        superuser.save();
+
+        String query = "select [rep:facet(jc/text)] from [nt:base] where 
contains(*, 'ipsum')";
+
+        Query q = qm.createQuery(query, Query.JCR_SQL2);
+        QueryResult result = q.execute();
+        FacetResult facetResult = new FacetResult(result);
+        assertNotNull(facetResult);
+        assertTrue(facetResult.getDimensions().isEmpty());
+
+        RowIterator rows = result.getRows();
+        assertTrue(rows.hasNext());
+        assertEquals(bar.getPath(), rows.nextRow().getPath());
+        assertFalse(rows.hasNext());
+    }
+
     private void markIndexForReindex() throws RepositoryException {
         
superuser.getNode("/oak:index/luceneGlobal").setProperty(REINDEX_PROPERTY_NAME, 
true);
     }


Reply via email to