code: def test_dry_run(
      mf_test_session_state: MetricFlowTestSessionState,
      sql_client: SqlClient,
  ) -> None:  # noqa: D
      test_table = SqlTable(
          schema_name=mf_test_session_state.mf_system_schema,
          table_name=_random_table(),
      )
  
      stmt = f"CREATE TABLE {test_table.sql} AS SELECT 1 AS foo"
      sql_client.dry_run(stmt)
      with pytest.raises(expected_exception=Exception) as excinfo:
          sql_client.execute(stmt=f"SELECT * FROM {test_table.sql}")
  
      exception_message = repr(excinfo.value)
      match = (
          test_table.table_name
          if sql_client.sql_engine_type is not SqlEngine.SNOWFLAKE
          else str.upper(test_table.table_name)
      )
      assert (
          exception_message.find(f"{match}") != -1
      ), f"Expected an exception about table {match} not found, but got `{exception_message}`"
  
imports: from __future__ import annotations
  import logging
  from typing import Set, Union
  import pandas
  import pytest
  from metricflow.dataflow.sql_table import SqlTable
  from metricflow.protocols.sql_client import SqlClient, SqlEngine
  from metricflow.random_id import random_id
  from metricflow.sql.sql_bind_parameters import SqlBindParameters
  from metricflow.test.compare_df import assert_dataframes_equal
  from metricflow.test.fixtures.setup_fixtures import MetricFlowTestSessionState
  from metricflow.test.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods
label_desc: Use image node_id 9 for calling a global function with example usage: test_dry_run(mf_test_session_state, sql_client) without return types