docs: def ReadFlowLogEntries(self,
                           client_id,
                           flow_id,
                           offset,
                           count,
                           with_substring=None,
                           cursor=None):
      """Reads flow log entries of a given flow using given query options."""
  
      query = ("SELECT message, UNIX_TIMESTAMP(timestamp) "
               "FROM flow_log_entries "
               "FORCE INDEX (flow_log_entries_by_flow) "
               "WHERE client_id = %s AND flow_id = %s ")
      args = [db_utils.ClientIDToInt(client_id), db_utils.FlowIDToInt(flow_id)]
  
      if with_substring is not None:
        query += "AND message LIKE %s "
        args.append("%{}%".format(with_substring))
  
      query += "ORDER BY log_id ASC LIMIT %s OFFSET %s"
      args.append(count)
      args.append(offset)
  
      cursor.execute(query, args)
  
      ret = []
      for message, timestamp in cursor.fetchall():
        ret.append(
            rdf_flow_objects.FlowLogEntry(
                message=message,
                timestamp=mysql_utils.TimestampToRDFDatetime(timestamp)))
  
      return ret