getOneRandom_ method

Future<T?> getOneRandom_(
  1. String? correlationId,
  2. String? filter
)

Implementation

Future<T?> getOneRandom_(String? correlationId, String? filter) async {
  var query = 'SELECT COUNT(*) AS count FROM ' + this.quotedTableName_();
  if (filter != null) {
    query += " WHERE " + filter;
  }

  var res = await client_!.query(query);

  var count = res.length;

  query = "SELECT * FROM " + this.quotedTableName_();

  if (filter != null) {
    query += " WHERE " + filter;
  }

  var pos = (Random().nextDouble() * count).truncate();
  query += " LIMIT 1" + " OFFSET " + pos.toString();

  res = await client_!.query(query);
  var mapItem = res.toList().isNotEmpty ? res.toList()[0].fields : null;

  if (mapItem == null)
    this.logger_.trace(
        correlationId, "Random item wasn't found from %s", [this.tableName_]);
  else
    this.logger_.trace(
        correlationId, "Retrieved random item from %s", [this.tableName_]);

  var item = this.convertToPublic_(mapItem);
  return item as T?;
}