class_docstr: This is an interface between plan tree and execution tree.
  We traverse the plan tree and build execution tree from it
  
  Arguments:
      plan (AbstractPlan): Physical plan tree which needs to be executed
      evadb (EvaDBDatabase): database to execute the query on
class_docstr_tok: ["This","is","an","interface","between","plan","tree","and","execution","tree",".","We","traverse","the","plan","tree","and","build","execution","tree","from","it","Arguments",":","plan","(","AbstractPlan",")",":","Physical","plan","tree","which","needs","to","be","executed","evadb","(","EvaDBDatabase",")",":","database","to","execute","the","query","on"]
docstr: execute the plan tree
docstr_tok: ["execute","the","plan","tree"]
code: def execute_plan(
      self,
      do_not_raise_exceptions: bool = False,
      do_not_print_exceptions: bool = False,
  ) -> Iterator[Batch]:
      """execute the plan tree"""
      try:
          execution_tree = self._build_execution_tree(self._plan)
          output = execution_tree.exec()
          if output is not None:
              yield from output
      except Exception as e:
          if do_not_raise_exceptions is False:
              if do_not_print_exceptions is False:
                  logger.exception(str(e))
              raise ExecutorError(e)
  
imports: from typing import Iterator, Union
  from evadb.database import EvaDBDatabase
  from evadb.executor.abstract_executor import AbstractExecutor
  from evadb.executor.apply_and_merge_executor import ApplyAndMergeExecutor
  from evadb.executor.create_database_executor import CreateDatabaseExecutor
  from evadb.executor.create_executor import CreateExecutor
  from evadb.executor.create_function_executor import CreateFunctionExecutor
  from evadb.executor.create_index_executor import CreateIndexExecutor
  from evadb.executor.create_job_executor import CreateJobExecutor
  from evadb.executor.delete_executor import DeleteExecutor
  from evadb.executor.drop_object_executor import DropObjectExecutor
  from evadb.executor.exchange_executor import ExchangeExecutor
  from evadb.executor.executor_utils import ExecutorError
  from evadb.executor.explain_executor import ExplainExecutor
  from evadb.executor.function_scan_executor import FunctionScanExecutor
  from evadb.executor.groupby_executor import GroupByExecutor
  from evadb.executor.hash_join_executor import HashJoinExecutor
  from evadb.executor.insert_executor import InsertExecutor
  from evadb.executor.join_build_executor import BuildJoinExecutor
  from evadb.executor.limit_executor import LimitExecutor
  from evadb.executor.load_executor import LoadDataExecutor
  from evadb.executor.nested_loop_join_executor import NestedLoopJoinExecutor
  from evadb.executor.orderby_executor import OrderByExecutor
  from evadb.executor.pp_executor import PPExecutor
  from evadb.executor.predicate_executor import PredicateExecutor
  from evadb.executor.project_executor import ProjectExecutor
  from evadb.executor.rename_executor import RenameExecutor
  from evadb.executor.sample_executor import SampleExecutor
  from evadb.executor.seq_scan_executor import SequentialScanExecutor
  from evadb.executor.set_executor import SetExecutor
  from evadb.executor.show_info_executor import ShowInfoExecutor
  from evadb.executor.storage_executor import StorageExecutor
  from evadb.executor.union_executor import UnionExecutor
  from evadb.executor.use_executor import UseExecutor
  from evadb.executor.vector_index_scan_executor import VectorIndexScanExecutor
  from evadb.models.storage.batch import Batch
  from evadb.parser.create_statement import CreateDatabaseStatement, CreateJobStatement
  from evadb.parser.set_statement import SetStatement
  from evadb.parser.statement import AbstractStatement
  from evadb.parser.use_statement import UseStatement
  from evadb.plan_nodes.abstract_plan import AbstractPlan
  from evadb.plan_nodes.types import PlanOprType
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 3 for calling the PlanExecutor obj's underlying member method code with example usage: obj.execute_plan(do_not_raise_exceptions, do_not_print_exceptions) without return types