@@ -4,6 +4,8 @@ import 'package:parse_server_sdk/objects/parse_object.dart';
4
4
5
5
class QueryBuilder <T extends ParseObject > {
6
6
7
+ static const String _NO_OPERATOR_NEEDED = "NO_OP" ;
8
+
7
9
T object;
8
10
9
11
// QueryParams
@@ -106,10 +108,10 @@ class QueryBuilder<T extends ParseObject> {
106
108
107
109
// ADD PARAM TO MAP
108
110
//Needs fixing
109
- if (_equalsQueries.length != 0 ) queries.addAll (_runThroughQueryParams (_equalsQueries));
110
111
if (_containsQueries.length != 0 ) queries.addAll (_getAllQueries (_containsQueries, "\$ term" ));
111
112
112
113
// Works
114
+ if (_equalsQueries.length != 0 ) queries.addAll (_getAllQueries (_equalsQueries, _NO_OPERATOR_NEEDED ));
113
115
if (_lessThanQueries.length != 0 ) queries.addAll (_getAllQueries (_lessThanQueries, "\$ lt" ));
114
116
if (_lessThanOrEqualToQueries.length != 0 ) queries.addAll (_getAllQueries (_lessThanOrEqualToQueries, "\$ lte" ));
115
117
if (_greaterThanQueries.length != 0 ) queries.addAll (_getAllQueries (_greaterThanQueries, "\$ gt" ));
@@ -163,57 +165,22 @@ class QueryBuilder<T extends ParseObject> {
163
165
164
166
_buildQueryWithColumnValueAndOperator (MapEntry columnAndValue, String queryOperator) {
165
167
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);
170
170
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 \" :" ;
173
175
174
- return MapEntry (columnAndValue.key, queryString );
175
- }
176
+ var queryOperatorAndValueMap = Map ( );
177
+ queryOperatorAndValueMap[queryOperator] = columnAndValue.value;
176
178
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 " ;
188
181
189
- params.substring (0 , params.length - 2 );
190
- }
182
+ return MapEntry (key, queryString);
191
183
}
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;
217
184
}
218
185
219
186
_checkForMultipleColumnInstances (List <MapEntry > queries) {
@@ -223,8 +190,13 @@ class QueryBuilder<T extends ParseObject> {
223
190
// Run through each query
224
191
for (var query in queries){
225
192
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
+
226
198
// 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 ) {
228
200
229
201
// If not, check that it now has
230
202
keysAlreadyCompacted.add (query.key);
@@ -256,4 +228,9 @@ class QueryBuilder<T extends ParseObject> {
256
228
257
229
return sanitisedQueries;
258
230
}
231
+
232
+ convertValueToCorrectType (dynamic value) {
233
+ if (value is int ) return (value as num );
234
+ if (value is String ) return "\" $value \" " ;
235
+ }
259
236
}
0 commit comments