[maven-release-plugin]  copy for tag jackrabbit-oak-1.6.16

git-svn-id: https://svn.apache.org/repos/asf/jackrabbit/oak/tags/jackrabbit-oak-1.6.16@1851108 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/oak-doc/pom.xml b/oak-doc/pom.xml
index e1a4fdc..3f6ba15 100644
--- a/oak-doc/pom.xml
+++ b/oak-doc/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.jackrabbit</groupId>
     <artifactId>oak-parent</artifactId>
-    <version>1.6-SNAPSHOT</version>
+    <version>1.6.16-SNAPSHOT</version>
     <relativePath>../oak-parent/pom.xml</relativePath>
   </parent>
 
diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java
index 98d6f42..51eb826 100644
--- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java
+++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java
@@ -28,6 +28,7 @@
 import org.apache.jackrabbit.oak.plugins.index.lucene.IndexDefinition.SecureFacetConfiguration;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.lucene.facet.FacetResult;
 import org.apache.lucene.facet.Facets;
 import org.apache.lucene.facet.FacetsCollector;
 import org.apache.lucene.facet.FacetsConfig;
@@ -92,7 +93,7 @@
                 }
             }
             if (facetsMap.size() > 0) {
-                facets = new MultiFacets(facetsMap);
+                facets = new MultiFacets(facetsMap, NULL_FACETS);
             }
 
         }
@@ -103,4 +104,21 @@
     public static String parseFacetField(String columnName) {
         return columnName.substring(QueryImpl.REP_FACET.length() + 1, columnName.length() - 1);
     }
+
+    private static final Facets NULL_FACETS = new Facets() {
+        @Override
+        public FacetResult getTopChildren(int topN, String dim, String... path) {
+            return null;
+        }
+
+        @Override
+        public Number getSpecificValue(String dim, String... path) {
+            return null;
+        }
+
+        @Override
+        public List<FacetResult> getAllDims(int topN) {
+            return null;
+        }
+    };
 }
diff --git a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java
index 263ed06..6d956fc 100644
--- a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java
+++ b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java
@@ -615,6 +615,41 @@
         assertFalse(rows.hasNext());
     }
 
+    // OAK-7975
+    public void testFacetWithNoIndexedValues() throws Exception {
+        Node content = testRootNode.addNode("absentDimFacets");
+
+        content.addNode("bar").setProperty("text", "lorem ipsum");
+
+        superuser.save();
+
+        String query;
+        FacetResult facetResult;
+        List<FacetResult.Facet> facets;
+
+        // test with single facet column which has no indexed value yet
+        query = "select [rep:facet(jc/text)] from [nt:base] where contains(*, 'ipsum')";
+
+        facetResult = new FacetResult(qm.createQuery(query, Query.JCR_SQL2).execute());
+
+        assertNotNull(facetResult);
+        assertTrue(facetResult.getDimensions().isEmpty());
+
+        // test with requesting multiple facet columns - one would get facets other won't
+        query = "select [rep:facet(text)], [rep:facet(jc/text)] from [nt:base] where contains(*, 'ipsum')";
+
+        facetResult = new FacetResult(qm.createQuery(query, Query.JCR_SQL2).execute());
+
+        assertNotNull(facetResult);
+        assertEquals(newHashSet("text"), facetResult.getDimensions());
+
+        facets = facetResult.getFacets("text");
+        assertEquals(1, facets.size());
+
+        assertEquals("lorem ipsum", facets.get(0).getLabel());
+        assertEquals(1, facets.get(0).getCount());
+    }
+
     public void testNoFacetsIfNoAccess() throws Exception {
         deny(testRootNode.addNode("test1")).setProperty("jcr:title", "test1");
         deny(testRootNode.addNode("test2")).addNode("child").setProperty("jcr:title", "test2");