Repository: phoenix
Updated Branches:
  refs/heads/calcite 59d05d3a2 -> 2e5a91875


Upgrade Calcite dependence to 1.3-incubating


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/2e5a9187
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/2e5a9187
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/2e5a9187

Branch: refs/heads/calcite
Commit: 2e5a91875e61c571a61f82f7268913d8acc06956
Parents: 59d05d3
Author: maryannxue <wei....@intel.com>
Authored: Thu Jun 11 16:58:30 2015 -0400
Committer: maryannxue <wei....@intel.com>
Committed: Thu Jun 11 16:58:30 2015 -0400

----------------------------------------------------------------------
 .../org/apache/phoenix/calcite/CalciteTest.java | 132 +++++++++----------
 .../calcite/rel/PhoenixAbstractAggregate.java   |  23 ++--
 ...hoenixJoinSingleValueAggregateMergeRule.java |  19 ++-
 pom.xml                                         |   4 +-
 4 files changed, 89 insertions(+), 89 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/2e5a9187/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteTest.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteTest.java 
b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteTest.java
index 2774aa1..96c3d96 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteTest.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteTest.java
@@ -435,9 +435,8 @@ public class CalciteTest extends BaseClientManagedTimeIT {
     @Test public void testAggregate() {
         start().sql("select a_string, count(entity_id) from atable group by 
a_string")
                 .explainIs("PhoenixToEnumerableConverter\n" +
-                           "  PhoenixServerAggregate(group=[{0}], 
EXPR$1=[COUNT()])\n" +
-                           "    PhoenixServerProject(A_STRING=[$2])\n" +
-                           "      PhoenixTableScan(table=[[phoenix, 
ATABLE]])\n")
+                           "  PhoenixServerAggregate(group=[{2}], 
EXPR$1=[COUNT()])\n" +
+                           "    PhoenixTableScan(table=[[phoenix, ATABLE]])\n")
                 .resultIs(new Object[][] {
                           {"a", 4L},
                           {"b", 4L},
@@ -447,9 +446,8 @@ public class CalciteTest extends BaseClientManagedTimeIT {
         start().sql("select count(entity_id), a_string from atable group by 
a_string")
                 .explainIs("PhoenixToEnumerableConverter\n" +
                            "  PhoenixClientProject(EXPR$0=[$1], 
A_STRING=[$0])\n" +
-                           "    PhoenixServerAggregate(group=[{0}], 
EXPR$0=[COUNT()])\n" +
-                           "      PhoenixServerProject(A_STRING=[$2])\n" +
-                           "        PhoenixTableScan(table=[[phoenix, 
ATABLE]])\n")
+                           "    PhoenixServerAggregate(group=[{2}], 
EXPR$0=[COUNT()])\n" +
+                           "      PhoenixTableScan(table=[[phoenix, 
ATABLE]])\n")
                 .resultIs(new Object[][] {
                           {4L, "a"},
                           {4L, "b"},
@@ -458,14 +456,13 @@ public class CalciteTest extends BaseClientManagedTimeIT {
         
         start().sql("select s.name, count(\"item_id\") from " + 
JOIN_SUPPLIER_TABLE_FULL_NAME + " s join " + JOIN_ITEM_TABLE_FULL_NAME + " i on 
s.\"supplier_id\" = i.\"supplier_id\" group by s.name")
                 .explainIs("PhoenixToEnumerableConverter\n" +
-                           "  PhoenixServerAggregate(group=[{0}], 
EXPR$1=[COUNT()])\n" +
-                           "    PhoenixPostJoinProject(NAME=[$2])\n" +
-                           "      PhoenixServerJoin(condition=[=($1, $0)], 
joinType=[inner])\n" +
-                           "        PhoenixServerProject(supplier_id=[$5])\n" +
-                           "          PhoenixTableScan(table=[[phoenix, Join, 
ItemTable]])\n" +
-                           "        PhoenixToClientConverter\n" +
-                           "          PhoenixServerProject(supplier_id=[$0], 
NAME=[$1])\n" +
-                           "            PhoenixTableScan(table=[[phoenix, 
Join, SupplierTable]])\n")
+                           "  PhoenixServerAggregate(group=[{2}], 
EXPR$1=[COUNT()])\n" +
+                           "    PhoenixServerJoin(condition=[=($1, $0)], 
joinType=[inner])\n" +
+                           "      PhoenixServerProject(supplier_id=[$5])\n" +
+                           "        PhoenixTableScan(table=[[phoenix, Join, 
ItemTable]])\n" +
+                           "      PhoenixToClientConverter\n" +
+                           "        PhoenixServerProject(supplier_id=[$0], 
NAME=[$1])\n" +
+                           "          PhoenixTableScan(table=[[phoenix, Join, 
SupplierTable]])\n")
                 .resultIs(new Object[][] {
                           {"S1", 2L},
                           {"S2", 2L},
@@ -477,9 +474,8 @@ public class CalciteTest extends BaseClientManagedTimeIT {
     @Test public void testDistinct() {
         start().sql("select distinct a_string from aTable")
                 .explainIs("PhoenixToEnumerableConverter\n" +
-                           "  PhoenixServerAggregate(group=[{0}])\n" +
-                           "    PhoenixServerProject(A_STRING=[$2])\n" +
-                           "      PhoenixTableScan(table=[[phoenix, 
ATABLE]])\n")
+                           "  PhoenixServerAggregate(group=[{2}])\n" +
+                           "    PhoenixTableScan(table=[[phoenix, ATABLE]])\n")
                 .resultIs(new Object[][]{
                           {"a"}, 
                           {"b"}, 
@@ -526,9 +522,8 @@ public class CalciteTest extends BaseClientManagedTimeIT {
                 .explainIs("PhoenixToEnumerableConverter\n" +
                            "  PhoenixClientProject(EXPR$0=[$1], 
A_STRING=[$0])\n" +
                            "    PhoenixCompactClientSort(sort0=[$1], 
sort1=[$0], dir0=[ASC], dir1=[DESC])\n" +
-                           "      PhoenixServerAggregate(group=[{0}], 
EXPR$0=[COUNT()])\n" +
-                           "        PhoenixServerProject(A_STRING=[$2])\n" +
-                           "          PhoenixTableScan(table=[[phoenix, 
ATABLE]])\n")
+                           "      PhoenixServerAggregate(group=[{2}], 
EXPR$0=[COUNT()])\n" +
+                           "        PhoenixTableScan(table=[[phoenix, 
ATABLE]])\n")
                 .resultIs(new Object[][] {
                           {1L, "c"},
                           {4L, "b"},
@@ -538,14 +533,13 @@ public class CalciteTest extends BaseClientManagedTimeIT {
         start().sql("select s.name, count(\"item_id\") from " + 
JOIN_SUPPLIER_TABLE_FULL_NAME + " s join " + JOIN_ITEM_TABLE_FULL_NAME + " i on 
s.\"supplier_id\" = i.\"supplier_id\" group by s.name order by 
count(\"item_id\"), s.name desc")
                 .explainIs("PhoenixToEnumerableConverter\n" +
                            "  PhoenixCompactClientSort(sort0=[$1], sort1=[$0], 
dir0=[ASC], dir1=[DESC])\n" +
-                           "    PhoenixServerAggregate(group=[{0}], 
EXPR$1=[COUNT()])\n" +
-                           "      PhoenixPostJoinProject(NAME=[$2])\n" +
-                           "        PhoenixServerJoin(condition=[=($1, $0)], 
joinType=[inner])\n" +
-                           "          
PhoenixServerProject(supplier_id=[$5])\n" +
-                           "            PhoenixTableScan(table=[[phoenix, 
Join, ItemTable]])\n" +
-                           "          PhoenixToClientConverter\n" +
-                           "            PhoenixServerProject(supplier_id=[$0], 
NAME=[$1])\n" +
-                           "              PhoenixTableScan(table=[[phoenix, 
Join, SupplierTable]])\n")
+                           "    PhoenixServerAggregate(group=[{2}], 
EXPR$1=[COUNT()])\n" +
+                           "      PhoenixServerJoin(condition=[=($1, $0)], 
joinType=[inner])\n" +
+                           "        PhoenixServerProject(supplier_id=[$5])\n" +
+                           "          PhoenixTableScan(table=[[phoenix, Join, 
ItemTable]])\n" +
+                           "        PhoenixToClientConverter\n" +
+                           "          PhoenixServerProject(supplier_id=[$0], 
NAME=[$1])\n" +
+                           "            PhoenixTableScan(table=[[phoenix, 
Join, SupplierTable]])\n")
                 .resultIs(new Object[][] {
                           {"S6", 1L},
                           {"S5", 1L},
@@ -607,9 +601,8 @@ public class CalciteTest extends BaseClientManagedTimeIT {
                            "  PhoenixClientProject(EXPR$0=[$1], 
A_STRING=[$0])\n" +
                            "    PhoenixLimit(fetch=[2])\n" +
                            "      PhoenixCompactClientSort(sort0=[$1], 
sort1=[$0], dir0=[ASC], dir1=[DESC])\n" +
-                           "        PhoenixServerAggregate(group=[{0}], 
EXPR$0=[COUNT()])\n" +
-                           "          PhoenixServerProject(A_STRING=[$2])\n" +
-                           "            PhoenixTableScan(table=[[phoenix, 
ATABLE]])\n")
+                           "        PhoenixServerAggregate(group=[{2}], 
EXPR$0=[COUNT()])\n" +
+                           "          PhoenixTableScan(table=[[phoenix, 
ATABLE]])\n")
                 .resultIs(new Object[][] {
                           {1L, "c"},
                           {4L, "b"}})
