You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2017/02/16 13:47:26 UTC

[36/50] lucene-solr:jira/solr-9858: SOLR-8593: Ensure the SolrSort is always pushed down

SOLR-8593: Ensure the SolrSort is always pushed down


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/4ea97b08
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4ea97b08
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4ea97b08

Branch: refs/heads/jira/solr-9858
Commit: 4ea97b08de1b853b1fc2a0f306db9a202e22db67
Parents: 63eeced
Author: Joel Bernstein <jb...@apache.org>
Authored: Sat Feb 4 13:59:56 2017 -0500
Committer: Joel Bernstein <jb...@apache.org>
Committed: Wed Feb 8 13:01:31 2017 -0500

----------------------------------------------------------------------
 .../org/apache/solr/handler/sql/SolrFilter.java   |  2 +-
 .../org/apache/solr/handler/sql/SolrSort.java     |  3 ++-
 .../org/apache/solr/handler/sql/SolrTable.java    | 18 ++++++++++++------
 3 files changed, 15 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4ea97b08/solr/core/src/java/org/apache/solr/handler/sql/SolrFilter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/sql/SolrFilter.java b/solr/core/src/java/org/apache/solr/handler/sql/SolrFilter.java
index 5f30926..01d3346 100644
--- a/solr/core/src/java/org/apache/solr/handler/sql/SolrFilter.java
+++ b/solr/core/src/java/org/apache/solr/handler/sql/SolrFilter.java
@@ -129,7 +129,7 @@ class SolrFilter extends Filter implements SolrRel {
           return "-"+translateComparison(((RexCall) node).getOperands().get(0));
         case EQUALS:
           String terms = binaryTranslated.getValue().getValue2().toString().trim();
-          if(!terms.startsWith("(")){
+          if(!terms.startsWith("(") && !terms.startsWith("[") && !terms.startsWith("{")){
             terms = "\""+terms+"\"";
           }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4ea97b08/solr/core/src/java/org/apache/solr/handler/sql/SolrSort.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/sql/SolrSort.java b/solr/core/src/java/org/apache/solr/handler/sql/SolrSort.java
index 751e841..1c5274a 100644
--- a/solr/core/src/java/org/apache/solr/handler/sql/SolrSort.java
+++ b/solr/core/src/java/org/apache/solr/handler/sql/SolrSort.java
@@ -46,7 +46,7 @@ class SolrSort extends Sort implements SolrRel {
 
   @Override
   public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) {
-    return super.computeSelfCost(planner, mq).multiplyBy(0.05);
+    return planner.getCostFactory().makeZeroCost();
   }
 
   @Override
@@ -71,6 +71,7 @@ class SolrSort extends Sort implements SolrRel {
       }
     }
 
+
     if(fetch != null) {
       implementor.setLimit(((RexLiteral) fetch).getValue().toString());
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4ea97b08/solr/core/src/java/org/apache/solr/handler/sql/SolrTable.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/sql/SolrTable.java b/solr/core/src/java/org/apache/solr/handler/sql/SolrTable.java
index 14e69e6..fff6468 100644
--- a/solr/core/src/java/org/apache/solr/handler/sql/SolrTable.java
+++ b/solr/core/src/java/org/apache/solr/handler/sql/SolrTable.java
@@ -106,6 +106,8 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
       }
     }
 
+    System.out.println("####### Limit:"+limit);
+
     TupleStream tupleStream;
     String zk = properties.getProperty("zk");
     try {
@@ -456,13 +458,12 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
       tupleStream = parallelStream;
     }
 
-    //TODO: This should be done on the workers, but it won't serialize because it relies on Presto classes.
-    // Once we make this a Expressionable the problem will be solved.
-
+    //TODO: Currently we are not pushing down the having clause.
+    //      We need to push down the having clause to ensure that LIMIT does not cut off records prior to the having filter.
 
     if(orders != null && orders.size() > 0) {
-      int lim = limit == null ? 100 : Integer.parseInt(limit);
       if(!sortsEqual(buckets, sortDirection, orders)) {
+        int lim = (limit == null) ? 100 : Integer.parseInt(limit);
         StreamComparator comp = getComp(orders);
         //Rank the Tuples
         //If parallel stream is used ALL the Rolled up tuples from the workers will be ranked
@@ -471,10 +472,15 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
       } else {
         // Sort is the same as the same as the underlying stream
         // Only need to limit the result, not Rank the result
-        if(lim > -1) {
-          tupleStream = new LimitStream(tupleStream, lim);
+        if(limit != null) {
+          tupleStream = new LimitStream(tupleStream, Integer.parseInt(limit));
         }
       }
+    } else {
+      //No order by, check for limit
+      if(limit != null) {
+        tupleStream = new LimitStream(tupleStream, Integer.parseInt(limit));
+      }
     }
 
     return tupleStream;