You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by th...@apache.org on 2016/06/14 09:10:43 UTC

svn commit: r1748364 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ oak-core/src/test/resources/org/apache/jackrabbit/oak/query/ oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/

Author: thomasm
Date: Tue Jun 14 09:10:43 2016
New Revision: 1748364

URL: http://svn.apache.org/viewvc?rev=1748364&view=rev
Log:
OAK-3574 Query engine: support p=lowercase(x) and other function-based indexes (WIP)

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
    jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt
    jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java?rev=1748364&r1=1748363&r2=1748364&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java Tue Jun 14 09:10:43 2016
@@ -101,6 +101,10 @@ public class NodeLocalNameImpl extends D
     @Override
     public void restrictFunction(FilterImpl f, String functionName, Operator operator, PropertyValue v) {
         // optimizations of the type "lower(LOCALNAME(x)) = 'x'"
+        if (operator == Operator.NOT_EQUAL) {
+            // not supported
+            return;
+        }
         if (v == null) {
             return;
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java?rev=1748364&r1=1748363&r2=1748364&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java Tue Jun 14 09:10:43 2016
@@ -104,6 +104,10 @@ public class NodeNameImpl extends Dynami
 
     @Override
     public void restrictFunction(FilterImpl f, String functionName, Operator operator, PropertyValue v) {
+        if (operator == Operator.NOT_EQUAL) {
+            // not supported
+            return;
+        }
         if (v == null) {
             return;
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java?rev=1748364&r1=1748363&r2=1748364&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java Tue Jun 14 09:10:43 2016
@@ -144,6 +144,10 @@ public class PropertyValueImpl extends D
     
     @Override
     public void restrictFunction(FilterImpl f, String functionName, Operator operator, PropertyValue v) {
+        if (operator == Operator.NOT_EQUAL) {
+            // not supported
+            return;
+        }
         if (f.getSelector().equals(selector)) {
             String pn = normalizePropertyName(propertyName);
             String restrictionName = QueryConstants.FUNCTION_RESTRICTION_PREFIX +

Modified: jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt?rev=1748364&r1=1748363&r2=1748364&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt Tue Jun 14 09:10:43 2016
@@ -24,6 +24,10 @@
 # * new tests are typically be added on top, after the syntax docs
 # * use ascii character only
 
+explain select [jcr:path], [jcr:score], * from [nt:base] as a where lower([test]) <> 'lower'
+[nt:base] as [a] /* traverse "*"
+  where lower([a].[test]) <> 'lower' */
+
 explain select * from [nt:base] where [jcr:uuid] <> '1'
 [nt:base] as [nt:base] /* property uuid IS NOT NULL
   where [nt:base].[jcr:uuid] <> '1' */

Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java?rev=1748364&r1=1748363&r2=1748364&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java Tue Jun 14 09:10:43 2016
@@ -539,6 +539,7 @@ public class SolrQueryIndex implements F
                 || QueryImpl.OAK_SCORE_EXPLANATION.equals(property.propertyName) // score explain is not handled at the property level
                 || QueryImpl.REP_FACET.equals(property.propertyName) // rep:facet is not handled at the property level
                 || QueryConstants.RESTRICTION_LOCAL_NAME.equals(property.propertyName)
+                || property.propertyName.startsWith(QueryConstants.FUNCTION_RESTRICTION_PREFIX)
                 || configuration.getIgnoredProperties().contains(property.propertyName));
     }