You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by mm...@apache.org on 2016/04/22 16:01:55 UTC

calcite git commit: [CALCITE-1211] Allow free use of CassandraSort for LIMIT

Repository: calcite
Updated Branches:
  refs/heads/master c07f33ae6 -> 62f9abae4


[CALCITE-1211] Allow free use of CassandraSort for LIMIT


Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/62f9abae
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/62f9abae
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/62f9abae

Branch: refs/heads/master
Commit: 62f9abae4e0c79b02d4a46b4a6aa40aebc6418f9
Parents: c07f33a
Author: Michael Mior <mm...@uwaterloo.ca>
Authored: Fri Apr 22 10:00:40 2016 -0400
Committer: Michael Mior <mm...@uwaterloo.ca>
Committed: Fri Apr 22 10:00:40 2016 -0400

----------------------------------------------------------------------
 .../apache/calcite/adapter/cassandra/CassandraSort.java   | 10 +++++++++-
 .../java/org/apache/calcite/test/CassandraAdapterIT.java  |  8 ++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/62f9abae/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSort.java
----------------------------------------------------------------------
diff --git a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSort.java b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSort.java
index 89f23ed..61d7b31 100644
--- a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSort.java
+++ b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSort.java
@@ -51,7 +51,15 @@ public class CassandraSort extends Sort implements CassandraRel {
 
   @Override public RelOptCost computeSelfCost(RelOptPlanner planner,
       RelMetadataQuery mq) {
-    return super.computeSelfCost(planner, mq).multiplyBy(0.05);
+    RelOptCost cost = super.computeSelfCost(planner, mq);
+    if (!collation.getFieldCollations().isEmpty()) {
+      return cost.multiplyBy(0.05);
+    } else if (fetch == null) {
+      return cost;
+    } else {
+      // We do this so we get the limit for free
+      return planner.getCostFactory().makeZeroCost();
+    }
   }
 
   @Override public Sort copy(RelTraitSet traitSet, RelNode input,

http://git-wip-us.apache.org/repos/asf/calcite/blob/62f9abae/cassandra/src/test/java/org/apache/calcite/test/CassandraAdapterIT.java
----------------------------------------------------------------------
diff --git a/cassandra/src/test/java/org/apache/calcite/test/CassandraAdapterIT.java b/cassandra/src/test/java/org/apache/calcite/test/CassandraAdapterIT.java
index c0e92a9..fb3e9a8 100644
--- a/cassandra/src/test/java/org/apache/calcite/test/CassandraAdapterIT.java
+++ b/cassandra/src/test/java/org/apache/calcite/test/CassandraAdapterIT.java
@@ -111,6 +111,14 @@ public class CassandraAdapterIT {
                 + "      CassandraFilter(condition=[=(CAST($0):VARCHAR(8) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\", '!PUBLIC!')])\n");
   }
 
+  @Test public void testLimit() {
+    CalciteAssert.that()
+        .enable(enabled())
+        .with(TWISSANDRA)
+        .query("select \"tweet_id\" from \"userline\" where \"username\" = '!PUBLIC!' limit 8")
+        .explainContains("CassandraSort(fetch=[8])\n");
+  }
+
   @Test public void testMaterializedView() {
     CalciteAssert.that()
         .enable(enabled())