Author: thomasm
Date: Thu Jan 18 13:13:19 2018
New Revision: 1821488

URL: http://svn.apache.org/viewvc?rev=1821488&view=rev
Log:
OAK-7131 xpath to sql2 conversion drops order by clause for some cases

Modified:
    jackrabbit/oak/branches/1.8/   (props changed)
    
jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
    
jackrabbit/oak/branches/1.8/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
    
jackrabbit/oak/branches/1.8/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt

Propchange: jackrabbit/oak/branches/1.8/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 18 13:13:19 2018
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1820660-1820661,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240,1821258,1821362,1821370,1821375
+/jackrabbit/oak/trunk:1820660-1820661,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240,1821258,1821358,1821362,1821370,1821375
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java?rev=1821488&r1=1821487&r2=1821488&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
 Thu Jan 18 13:13:19 2018
@@ -301,7 +301,13 @@ public class Statement {
                 // no change
                 return this;
             }
-            return new UnionStatement(s1b, s2b);
+            UnionStatement union = new UnionStatement(s1b, s2b);
+            union.explain = explain;
+            union.measure = measure;
+            union.orderList = orderList;
+            union.queryOptions = queryOptions;
+            union.xpathQuery = xpathQuery;
+            return union;
         }
         
         @Override

Modified: 
jackrabbit/oak/branches/1.8/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java?rev=1821488&r1=1821487&r2=1821488&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.8/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
 Thu Jan 18 13:13:19 2018
@@ -523,10 +523,22 @@ public abstract class AbstractQueryTest
     }
     
     static String formatSQL(String sql) {
+        int start = 0;
+        while (true) {
+            int index = sql.indexOf("/* ", start);
+            if (index < 0) {
+                break;
+            }
+            int end = sql.indexOf(" */", index);
+            sql = sql.substring(0, index).trim() + "\n  /* xpath ... " + 
sql.substring(end).trim();
+            sql = sql.trim();
+            start = index + 7;
+        }
+        
         // the "(?s)" is enabling the "dot all" flag
         // keep /* xpath ... */ to ensure the xpath comment
         // is really there (and at the right position)
-        sql = sql.replaceAll("(?s) /\\* .* \\*/", "\n  /* xpath ... 
*/").trim();
+//        sql = sql.replaceAll("(?s) /\\* [^\\*]* \\*/", "\n  /* xpath ... 
*/").trim();
         sql = sql.replaceAll(" union select ", "\n  union select ");
         sql = sql.replaceAll(" from ", "\n  from ");
         sql = sql.replaceAll(" where ", "\n  where ");

Modified: 
jackrabbit/oak/branches/1.8/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt?rev=1821488&r1=1821487&r2=1821488&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.8/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
 Thu Jan 18 13:13:19 2018
@@ -24,6 +24,58 @@
 # * new tests are typically be added on top, after the syntax docs
 # * use ascii character only
 
+# OAK-7131
+
+xpath2sql /jcr:root/content[@a=1 or @b=2] order by @foo option(traversal ok)
+select [jcr:path], [jcr:score], *
+  from [nt:base] as a
+  where issamenode(a, '/content')
+  and [a] = 1
+  union select [jcr:path], [jcr:score], *
+  from [nt:base] as a
+  where issamenode(a, '/content')
+  and [b] = 2
+  order by [foo] option(traversal OK)
+  /* xpath ... */
+
+xpath2sql /jcr:root/(content | dam)[@a=1 or @b=2] order by @foo
+select [jcr:path], [jcr:score], *
+  from [nt:base] as a
+  where issamenode(a, '/content')
+  and [a] = 1
+  union select [jcr:path], [jcr:score], *
+  from [nt:base] as a
+  where issamenode(a, '/content')
+  and [b] = 2
+  /* xpath ... */
+  union select [jcr:path], [jcr:score], *
+  from [nt:base] as a
+  where issamenode(a, '/dam')
+  and [a] = 1
+  union select [jcr:path], [jcr:score], *
+  from [nt:base] as a
+  where issamenode(a, '/dam')
+  and [b] = 2
+  /* xpath ... */
+  order by [foo]
+
+xpath2sql //(element(*, type1) | element(*, type2))[@a='b' or @c='d'] order by 
@foo option(traversal OK)
+select [jcr:path], [jcr:score], *
+  from [type1] as a
+  where [a] = 'b'
+  union select [jcr:path], [jcr:score], *
+  from [type1] as a
+  where [c] = 'd'
+  /* xpath ... */
+  union select [jcr:path], [jcr:score], *
+  from [type2] as a
+  where [a] = 'b'
+  union select [jcr:path], [jcr:score], *
+  from [type2] as a
+  where [c] = 'd'
+  /* xpath ... */
+  order by [foo] option(traversal OK)
+
 # OAK-6792
 
 xpath2sql /jcr:root//*/(rep:facet(jcr:data/jcr:createdBy))
@@ -46,12 +98,20 @@ explain select [jcr:path], [jcr:score],
   from [acme:Asset] as a
   where isdescendantnode(a, '/content/activities')
   /* xpath ... */
- 
+  union select [jcr:path], [jcr:score], *
+  from [acme:Asset] as a
+  where isdescendantnode(a, '/content/people')
+  /* xpath ... */
+
 xpath2sql explain measure /jcr:root/content/(activities|people)//element(*, 
acme:Asset)
 explain measure select [jcr:path], [jcr:score], *
   from [acme:Asset] as a
   where isdescendantnode(a, '/content/activities')
   /* xpath ... */
+  union select [jcr:path], [jcr:score], *
+  from [acme:Asset] as a
+  where isdescendantnode(a, '/content/people')
+  /* xpath ... */
 
 # OAK-937
 


Reply via email to