search method

Future<List<Map<String, dynamic>>> search({
  1. required String table,
  2. String? text,
  3. List<double>? vector,
  4. dynamic where,
  5. int? limit,
  6. List<String>? select,
})

Search for records in a table.

Implementation

Future<List<Map<String, dynamic>>> search({
  required String table,
  String? text,
  List<double>? vector,
  dynamic where, // String or Map<String, dynamic>
  int? limit,
  List<String>? select,
}) async {
  // If 'where' is a Map, convert it to an AND-joined string.
  String? whereClause;
  if (where is Map<String, dynamic>) {
    final parts = <String>[];
    where.forEach((key, value) {
      parts.add("$key = ${_escapeValue(value)}");
    });
    whereClause = parts.join(" AND ");
  } else if (where is String) {
    whereClause = where;
  }

  final payload = <String, dynamic>{"table": table, "where": whereClause, "text": text};

  if (limit != null) {
    payload["limit"] = limit;
  }
  if (select != null) {
    payload["select"] = select;
  }
  if (vector != null) {
    payload["vector"] = vector;
  }

  final response = (await room.sendRequest("database.search", payload) as JsonResponse);

  // If your sendRequest returns a structure like { "json": { "results": [...] } }
  // Then parse it accordingly:
  final results = response.json["results"];

  if (results is List) {
    return results.map((e) => e as Map<String, dynamic>).toList();
  }

  return [];
}