code: def stmt_prepare(self, sql):
      # Returns True if ready for query afterwards.
      # Check if execute external here
      self.parse(sql)
      params = planner_utils.get_query_params(self.query)
      if len(params) == 0:
          pass
      #    self.do_execute()
      #    return True
      else:
          # plan query
  
          sqlquery = SQLQuery(
              self.query, session=self.session, execute=False
          )
  
          sqlquery.prepare_query()
  
          self.params = [
              Column(
                  alias=p.value,
                  type="str",
                  name=p.value,
              )
              for p in params
          ]
          self.columns = sqlquery.columns_list
  
imports: from typing import Union
  from mindsdb_sql import parse_sql
  from mindsdb_sql.planner import utils
  from numpy import dtype
  from pandas.api import types
  from mindsdb.api.executor import SQLQuery, Column
  from mindsdb.api.mysql.mysql_proxy.utilities.lightwood_dtype import dtype
  from mindsdb.api.executor.command_executor import ExecuteCommands
  from mindsdb.api.mysql.mysql_proxy.utilities import SqlApiException
  from mindsdb.api.postgres.postgres_proxy.postgres_packets.postgres_fields import POSTGRES_TYPES
  from mindsdb.utilities import log
label_desc: Use image node_id 10 for calling the Executor obj's underlying member method code with example usage: obj.stmt_prepare(sql) without return types