As far as Optiq is concerned, each Drill table has a single field called "_MAP". The JSON output from the table is consistent with that. This let me get rid of a load of "holder" rubbish.
Signed-off-by: Jacques Nadeau <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/b35ada34 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/b35ada34 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/b35ada34 Branch: refs/heads/execwork Commit: b35ada3426a836c7f5770da102372149326b8d3a Parents: 6db5f17 Author: Julian Hyde <[email protected]> Authored: Sat May 18 13:32:05 2013 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Thu Jun 6 11:06:43 2013 -0700 ---------------------------------------------------------------------- .../org/apache/drill/optiq/DrillFilterRel.java | 7 +---- .../java/org/apache/drill/optiq/DrillOptiq.java | 24 +++++++------- .../org/apache/drill/optiq/DrillProjectRel.java | 21 +----------- .../main/java/org/apache/drill/optiq/DrillRel.java | 3 -- .../java/org/apache/drill/optiq/DrillScan.java | 8 +---- .../org/apache/drill/optiq/DrillValuesRel.java | 15 --------- .../org/apache/drill/optiq/EnumerableDrill.java | 15 ++++----- .../org/apache/drill/optiq/EnumerableDrillRel.java | 8 +---- .../java/org/apache/drill/jdbc/test/JdbcTest.java | 6 ++-- 9 files changed, 27 insertions(+), 80 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/b35ada34/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillFilterRel.java ---------------------------------------------------------------------- diff --git a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillFilterRel.java b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillFilterRel.java index 7859a00..b29bcb5 100644 --- a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillFilterRel.java +++ b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillFilterRel.java @@ -43,11 +43,6 @@ public class DrillFilterRel extends FilterRelBase implements DrillRel { } @Override - public String getHolder() { - return ((DrillRel) getChild()).getHolder(); - } - - @Override public RelOptCost computeSelfCost(RelOptPlanner planner) { return super.computeSelfCost(planner).multiplyBy(0.1); } @@ -63,7 +58,7 @@ public class DrillFilterRel extends FilterRelBase implements DrillRel { } */ node.put("op", "filter"); - node.put("expr", DrillOptiq.toDrill(getCondition(), getHolder())); + node.put("expr", DrillOptiq.toDrill(getChild(), getCondition())); implementor.add(node); } } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/b35ada34/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillOptiq.java ---------------------------------------------------------------------- diff --git a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillOptiq.java b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillOptiq.java index 0a12fc3..73391b3 100644 --- a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillOptiq.java +++ b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillOptiq.java @@ -17,7 +17,9 @@ ******************************************************************************/ package org.apache.drill.optiq; +import org.eigenbase.rel.RelNode; import org.eigenbase.relopt.RelOptPlanner; +import org.eigenbase.reltype.RelDataTypeField; import org.eigenbase.rex.*; import org.eigenbase.sql.SqlSyntax; import org.eigenbase.sql.fun.SqlStdOperatorTable; @@ -47,20 +49,19 @@ public class DrillOptiq { /** Converts a tree of {@link RexNode} operators into a scalar expression in * Drill syntax. */ - static String toDrill(RexNode expr, String inputName) { - final RexToDrill visitor = new RexToDrill(inputName); + static String toDrill(RelNode input, RexNode expr) { + final RexToDrill visitor = new RexToDrill(input); expr.accept(visitor); - String s = visitor.buf.toString(); - return s; + return visitor.buf.toString(); } private static class RexToDrill extends RexVisitorImpl<StringBuilder> { final StringBuilder buf = new StringBuilder(); - private final String inputName; + private final RelNode input; - RexToDrill(String inputName) { + RexToDrill(RelNode input) { super(true); - this.inputName = inputName; + this.input = input; } @Override @@ -102,11 +103,10 @@ public class DrillOptiq { @Override public StringBuilder visitInputRef(RexInputRef inputRef) { - assert inputRef.getIndex() == 0; - if (inputName == null) { - return buf; - } - return buf.append(inputName); + final int index = inputRef.getIndex(); + final RelDataTypeField field = + input.getRowType().getFieldList().get(index); + return buf.append(field.getName()); } @Override http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/b35ada34/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillProjectRel.java ---------------------------------------------------------------------- diff --git a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillProjectRel.java b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillProjectRel.java index 5ab06b2..e3a88a1 100644 --- a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillProjectRel.java +++ b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillProjectRel.java @@ -48,11 +48,6 @@ public class DrillProjectRel extends ProjectRelBase implements DrillRel { } @Override - public String getHolder() { - return "xxx"; //projects().size() == 1 ? "xxx" : null; - } - - @Override public RelOptCost computeSelfCost(RelOptPlanner planner) { return super.computeSelfCost(planner).multiplyBy(0.1); } @@ -77,23 +72,11 @@ public class DrillProjectRel extends ProjectRelBase implements DrillRel { node.put("op", "project"); final ArrayNode transforms = implementor.mapper.createArrayNode(); node.put("projections", transforms); - String childHolder = ((DrillRel) getChild()).getHolder(); - if (getChild().getRowType().getFieldCount() == 1 - && getChild().getRowType().getFieldList().get(0).getName().equals("D") - && getChild().getRowType().getFieldList().get(0).getType().getSqlTypeName() == SqlTypeName.MAP) { - RelDataTypeField x = getChild().getRowType().getFieldList().get(0); - assert x.getType().getSqlTypeName() == SqlTypeName.MAP : x.getType().getSqlTypeName(); - childHolder = childHolder + "." + getChild().getRowType().getFieldList().get(0).getName(); - } - final String prefix = "output." - + (getHolder() == null ? "" : getHolder() + "."); + final String prefix = "output."; for (Pair<RexNode, String> pair : projects()) { final ObjectNode objectNode = implementor.mapper.createObjectNode(); transforms.add(objectNode); - String expr = DrillOptiq.toDrill(pair.left, childHolder); - if (expr.equals("xxx.ppu")) { -// expr = "xxx.D.ppu"; - } + String expr = DrillOptiq.toDrill(getChild(), pair.left); objectNode.put("expr", expr); String ref = prefix + pair.right; objectNode.put("ref", ref); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/b35ada34/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillRel.java ---------------------------------------------------------------------- diff --git a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillRel.java b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillRel.java index 3411435..b6dae18 100644 --- a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillRel.java +++ b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillRel.java @@ -29,9 +29,6 @@ public interface DrillRel extends RelNode { Convention CONVENTION = new Convention.Impl("DRILL", DrillRel.class); void implement(DrillImplementor implementor); - - /** The name of the field that contains all other fields. */ - String getHolder(); } // End DrillRel.java http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/b35ada34/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillScan.java ---------------------------------------------------------------------- diff --git a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillScan.java b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillScan.java index 966e485..89713ae 100644 --- a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillScan.java +++ b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillScan.java @@ -15,7 +15,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; */ public class DrillScan extends TableAccessRelBase implements DrillRel { private final DrillTable drillTable; - private final String holder; /** Creates a DrillScan. */ public DrillScan(RelOptCluster cluster, @@ -26,7 +25,6 @@ public class DrillScan extends TableAccessRelBase implements DrillRel { assert getConvention() == CONVENTION; this.drillTable = table.unwrap(DrillTable.class); assert drillTable != null; - this.holder = "_MAP"; } @Override @@ -35,15 +33,11 @@ public class DrillScan extends TableAccessRelBase implements DrillRel { DrillOptiq.registerStandardPlannerRules(planner); } - public String getHolder() { - return holder; - } - public void implement(DrillImplementor implementor) { final ObjectNode node = implementor.mapper.createObjectNode(); node.put("op", "scan"); node.put("memo", "initial_scan"); - node.put("ref", holder); + node.put("ref", "_MAP"); // output is a record with a single field, '_MAP' node.put("storageengine", drillTable.storageEngineConfig.getName()); node.put("selection", implementor.mapper.convertValue(drillTable.selection, JsonNode.class)); implementor.add(node); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/b35ada34/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillValuesRel.java ---------------------------------------------------------------------- diff --git a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillValuesRel.java b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillValuesRel.java index cc24afc..eb9fc72 100644 --- a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillValuesRel.java +++ b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/DrillValuesRel.java @@ -17,22 +17,12 @@ ******************************************************************************/ package org.apache.drill.optiq; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; import org.eigenbase.rel.ValuesRelBase; -import org.eigenbase.rel.RelCollation; import org.eigenbase.rel.RelNode; import org.eigenbase.relopt.*; import org.eigenbase.reltype.RelDataType; -import org.eigenbase.reltype.RelDataTypeField; import org.eigenbase.rex.RexLiteral; -import org.eigenbase.rex.RexNode; -import org.eigenbase.sql.type.SqlTypeName; -import org.eigenbase.util.Pair; -import java.util.Arrays; -import java.util.Collections; import java.util.List; /** @@ -54,11 +44,6 @@ public class DrillValuesRel extends ValuesRelBase implements DrillRel { } @Override - public String getHolder() { - return "xxx"; - } - - @Override public RelOptCost computeSelfCost(RelOptPlanner planner) { return super.computeSelfCost(planner).multiplyBy(0.1); } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/b35ada34/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/EnumerableDrill.java ---------------------------------------------------------------------- diff --git a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/EnumerableDrill.java b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/EnumerableDrill.java index 1ef4313..0a225cf 100644 --- a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/EnumerableDrill.java +++ b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/EnumerableDrill.java @@ -60,21 +60,21 @@ public class EnumerableDrill<E> * @param fields Names of fields, or null to return the whole blob */ public EnumerableDrill(DrillConfig config, LogicalPlan plan, Class<E> clazz, - String holder, List<String> fields) { + List<String> fields) { this.plan = plan; this.config = config; - this.holder = holder; + this.holder = null; this.fields = fields; config.setSinkQueues(0, queue); } /** Creates a DrillEnumerable from a plan represented as a string. Each record * returned is a {@link JsonNode}. */ - public static <E> EnumerableDrill<E> of(String plan, String holder, + public static <E> EnumerableDrill<E> of(String plan, final List<String> fieldNames, Class<E> clazz) { DrillConfig config = DrillConfig.create(); final LogicalPlan parse = LogicalPlan.parse(config, plan); - return new EnumerableDrill<>(config, parse, clazz, holder, fieldNames); + return new EnumerableDrill<>(config, parse, clazz, fieldNames); } /** Runs the plan as a background task. */ @@ -124,7 +124,7 @@ public class EnumerableDrill<E> // TODO: use the result of task, and check for exceptions final Future<Collection<RunOutcome>> task = runPlan(service); - return new JsonEnumerator(queue, holder, fields); + return new JsonEnumerator(queue, fields); } private static ObjectMapper createMapper() { @@ -191,10 +191,9 @@ public class EnumerableDrill<E> private final List<String> fields; private Object current; - public JsonEnumerator(BlockingQueue<Object> queue, String holder, - List<String> fields) { + public JsonEnumerator(BlockingQueue<Object> queue, List<String> fields) { this.queue = queue; - this.holder = holder; + this.holder = null; this.fields = fields; } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/b35ada34/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/EnumerableDrillRel.java ---------------------------------------------------------------------- diff --git a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/EnumerableDrillRel.java b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/EnumerableDrillRel.java index c026e00..ce21c92 100644 --- a/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/EnumerableDrillRel.java +++ b/sandbox/prototype/sqlparser/src/main/java/org/apache/drill/optiq/EnumerableDrillRel.java @@ -59,8 +59,7 @@ public class EnumerableDrillRel extends SingleRel implements EnumerableRel { static { try { OF_METHOD = - EnumerableDrill.class.getMethod("of", String.class, String.class, - List.class, Class.class); + EnumerableDrill.class.getMethod("of", String.class, List.class, Class.class); } catch (NoSuchMethodException e) { throw new RuntimeException(e); } @@ -102,16 +101,11 @@ public class EnumerableDrillRel extends SingleRel implements EnumerableRel { String plan = drillImplementor.getJsonString(); Hook.LOGICAL_PLAN.run(plan); final List<String> fieldNameList = RelOptUtil.getFieldNameList(rowType); - String holder = input.getHolder(); - if (fieldNameList.equals(Arrays.asList("_MAP")) && !holder.equals("xxx")) { - holder = null; - } return new BlockBuilder() .append( Expressions.call( OF_METHOD, Expressions.constant(plan), - Expressions.constant(holder), Expressions.call( Arrays.class, "asList", http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/b35ada34/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcTest.java ---------------------------------------------------------------------- diff --git a/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcTest.java b/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcTest.java index 1fb9da2..878f375 100644 --- a/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcTest.java +++ b/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcTest.java @@ -133,7 +133,7 @@ public class JdbcTest extends TestCase { + "'query':[" + "{'op':'sequence','do':[" + "{'op':'scan','memo':'initial_scan','ref':'_MAP','storageengine':'donuts-json','selection':{'path':'/donuts.json','type':'JSON'}}," - + "{'op':'project','projections':[{'expr':'_MAP.ppu','ref':'output.xxx.PPU'}]}," + + "{'op':'project','projections':[{'expr':'_MAP.ppu','ref':'output.PPU'}]}," + "{'op':'store','storageengine':'queue','memo':'output sink','target':{'number':0}}]}]}"); } @@ -160,8 +160,8 @@ public class JdbcTest extends TestCase { + "{'op':'sequence','do':[" + "{'op':'scan','memo':'initial_scan','ref':'_MAP','storageengine':'donuts-json','selection':{'path':'/donuts.json','type':'JSON'}}," + "{'op':'filter','expr':'(_MAP.donuts.ppu > 0.6)'}," - + "{'op':'project','projections':[{'expr':'_MAP.donuts','ref':'output.xxx.D'}]}," - + "{'op':'project','projections':[{'expr':'xxx.name','ref':'output.xxx.NAME'},{'expr':'xxx.xx','ref':'output.xxx.XX'}]}," + + "{'op':'project','projections':[{'expr':'_MAP.donuts','ref':'output.D'}]}," + + "{'op':'project','projections':[{'expr':'D.name','ref':'output.NAME'},{'expr':'D.xx','ref':'output.XX'}]}," + "{'op':'store','storageengine':'queue','memo':'output sink','target':{'number':0}}]}]}"); }
