class_docstr: For now, we assume every group has only one logic expression.
class_docstr_tok: ["For","now",",","we","assume","every","group","has","only","one","logic","expression","."]
docstr: Collects table aliases of all the children
docstr_tok: ["Collects","table","aliases","of","all","the","children"]
code: def _get_table_aliases(self, expr: GroupExpression) -> List[str]:
      """
      Collects table aliases of all the children
      """
      aliases = []
      for child_grp_id in expr.children:
          child_grp = self._groups[child_grp_id]
          aliases.extend(child_grp.aliases)
      if (
          expr.opr.opr_type == OperatorType.LOGICALGET
          or expr.opr.opr_type == OperatorType.LOGICALQUERYDERIVEDGET
      ):
          aliases.append(expr.opr.alias)
      elif expr.opr.opr_type == OperatorType.LOGICALFUNCTIONSCAN:
          aliases.append(expr.opr.alias)
      return aliases
  
file_path: evadb/evadb/optimizer/memo.py
imports: from typing import Dict, List
  from evadb.constants import UNDEFINED_GROUP_ID
  from evadb.optimizer.group import Group
  from evadb.optimizer.group_expression import GroupExpression
  from evadb.optimizer.operators import OperatorType
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 6 for calling the Memo obj's underlying member method code with example usage: obj._get_table_aliases(expr) and returns: aliases