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); } }