@@ -619,14 +612,13 @@ public class CalciteTest extends BaseClientManagedTimeIT {
                 .explainIs("PhoenixToEnumerableConverter\n" +
                            "  PhoenixLimit(fetch=[3])\n" +
                            "    PhoenixCompactClientSort(sort0=[$1], 
sort1=[$0], dir0=[ASC], dir1=[DESC])\n" +
-                           "      PhoenixServerAggregate(group=[{0}], 
EXPR$1=[COUNT()])\n" +
-                           "        PhoenixPostJoinProject(NAME=[$2])\n" +
-                           "          PhoenixServerJoin(condition=[=($1, $0)], 
joinType=[inner])\n" +
-                           "            
PhoenixServerProject(supplier_id=[$5])\n" +
-                           "              PhoenixTableScan(table=[[phoenix, 
Join, ItemTable]])\n" +
-                           "            PhoenixToClientConverter\n" +
-                           "              
PhoenixServerProject(supplier_id=[$0], NAME=[$1])\n" +
-                           "                PhoenixTableScan(table=[[phoenix, 
Join, SupplierTable]])\n")
+                           "      PhoenixServerAggregate(group=[{2}], 
EXPR$1=[COUNT()])\n" +
+                           "        PhoenixServerJoin(condition=[=($1, $0)], 
joinType=[inner])\n" +
+                           "          
PhoenixServerProject(supplier_id=[$5])\n" +
+                           "            PhoenixTableScan(table=[[phoenix, 
Join, ItemTable]])\n" +
+                           "          PhoenixToClientConverter\n" +
+                           "            PhoenixServerProject(supplier_id=[$0], 
NAME=[$1])\n" +
+                           "              PhoenixTableScan(table=[[phoenix, 
Join, SupplierTable]])\n")
                 .resultIs(new Object[][] {
                           {"S6", 1L},
                           {"S5", 1L},
@@ -670,9 +662,8 @@ public class CalciteTest extends BaseClientManagedTimeIT {
                 .explainIs("PhoenixToEnumerableConverter\n" +
                            "  PhoenixClientProject(EXPR$0=[$1], 
A_STRING=[$0])\n" +
                            "    PhoenixLimit(fetch=[2])\n" +
-                           "      PhoenixServerAggregate(group=[{0}], 
EXPR$0=[COUNT()])\n" +
-                           "        PhoenixServerProject(A_STRING=[$2])\n" +
-                           "          PhoenixTableScan(table=[[phoenix, 
ATABLE]])\n")
+                           "      PhoenixServerAggregate(group=[{2}], 
EXPR$0=[COUNT()])\n" +
+                           "        PhoenixTableScan(table=[[phoenix, 
ATABLE]])\n")
                 .resultIs(new Object[][] {
                           {4L, "a"},
                           {4L, "b"}})
