Author: thomasm
Date: Wed Aug 22 11:45:42 2012
New Revision: 1376004

URL: http://svn.apache.org/viewvc?rev=1376004&view=rev
Log:
OAK-261 Support querying on property types

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PrefixContentIndex.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PrefixContentIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PrefixContentIndex.java?rev=1376004&r1=1376003&r2=1376004&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PrefixContentIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PrefixContentIndex.java
 Wed Aug 22 11:45:42 2012
@@ -44,29 +44,36 @@ public class PrefixContentIndex implemen
 
     @Override
     public double getCost(Filter filter) {
-        Filter.PropertyRestriction restriction = 
filter.getPropertyRestriction("*");
-        if (restriction == null) {
-            return Double.MAX_VALUE;
+        if (getPropertyTypeRestriction(filter) != null) {
+            return 100;
         }
-        if (restriction.first != restriction.last) {
-            // only support equality matches (for now)
-            return Double.MAX_VALUE;
-        }
-        if (restriction.propertyType == PropertyType.UNDEFINED) {
-            return Double.MAX_VALUE;
-        }
-        String hint = CoreValueMapper.getHintForType(restriction.propertyType);
-        String prefix = hint + ":";
-        if (!prefix.equals(index.getPrefix())) {
-            // wrong prefix (wrong property type)
-            return Double.MAX_VALUE;
+        return Double.MAX_VALUE;
+    }
+
+    private Filter.PropertyRestriction getPropertyTypeRestriction(Filter 
filter) {
+        for (Filter.PropertyRestriction restriction : 
filter.getPropertyRestrictions()) {
+            if (restriction == null) {
+                continue;
+            }
+            if (restriction.first != restriction.last) {
+                // only support equality matches (for now)
+                continue;
+            }
+            if (restriction.propertyType == PropertyType.UNDEFINED) {
+                continue;
+            }
+            String hint = 
CoreValueMapper.getHintForType(restriction.propertyType);
+            String prefix = hint + ":";
+            if (prefix.equals(index.getPrefix())) {
+                return restriction;
+            }
         }
-        return 100;
+        return null;
     }
 
     @Override
     public String getPlan(Filter filter) {
-        Filter.PropertyRestriction restriction = 
filter.getPropertyRestriction("*");
+        Filter.PropertyRestriction restriction = 
getPropertyTypeRestriction(filter);
         if (restriction == null) {
             throw new IllegalArgumentException("No restriction for *");
         }
@@ -78,7 +85,7 @@ public class PrefixContentIndex implemen
 
     @Override
     public Cursor query(Filter filter, String revisionId, NodeState root) {
-        Filter.PropertyRestriction restriction = 
filter.getPropertyRestriction("*");
+        Filter.PropertyRestriction restriction = 
getPropertyTypeRestriction(filter);
         if (restriction == null) {
             throw new IllegalArgumentException("No restriction for *");
         }


Reply via email to