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())