class_docstr: Removes unnecessary columns from SELECT statements in the SQL query plan.
  
  As the visitor traverses up to the parents, it pushes the list of required columns and rewrites the parent nodes.
class_docstr_tok: ["Removes","unnecessary","columns","from","SELECT","statements","in","the","SQL","query","plan",".","As","the","visitor","traverses","up","to","the","parents",",","it","pushes","the","list","of","required","columns","and","rewrites","the","parent","nodes","."]
docstr: This node is effectively a FROM statement inside a SELECT statement node, so pruning cannot apply.
docstr_tok: ["This","node","is","effectively","a","FROM","statement","inside","a","SELECT","statement","node",",","so","pruning","can","not","apply","."]
code: def visit_table_from_clause_node(
      self, node: SqlTableFromClauseNode
  ) -> SqlQueryPlanNode:  # noqa: D
      """This node is effectively a FROM statement inside a SELECT statement node, so pruning cannot apply."""
      return node
  
file_path: metricflow/metricflow/sql/optimizer/column_pruner.py
imports: from __future__ import annotations
  import logging
  from collections import defaultdict
  from typing import Dict, List, Set, Tuple
  from metricflow.sql.optimizer.sql_query_plan_optimizer import SqlQueryPlanOptimizer
  from metricflow.sql.sql_exprs import SqlExpressionTreeLineage
  from metricflow.sql.sql_plan import SqlJoinDescription, SqlQueryPlanNode, SqlQueryPlanNodeVisitor, SqlSelectColumn, SqlSelectQueryFromClauseNode, SqlSelectStatementNode, SqlTableFromClauseNode
label_desc: Use image node_id 5 for calling the SqlColumnPrunerVisitor obj's underlying member method code with example usage: obj.visit_table_from_clause_node(node) and returns: node