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

Reply via email to