docstr: Bind table ref object and convert to LogicalGet, LogicalJoin,
      LogicalFunctionScan, or LogicalQueryDerivedGet
  
  Arguments:
      table {TableRef} - - [Input table ref object created by the parser]
code: def visit_table_ref(self, table_ref: TableRef):
      """Bind table ref object and convert to LogicalGet, LogicalJoin,
          LogicalFunctionScan, or LogicalQueryDerivedGet
  
      Arguments:
          table {TableRef} - - [Input table ref object created by the parser]
      """
      if table_ref.is_table_atom():
          # Table
          catalog_entry = table_ref.table.table_obj
          self._plan = LogicalGet(
              table_ref,
              catalog_entry,
              table_ref.alias,
              chunk_params=table_ref.chunk_params,
          )
  
      elif table_ref.is_table_valued_expr():
          tve = table_ref.table_valued_expr
          if (
              tve.func_expr.name.lower()
              == str(FunctionType.EXTRACT_OBJECT).lower()
          ):
              self._plan = LogicalExtractObject(
                  detector=tve.func_expr.children[1],
                  tracker=tve.func_expr.children[2],
                  alias=table_ref.alias,
                  do_unnest=tve.do_unnest,
              )
          else:
              self._plan = LogicalFunctionScan(
                  func_expr=tve.func_expr,
                  alias=table_ref.alias,
                  do_unnest=tve.do_unnest,
              )
  
      elif table_ref.is_select():
          # NestedQuery
          self.visit_select(table_ref.select_statement)
          child_plan = self._plan
          self._plan = LogicalQueryDerivedGet(table_ref.alias)
          self._plan.append_child(child_plan)
  
      elif table_ref.is_join():
          join_node = table_ref.join_node
          join_plan = LogicalJoin(
              join_type=join_node.join_type,
              join_predicate=join_node.predicate,
          )
          self.visit_table_ref(join_node.left)
          join_plan.append_child(self._plan)
          self.visit_table_ref(join_node.right)
          join_plan.append_child(self._plan)
          self._plan = join_plan
  
      if table_ref.sample_freq:
          self._visit_sample(
              table_ref.sample_freq, table_ref.sample_type
          )
  
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 2 for calling the StatementToPlanConverter obj's underlying member method code with example usage: obj.visit_table_ref(table_ref) without return types