code: def test_read_sql_task(sql_client: SqlClient) -> None:  # noqa: D
      task = SelectSqlQueryToDataFrameTask(
          sql_client, "SELECT 1 AS foo", SqlBindParameters()
      )
      execution_plan = ExecutionPlan("plan0", leaf_tasks=[task])
  
      results = SequentialPlanExecutor().execute_plan(execution_plan)
      task_result = results.get_result(task.task_id)
  
      assert not results.contains_task_errors
      assert task_result.df is not None
  
      assert_dataframes_equal(
          actual=task_result.df,
          expected=pd.DataFrame(
              columns=["foo"],
              data=[(1,)],
          ),
          compare_names_using_lowercase=sql_client.sql_engine_type
          is SqlEngine.SNOWFLAKE,
      )
  
file_path: metricflow/metricflow/test/execution/test_tasks.py
imports: from __future__ import annotations
  import pandas
  from metricflow.dataflow.sql_table import SqlTable
  from metricflow.execution.execution_plan import ExecutionPlan, SelectSqlQueryToDataFrameTask, SelectSqlQueryToTableTask
  from metricflow.execution.executor import SequentialPlanExecutor
  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
label_desc: Use image node_id 1 for calling a global function with example usage: test_read_sql_task(sql_client) without return types