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 2013/06/26 17:28:34 UTC

svn commit: r1496970 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java

Author: thomasm
Date: Wed Jun 26 15:28:34 2013
New Revision: 1496970

URL: http://svn.apache.org/r1496970
Log:
OAK-882 Query: support conditions of type "property in(value1, value2)"

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java?rev=1496970&r1=1496969&r2=1496970&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java Wed Jun 26 15:28:34 2013
@@ -32,6 +32,7 @@ import org.apache.jackrabbit.oak.spi.que
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 import com.google.common.base.Charsets;
+import com.google.common.collect.Iterables;
 
 /**
  * Provides a QueryIndex that does lookups against a property index
@@ -131,6 +132,12 @@ class PropertyIndex implements QueryInde
                     && pr.first != null && pr.first.equals(pr.last)) {
                     // "[property] = $value"
                     return lookup.getCost(filter, propertyName, pr.first);
+                } else if (pr.list != null) {
+                    double cost = 0;
+                    for (PropertyValue p : pr.list) {
+                        cost += lookup.getCost(filter, propertyName, p);
+                    }
+                    return cost;
                 } else {
                     // processed as "[property] is not null"
                     return lookup.getCost(filter, propertyName, null);
@@ -159,6 +166,16 @@ class PropertyIndex implements QueryInde
                     // "[property] = $value"
                     paths = lookup.query(filter, propertyName, pr.first);
                     break;
+                } else if (pr.list != null) {
+                    for (PropertyValue pv : pr.list) {
+                        Iterable<String> p = lookup.query(filter, propertyName, pv);
+                        if (paths == null) {
+                            paths = p;
+                        } else {
+                            paths = Iterables.concat(paths, p);
+                        }
+                    }
+                    break;
                 } else {
                     // processed as "[property] is not null"
                     paths = lookup.query(filter, propertyName, null);
@@ -192,6 +209,16 @@ class PropertyIndex implements QueryInde
                 } else {
                     buff.append(' ').append(propertyName);
                 }
+            } else if (pr.list != null) {
+                buff.append(' ').append(propertyName).append(" IN(");
+                int i = 0;
+                for (PropertyValue pv : pr.list) {
+                    if (i++ > 0) {
+                        buff.append(", ");
+                    }
+                    buff.append(pv);
+                }
+                buff.append(')');
             } else {
                 notIndexed.append(' ').append(propertyName);
                 if (!pr.toString().isEmpty()) {