class_docstr: An abstract class for the executor engine
  Arguments:
      node (AbstractPlan): Plan node corresponding to this executor
class_docstr_tok: ["An","abstract","class","for","the","executor","engine","Arguments",":","node","(","AbstractPlan",")",":","Plan","node","corresponding","to","this","executor"]
docstr: The object is intentionally generated on demand to prevent serialization issues. Having a SQLAlchemy object as a member variable can cause problems with multiprocessing. See get_catalog_instance()
docstr_tok: ["The","object","is","intentionally","generated","on","demand","to","prevent","serialization","issues",".","Having","a","SQLAlchemy","object","as","a","member","variable","can","cause","problems","with","multiprocessing",".","See","get_catalog_instance","(",")"]
code: def catalog(self) -> "CatalogManager":
      """The object is intentionally generated on demand to prevent serialization issues. Having a SQLAlchemy object as a member variable can cause problems with multiprocessing. See get_catalog_instance()"""
      return self._db.catalog() if self._db else None
  
file_path: evadb/evadb/executor/abstract_executor.py
imports: from abc import ABC, abstractmethod
  from collections import deque
  from typing import TYPE_CHECKING, Any, Generator, Iterable, List, TypeVar
  from evadb.database import EvaDBDatabase
  from evadb.models.storage.batch import Batch
  from evadb.plan_nodes.abstract_plan import AbstractPlan
label_desc: Use image node_id 2 for calling the AbstractExecutor obj's underlying member method code with example usage: obj.catalog() and returns: unknown