Skip to content

Commit 508f102

Browse files
committed
Added equals correction, now can check for num vs string
1 parent bed40ea commit 508f102

File tree

2 files changed

+30
-53
lines changed

2 files changed

+30
-53
lines changed

example/lib/main.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,15 @@ class _MyAppState extends State<MyApp> {
9191
void query() async {
9292
// Query for an object by name
9393
var queryBuilder = QueryBuilder<DietPlan>(DietPlan())
94-
..lessThan(DietPlan.FAT, 61)
95-
..greaterThan(DietPlan.FAT, 59);
94+
..startsWith(DietPlan.NAME, "Keto")
95+
..greaterThan(DietPlan.FAT, 64)
96+
..lessThan(DietPlan.FAT, 66)
97+
..equals(DietPlan.CARBS, 5);
9698

9799
var response = await queryBuilder.query();
98100

99101
if (response.success) {
100-
print(ApplicationConstants.APP_NAME +
101-
": " +
102-
((response.result as List<dynamic>).first as DietPlan).toString());
102+
print(ApplicationConstants.APP_NAME + ": " + ((response.result as List<dynamic>).first as DietPlan).toString());
103103
} else {
104104
print(ApplicationConstants.APP_NAME + ": " + response.exception.message);
105105
}

lib/network/parse_query.dart

Lines changed: 25 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import 'package:parse_server_sdk/objects/parse_object.dart';
44

55
class QueryBuilder<T extends ParseObject> {
66

7+
static const String _NO_OPERATOR_NEEDED = "NO_OP";
8+
79
T object;
810

911
// QueryParams
@@ -106,10 +108,10 @@ class QueryBuilder<T extends ParseObject> {
106108

107109
// ADD PARAM TO MAP
108110
//Needs fixing
109-
if (_equalsQueries.length != 0) queries.addAll(_runThroughQueryParams(_equalsQueries));
110111
if (_containsQueries.length != 0) queries.addAll(_getAllQueries(_containsQueries, "\$term"));
111112

112113
// Works
114+
if (_equalsQueries.length != 0) queries.addAll(_getAllQueries(_equalsQueries, _NO_OPERATOR_NEEDED));
113115
if (_lessThanQueries.length != 0) queries.addAll(_getAllQueries(_lessThanQueries, "\$lt"));
114116
if (_lessThanOrEqualToQueries.length != 0) queries.addAll(_getAllQueries(_lessThanOrEqualToQueries, "\$lte"));
115117
if (_greaterThanQueries.length != 0) queries.addAll(_getAllQueries(_greaterThanQueries, "\$gt"));
@@ -163,57 +165,22 @@ class QueryBuilder<T extends ParseObject> {
163165

164166
_buildQueryWithColumnValueAndOperator(MapEntry columnAndValue, String queryOperator) {
165167

166-
var queryString = "\"${columnAndValue.key}\":";
167-
168-
var queryOperatorAndValueMap = Map();
169-
queryOperatorAndValueMap[queryOperator] = columnAndValue.value;
168+
var key = columnAndValue.key;
169+
var value = convertValueToCorrectType(columnAndValue.value);
170170

171-
var formattedQueryOperatorAndValue = JsonEncoder().convert(queryOperatorAndValueMap);
172-
queryString += "$formattedQueryOperatorAndValue";
171+
if (queryOperator == _NO_OPERATOR_NEEDED){
172+
return MapEntry(_NO_OPERATOR_NEEDED, "\"${columnAndValue.key}\": $value");
173+
} else {
174+
var queryString = "\"$key\":";
173175

174-
return MapEntry(columnAndValue.key, queryString);
175-
}
176+
var queryOperatorAndValueMap = Map();
177+
queryOperatorAndValueMap[queryOperator] = columnAndValue.value;
176178

177-
_runThroughQueryParams(List<MapEntry> list) {
178-
Map<String, dynamic> mapToReturn = Map<String, dynamic>();
179-
var params;
180-
181-
if (list.isNotEmpty) {
182-
if (list.length == 1) {
183-
params = list[0];
184-
} else {
185-
for (var listItem in list) {
186-
params += "$listItem, ";
187-
}
179+
var formattedQueryOperatorAndValue = JsonEncoder().convert(queryOperatorAndValueMap);
180+
queryString += "$formattedQueryOperatorAndValue";
188181

189-
params.substring(0, params.length - 2);
190-
}
182+
return MapEntry(key, queryString);
191183
}
192-
193-
mapToReturn["wasField"] = params;
194-
195-
return JsonEncoder().convert(mapToReturn);
196-
}
197-
_runThroughQueryParamsWithSearchTerms(List<dynamic> list, String queryParam, String fieldName) {
198-
Map<String, String> mapToReturn = Map<String, String>();
199-
Map<String, dynamic> mapWithParamData = Map<String, dynamic>();
200-
Map<String, String> textEntry = Map<String, String>();
201-
Map<String, String> searchEntry = Map<String, String>();
202-
203-
for (var item in list) {
204-
mapWithParamData["\$$queryParam"] = item;
205-
}
206-
207-
var jsonMapWithParamData = JsonEncoder().convert(mapWithParamData);
208-
searchEntry['search'] = jsonMapWithParamData;
209-
210-
var jsonSearchEntry = JsonEncoder().convert(searchEntry);
211-
textEntry['text'] = jsonSearchEntry;
212-
213-
var params = JsonEncoder().convert(textEntry).toString();
214-
mapToReturn[fieldName] = params;
215-
216-
return mapToReturn;
217184
}
218185

219186
_checkForMultipleColumnInstances(List<MapEntry> queries) {
@@ -223,8 +190,13 @@ class QueryBuilder<T extends ParseObject> {
223190
// Run through each query
224191
for (var query in queries){
225192

193+
// Add queries that don't need sanitising
194+
if (query.key == _NO_OPERATOR_NEEDED) {
195+
sanitisedQueries.add(MapEntry(_NO_OPERATOR_NEEDED, query.value));
196+
}
197+
226198
// Check if query with same column name has been sanitised
227-
if (!keysAlreadyCompacted.contains(query.key)) {
199+
if (!keysAlreadyCompacted.contains(query.key) && query.key != _NO_OPERATOR_NEEDED) {
228200

229201
// If not, check that it now has
230202
keysAlreadyCompacted.add(query.key);
@@ -256,4 +228,9 @@ class QueryBuilder<T extends ParseObject> {
256228

257229
return sanitisedQueries;
258230
}
231+
232+
convertValueToCorrectType(dynamic value) {
233+
if (value is int) return (value as num);
234+
if (value is String) return "\"$value\"";
235+
}
259236
}

0 commit comments

Comments
 (0)