@@ -681,14 +672,13 @@ public class CalciteTest extends BaseClientManagedTimeIT {
         start().sql("select s.name, count(\"item_id\") from " + 
JOIN_SUPPLIER_TABLE_FULL_NAME + " s join " + JOIN_ITEM_TABLE_FULL_NAME + " i on 
s.\"supplier_id\" = i.\"supplier_id\" group by s.name limit 3")
                 .explainIs("PhoenixToEnumerableConverter\n" +
                            "  PhoenixLimit(fetch=[3])\n" +
-                           "    PhoenixServerAggregate(group=[{0}], 
EXPR$1=[COUNT()])\n" +
-                           "      PhoenixPostJoinProject(NAME=[$2])\n" +
-                           "        PhoenixServerJoin(condition=[=($1, $0)], 
joinType=[inner])\n" +
-                           "          
PhoenixServerProject(supplier_id=[$5])\n" +
-                           "            PhoenixTableScan(table=[[phoenix, 
Join, ItemTable]])\n" +
-                           "          PhoenixToClientConverter\n" +
-                           "            PhoenixServerProject(supplier_id=[$0], 
NAME=[$1])\n" +
-                           "              PhoenixTableScan(table=[[phoenix, 
Join, SupplierTable]])\n")
+                           "    PhoenixServerAggregate(group=[{2}], 
EXPR$1=[COUNT()])\n" +
+                           "      PhoenixServerJoin(condition=[=($1, $0)], 
joinType=[inner])\n" +
+                           "        PhoenixServerProject(supplier_id=[$5])\n" +
+                           "          PhoenixTableScan(table=[[phoenix, Join, 
ItemTable]])\n" +
+                           "        PhoenixToClientConverter\n" +
+                           "          PhoenixServerProject(supplier_id=[$0], 
NAME=[$1])\n" +
+                           "            PhoenixTableScan(table=[[phoenix, 
Join, SupplierTable]])\n")
                 .resultIs(new Object[][] {
                           {"S1", 2L},
                           {"S2", 2L},
@@ -720,13 +710,11 @@ public class CalciteTest extends BaseClientManagedTimeIT {
                           "    PhoenixPostJoinProject(order_id=[$0], 
QUANTITY=[$4])\n" +
                           "      PhoenixServerJoin(condition=[AND(=($2, $7), 
=($4, $8))], joinType=[inner])\n" +
                           "        PhoenixTableScan(table=[[phoenix, Join, 
