code: def test_prune_grandparents_in_join_query(
      request: FixtureRequest,
      mf_test_session_state: MetricFlowTestSessionState,
      column_pruner: SqlColumnPrunerOptimizer,
      join_grandparent_pruning_select_statement: SqlSelectStatementNode,
  ) -> None:
      """Tests pruning grandparents of a join query."""
      assert_default_rendered_sql_equal(
          request=request,
          mf_test_session_state=mf_test_session_state,
          sql_plan_node=join_grandparent_pruning_select_statement,
          plan_id="before_pruning",
      )
  
      column_pruned_select_node = column_pruner.optimize(
          join_grandparent_pruning_select_statement
      )
      assert_default_rendered_sql_equal(
          request=request,
          mf_test_session_state=mf_test_session_state,
          sql_plan_node=column_pruned_select_node,
          plan_id="after_pruning",
      )
  
imports: from __future__ import annotations
  import pytest
  from _pytest.fixtures import FixtureRequest
  from metricflow.dataflow.sql_table import SqlTable
  from metricflow.sql.optimizer.column_pruner import SqlColumnPrunerOptimizer
  from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer, SqlQueryPlanRenderer
  from metricflow.sql.sql_exprs import SqlColumnReference, SqlColumnReferenceExpression, SqlComparison, SqlComparisonExpression, SqlIsNullExpression, SqlStringExpression
  from metricflow.sql.sql_plan import SqlJoinDescription, SqlJoinType, SqlQueryPlanNode, SqlSelectColumn, SqlSelectStatementNode, SqlTableFromClauseNode
  from metricflow.test.fixtures.setup_fixtures import MetricFlowTestSessionState
  from metricflow.test.sql.compare_sql_plan import assert_default_rendered_sql_equal
label_desc: Use image node_id 15 for calling a global function with example usage: test_prune_grandparents_in_join_query(request, mf_test_session_state, column_pruner, join_grandparent_pruning_select_statement) without return types