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