OrderTable]])\n" +
-                          "        PhoenixServerAggregate(group=[{0}], 
EXPR$0=[MAX($1)])\n" +
-                          "          PhoenixPostJoinProject(item_id0=[$7], 
QUANTITY=[$4])\n" +
-                          "            PhoenixServerJoin(condition=[=($7, 
$2)], joinType=[inner])\n" +
-                          "              PhoenixTableScan(table=[[phoenix, 
Join, OrderTable]])\n" +
-                          "              
PhoenixServerAggregate(group=[{0}])\n" +
-                          "                
PhoenixServerProject(item_id=[$2])\n" +
-                          "                  PhoenixTableScan(table=[[phoenix, 
Join, OrderTable]])\n")
+                          "        PhoenixServerAggregate(group=[{7}], 
EXPR$0=[MAX($4)])\n" +
+                          "          PhoenixServerJoin(condition=[=($7, $2)], 
joinType=[inner])\n" +
+                          "            PhoenixTableScan(table=[[phoenix, Join, 
OrderTable]])\n" +
+                          "            PhoenixServerAggregate(group=[{2}])\n" +
+                          "              PhoenixTableScan(table=[[phoenix, 
Join, OrderTable]])\n")
                .resultIs(new Object[][]{
                          {"000000000000001", 1000},
                          {"000000000000003", 3000},
@@ -744,13 +732,12 @@ public class CalciteTest extends BaseClientManagedTimeIT {
                        "    PhoenixPostJoinProject(item_id=[$0], NAME=[$1], 
EXPR$2=[$8])\n" +
                        "      PhoenixServerJoin(condition=[=($0, $7)], 
joinType=[left], isSingleValueRhs=[true])\n" +
                        "        PhoenixTableScan(table=[[phoenix, Join, 
ItemTable]])\n" +
-                       "        PhoenixServerAggregate(group=[{0}], 
SQ=[MAX($1)])\n" +
-                       "          PhoenixPostJoinProject(item_id0=[$7], 
QUANTITY=[$4])\n" +
-                       "            PhoenixServerJoin(condition=[=($2, $7)], 
joinType=[inner])\n" +
-                       "              PhoenixTableScan(table=[[phoenix, Join, 
OrderTable]])\n" +
-                       "              PhoenixServerAggregate(group=[{0}])\n" +
-                       "                PhoenixServerProject(item_id=[$0])\n" +
-                       "                  PhoenixTableScan(table=[[phoenix, 
Join, ItemTable]])\n")
+                       "        PhoenixServerAggregate(group=[{7}], 
SQ=[MAX($4)])\n" +
+                       "          PhoenixServerJoin(condition=[=($2, $7)], 
joinType=[inner])\n" +
+                       "            PhoenixTableScan(table=[[phoenix, Join, 
OrderTable]])\n" +
+                       "            PhoenixToClientConverter\n" +
+                       "              PhoenixServerProject(item_id=[$0])\n" +
+                       "                PhoenixTableScan(table=[[phoenix, 
Join, ItemTable]])\n")
             .resultIs(new Object[][] {
                     new Object[] {"0000000001", "T1", 1000}, 
                     new Object[] {"0000000002", "T2", 3000}, 
@@ -769,11 +756,11 @@ public class CalciteTest extends BaseClientManagedTimeIT {
                           "    PhoenixPostJoinProject(item_id=[$0], NAME=[$1], 
EXPR$2=[$8])\n" +
                           "      PhoenixServerJoin(condition=[=($0, $7)], 
joinType=[left], isSingleValueRhs=[true])\n" +
                           "        PhoenixTableScan(table=[[phoenix, Join, 
ItemTable]], filter=[<($0, '0000000006')])\n" +
-                          "        PhoenixPostJoinProject(item_id0=[$7], 
SQ=[$4])\n" +
-                          "          PhoenixServerJoin(condition=[=($2, $7)], 
joinType=[inner])\n" +
-                          "            PhoenixTableScan(table=[[phoenix, Join, 
OrderTable]])\n" +
-                          "            PhoenixServerAggregate(group=[{0}])\n" +
-                          "              PhoenixServerProject(item_id=[$0])\n" 
+
+                          "        PhoenixToClientConverter\n" +
+                          "          PhoenixPostJoinProject(item_id0=[$7], 
SQ=[$4])\n" +
+                          "            PhoenixServerJoin(condition=[=($2, 
$7)], joinType=[inner])\n" +
+                          "              PhoenixTableScan(table=[[phoenix, 
Join, OrderTable]])\n" +
+                          "              
PhoenixServerAggregate(group=[{0}])\n" +
                           "                PhoenixTableScan(table=[[phoenix, 
