def METHOD_NAME(self, operation, parameters=None):
    """Execute a SQL statement.
    Parameters
    ----------
    operation: str
        A SQL query
    parameters: dict
        Parameters to substitute into ``operation``.
    Returns
    -------
    self : Cursor
    Examples
    --------
    >>> c = conn.cursor()
    >>> c.execute("select symbol, qty from stocks")
    >>> list(c)
    [('RHAT', 100.0), ('IBM', 1000.0), ('MSFT', 1000.0), ('IBM', 500.0)]
    Passing in ``parameters``:
    >>> c.execute("select symbol qty from stocks where qty <= :max_qty",
    ...           parameters={"max_qty": 500})
    [('RHAT', 100.0), ('IBM', 500.0)]
    """
    # https://github.com/omnisci/pymapd/issues/263
    operation = operation.strip()
    if parameters is not None:
        operation = str(_bind_parameters(operation, parameters))
    self.rowcount = -1
    try:
        result = self.connection._client.sql_execute(
            self.connection._session,
            operation,
            column_format=True,
            nonce=None,
            first_n=-1,
            at_most_n=-1,
        )
    except T.TDBException as e:
        raise _translate_exception(e) from e
    self._description = _extract_description(result.row_set.row_desc)
    try:
        self.rowcount = len(result.row_set.columns[0].nulls)
    except IndexError:
        pass
    self._result_set = make_row_results_set(result)
    self._result = result
    return self