Author: tommaso
Date: Tue Dec 15 09:59:57 2015
New Revision: 1720106

URL: http://svn.apache.org/viewvc?rev=1720106&view=rev
Log:
OAK-2509 - support for facets in query engine

Added:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FacetColumnImpl.java
   (with props)
Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/package-info.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java?rev=1720106&r1=1720105&r2=1720106&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java
 Tue Dec 15 09:59:57 2015
@@ -119,6 +119,11 @@ public class QueryImpl implements Query
     public static final String REP_EXCERPT = "rep:excerpt";
 
     /**
+     * The "rep:facet" pseudo-property.
+     */
+    public static final String REP_FACET = "rep:facet";
+
+    /**
      * The "oak:explainScore" pseudo-property.
      */
     public static final String OAK_SCORE_EXPLANATION = "oak:scoreExplanation";

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java?rev=1720106&r1=1720105&r2=1720106&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
 Tue Dec 15 09:59:57 2015
@@ -856,7 +856,7 @@ public class SQL2Parser {
                 if (readIf("*")) {
                     column.propertyName = null;
                 } else if (readIf("EXCERPT")) {
-                    column.propertyName = "rep:excerpt";
+                    column.propertyName = QueryImpl.REP_EXCERPT;
                     read("(");
                     if (!readIf(")")) {
                         if (!readIf(".")) {
@@ -867,12 +867,12 @@ public class SQL2Parser {
                     readOptionalAlias(column);
                 } else {                    
                     column.propertyName = readName();
-                    if (column.propertyName.equals("rep:spellcheck")) {
+                    if (column.propertyName.equals(QueryImpl.REP_SPELLCHECK)) {
                         if (readIf("(")) {
                             read(")");
                             column.propertyName = ":spellcheck";
                         }
-                        readOptionalAlias(column);                        
+                        readOptionalAlias(column);
                     } else if (readIf(".")) {
                         column.selectorName = column.propertyName;
                         if (readIf("*")) {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java?rev=1720106&r1=1720105&r2=1720106&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java
 Tue Dec 15 09:59:57 2015
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.api.PropertyValue;
+import org.apache.jackrabbit.oak.query.QueryImpl;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -52,7 +53,11 @@ public class AstElementFactory {
     }
 
     public ColumnImpl column(String selectorName, String propertyName, String 
columnName) {
-        return new ColumnImpl(selectorName, propertyName, columnName);
+        if (propertyName.startsWith(QueryImpl.REP_FACET)) {
+            return new FacetColumnImpl(selectorName, propertyName, columnName);
+        } else {
+            return new ColumnImpl(selectorName, propertyName, columnName);
+        }
     }
 
     public ComparisonImpl comparison(DynamicOperandImpl operand1, Operator 
operator, StaticOperandImpl operand2) {

Added: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FacetColumnImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FacetColumnImpl.java?rev=1720106&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FacetColumnImpl.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FacetColumnImpl.java
 Tue Dec 15 09:59:57 2015
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.jackrabbit.oak.query.ast;
+
+import org.apache.jackrabbit.oak.api.PropertyValue;
+
+/**
+ * A facet result column expression.
+ */
+public class FacetColumnImpl extends ColumnImpl {
+    FacetColumnImpl(String selectorName, String propertyName, String 
columnName) {
+        super(selectorName, propertyName, columnName);
+    }
+
+    @Override
+    public PropertyValue currentProperty() {
+        return this.getSelector().currentOakProperty(getPropertyName());
+    }
+
+}
\ No newline at end of file

Propchange: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FacetColumnImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1720106&r1=1720105&r2=1720106&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
 Tue Dec 15 09:59:57 2015
@@ -392,6 +392,8 @@ public class SelectorImpl extends Source
                 String columnName = c.getColumnName();
                 if (columnName.equals(QueryImpl.REP_EXCERPT) || 
columnName.equals(QueryImpl.OAK_SCORE_EXPLANATION)) {
                     f.restrictProperty(columnName, Operator.NOT_EQUAL, null);
+                } else if (columnName.startsWith(QueryImpl.REP_FACET)) {
+                    f.restrictProperty(QueryImpl.REP_FACET, Operator.EQUAL, 
PropertyValues.newString(columnName));
                 }
             }
         }
@@ -668,6 +670,8 @@ public class SelectorImpl extends Source
             result = currentRow.getValue(QueryImpl.REP_SPELLCHECK);
         } else if (oakPropertyName.equals(QueryImpl.REP_SUGGEST)) {
             result = currentRow.getValue(QueryImpl.REP_SUGGEST);
+        } else if (oakPropertyName.startsWith(QueryImpl.REP_FACET)) {
+            result = currentRow.getValue(oakPropertyName);
         } else {
             result = PropertyValues.create(t.getProperty(oakPropertyName));
         }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/package-info.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/package-info.java?rev=1720106&r1=1720105&r2=1720106&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/package-info.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/package-info.java
 Tue Dec 15 09:59:57 2015
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@Version("4.1")
+@Version("4.2")
 @Export(optional = "provide:=true")
 package org.apache.jackrabbit.oak.query;
 


Reply via email to