where method

Query<T> where(
  1. Object field,
  2. {Object? isEqualTo,
  3. Object? isNotEqualTo,
  4. Object? isLessThan,
  5. Object? isLessThanOrEqualTo,
  6. Object? isGreaterThan,
  7. Object? isGreaterThanOrEqualTo,
  8. Object? arrayContains,
  9. Iterable<Object?>? arrayContainsAny,
  10. Iterable<Object?>? whereIn,
  11. Iterable<Object?>? whereNotIn,
  12. bool? isNull}
)

Adds a filter constraint to the query.

Parameters:

  • field: The field to filter on.
  • Various optional filter conditions like isEqualTo, isGreaterThan, etc.

Returns: A new Query with the added filter.

Example:

query = query.where('age', isGreaterThan: 18);

Implementation

Query<T> where(
  Object field, {
  Object? isEqualTo,
  Object? isNotEqualTo,
  Object? isLessThan,
  Object? isLessThanOrEqualTo,
  Object? isGreaterThan,
  Object? isGreaterThanOrEqualTo,
  Object? arrayContains,
  Iterable<Object?>? arrayContainsAny,
  Iterable<Object?>? whereIn,
  Iterable<Object?>? whereNotIn,
  bool? isNull,
}) {
  if (field is Filter) {
    var filters = getAllWhere(field);
    dynamic res = this;
    for (int i = 0; i < filters.length; i++) {
      res._conditions.add(filters[i]);
    }
  }
  Map<String, dynamic> conds = {
    "isEqualTo": isEqualTo,
    "isNotEqualTo": isNotEqualTo,
    "isLessThan": isLessThan,
    "isLessThanOrEqualTo": isLessThanOrEqualTo,
    "isGreaterThan": isGreaterThan,
    "isGreaterThanOrEqualTo": isGreaterThanOrEqualTo,
    "arrayContains": arrayContains,
    "arrayContainsAny": arrayContainsAny,
    "whereIn": whereIn,
    "whereNotIn": whereNotIn,
    "isNull": isNull,
  };
  if (field is FieldPath) {
    field = field.getPath();
  }
  Query<T> newQuery = Query<T>(
    helper: QueryHelper(),
    oracledb: _oracledb,
    path: path,
  );
  _helper.dupQuery(newQuery, this);

  conds.forEach((key, value) {
    if (value != null && value != '') {
      newQuery._ops.add(key);
      if (key == "arrayContains") {
        for (int i = 0; i < newQuery._ops.length; i++) {
          if (newQuery._ops[i] == "arrayContainsAny") {
            throw Utils.oracledbErrorHandler(
              400,
              OracledbErrorMessages.invalidArrayContainsCombination,
              null,
            );
          }
        }
      }
      if (key == "arrayContainsAny") {
        for (int i = 0; i < newQuery._ops.length; i++) {
          if (newQuery._ops[i] == "arrayContains") {
            throw Utils.oracledbErrorHandler(
              400,
              OracledbErrorMessages.invalidArrayContainsCombination,
              null,
            );
          }
        }
      }
      if (("${whereOperators[key]}" == "in" ||
              "${whereOperators[key]}" == "not in") &&
          value is! List) {
        value = [value];
      }
      newQuery._conditions.add({
        "field": "$field",
        "op": "${whereOperators[key]}",
        "value": value,
      });
    }
  });

  return newQuery;
}