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 2015/05/21 13:45:37 UTC

svn commit: r1680831 - in /jackrabbit/oak/branches/1.2/oak-core/src: main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java test/resources/org/apache/jackrabbit/oak/query/xpath.txt

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], *