You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by th...@apache.org on 2017/05/05 13:03:37 UTC
svn commit: r1794048 - in /jackrabbit/oak/branches/1.6: ./
oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/XPathToSQL2Converter.java
oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java
Author: thomasm
Date: Fri May 5 13:03:37 2017
New Revision: 1794048
URL: http://svn.apache.org/viewvc?rev=1794048&view=rev
Log:
OAK-6116 SQL generated from xpath with 3 or more ORed paths along with order by clause throws parseException
Modified:
jackrabbit/oak/branches/1.6/ (props changed)
jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/XPathToSQL2Converter.java
jackrabbit/oak/branches/1.6/oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java
Propchange: jackrabbit/oak/branches/1.6/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri May 5 13:03:37 2017
@@ -1,3 +1,3 @@
/jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1781068,1781075,1781248,1781386,1781846,1781907,1782000,1782029,1782196,1782447,1782476,1782770,1782945,1782966,1782973,1782990,1783061,1783066,1783089,1783104-1783105,1783110,1783619,1783720,1783731,1783733,1783738,1783742,1783773,1783855,1783891,1784023,1784130,1784162,1784251,1784401,1784551,1784574,1784689,1785095,1785108,1785283,1785838,1785919,1785946,1787074,1787217,1788378,1788387-1788389,1790382,1792463,1792742,1793088,1793618,1793627,1793644
+/jackrabbit/oak/trunk:1781068,1781075,1781248,1781386,1781846,1781907,1782000,1782029,1782196,1782447,1782476,1782770,1782945,1782966,1782973,1782990,1783061,1783066,1783089,1783104-1783105,1783110,1783619,1783720,1783731,1783733,1783738,1783742,1783773,1783855,1783891,1784023,1784130,1784162,1784251,1784401,1784551,1784574,1784689,1785095,1785108,1785283,1785838,1785919,1785946,1787074,1787217,1788378,1788387-1788389,1790382,1792463,1792742,1792746,1793088,1793618,1793627,1793644
/jackrabbit/trunk:1345480
Modified: jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/XPathToSQL2Converter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/XPathToSQL2Converter.java?rev=1794048&r1=1794047&r2=1794048&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/XPathToSQL2Converter.java (original)
+++ jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/XPathToSQL2Converter.java Fri May 5 13:03:37 2017
@@ -1113,24 +1113,28 @@ public class XPathToSQL2Converter {
parts.add(or);
String end = partList.substring(parseIndex);
Statement result = null;
+ ArrayList<Order> orderList = null;
+ QueryOptions queryOptions = null;
for(String p : parts) {
String q = begin + p + end;
converter = new XPathToSQL2Converter();
Statement stat = converter.convertToStatement(q);
+ orderList = stat.orderList;
+ queryOptions = stat.queryOptions;
+ // reset fields that are used in the union,
+ // but no longer in the individual statements
+ // (can not use clear, because it is shared)
+ stat.orderList = new ArrayList<Order>();
+ stat.queryOptions = new QueryOptions();
if (result == null) {
result = stat;
} else {
UnionStatement union = new UnionStatement(result, stat);
- union.orderList = stat.orderList;
- union.queryOptions = stat.queryOptions;
result = union;
}
- // reset fields that are used in the union,
- // but no longer in the individual statements
- // (can not use clear, because it is shared)
- stat.orderList = new ArrayList<Order>();
- stat.queryOptions = new QueryOptions();
}
+ result.orderList = orderList;
+ result.queryOptions = queryOptions;
return result;
}
Modified: jackrabbit/oak/branches/1.6/oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.6/oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java?rev=1794048&r1=1794047&r2=1794048&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.6/oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java (original)
+++ jackrabbit/oak/branches/1.6/oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java Fri May 5 13:03:37 2017
@@ -36,6 +36,35 @@ public class XPathTest {
@Test
public void queryOptions() throws ParseException {
+ verify("(/jcr:root/a//* | /jcr:root/b//*) order by @jcr:score",
+ "select [jcr:path], [jcr:score], * " +
+ "from [nt:base] as a " +
+ "where isdescendantnode(a, '/a') " +
+ "/* xpath: /jcr:root/a//* \n" +
+ "order by @jcr:score */ " +
+ "union select [jcr:path], [jcr:score], * " +
+ "from [nt:base] as a " +
+ "where isdescendantnode(a, '/b') " +
+ "/* xpath: /jcr:root/b//* " +
+ "order by @jcr:score */ " +
+ "order by [jcr:score]");
+ verify("(/jcr:root/a//* | /jcr:root/b//* | /jcr:root/c//*) order by @jcr:score",
+ "select [jcr:path], [jcr:score], * " +
+ "from [nt:base] as a " +
+ "where isdescendantnode(a, '/a') " +
+ "/* xpath: /jcr:root/a//* \n" +
+ "order by @jcr:score */ " +
+ "union select [jcr:path], [jcr:score], * " +
+ "from [nt:base] as a " +
+ "where isdescendantnode(a, '/b') " +
+ "/* xpath: /jcr:root/b//* \n" +
+ "order by @jcr:score */ " +
+ "union select [jcr:path], [jcr:score], * " +
+ "from [nt:base] as a " +
+ "where isdescendantnode(a, '/c') " +
+ "/* xpath: /jcr:root/c//* " +
+ "order by @jcr:score */ " +
+ "order by [jcr:score]");
verify("//(element(*, nt:address))",
"select [jcr:path], [jcr:score], * " +
"from [nt:address] as a " +
@@ -261,7 +290,7 @@ public class XPathTest {
}
static String formatSQL(String sql) {
- sql = sql.replace("\n", " ");
+ sql = sql.replace('\n', ' ');
sql = sql.replaceAll(" from ", "\nfrom ");
sql = sql.replaceAll(" where ", "\nwhere ");
sql = sql.replaceAll(" and ", "\nand ");