Author: thomasm
Date: Fri Jan 6 09:49:12 2017
New Revision: 1777551
URL: http://svn.apache.org/viewvc?rev=1777551&view=rev
Log:
OAK-5413 XPath: "union" combined with "or" is not converted correctly
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java?rev=1777551&r1=1777550&r2=1777551&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
Fri Jan 6 09:49:12 2017
@@ -284,6 +284,17 @@ public class Statement {
}
@Override
+ public Statement optimize() {
+ Statement s1b = s1.optimize();
+ Statement s2b = s2.optimize();
+ if (s1 == s1b && s2 == s2b) {
+ // no change
+ return this;
+ }
+ return new UnionStatement(s1b, s2b);
+ }
+
+ @Override
public String toString() {
StringBuilder buff = new StringBuilder();
// explain | measure ...
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java?rev=1777551&r1=1777550&r2=1777551&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java
Fri Jan 6 09:49:12 2017
@@ -105,6 +105,18 @@ public class XPathTest {
@Test
public void union() throws ParseException {
+ verify("(//*[@a=1 or @b=1] | //*[@c=1])",
+ "select [jcr:path], [jcr:score], * " +
+ "from [nt:base] as a " +
+ "where [a] = 1 " +
+ "union select [jcr:path], [jcr:score], * " +
+ "from [nt:base] as a " +
+ "where [b] = 1 " +
+ "/* xpath: //*[@a=1 or @b=1] */ " +
+ "union select [jcr:path], [jcr:score], * " +
+ "from [nt:base] as a " +
+ "where [c] = 1 " +
+ "/* xpath: //*[@c=1] */");
verify("//(a|(b|c))",
"select [jcr:path], [jcr:score], * " +
"from [nt:base] as a " +