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