where method
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;
}