Author: thomasm
Date: Thu May 21 11:45:36 2015
New Revision: 1680831
URL: http://svn.apache.org/r1680831
Log:
OAK-2889 Ignore "order by jcr:score desc" in the query engine (for "union"
queries)
Modified:
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
jackrabbit/oak/branches/1.2/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
Modified:
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java?rev=1680831&r1=1680830&r2=1680831&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
(original)
+++
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
Thu May 21 11:45:36 2015
@@ -51,6 +51,7 @@ public class Statement {
String xpathQuery;
public Statement optimize() {
+ ignoreOrderByScoreDesc();
if (explain || measure) {
return this;
}
@@ -183,6 +184,23 @@ public class Statement {
appendXPathAsComment(buff, xpathQuery);
return buff.toString();
}
+
+ private void ignoreOrderByScoreDesc() {
+ if (orderList.size() != 1) {
+ return;
+ }
+ Order order = orderList.get(0);
+ if (!order.descending) {
+ return;
+ }
+ if (!order.expr.toString().equals("[jcr:score]")) {
+ return;
+ }
+ // so we have just one expression,
+ // and it is "order by @jcr:score desc"
+ // this we can remove
+ orderList.remove(0);
+ }
public void setExplain(boolean explain) {
this.explain = explain;
Modified:
jackrabbit/oak/branches/1.2/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt?rev=1680831&r1=1680830&r2=1680831&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.2/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
(original)
+++
jackrabbit/oak/branches/1.2/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
Thu May 21 11:45:36 2015
@@ -24,6 +24,30 @@
# * new tests are typically be added on top, after the syntax docs
# * use ascii character only
+# order by @jcr:score
+xpath2sql /jcr:root/content//*[jcr:contains(., 'x')] order by @jcr:score
descending
+select [jcr:path], [jcr:score], *
+ from [nt:base] as a
+ where contains(*, 'x')
+ and isdescendantnode(a, '/content')
+ /* xpath ... */
+
+xpath2sql /jcr:root/content//*[jcr:contains(., 'x')] order by @jcr:score
ascending
+select [jcr:path], [jcr:score], *
+ from [nt:base] as a
+ where contains(*, 'x')
+ and isdescendantnode(a, '/content')
+ order by [jcr:score]
+ /* xpath ... */
+
+xpath2sql /jcr:root/content//*[jcr:contains(., 'x')] order by @title
+select [jcr:path], [jcr:score], *
+ from [nt:base] as a
+ where contains(*, 'x')
+ and isdescendantnode(a, '/content')
+ order by [title]
+ /* xpath ... */
+
# "or" problem
xpath2sql /jcr:root/content//*[(@i = '1' or @i = '2') or (@t = 'a' or @t =
'b')]
select [jcr:path], [jcr:score], *