You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ma...@apache.org on 2015/04/24 18:01:52 UTC

phoenix git commit: Implemented PhoenixCalciteDriver and moved some init logic to PhoenixPrepareImpl

Repository: phoenix
Updated Branches:
  refs/heads/calcite 4c65ef2b5 -> 086462884


Implemented PhoenixCalciteDriver and moved some init logic to PhoenixPrepareImpl


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

Branch: refs/heads/calcite
Commit: 086462884ef8824724d2d1503de83aeea4056433
Parents: 4c65ef2
Author: maryannxue <we...@intel.com>
Authored: Fri Apr 24 12:01:41 2015 -0400
Committer: maryannxue <we...@intel.com>
Committed: Fri Apr 24 12:01:41 2015 -0400

----------------------------------------------------------------------
 .../org/apache/phoenix/calcite/CalciteTest.java |  9 +++-
 .../calcite/jdbc/PhoenixCalciteDriver.java      | 30 +++++++++++
 .../calcite/jdbc/PhoenixPrepareImpl.java        | 52 ++++++++++++++++++++
 .../phoenix/calcite/rel/PhoenixTableScan.java   | 33 -------------
 phoenix-core/src/main/resources/java.sql.Driver |  2 +-
 5 files changed, 90 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/08646288/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 acd230b..67c764c 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
@@ -139,10 +139,15 @@ public class CalciteTest extends BaseClientManagedTimeIT {
 
     private static Connection createConnection() throws SQLException {
         final Connection connection = DriverManager.getConnection(
-            "jdbc:calcite:");
+            "jdbc:phoenixcalcite:");
         final CalciteConnection calciteConnection =
             connection.unwrap(CalciteConnection.class);
         final String url = getUrl();
+        try {
+            Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
+        } catch (ClassNotFoundException e) {
+            throw new RuntimeException(e);
+        }
         final PhoenixConnection phoenixConnection =
             DriverManager.getConnection(url).unwrap(PhoenixConnection.class);
         calciteConnection.getRootSchema().add("phoenix",
@@ -174,7 +179,7 @@ public class CalciteTest extends BaseClientManagedTimeIT {
                 + "}\n");
         pw.close();
         final Connection connection =
-            DriverManager.getConnection("jdbc:calcite:model=" + file.getAbsolutePath());
+            DriverManager.getConnection("jdbc:phoenixcalcite:model=" + file.getAbsolutePath());
         return connection;
     }
     

http://git-wip-us.apache.org/repos/asf/phoenix/blob/08646288/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixCalciteDriver.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixCalciteDriver.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixCalciteDriver.java
new file mode 100644
index 0000000..37452df
--- /dev/null
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixCalciteDriver.java
@@ -0,0 +1,30 @@
+package org.apache.phoenix.calcite.jdbc;
+
+import org.apache.calcite.jdbc.CalcitePrepare;
+import org.apache.calcite.jdbc.Driver;
+import org.apache.calcite.linq4j.function.Function0;
+
+public class PhoenixCalciteDriver extends Driver {
+    public static final String CONNECT_STRING_PREFIX = "jdbc:phoenixcalcite:";
+
+    static {
+        new PhoenixCalciteDriver().register();
+    }
+    
+    public PhoenixCalciteDriver() {
+        super();
+    }
+
+    @Override protected Function0<CalcitePrepare> createPrepareFactory() {
+        return new Function0<CalcitePrepare>() {
+            @Override
+            public CalcitePrepare apply() {
+                return new PhoenixPrepareImpl();
+            }          
+        };
+    }
+
+    @Override protected String getConnectStringPrefix() {
+        return CONNECT_STRING_PREFIX;
+    }
+}

http://git-wip-us.apache.org/repos/asf/phoenix/blob/08646288/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixPrepareImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixPrepareImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixPrepareImpl.java
new file mode 100644
index 0000000..aa628e7
--- /dev/null
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixPrepareImpl.java
@@ -0,0 +1,52 @@
+package org.apache.phoenix.calcite.jdbc;
+
+import org.apache.calcite.jdbc.CalcitePrepare;
+import org.apache.calcite.plan.RelOptCostFactory;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.prepare.CalcitePrepareImpl;
+import org.apache.phoenix.calcite.rules.PhoenixAddScanLimitRule;
+import org.apache.phoenix.calcite.rules.PhoenixClientJoinRule;
+import org.apache.phoenix.calcite.rules.PhoenixCompactClientSortRule;
+import org.apache.phoenix.calcite.rules.PhoenixConverterRules;
+import org.apache.phoenix.calcite.rules.PhoenixFilterScanMergeRule;
+import org.apache.phoenix.calcite.rules.PhoenixServerAggregateRule;
+import org.apache.phoenix.calcite.rules.PhoenixServerJoinRule;
+import org.apache.phoenix.calcite.rules.PhoenixServerProjectRule;
+import org.apache.phoenix.calcite.rules.PhoenixServerSortRule;
+
+public class PhoenixPrepareImpl extends CalcitePrepareImpl {
+
+    public PhoenixPrepareImpl() {
+        super();
+    }
+    
+    @Override
+    protected RelOptPlanner createPlanner(
+            final CalcitePrepare.Context prepareContext,
+            org.apache.calcite.plan.Context externalContext,
+            RelOptCostFactory costFactory) {
+        RelOptPlanner planner = super.createPlanner(prepareContext, externalContext, costFactory);
+        RelOptRule[] rules = PhoenixConverterRules.RULES;
+        for (RelOptRule rule : rules) {
+            planner.addRule(rule);
+        }
+        planner.addRule(PhoenixFilterScanMergeRule.INSTANCE);
+        planner.addRule(PhoenixAddScanLimitRule.LIMIT_SCAN);
+        planner.addRule(PhoenixAddScanLimitRule.LIMIT_SERVERPROJECT_SCAN);
+        planner.addRule(PhoenixServerProjectRule.PROJECT_SCAN);
+        planner.addRule(PhoenixServerProjectRule.PROJECT_SERVERJOIN);
+        planner.addRule(PhoenixServerJoinRule.JOIN_SCAN);
+        planner.addRule(PhoenixServerJoinRule.JOIN_SERVERPROJECT_SCAN);
+        planner.addRule(PhoenixServerAggregateRule.AGGREGATE_SCAN);
+        planner.addRule(PhoenixServerAggregateRule.AGGREGATE_SERVERJOIN);
+        planner.addRule(PhoenixServerAggregateRule.AGGREGATE_SERVERPROJECT);
+        planner.addRule(PhoenixServerSortRule.SORT_SCAN);
+        planner.addRule(PhoenixServerSortRule.SORT_SERVERJOIN);
+        planner.addRule(PhoenixServerSortRule.SORT_SERVERPROJECT);
+        planner.addRule(PhoenixCompactClientSortRule.SORT_SERVERAGGREGATE);
+        planner.addRule(PhoenixClientJoinRule.INSTANCE);
+
+        return planner;
+    }
+}

http://git-wip-us.apache.org/repos/asf/phoenix/blob/08646288/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
index c0ea42b..51cca21 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
@@ -6,7 +6,6 @@ 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.RelOptRule;
 import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelCollation;
@@ -20,15 +19,6 @@ import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.phoenix.calcite.CalciteUtils;
 import org.apache.phoenix.calcite.PhoenixTable;
-import org.apache.phoenix.calcite.rules.PhoenixAddScanLimitRule;
-import org.apache.phoenix.calcite.rules.PhoenixClientJoinRule;
-import org.apache.phoenix.calcite.rules.PhoenixCompactClientSortRule;
-import org.apache.phoenix.calcite.rules.PhoenixFilterScanMergeRule;
-import org.apache.phoenix.calcite.rules.PhoenixConverterRules;
-import org.apache.phoenix.calcite.rules.PhoenixServerAggregateRule;
-import org.apache.phoenix.calcite.rules.PhoenixServerJoinRule;
-import org.apache.phoenix.calcite.rules.PhoenixServerProjectRule;
-import org.apache.phoenix.calcite.rules.PhoenixServerSortRule;
 import org.apache.phoenix.compile.ColumnResolver;
 import org.apache.phoenix.compile.FromCompiler;
 import org.apache.phoenix.compile.OrderByCompiler.OrderBy;
@@ -96,29 +86,6 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
     }
 
     @Override
