in smallpond/logical/node.py [0:0]
def visit(self, node: Node, depth: int = 0) -> T:
"""
Visit a node depending on its type.
If the method for the node type is not implemented, call `generic_visit`.
"""
if isinstance(node, DataSourceNode):
return self.visit_data_source_node(node, depth)
elif isinstance(node, DataSinkNode):
return self.visit_data_sink_node(node, depth)
elif isinstance(node, RootNode):
return self.visit_root_node(node, depth)
elif isinstance(node, UnionNode):
return self.visit_union_node(node, depth)
elif isinstance(node, ConsolidateNode):
return self.visit_consolidate_node(node, depth)
elif isinstance(node, PartitionNode):
return self.visit_partition_node(node, depth)
elif isinstance(node, PythonScriptNode):
return self.visit_python_script_node(node, depth)
elif isinstance(node, ArrowComputeNode):
return self.visit_arrow_compute_node(node, depth)
elif isinstance(node, ArrowStreamNode):
return self.visit_arrow_stream_node(node, depth)
elif isinstance(node, LimitNode):
return self.visit_limit_node(node, depth)
elif isinstance(node, SqlEngineNode):
return self.visit_query_engine_node(node, depth)
elif isinstance(node, ProjectionNode):
return self.visit_projection_node(node, depth)
else:
raise Exception(f"Unknown node type: {node}")