'Executes a SELECT query on the named table, which may return zero or
more rows, returning the result as a list of dicts.
Args:
txn : Transaction object
table (str): the table name
keyvalues (dict[str, T] | None):
column names and values to select the rows with, or None to not
apply a WHERE clause.
retcols (iterable[str]): the names of the columns to return'

@classmethod
def _simple_select_list_txn(cls, txn, table, keyvalues, retcols):

    if keyvalues:
        sql = ('SELECT    %s    FROM    %s    WHERE    %s' % (',    '.join(retcols), table, '    AND    '.join((('%s    =    ?' % (k,)) for k in keyvalues))))
        txn.execute(sql, keyvalues.values())
    else:
        sql = ('SELECT    %s    FROM    %s' % (',    '.join(retcols), table))
        txn.execute(sql)
    return cls.cursor_to_dict(txn)
