class_docstr: Visits the SQL query plan to simplify sub-queries. On each visit, return a simplified node.
  
  Unlike SqlSubQueryReducerVisitor, this will re-write expressions to realize more reductions.
code: def _statement_contains_difficult_expressions(
      node: SqlSelectStatementNode,
  ) -> bool:
      combined_lineage = SqlExpressionTreeLineage.combine(
          tuple(x.expr.lineage for x in node.select_columns)
          + ((node.where.lineage,) if node.where else ())
          + tuple(x.expr.lineage for x in node.group_bys)
          + tuple(x.expr.lineage for x in node.order_bys)
      )
  
      return (
          combined_lineage.contains_string_exprs
          or combined_lineage.contains_column_alias_exprs
      )
  
imports: from __future__ import annotations
  import logging
  from dataclasses import dataclass
  from typing import List, Optional, Sequence, Tuple
  from metricflow.sql.optimizer.sql_query_plan_optimizer import SqlQueryPlanOptimizer
  from metricflow.sql.sql_exprs import SqlColumnAliasReferenceExpression, SqlColumnReference, SqlColumnReplacements, SqlExpressionNode, SqlExpressionTreeLineage, SqlLogicalExpression, SqlLogicalOperator
  from metricflow.sql.sql_plan import SqlJoinDescription, SqlOrderByDescription, SqlQueryPlanNode, SqlQueryPlanNodeVisitor, SqlSelectColumn, SqlSelectQueryFromClauseNode, SqlSelectStatementNode, SqlTableFromClauseNode
label_desc: Use image node_id 2 for calling the SqlRewritingSubQueryReducerVisitor obj's underlying member method code with example usage: obj._statement_contains_difficult_expressions(node) and returns: unknown