Repository: phoenix
Updated Branches:
  refs/heads/calcite 605b25aff -> 75caf0906


PHOENIX-3466 Add StatementContext instance in PhoenixImplementorImpl


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

Branch: refs/heads/calcite
Commit: 75caf0906343a1a1603fa42ec11dd98322be91d5
Parents: 605b25a
Author: maryannxue <[email protected]>
Authored: Tue Nov 8 11:44:05 2016 -0800
Committer: maryannxue <[email protected]>
Committed: Tue Nov 8 11:44:05 2016 -0800

----------------------------------------------------------------------
 .../calcite/jdbc/PhoenixCalciteFactory.java     |  4 +-
 .../org/apache/calcite/sql/ListJarsTable.java   |  1 -
 .../org/apache/calcite/sql/SqlOptionNode.java   |  4 +-
 .../apache/phoenix/calcite/CalciteUtils.java    |  1 -
 .../phoenix/calcite/PhoenixPrepareImpl.java     | 18 ++++++++-
 .../phoenix/calcite/PhoenixScalarFunction.java  |  2 +
 .../apache/phoenix/calcite/TableMapping.java    |  1 -
 .../calcite/rel/PhoenixRelImplementor.java      |  2 +
 .../calcite/rel/PhoenixRelImplementorImpl.java  | 11 +++++-
 .../phoenix/calcite/rel/PhoenixTableScan.java   |  3 +-
 .../rel/PhoenixToEnumerableConverter.java       | 18 ++++++---
 .../calcite/rules/PhoenixConverterRules.java    | 40 +++++++++-----------
 .../phoenix/calcite/ToExpressionTest.java       |  6 ++-
 13 files changed, 71 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java 
b/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java
index bc9994b..faab40a 100644
--- 
a/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java
+++ 
b/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java
@@ -120,7 +120,8 @@ public class PhoenixCalciteFactory extends CalciteFactory {
             super(driver, factory, url, info, rootSchema, typeFactory);
         }
 
