Repository: phoenix
Updated Branches:
  refs/heads/calcite b13e9f22e -> 73cb518d5


PHOENIX-2133 Implement PhoenixValues rel in Phoenix - Calcite Integration


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

Branch: refs/heads/calcite
Commit: 73cb518d5b7b9d6618a016b85d12111b0fba70e5
Parents: b13e9f2
Author: maryannxue <[email protected]>
Authored: Tue Jul 21 13:57:58 2015 -0400
Committer: maryannxue <[email protected]>
Committed: Tue Jul 21 13:57:58 2015 -0400

----------------------------------------------------------------------
 .../phoenix/calcite/rel/PhoenixValues.java      | 28 +++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/73cb518d/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixValues.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixValues.java 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixValues.java
index 6cb9f1a..dd56458 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixValues.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixValues.java
@@ -1,5 +1,6 @@
 package org.apache.phoenix.calcite.rel;
 
+import java.util.Iterator;
 import java.util.List;
 
 import org.apache.calcite.plan.RelOptCluster;
@@ -10,9 +11,21 @@ import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.core.Values;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rex.RexLiteral;
+import org.apache.hadoop.hbase.KeyValue;
+import org.apache.phoenix.calcite.CalciteUtils;
+import org.apache.phoenix.compile.OrderByCompiler.OrderBy;
 import org.apache.phoenix.compile.QueryPlan;
+import org.apache.phoenix.compile.RowProjector;
+import org.apache.phoenix.execute.LiteralResultIterationQueryPlan;
+import org.apache.phoenix.execute.TupleProjector;
+import org.apache.phoenix.expression.Expression;
+import org.apache.phoenix.parse.SelectStatement;
+import org.apache.phoenix.schema.TableRef;
+import org.apache.phoenix.schema.tuple.SingleKeyValueTuple;
+import org.apache.phoenix.schema.tuple.Tuple;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 
 /**
  * Implementation of {@link org.apache.calcite.rel.core.Values}
@@ -42,6 +55,19 @@ public class PhoenixValues extends Values implements 
PhoenixRel {
 
     @Override
     public QueryPlan implement(Implementor implementor) {
-        throw new UnsupportedOperationException();
+        List<Tuple> literalResult = Lists.newArrayList();
+        Iterator<ImmutableList<RexLiteral>> iter = getTuples().iterator();
+        Tuple baseTuple = new SingleKeyValueTuple(KeyValue.LOWESTKEY);
+        if (iter.hasNext()) {
+            ImmutableList<RexLiteral> row = iter.next();
+            List<Expression> exprs = 
Lists.newArrayListWithExpectedSize(row.size());
+            for (RexLiteral rexLiteral : row) {
+                exprs.add(CalciteUtils.toExpression(rexLiteral, implementor));
+            }
+            TupleProjector projector = implementor.project(exprs);
+            literalResult.add(projector.projectResults(baseTuple));
+        }
+        
+        return new LiteralResultIterationQueryPlan(literalResult.iterator(), 
null, SelectStatement.SELECT_ONE, TableRef.EMPTY_TABLE_REF, 
RowProjector.EMPTY_PROJECTOR, null, OrderBy.EMPTY_ORDER_BY, null);
     }
 }

Reply via email to