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 2019/03/28 14:58:26 UTC
svn commit: r1856481 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
Author: thomasm
Date: Thu Mar 28 14:58:26 2019
New Revision: 1856481
URL: http://svn.apache.org/viewvc?rev=1856481&view=rev
Log:
OAK-7731 Order by jcr:score descending is not always ignored
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.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=1856481&r1=1856480&r2=1856481&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 Thu Mar 28 14:58:26 2019
@@ -33,6 +33,7 @@ public class Statement {
private static final UnsupportedOperationException TOO_MANY_UNION =
new UnsupportedOperationException("Too many union queries");
private final static int MAX_UNION = Integer.getInteger("oak.xpathMaxUnion", 1000);
+ private final static boolean KEEP_UNION_ORDER = Boolean.getBoolean("oak.xpath.keepUnionOrder");
boolean explain;
boolean measure;
@@ -59,7 +60,7 @@ public class Statement {
QueryOptions queryOptions;
public Statement optimize() {
- ignoreOrderByScoreDesc();
+ ignoreOrderByScoreDesc(orderList);
if (where == null) {
return this;
}
@@ -232,7 +233,12 @@ public class Statement {
return buff.toString();
}
- private void ignoreOrderByScoreDesc() {
+ /**
+ * Remove "[jcr:score] descending" from the list if this is the only element.
+ *
+ * @param orderList - the list (modified in-place)
+ */
+ private static void ignoreOrderByScoreDesc(ArrayList<Order> orderList) {
if (orderList.size() != 1) {
return;
}
@@ -295,6 +301,9 @@ public class Statement {
@Override
public Statement optimize() {
+ if (!KEEP_UNION_ORDER) {
+ ignoreOrderByScoreDesc(orderList);
+ }
Statement s1b = s1.optimize();
Statement s2b = s2.optimize();
if (s1 == s1b && s2 == s2b) {