class_docstr: Abstract implementation that other SQL clients are based on.
docstr: Dry run statement; checks that the 'stmt' is queryable. Returns None. Raises an exception if the 'stmt' isn't queryable.
  
  Args:
      stmt: The SQL query statement to dry run.
      sql_bind_parameters: The parameter replacement mapping for filling in
          concrete values for SQL query parameters.
docstr_tok: ["Dry","run","statement",";","checks","that","the","'stmt","'","is","queryable",".","Returns","None",".","Raises","an","exception","if","the","'stmt","'","is","n't","queryable",".","Args",":","stmt",":","The","SQL","query","statement","to","dry","run",".","sql_bind_parameters",":","The","parameter","replacement","mapping","for","filling","in","concrete","values","for","SQL","query","parameters","."]
code: def dry_run(
      self,
      stmt: str,
      sql_bind_parameters: SqlBindParameters = SqlBindParameters(),
  ) -> None:
      """Dry run statement; checks that the 'stmt' is queryable. Returns None. Raises an exception if the 'stmt' isn't queryable.
  
      Args:
          stmt: The SQL query statement to dry run.
          sql_bind_parameters: The parameter replacement mapping for filling in
              concrete values for SQL query parameters.
      """
      start = time.time()
      logger.info(
          f"Running dry_run of:"
          f"\n\n{indent(stmt)}\n"
          + (
              f"\nwith parameters: {dict(sql_bind_parameters.param_dict)}"
              if sql_bind_parameters.param_dict
              else ""
          )
      )
      results = self._engine_specific_dry_run_implementation(
          stmt, sql_bind_parameters
      )
      stop = time.time()
      logger.info(
          f"Finished running the dry_run in {stop - start:.2f}s"
      )
      return results
  
imports: from __future__ import annotations
  import logging
  import time
  from abc import ABC, abstractmethod
  from typing import Optional
  import pandas
  from dbt_semantic_interfaces.pretty_print import pformat_big_objects
  from metricflow.dataflow.sql_table import SqlTable
  from metricflow.mf_logging.formatting import indent
  from metricflow.protocols.sql_client import SqlClient
  from metricflow.random_id import random_id
  from metricflow.sql.sql_bind_parameters import SqlBindParameters
  from metricflow.sql_request.sql_request_attributes import SqlJsonTag, SqlRequestId, SqlRequestTagSet
  from metricflow.sql_request.sql_statement_metadata import CombinedSqlTags, SqlStatementCommentMetadata
label_desc: Use image node_id 4 for calling the BaseSqlClientImplementation obj's underlying member method code with example usage: obj.dry_run(stmt, sql_bind_parameters) and returns: results