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