def METHOD_NAME(
    self,
    table_name: str,
    cols: Optional[List[str]] = None,
    conditions: Optional[Conditions] = None,
) -> Tuple[str, Tuple[Any]]:
    """
    Creates a query string and tuple of parameters used as bindings.
    Parameters
    ----------
    table_name : str
        Name of the table.
    cols : list, optional
        Columns names to return
    conditions: Conditions, optional
        Nested array of conditions to satisfy, becomes ``WHERE``.
    Returns
    -------
    query : str
        ``SELECT`` query
    parameters : tuple
        Variables to bind
    """
    condition_dict = self.make_condition_expression(conditions)
    query_values = []
    if condition_dict is not None:
        condition_exp = condition_dict["expression"]
        query_values.extend(condition_dict["values"])
    else:
        condition_exp = None
    if not cols:
        col_exp = "*"
    else:
        col_exp = ", ".join([f"`{col}`" for col in cols])
    query = f"SELECT {col_exp} FROM {table_name} " + (
        f" WHERE {condition_exp}" if condition_exp is not None else ""
    )
    return query, query_values