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 " +


Reply via email to