Skip to content

Commit c9beb94

Browse files
committed
Added ability to use less than and greater than in single query
1 parent 41e9ff7 commit c9beb94

File tree

2 files changed

+61
-54
lines changed

2 files changed

+61
-54
lines changed

example/lib/main.dart

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
import 'dart:async';
2-
31
import 'package:flutter/material.dart';
42
import 'package:flutter_plugin_example/application_constants.dart';
53
import 'package:flutter_plugin_example/diet_plan.dart';
6-
import 'package:parse_server_sdk/objects/parse_object.dart';
74
import 'package:parse_server_sdk/network/parse_query.dart';
8-
import 'package:parse_server_sdk/objects/parse_response.dart';
5+
import 'package:parse_server_sdk/objects/parse_object.dart';
96
import 'package:parse_server_sdk/objects/parse_user.dart';
107
import 'package:parse_server_sdk/parse.dart';
118

@@ -17,7 +14,6 @@ class MyApp extends StatefulWidget {
1714
}
1815

1916
class _MyAppState extends State<MyApp> {
20-
2117
@override
2218
void initState() {
2319
super.initState();
@@ -35,21 +31,19 @@ class _MyAppState extends State<MyApp> {
3531
body: new Center(
3632
child: new Text('Running Parse init'),
3733
),
38-
floatingActionButton: new FloatingActionButton(
39-
onPressed: runTestQueries),
34+
floatingActionButton:
35+
new FloatingActionButton(onPressed: runTestQueries),
4036
),
4137
);
4238
}
4339

4440
initParse() async {
4541
// Initialize parse
46-
Parse().initialize(
47-
ApplicationConstants.PARSE_APPLICATION_ID,
42+
Parse().initialize(ApplicationConstants.PARSE_APPLICATION_ID,
4843
ApplicationConstants.PARSE_SERVER_URL,
4944
masterKey: ApplicationConstants.PARSE_MASTER_KEY,
5045
appName: ApplicationConstants.APP_NAME,
51-
debug: true
52-
);
46+
debug: true);
5347
}
5448

