docstr: Based on the instance of the statement the corresponding
     visit is called.
     The logic is hidden from client.
  
  Arguments:
      statement {AbstractStatement} - - [Input statement]
code: def visit(self, statement: AbstractStatement):
      """Based on the instance of the statement the corresponding
         visit is called.
         The logic is hidden from client.
  
      Arguments:
          statement {AbstractStatement} - - [Input statement]
      """
      if isinstance(statement, SelectStatement):
          self.visit_select(statement)
      elif isinstance(statement, InsertTableStatement):
          self.visit_insert(statement)
      elif isinstance(statement, CreateTableStatement):
          self.visit_create(statement)
      elif isinstance(statement, RenameTableStatement):
          self.visit_rename(statement)
      elif isinstance(statement, CreateFunctionStatement):
          self.visit_create_function(statement)
      elif isinstance(statement, DropObjectStatement):
          self.visit_drop_object(statement)
      elif isinstance(statement, LoadDataStatement):
          self.visit_load_data(statement)
      elif isinstance(statement, ShowStatement):
          self.visit_show(statement)
      elif isinstance(statement, ExplainStatement):
          self.visit_explain(statement)
      elif isinstance(statement, CreateIndexStatement):
          self.visit_create_index(statement)
      elif isinstance(statement, DeleteTableStatement):
          self.visit_delete(statement)
      return self._plan
  
imports: from evadb.binder.binder_utils import get_bound_func_expr_outputs_as_tuple_value_expr
  from evadb.expression.abstract_expression import AbstractExpression
  from evadb.expression.function_expression import FunctionExpression
  from evadb.optimizer.operators import LogicalCreate, LogicalCreateFunction, LogicalCreateIndex, LogicalDelete, LogicalDropObject, LogicalExplain, LogicalExtractObject, LogicalFilter, LogicalFunctionScan, LogicalGet, LogicalGroupBy, LogicalInsert, LogicalJoin, LogicalLimit, LogicalLoadData, LogicalOrderBy, LogicalProject, LogicalQueryDerivedGet, LogicalRename, LogicalSample, LogicalShow, LogicalUnion
  from evadb.optimizer.optimizer_utils import column_definition_to_function_io, metadata_definition_to_function_metadata
  from evadb.parser.create_function_statement import CreateFunctionStatement
  from evadb.parser.create_index_statement import CreateIndexStatement
  from evadb.parser.create_statement import CreateTableStatement
  from evadb.parser.delete_statement import DeleteTableStatement
  from evadb.parser.drop_object_statement import DropObjectStatement
  from evadb.parser.explain_statement import ExplainStatement
  from evadb.parser.insert_statement import InsertTableStatement
  from evadb.parser.load_statement import LoadDataStatement
  from evadb.parser.rename_statement import RenameTableStatement
  from evadb.parser.select_statement import SelectStatement
  from evadb.parser.show_statement import ShowStatement
  from evadb.parser.statement import AbstractStatement
  from evadb.parser.table_ref import JoinNode, TableRef, TableValuedExpression
  from evadb.parser.types import FunctionType, JoinType
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 21 for calling the StatementToPlanConverter obj's underlying member method code with example usage: obj.visit(statement) and returns: self