Join, ItemTable]], filter=[<($0, '0000000006')])\n")
                .resultIs(new Object[][] {
                          new Object[] {"0000000001", "T1", 1000}, 
@@ -801,12 +788,11 @@ public class CalciteTest extends BaseClientManagedTimeIT {
                        "        PhoenixTableScan(table=[[phoenix, Join, 
OrderTable]])\n" +
                        "    EnumerableAggregate(group=[{0}], 
agg#0=[SINGLE_VALUE($1)])\n" +
                        "      EnumerableAggregate(group=[{0}], 
CNT=[COUNT()])\n" +
-                       "        EnumerableCalc(expr#0..10=[{inputs}], 
expr#11=[0], expr#12=[CAST($t5):INTEGER], expr#13=[=($t12, $t0)], 
THE_YEAR=[$t0], $f0=[$t11], $condition=[$t13])\n" +
+                       "        EnumerableCalc(expr#0..10=[{inputs}], 
expr#11=[CAST($t5):INTEGER], expr#12=[=($t11, $t0)], proj#0..10=[{exprs}], 
$condition=[$t12])\n" +
                        "          EnumerableJoin(condition=[true], 
joinType=[inner])\n" +
                        "            PhoenixToEnumerableConverter\n" +
-                       "              PhoenixServerAggregate(group=[{0}])\n" +
-                       "                PhoenixServerProject(THE_YEAR=[$6])\n" 
+
-                       "                  PhoenixTableScan(table=[[phoenix, 
Join, OrderTable]])\n" +
+                       "              PhoenixServerAggregate(group=[{6}])\n" +
+                       "                PhoenixTableScan(table=[[phoenix, 
Join, OrderTable]])\n" +
                        "            JdbcToEnumerableConverter\n" +
                        "              JdbcTableScan(table=[[foodmart, 