-        public CalciteStatement createStatement(String sql, int resultSetType, 
int resultSetConcurrency, int resultSetHoldability) throws SQLException {
+        @Override
+        public CalciteStatement createStatement(int resultSetType, int 
resultSetConcurrency, int resultSetHoldability) throws SQLException {
             try {
                 return super.createStatement(resultSetType, 
resultSetConcurrency, resultSetHoldability);
             } catch (SQLException e) {
@@ -160,6 +161,7 @@ public class PhoenixCalciteFactory extends CalciteFactory {
             return super.enumerable(handle, signature);
         }
 
+        @Override
         public void abort(final Executor executor) throws SQLException {
             call(new PhoenixConnectionCallable() {
                 @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/phoenix-core/src/main/java/org/apache/calcite/sql/ListJarsTable.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/calcite/sql/ListJarsTable.java 
b/phoenix-core/src/main/java/org/apache/calcite/sql/ListJarsTable.java
index db2b003..a73d591 100644
--- a/phoenix-core/src/main/java/org/apache/calcite/sql/ListJarsTable.java
+++ b/phoenix-core/src/main/java/org/apache/calcite/sql/ListJarsTable.java
@@ -32,7 +32,6 @@ import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.schema.ScannableTable;
 import org.apache.calcite.schema.impl.AbstractTable;
 import org.apache.calcite.sql.type.SqlTypeName;
-import org.apache.calcite.util.Smalls.MazeTable;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.LocatedFileStatus;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/phoenix-core/src/main/java/org/apache/calcite/sql/SqlOptionNode.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/calcite/sql/SqlOptionNode.java 
b/phoenix-core/src/main/java/org/apache/calcite/sql/SqlOptionNode.java
index bcec18a..149e9ef 100644
--- a/phoenix-core/src/main/java/org/apache/calcite/sql/SqlOptionNode.java
+++ b/phoenix-core/src/main/java/org/apache/calcite/sql/SqlOptionNode.java
@@ -42,8 +42,8 @@ public class SqlOptionNode extends SqlNode {
             propertyName = key.names.get(1);
         }
 
-        PhoenixRelImplementor
-                implementor = new 
PhoenixRelImplementorImpl(RuntimeContext.EMPTY_CONTEXT);
+        PhoenixRelImplementor implementor =
+                new PhoenixRelImplementorImpl(null, 
RuntimeContext.EMPTY_CONTEXT);
         this.value = CalciteUtils.convertSqlLiteral(literal, implementor);
     }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java
index b312954..1ed650b 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java
@@ -738,7 +738,6 @@ public class CalciteUtils {
             }
         });
         EXPRESSION_MAP.put(SqlKind.DEFAULT, new ExpressionFactory() {
-            @SuppressWarnings("rawtypes")
             @Override
             public Expression newExpression(RexNode node, 
PhoenixRelImplementor implementor) {
                 return null;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixPrepareImpl.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixPrepareImpl.java 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixPrepareImpl.java
index 8ac009e..1d9ca1e 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixPrepareImpl.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixPrepareImpl.java
@@ -18,6 +18,7 @@ import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.prepare.CalcitePrepareImpl;
 import org.apache.calcite.prepare.Prepare.Materialization;
 import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.convert.ConverterRule;
 import org.apache.calcite.rel.logical.LogicalSort;
 import org.apache.calcite.rel.rules.JoinCommuteRule;
 import org.apache.calcite.rel.rules.SortProjectTransposeRule;
@@ -59,6 +60,7 @@ import org.apache.phoenix.calcite.parser.PhoenixParserImpl;
 import org.apache.phoenix.calcite.rel.PhoenixRel;
 import org.apache.phoenix.calcite.rel.PhoenixServerProject;
 import org.apache.phoenix.calcite.rel.PhoenixTemporarySort;
+import 
org.apache.phoenix.calcite.rules.PhoenixConverterRules.PhoenixToEnumerableConverterRule;
 import org.apache.phoenix.calcite.rules.PhoenixFilterScanMergeRule;
 import org.apache.phoenix.calcite.rules.PhoenixForwardTableScanRule;
 import 
org.apache.phoenix.calcite.rules.PhoenixJoinSingleValueAggregateMergeRule;
@@ -72,6 +74,7 @@ import org.apache.phoenix.compile.CreateIndexCompiler;
 import org.apache.phoenix.compile.CreateSequenceCompiler;
 import org.apache.phoenix.compile.CreateTableCompiler;
 import org.apache.phoenix.compile.MutationPlan;
+import org.apache.phoenix.compile.StatementContext;
 import org.apache.phoenix.expression.LiteralExpression;
 import org.apache.phoenix.jdbc.PhoenixConnection;
 import org.apache.phoenix.jdbc.PhoenixStatement;
@@ -158,7 +161,20 @@ public class PhoenixPrepareImpl extends CalcitePrepareImpl 
{
                 PhoenixTemporarySort.class,
                 PhoenixServerProject.class,
                 "PhoenixSortProjectTransposeRule"));
-        
+
+        final PhoenixConnection pc =
+                getPhoenixConnection(prepareContext.getRootSchema().plus());
+        try {
+            final StatementContext context =
+                    new StatementContext((PhoenixStatement) 
pc.createStatement());
+            ConverterRule[] rules = PhoenixToEnumerableConverterRule
+                    .createPhoenixToEnumerableConverterRules(context);
+            for (ConverterRule rule : rules) {
+                planner.addRule(rule);
+            }
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }
         for (RelOptRule rule : this.defaultConverterRules) {
             planner.addRule(rule);
         }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixScalarFunction.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixScalarFunction.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixScalarFunction.java
index a65f851..3a82a49 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixScalarFunction.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixScalarFunction.java
@@ -39,6 +39,7 @@ import com.google.common.collect.Lists;
 
 public class PhoenixScalarFunction implements ScalarFunction, 
ImplementableFunction {
     private final PFunction functionInfo;
+    @SuppressWarnings("rawtypes")
     private final PDataType returnType;
     private final List<FunctionParameter> parameters;
     
@@ -58,6 +59,7 @@ public class PhoenixScalarFunction implements ScalarFunction, 
ImplementableFunct
                             return getArgumentName(arg.getArgPosition());
                         }
 
+                        @SuppressWarnings("rawtypes")
                         public RelDataType getType(RelDataTypeFactory 
typeFactory) {
                             PDataType dataType =
                                     arg.isArrayType() ? 
PDataType.fromTypeId(PDataType.sqlArrayType(SchemaUtil

http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/phoenix-core/src/main/java/org/apache/phoenix/calcite/TableMapping.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/TableMapping.java 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/TableMapping.java
index 216920f..e27843c 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/TableMapping.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/TableMapping.java
@@ -23,7 +23,6 @@ import org.apache.phoenix.compile.RowProjector;
 import org.apache.phoenix.compile.TupleProjectionCompiler;
 import org.apache.phoenix.coprocessor.BaseScannerRegionObserver;
 import org.apache.phoenix.execute.TupleProjector;
-import org.apache.phoenix.expression.ColumnExpression;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
 import org.apache.phoenix.index.IndexMaintainer;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRelImplementor.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRelImplementor.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRelImplementor.java
index cdcd74f..4b698c7 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRelImplementor.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRelImplementor.java
@@ -8,6 +8,7 @@ import org.apache.phoenix.calcite.TableMapping;
 import org.apache.phoenix.compile.QueryPlan;
 import org.apache.phoenix.compile.SequenceManager;
 import org.apache.phoenix.compile.SequenceValueExpression;
+import org.apache.phoenix.compile.StatementContext;
 import org.apache.phoenix.execute.RuntimeContext;
 import org.apache.phoenix.execute.TupleProjector;
 import org.apache.phoenix.expression.Expression;
@@ -24,6 +25,7 @@ public interface PhoenixRelImplementor {
     @SuppressWarnings("rawtypes")
     Expression newFieldAccessExpression(String variableId, int index, 
PDataType type);
     SequenceValueExpression newSequenceExpression(PhoenixSequence seq, 
SequenceValueParseNode.Op op);
+    StatementContext getStatementContext();
     RuntimeContext getRuntimeContext();
     void setTableMapping(TableMapping tableMapping);
     TableMapping getTableMapping();

http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRelImplementorImpl.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRelImplementorImpl.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRelImplementorImpl.java
index d581ec0..901ea07 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRelImplementorImpl.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRelImplementorImpl.java
@@ -10,6 +10,7 @@ import org.apache.phoenix.calcite.TableMapping;
 import org.apache.phoenix.compile.QueryPlan;
 import org.apache.phoenix.compile.SequenceManager;
 import org.apache.phoenix.compile.SequenceValueExpression;
+import org.apache.phoenix.compile.StatementContext;
 import org.apache.phoenix.coprocessor.MetaDataProtocol;
 import org.apache.phoenix.execute.RuntimeContext;
 import org.apache.phoenix.execute.TupleProjector;
@@ -31,12 +32,15 @@ import org.apache.phoenix.schema.types.PDataType;
 import com.google.common.collect.Lists;
 
 public class PhoenixRelImplementorImpl implements PhoenixRelImplementor {
+    private final StatementContext statementContext;
     private final RuntimeContext runtimeContext;
        private Stack<ImplementorContext> contextStack;
        private SequenceManager sequenceManager;
        private TableMapping tableMapping;
        
-       public PhoenixRelImplementorImpl(RuntimeContext runtimeContext) {
+       public PhoenixRelImplementorImpl(
+               StatementContext statementContext, RuntimeContext 
runtimeContext) {
+           this.statementContext = statementContext;
            this.runtimeContext = runtimeContext;
            this.contextStack = new Stack<ImplementorContext>();
        }
@@ -74,6 +78,11 @@ public class PhoenixRelImplementorImpl implements 
PhoenixRelImplementor {
             throw new RuntimeException(e);
         }
     }
+
+    @Override
+    public StatementContext getStatementContext() {
+        return statementContext;
+    }
     
     @Override
     public RuntimeContext getRuntimeContext() {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/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 c02b533..4474bac 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
@@ -128,7 +128,8 @@ public class PhoenixTableScan extends TableScan implements 
PhoenixQueryRel {
                 //    TODO instead of getting a random sample value, we'd 
better get it from
                 //    existing guidepost bytes.
                 // 3) test whether this dynamic filter is worth a recompile at 
runtime.
-                PhoenixRelImplementor tmpImplementor = new 
PhoenixRelImplementorImpl(RuntimeContext.EMPTY_CONTEXT) {                    
+                PhoenixRelImplementor tmpImplementor = new 
PhoenixRelImplementorImpl(
+                        context, RuntimeContext.EMPTY_CONTEXT) {               
     
                     @SuppressWarnings("rawtypes")
                     @Override
                     public Expression newBindParameterExpression(int index, 
PDataType type, Integer maxLength) {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixToEnumerableConverter.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixToEnumerableConverter.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixToEnumerableConverter.java
index 5aef483..ad0f8c1 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixToEnumerableConverter.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixToEnumerableConverter.java
@@ -30,6 +30,7 @@ import 
org.apache.phoenix.calcite.rel.PhoenixRelImplementor.ImplementorContext;
 import org.apache.phoenix.compile.ExplainPlan;
 import org.apache.phoenix.compile.QueryPlan;
 import org.apache.phoenix.compile.RowProjector;
+import org.apache.phoenix.compile.StatementContext;
 import org.apache.phoenix.compile.StatementPlan;
 import org.apache.phoenix.execute.DelegateQueryPlan;
 import org.apache.phoenix.execute.RuntimeContext;
@@ -42,22 +43,26 @@ import org.apache.phoenix.iterate.ResultIterator;
  * Scan of a Phoenix table.
  */
 public class PhoenixToEnumerableConverter extends ConverterImpl implements 
EnumerableRel {
+    private final StatementContext context;
 
-    public static PhoenixToEnumerableConverter create(RelNode input) {
+    public static PhoenixToEnumerableConverter create(
+            RelNode input, StatementContext context) {
         RelOptCluster cluster = input.getCluster();
         RelTraitSet traits = 
input.getTraitSet().replace(EnumerableConvention.INSTANCE);
-        return new PhoenixToEnumerableConverter(cluster, traits, input);
+        return new PhoenixToEnumerableConverter(cluster, traits, input, 
context);
     }
 
     private PhoenixToEnumerableConverter(
         RelOptCluster cluster,
         RelTraitSet traits,
-        RelNode input) {
+        RelNode input,
+        StatementContext context) {
         super(cluster, ConventionTraitDef.INSTANCE, traits, input);
+        this.context = context;
     }
 
     @Override public RelNode copy(RelTraitSet traitSet, List<RelNode> inputs) {
-        return create(sole(inputs));
+        return create(sole(inputs), context);
     }
 
     @Override public RelOptCost computeSelfCost(RelOptPlanner planner, 
RelMetadataQuery mq) {
@@ -92,10 +97,11 @@ public class PhoenixToEnumerableConverter extends 
ConverterImpl implements Enume
         return implementor.result(physType, list.toBlock());
     }
     
-    static StatementPlan makePlan(PhoenixRel rel) {
+    StatementPlan makePlan(PhoenixRel rel) {
         RuntimeContext runtimeContext = new RuntimeContextImpl();
         RuntimeContext.THREAD_LOCAL.get().add(runtimeContext);
-        final PhoenixRelImplementor phoenixImplementor = new 
PhoenixRelImplementorImpl(runtimeContext);
+        final PhoenixRelImplementor phoenixImplementor =
+                new PhoenixRelImplementorImpl(context, runtimeContext);
         phoenixImplementor.pushContext(new ImplementorContext(true, false, 
ImmutableIntList.identity(rel.getRowType().getFieldCount())));
         final StatementPlan plan = rel.implement(phoenixImplementor);
         if (!(plan instanceof QueryPlan)) {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/phoenix-core/src/main/java/org/apache/phoenix/calcite/rules/PhoenixConverterRules.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rules/PhoenixConverterRules.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rules/PhoenixConverterRules.java
index ca71ab1..ee444fd 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rules/PhoenixConverterRules.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rules/PhoenixConverterRules.java
@@ -59,6 +59,7 @@ import 
org.apache.phoenix.calcite.rel.PhoenixToEnumerableConverter;
 import org.apache.phoenix.calcite.rel.PhoenixUncollect;
 import org.apache.phoenix.calcite.rel.PhoenixUnion;
 import org.apache.phoenix.calcite.rel.PhoenixValues;
+import org.apache.phoenix.compile.StatementContext;
 
 import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
@@ -73,11 +74,6 @@ public class PhoenixConverterRules {
     private PhoenixConverterRules() {}
 
     public static final RelOptRule[] RULES = {
-        PhoenixToEnumerableConverterRule.SERVER,
-        PhoenixToEnumerableConverterRule.SERVERJOIN,
-        PhoenixToEnumerableConverterRule.SERVERAGG,
-        PhoenixToEnumerableConverterRule.CLIENT,
-        PhoenixToEnumerableConverterRule.MUTATION,
         PhoenixClientSortRule.INSTANCE,
         PhoenixServerSortRule.SERVER,
         PhoenixServerSortRule.SERVERJOIN,
@@ -101,11 +97,6 @@ public class PhoenixConverterRules {
     };
 
     public static final RelOptRule[] CONVERTIBLE_RULES = {
-        PhoenixToEnumerableConverterRule.SERVER,
-        PhoenixToEnumerableConverterRule.SERVERJOIN,
-        PhoenixToEnumerableConverterRule.SERVERAGG,
-        PhoenixToEnumerableConverterRule.CLIENT,
-        PhoenixToEnumerableConverterRule.MUTATION,
         PhoenixClientSortRule.INSTANCE,
         PhoenixServerSortRule.SERVER,
         PhoenixServerSortRule.SERVERJOIN,
@@ -872,24 +863,27 @@ public class PhoenixConverterRules {
      * {@link org.apache.calcite.adapter.enumerable.EnumerableConvention}.
      */
     public static class PhoenixToEnumerableConverterRule extends ConverterRule 
{
-        public static final ConverterRule SERVER =
-                new PhoenixToEnumerableConverterRule(PhoenixConvention.SERVER);
-        public static final ConverterRule SERVERJOIN =
-                new 
PhoenixToEnumerableConverterRule(PhoenixConvention.SERVERJOIN);
-        public static final ConverterRule SERVERAGG =
-                new 
PhoenixToEnumerableConverterRule(PhoenixConvention.SERVERAGG);
-        public static final ConverterRule CLIENT =
-                new PhoenixToEnumerableConverterRule(PhoenixConvention.CLIENT);
-        public static final ConverterRule MUTATION =
-                new 
PhoenixToEnumerableConverterRule(PhoenixConvention.MUTATION);
-
-        private PhoenixToEnumerableConverterRule(Convention inputConvention) {
+        private final StatementContext context;
+        public static ConverterRule[] createPhoenixToEnumerableConverterRules(
+                StatementContext context) {
+            return new ConverterRule[] {
+                new PhoenixToEnumerableConverterRule(PhoenixConvention.SERVER, 
context),
+                new 
PhoenixToEnumerableConverterRule(PhoenixConvention.SERVERJOIN, context),
+                new 
PhoenixToEnumerableConverterRule(PhoenixConvention.SERVERAGG, context),
+                new PhoenixToEnumerableConverterRule(PhoenixConvention.CLIENT, 
context),
+                new 
PhoenixToEnumerableConverterRule(PhoenixConvention.MUTATION, context)           
         
+            };
+        }
+
+        private PhoenixToEnumerableConverterRule(
+                Convention inputConvention, StatementContext context) {
             super(RelNode.class, inputConvention, 
EnumerableConvention.INSTANCE,
                 "PhoenixToEnumerableConverterRule:" + inputConvention);
+            this.context = context;
         }
 
         @Override public RelNode convert(RelNode rel) {
-            return PhoenixToEnumerableConverter.create(rel);
+            return PhoenixToEnumerableConverter.create(rel, context);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/phoenix/blob/75caf090/phoenix-core/src/test/java/org/apache/phoenix/calcite/ToExpressionTest.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/test/java/org/apache/phoenix/calcite/ToExpressionTest.java 
b/phoenix-core/src/test/java/org/apache/phoenix/calcite/ToExpressionTest.java
index ed1abd3..7dbca10 100644
--- 
a/phoenix-core/src/test/java/org/apache/phoenix/calcite/ToExpressionTest.java
+++ 
b/phoenix-core/src/test/java/org/apache/phoenix/calcite/ToExpressionTest.java
@@ -30,7 +30,6 @@ import org.apache.phoenix.compile.ExpressionCompiler;
 import org.apache.phoenix.compile.FromCompiler;
 import org.apache.phoenix.compile.StatementContext;
 import org.apache.phoenix.execute.RuntimeContext;
-import org.apache.phoenix.execute.RuntimeContextImpl;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.jdbc.PhoenixConnection;
 import org.apache.phoenix.jdbc.PhoenixStatement;
@@ -62,11 +61,13 @@ public class ToExpressionTest extends 
BaseConnectionlessQueryTest {
            private final PTable table;
            private final Expression phoenixExpr;
            private final RexNode calciteExpr;
+           private final StatementContext context;
 
            public ExpressionChecker(String tableName, String ddl, String sql, 
ExpressionGetter getter) throws Exception {
                Connection conn = DriverManager.getConnection(getOldUrl());
                PhoenixConnection pc = conn.unwrap(PhoenixConnection.class);
                PhoenixStatement stmt = 
conn.createStatement().unwrap(PhoenixStatement.class);
+               this.context = new StatementContext(stmt);
 
                conn.createStatement().execute(ddl);
                this.table = pc.getMetaDataCache().getTableRef(new 
PTableKey(null,tableName)).getTable();
@@ -82,7 +83,8 @@ public class ToExpressionTest extends 
BaseConnectionlessQueryTest {
            }
 
            public ExpressionChecker checkExpressionEquality() {        
-               PhoenixRelImplementor implementor = new 
PhoenixRelImplementorImpl(RuntimeContext.EMPTY_CONTEXT);
+               PhoenixRelImplementor implementor =
+                       new PhoenixRelImplementorImpl(context, 
RuntimeContext.EMPTY_CONTEXT);
                implementor.setTableMapping(new TableMapping(table));
                Expression e = CalciteUtils.toExpression(this.calciteExpr, 
implementor);
                assertEquals(this.phoenixExpr,e);

Reply via email to