gortiz commented on code in PR #13221:
URL: https://github.com/apache/pinot/pull/13221#discussion_r1617511815


##########
pinot-query-planner/src/main/java/org/apache/pinot/query/planner/plannode/StageNodeSerDeUtils.java:
##########
@@ -28,70 +29,11 @@ private StageNodeSerDeUtils() {
   }
 
   public static AbstractPlanNode deserializeStageNode(Plan.StageNode 
protoNode) {
-    AbstractPlanNode planNode = newNodeInstance(protoNode.getNodeName(), 
protoNode.getStageId());
-    planNode.setDataSchema(extractDataSchema(protoNode));
-    planNode.fromObjectField(protoNode.getObjectField());
-    for (Plan.StageNode protoChild : protoNode.getInputsList()) {
-      planNode.addInput(deserializeStageNode(protoChild));
-    }
-    return planNode;
+    return new DeserializationVisitor().process(protoNode);
   }
 
   public static Plan.StageNode serializeStageNode(AbstractPlanNode planNode) {
-    Plan.StageNode.Builder builder = Plan.StageNode.newBuilder()
-        .setStageId(planNode.getPlanFragmentId())
-        .setNodeName(planNode.getClass().getSimpleName())
-        .setObjectField(planNode.toObjectField());
-    DataSchema dataSchema = planNode.getDataSchema();
-    for (int i = 0; i < dataSchema.getColumnNames().length; i++) {
-      builder.addColumnNames(dataSchema.getColumnName(i));
-      builder.addColumnDataTypes(dataSchema.getColumnDataType(i).name());
-    }
-    for (PlanNode childNode : planNode.getInputs()) {
-      builder.addInputs(serializeStageNode((AbstractPlanNode) childNode));
-    }
-    return builder.build();
-  }
-
-  private static DataSchema extractDataSchema(Plan.StageNode protoNode) {
-    String[] columnDataTypesList = 
protoNode.getColumnDataTypesList().toArray(new String[]{});
-    String[] columnNames = protoNode.getColumnNamesList().toArray(new 
String[]{});
-    DataSchema.ColumnDataType[] columnDataTypes = new 
DataSchema.ColumnDataType[columnNames.length];
-    for (int i = 0; i < columnNames.length; i++) {
-      columnDataTypes[i] = 
DataSchema.ColumnDataType.valueOf(columnDataTypesList[i]);
-    }
-    return new DataSchema(columnNames, columnDataTypes);
-  }
-
-  private static AbstractPlanNode newNodeInstance(String nodeName, int 
planFragmentId) {
-    switch (nodeName) {
-      case "TableScanNode":
-        return new TableScanNode(planFragmentId);
-      case "JoinNode":
-        return new JoinNode(planFragmentId);
-      case "ProjectNode":
-        return new ProjectNode(planFragmentId);
-      case "FilterNode":
-        return new FilterNode(planFragmentId);
-      case "AggregateNode":
-        return new AggregateNode(planFragmentId);
-      case "SortNode":
-        return new SortNode(planFragmentId);
-      case "MailboxSendNode":
-        return new MailboxSendNode(planFragmentId);
-      case "MailboxReceiveNode":
-        return new MailboxReceiveNode(planFragmentId);
-      case "ValueNode":
-        return new ValueNode(planFragmentId);
-      case "WindowNode":
-        return new WindowNode(planFragmentId);
-      case "SetOpNode":
-        return new SetOpNode(planFragmentId);
-      case "ExchangeNode":
-        throw new IllegalArgumentException(
-            "ExchangeNode should be already split into MailboxSendNode and 
MailboxReceiveNode");
-      default:
-        throw new IllegalArgumentException("Unknown node name: " + nodeName);
-    }
+    SerializationVisitor visitor = new SerializationVisitor();

Review Comment:
   Same as above. It would be better to do not allocate here.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to