time_by_day]])\n")
             .resultIs(new Object[][] {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/2e5a9187/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java
index b807011..e2938a7 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java
@@ -3,6 +3,8 @@ package org.apache.phoenix.calcite.rel;
 import java.util.List;
 
 import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.core.Aggregate;
@@ -34,23 +36,12 @@ import com.google.common.collect.Lists;
 abstract public class PhoenixAbstractAggregate extends Aggregate implements 
PhoenixRel {
     
     public static boolean isSingleValueCheckAggregate(Aggregate aggregate) {
-        List<Integer> groupSet = aggregate.getGroupSet().asList();
-        int groupCount = groupSet.size();
-        if (groupCount + 1 != 
aggregate.getInput().getRowType().getFieldCount())
-            return false;
-        
-        for (int i = 0; i < groupCount; i++) {
-            if (groupSet.get(i) != i)
-                return false;
-        }
-        
         List<AggregateCall> aggCalls = aggregate.getAggCallList();
         if (aggCalls.size() != 1)
             return false;
         
         AggregateCall call = aggCalls.get(0);
-        return call.getAggregation().getName().equals("SINGLE_VALUE")
-                && call.getArgList().get(0) == groupCount;
+        return call.getAggregation().getName().equals("SINGLE_VALUE");
     }
     
     protected PhoenixAbstractAggregate(RelOptCluster cluster, RelTraitSet 
traits, RelNode child, boolean indicator, ImmutableBitSet groupSet, 
List<ImmutableBitSet> groupSets, List<AggregateCall> aggCalls) {
@@ -69,6 +60,14 @@ abstract public class PhoenixAbstractAggregate extends 
Aggregate implements Phoe
         }
     }
     
+    @Override
+    public RelOptCost computeSelfCost(RelOptPlanner planner) {
+        if (isSingleValueCheckAggregate(this))
+            return planner.getCostFactory().makeInfiniteCost();
+        
+        return super.computeSelfCost(planner);
+    }
+    
     protected GroupBy getGroupBy(Implementor implementor) {
         if (groupSets.size() > 1) {
             throw new UnsupportedOperationException();

http://git-wip-us.apache.org/repos/asf/phoenix/blob/2e5a9187/phoenix-core/src/main/java/org/apache/phoenix/calcite/rules/PhoenixJoinSingleValueAggregateMergeRule.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rules/PhoenixJoinSingleValueAggregateMergeRule.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rules/PhoenixJoinSingleValueAggregateMergeRule.java
index b5c752b..a3a1d63 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rules/PhoenixJoinSingleValueAggregateMergeRule.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rules/PhoenixJoinSingleValueAggregateMergeRule.java
@@ -1,5 +1,7 @@
 package org.apache.phoenix.calcite.rules;
 
+import java.util.List;
+
 import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.plan.RelOptRuleCall;
 import org.apache.phoenix.calcite.rel.PhoenixAbstractAggregate;
@@ -15,7 +17,20 @@ public class PhoenixJoinSingleValueAggregateMergeRule 
extends RelOptRule {
             new Predicate<PhoenixAbstractAggregate>() {
         @Override
         public boolean apply(PhoenixAbstractAggregate phoenixAggregate) {
-            return 
PhoenixAbstractAggregate.isSingleValueCheckAggregate(phoenixAggregate);
+            if 
(!PhoenixAbstractAggregate.isSingleValueCheckAggregate(phoenixAggregate))
+                return false;
+            
+            List<Integer> groupSet = phoenixAggregate.getGroupSet().asList();
+            if (groupSet.size() + 1 != 
phoenixAggregate.getInput().getRowType().getFieldCount())
+                return false;
+            
+            for (int i = 0; i < groupSet.size(); i++) {
+                if (groupSet.get(i) != i)
+                    return false;
+            }
+            
+            List<Integer> argList = 
phoenixAggregate.getAggCallList().get(0).getArgList();
+            return (argList.size() == 1 && argList.get(0) == groupSet.size());
         }
     };
     
@@ -45,7 +60,7 @@ public class PhoenixJoinSingleValueAggregateMergeRule extends 
RelOptRule {
         }
         
         call.transformTo(join.copy(join.getTraitSet(), join.getCondition(), 
-                left, right.getInput(), join.getJoinType(), false, true));
+                left, convert(right.getInput(), 
right.getInput().getTraitSet().replace(PhoenixRel.CLIENT_CONVENTION)), 
join.getJoinType(), false, true));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/2e5a9187/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 984b3b9..d9915c5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -57,7 +57,7 @@
     </repository>
     <repository>
       <id>apache calcite</id>
-      
<url>https://repository.apache.org/content/repositories/orgapachecalcite-1007</url>
+      
<url>https://repository.apache.org/content/repositories/orgapachecalcite-1008</url>
     </repository>
   </repositories>
 
@@ -110,7 +110,7 @@
     <collections.version>3.2.1</collections.version>
     <jodatime.version>2.7</jodatime.version>
     <joni.version>2.1.2</joni.version>
-    <calcite.version>1.2.0-incubating</calcite.version>
+    <calcite.version>1.3.0-incubating</calcite.version>
 
     <!-- Test Dependencies -->
     <mockito-all.version>1.8.5</mockito-all.version>

Reply via email to