-    public void register(RelOptPlanner planner) {
-        RelOptRule[] rules = PhoenixConverterRules.RULES;
-        for (RelOptRule rule : rules) {
-            planner.addRule(rule);
-        }
-        planner.addRule(PhoenixFilterScanMergeRule.INSTANCE);
-        planner.addRule(PhoenixAddScanLimitRule.LIMIT_SCAN);
-        planner.addRule(PhoenixAddScanLimitRule.LIMIT_SERVERPROJECT_SCAN);
-        planner.addRule(PhoenixServerProjectRule.PROJECT_SCAN);
-        planner.addRule(PhoenixServerProjectRule.PROJECT_SERVERJOIN);
-        planner.addRule(PhoenixServerJoinRule.JOIN_SCAN);
-        planner.addRule(PhoenixServerJoinRule.JOIN_SERVERPROJECT_SCAN);
-        planner.addRule(PhoenixServerAggregateRule.AGGREGATE_SCAN);
-        planner.addRule(PhoenixServerAggregateRule.AGGREGATE_SERVERJOIN);
-        planner.addRule(PhoenixServerAggregateRule.AGGREGATE_SERVERPROJECT);
-        planner.addRule(PhoenixServerSortRule.SORT_SCAN);
-        planner.addRule(PhoenixServerSortRule.SORT_SERVERJOIN);
-        planner.addRule(PhoenixServerSortRule.SORT_SERVERPROJECT);
-        planner.addRule(PhoenixCompactClientSortRule.SORT_SERVERAGGREGATE);
-        planner.addRule(PhoenixClientJoinRule.INSTANCE);
-    }
-
-    @Override
     public RelWriter explainTerms(RelWriter pw) {
         return super.explainTerms(pw)
             .itemIf("filter", filter, filter != null)

http://git-wip-us.apache.org/repos/asf/phoenix/blob/08646288/phoenix-core/src/main/resources/java.sql.Driver
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/resources/java.sql.Driver b/phoenix-core/src/main/resources/java.sql.Driver
index fc51a04..2a19ec9 100644
--- a/phoenix-core/src/main/resources/java.sql.Driver
+++ b/phoenix-core/src/main/resources/java.sql.Driver
@@ -1 +1 @@
-org.apache.phoenix.jdbc.PhoenixDriver
+org.apache.phoenix.calcite.jdbc.PhoenixCalciteDriver