Author: thomasm
Date: Thu Feb 11 14:33:21 2016
New Revision: 1729844

URL: http://svn.apache.org/viewvc?rev=1729844&view=rev
Log:
OAK-3999 ParseException thrown for xpath query on 3 or more jcr:primaryType 
"or" conditions

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Expression.java
    
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Expression.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Expression.java?rev=1729844&r1=1729843&r2=1729844&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Expression.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Expression.java
 Thu Feb 11 14:33:21 2016
@@ -379,19 +379,15 @@ abstract class Expression {
                 in = new InCondition(in.getLeft(), in.list);
                 return in;
             }
+            Expression le = left.getLeft();
             if (XPathToSQL2Converter.NODETYPE_UNION) {
-                if (left instanceof Condition) {
-                    Condition c = (Condition) left;
-                    if (c.left instanceof Property && 
-                        "jcr:primaryType".equals(((Property) c.left).name)) {
-                        return this;
-                    }
+                if (commonLeft.endsWith("[jcr:primaryType]")) {
+                    return this;
                 }
             }
             ArrayList<Expression> list = new ArrayList<Expression>();
             list.addAll(left.getRight());
             list.addAll(right.getRight());
-            Expression le = left.getLeft();
             InCondition in = new InCondition(le, list);
             return in;
         }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt?rev=1729844&r1=1729843&r2=1729844&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
 Thu Feb 11 14:33:21 2016
@@ -105,6 +105,18 @@ select [jcr:path], [jcr:score], *
   /* xpath ... */
 
 # single primary type
+xpath2sql //*[(@jcr:primaryType = 'a' or @jcr:primaryType = 'b' or 
@jcr:primaryType = 'c')]
+select [jcr:path], [jcr:score], *
+  from [a] as a
+  where [jcr:primaryType] = 'a'
+  union select [jcr:path], [jcr:score], *
+  from [b] as a
+  where [jcr:primaryType] = 'b'
+  union select [jcr:path], [jcr:score], *
+  from [c] as a
+  where [jcr:primaryType] = 'c'
+  /* xpath ... */
+
 xpath2sql /jcr:root/content//*[jcr:contains(., 'abc') and @jcr:primaryType = 
'page']
 select [jcr:path], [jcr:score], *
   from [page] as a


Reply via email to