5549
runTestQueries() {
@@ -86,7 +80,9 @@ class _MyAppState extends State<MyApp> {
8680
var response = await DietPlan().get('R5EonpUDWy');
8781

8882
if (response.success) {
89-
print(ApplicationConstants.APP_NAME + ": " + (response.result as DietPlan).toString());
83+
print(ApplicationConstants.APP_NAME +
84+
": " +
85+
(response.result as DietPlan).toString());
9086
} else {
9187
print(ApplicationConstants.APP_NAME + ": " + response.exception.message);
9288
}
@@ -96,19 +92,23 @@ class _MyAppState extends State<MyApp> {
9692
// Query for an object by name
9793
var queryBuilder = QueryBuilder<DietPlan>(DietPlan())
9894
..field = DietPlan.FAT
99-
..notEqualTo = [60, 65];
95+
..greaterThan = [59]
96+
..lessThan = [61];
10097

10198
var response = await queryBuilder.query();
10299

103100
if (response.success) {
104-
print(ApplicationConstants.APP_NAME + ": " + ((response.result as List<dynamic>).first as DietPlan).toString());
101+
print(ApplicationConstants.APP_NAME +
102+
": " +
103+
((response.result as List<dynamic>).first as DietPlan).toString());
105104
} else {
106105
print(ApplicationConstants.APP_NAME + ": " + response.exception.message);
107106
}
108107
}
109108

110109
initUser() async {
111-
ParseUser().create("TestFlutter", "TestPassword123", "[email protected]");
110+
ParseUser()
111+
.create("TestFlutter", "TestPassword123", "[email protected]");
112112
var user = await ParseUser().signUp();
113113
user = await ParseUser().login();
114114
user = await ParseUser().currentUser(fromServer: true);

lib/network/parse_query.dart

Lines changed: 46 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -50,54 +50,77 @@ class QueryBuilder <T extends ParseObject> {
5050
}
5151

5252
String _buildQuery() {
53-
var existsMap = Map();
53+
var queries = List<String>();
5454

5555
// START QUERY
56-
String query = "where=";
56+
const String QUERY_START = "where={";
57+
const String QUERY_END = "}";
5758

58-
// ADD PARAM TO MAP
59+
var query = QUERY_START;
5960

61+
// ADD PARAM TO MAP
6062
//Needs fixing
61-
if (equals != null) existsMap = _runThroughQueryParams(equals, field);
62-
if (contains != null) existsMap = _runThroughQueryParamsWithName(contains, "\$term", field);
63+
if (equals != null) queries.add(_runThroughQueryParams(equals, field));
64+
if (contains != null) queries.add(_buildQueryWithOperatorAndField(contains, "\$term", field));
6365

6466
// Works
65-
if (lessThan != null) existsMap = _runThroughQueryParamsWithName(lessThan, "\$lt", field);
66-
if (lessThanOrEqualTo != null) existsMap = _runThroughQueryParamsWithName(lessThanOrEqualTo, "\$lte", field);
67-
if (greaterThan != null) existsMap = _runThroughQueryParamsWithName(greaterThan, "\$gt", field);
68-
if (greaterThanOrEqualTo != null) existsMap = _runThroughQueryParamsWithName(greaterThanOrEqualTo, "\$gte", field);
69-
if (notEqualTo != null) existsMap = _runThroughQueryParamsWithName(notEqualTo, "\$ne", field);
67+
if (lessThan != null) queries.add(_buildQueryWithOperatorAndField(lessThan, "\$lt", field));
68+
if (lessThanOrEqualTo != null) queries.add(_buildQueryWithOperatorAndField(lessThanOrEqualTo, "\$lte", field));
69+
if (greaterThan != null) queries.add(_buildQueryWithOperatorAndField(greaterThan, "\$gt", field));
70+
if (greaterThanOrEqualTo != null) queries.add(_buildQueryWithOperatorAndField(greaterThanOrEqualTo, "\$gte", field));
71+
if (notEqualTo != null) queries.add(_buildQueryWithOperatorAndField(notEqualTo, "\$ne", field));
7072

7173
// Not sure
72-
if (containedIn != null) existsMap = _runThroughQueryParamsWithName(containedIn, "\$in", field);
73-
if (notContainedIn != null) existsMap = _runThroughQueryParamsWithName(notContainedIn, "\$nin", field);
74-
if (exists != null) existsMap = _runThroughQueryParamsWithName(exists, "\$exists", field);
75-
if (select != null) existsMap = _runThroughQueryParamsWithName(select, "\$select", field);
76-
if (dontSelect != null) existsMap = _runThroughQueryParamsWithName(dontSelect, "\$dontSelect", field);
77-
if (all != null) existsMap = _runThroughQueryParamsWithName(all, "\$all", field);
74+
if (containedIn != null) queries.add(_buildQueryWithOperatorAndField(containedIn, "\$in", field));
75+
if (notContainedIn != null) queries.add(_buildQueryWithOperatorAndField(notContainedIn, "\$nin", field));
76+
if (exists != null) queries.add(_buildQueryWithOperatorAndField(exists, "\$exists", field));
77+
if (select != null) queries.add(_buildQueryWithOperatorAndField(select, "\$select", field));
78+
if (dontSelect != null) queries.add( _buildQueryWithOperatorAndField(dontSelect, "\$dontSelect", field));
79+
if (all != null) queries.add(_buildQueryWithOperatorAndField(all, "\$all", field));
7880

7981
// Works
80-
if (regEx != null) existsMap = _runThroughQueryParamsWithName(regEx, "\$regex", field);
82+
if (regEx != null) queries.add(_buildQueryWithOperatorAndField(regEx, "\$regex", field));
8183

8284
// Doesnt
83-
if (text != null) existsMap = _runThroughQueryParamsWithName(text, "\$text", field);
85+
if (text != null) queries.add(_buildQueryWithOperatorAndField(text, "\$text", field));
8486

8587
// -- BUILD QUERY USING MAP
86-
for(var item in existsMap.entries){
87-
query += "{\"${item.key.toString()}\":${item.value}}";
88+
for(var item in queries){
89+
if (query == QUERY_START) {
90+
query += item;
91+
} else {
92+
query += ",$item";
93+
}
8894
}
8995

9096
// -- ADD LIMITER
9197
if (limit != 0) query += '?limit=$limit';
9298
if (skip != 0) query += '?skip=$skip';
9399

100+
query += QUERY_END;
101+
94102
// -- TEST
95103
print("QUERY: $query");
96104

97105
return query;
98106
}
99107

100-
Map _runThroughQueryParams(List<dynamic> list, String queryParam) {
108+
_buildQueryWithOperatorAndField(List<dynamic> listOfValuesToQuery, String queryOperator, String tableNameToQuery) {
109+
110+
var queryOperatorAndValueMap = Map();
111+
var queryString = "\"$tableNameToQuery\":";
112+
113+
for (var queryValue in listOfValuesToQuery) {
114+
queryOperatorAndValueMap[queryOperator] = queryValue;
115+
}
116+
117+
var formattedQueryOperatorAndValue = JsonEncoder().convert(queryOperatorAndValueMap);
118+
queryString += "$formattedQueryOperatorAndValue";
119+
120+
return queryString;
121+
}
122+
123+
_runThroughQueryParams(List<dynamic> list, String queryParam) {
101124
Map<String, dynamic> mapToReturn = Map<String, dynamic>();
102125
var params;
103126

@@ -115,26 +138,10 @@ class QueryBuilder <T extends ParseObject> {
115138

116139
mapToReturn[queryParam] = params;
117140

118-
return mapToReturn;
119-
}
120-
121-
Map<String, String> _runThroughQueryParamsWithName(List<dynamic> list, String queryParam, String fieldName) {
122-
Map<String, String> mapToReturn = Map<String, String>();
123-
Map<String, dynamic> mapWithParamData = Map<String, dynamic>();
124-
125-
for (var item in list) {
126-
mapWithParamData.putIfAbsent(queryParam, item);
127-
}
128-
129-
var params = JsonEncoder().convert(mapWithParamData);
130-
131-
mapToReturn[fieldName] = params;
132-
133-
return mapToReturn;
141+
return JsonEncoder().convert(mapToReturn);
134142
}
135143

136-
Map<String, String> _runThroughQueryParamsWithSearchTerms(
137-
List<dynamic> list, String queryParam, String fieldName) {
144+
Map<String, String> _runThroughQueryParamsWithSearchTerms(List<dynamic> list, String queryParam, String fieldName) {
138145
Map<String, String> mapToReturn = Map<String, String>();
139146
Map<String, dynamic> mapWithParamData = Map<String, dynamic>();
140147
Map<String, String> textEntry = Map<String, String>();

0 commit comments

Comments
 (0)