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