From da5dcd1560328ba913fad907336b3facef7e596b Mon Sep 17 00:00:00 2001 From: Mohammad Bagher Fakouri Date: Tue, 18 Oct 2022 11:03:19 +0330 Subject: [PATCH 1/8] add "and" and "nor" in QueryBuilder add "and" and "nor" add ```_constructorInitialize``` function for handle "and" , "nor" and "or" in QueryBuilder --- packages/dart/lib/src/network/parse_query.dart | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/dart/lib/src/network/parse_query.dart b/packages/dart/lib/src/network/parse_query.dart index 92bc647b4..50fc1e8a6 100644 --- a/packages/dart/lib/src/network/parse_query.dart +++ b/packages/dart/lib/src/network/parse_query.dart @@ -10,7 +10,18 @@ class QueryBuilder { } QueryBuilder.or(this.object, List> list) { - String query = '"\$or":['; + _constructorInitialize(query: '"\$or":[', list: list); + } + + QueryBuilder.and(this.object, List> list) { + _constructorInitialize(query: '"\$and":[', list: list); + } + + QueryBuilder.nor(this.object, List> list) { + _constructorInitialize(query: '"\$nor":[', list: list); + } + + void _constructorInitialize({required String query, required List> list}) { for (int i = 0; i < list.length; ++i) { if (i > 0) { query += ','; From 804525c7d919cff7b1ddb519520f8c23f63d10de Mon Sep 17 00:00:00 2001 From: Mohammad Bagher Fakouri Date: Tue, 18 Oct 2022 11:45:56 +0330 Subject: [PATCH 2/8] add "and" and "nor" in QueryBuilder add "and" and "nor" add ```_constructorInitialize``` function for handle "and" , "nor" and "or" in QueryBuilder --- packages/dart/lib/src/network/parse_query.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/dart/lib/src/network/parse_query.dart b/packages/dart/lib/src/network/parse_query.dart index 50fc1e8a6..d94d3e93c 100644 --- a/packages/dart/lib/src/network/parse_query.dart +++ b/packages/dart/lib/src/network/parse_query.dart @@ -10,18 +10,18 @@ class QueryBuilder { } QueryBuilder.or(this.object, List> list) { - _constructorInitialize(query: '"\$or":[', list: list); + _constructorInitializer(query: '"\$or":[', list: list); } QueryBuilder.and(this.object, List> list) { - _constructorInitialize(query: '"\$and":[', list: list); + _constructorInitializer(query: '"\$and":[', list: list); } QueryBuilder.nor(this.object, List> list) { - _constructorInitialize(query: '"\$nor":[', list: list); + _constructorInitializer(query: '"\$nor":[', list: list); } - void _constructorInitialize({required String query, required List> list}) { + void _constructorInitializer({required String query, required List> list}) { for (int i = 0; i < list.length; ++i) { if (i > 0) { query += ','; From dad4c212c67a1bd0b28d0d1de772344a49e33774 Mon Sep 17 00:00:00 2001 From: mbfakourii Date: Thu, 27 Oct 2022 13:30:46 +0330 Subject: [PATCH 3/8] add test for and, nor, or --- packages/dart/test/parse_query_test.dart | 193 ++++++++++++++++++++++- 1 file changed, 189 insertions(+), 4 deletions(-) diff --git a/packages/dart/test/parse_query_test.dart b/packages/dart/test/parse_query_test.dart index ba343ef40..d382a915f 100644 --- a/packages/dart/test/parse_query_test.dart +++ b/packages/dart/test/parse_query_test.dart @@ -25,8 +25,7 @@ void main() { appVersion: 'someAppVersion', ); - final QueryBuilder queryBuilder = - QueryBuilder(ParseObject('_User', client: client)); + final QueryBuilder queryBuilder = QueryBuilder(ParseObject('_User', client: client)); queryBuilder.whereRelatedTo('likes', 'Post', '8TOXdXf3tz'); when(client.get( @@ -36,7 +35,7 @@ void main() { )).thenAnswer((_) async => ParseNetworkResponse( statusCode: 200, data: - "{\"results\":[{\"objectId\":\"eT9muOxBTJ\",\"username\":\"test\",\"createdAt\":\"2021-04-23T13:46:06.092Z\",\"updatedAt\":\"2021-04-23T13:46:23.586Z\",\"ACL\":{\"*\":{\"read\":true},\"eT9muOxBTJ\":{\"read\":true,\"write\":true}}}]}")); + "{\"results\":[{\"objectId\":\"eT9muOxBTJ\",\"username\":\"test\",\"createdAt\":\"2021-04-23T13:46:06.092Z\",\"updatedAt\":\"2021-04-23T13:46:23.586Z\",\"ACL\":{\"*\":{\"read\":true},\"eT9muOxBTJ\":{\"read\":true,\"write\":true}}}]}")); ParseResponse response = await queryBuilder.query(); @@ -59,7 +58,193 @@ void main() { final Uri expectedQuery = Uri( query: - 'where={"\$relatedTo":{"object":{"__type":"Pointer","className":"Post","objectId":"8TOXdXf3tz"},"key":"likes"}}'); + 'where={"\$relatedTo":{"object":{"__type":"Pointer","className":"Post","objectId":"8TOXdXf3tz"},"key":"likes"}}'); + expect(result.query, expectedQuery.query); + }); + + test('QueryBuilder.or', () async { + final MockParseClient client = MockParseClient(); + + await Parse().initialize( + 'appId', + 'https://test.parse.com', + debug: true, + // to prevent automatic detection + fileDirectory: 'someDirectory', + // to prevent automatic detection + appName: 'appName', + // to prevent automatic detection + appPackageName: 'somePackageName', + // to prevent automatic detection + appVersion: 'someAppVersion', + ); + + ParseObject user = ParseObject("_User", client: client); + var firstName = QueryBuilder(user)..regEx('firstName', "Liam"); + + var lastName = QueryBuilder(user)..regEx('lastName', "Johnson"); + + QueryBuilder mainQuery = QueryBuilder.or( + user, + [firstName, lastName], + ); + + when(client.get( + any, + options: anyNamed("options"), + onReceiveProgress: anyNamed("onReceiveProgress"), + )).thenAnswer((_) async => ParseNetworkResponse( + statusCode: 200, + data: + "{\"results\": [{\"className\": \"_User\",\"objectId\": \"fqx5BECOME\",\"createdAt\": \"2022-10-25T06:04:47.138Z\",\"updatedAt\": \"2022-10-25T06:05:22.328Z\",\"firstName\": \"Liam1\",\"lastName\": \"Johnson1\"},{\"className\": \"_User\",\"objectId\": \"hAtRRYGrUO\",\"createdAt\": \"2022-01-24T15:53:48.396Z\",\"updatedAt\": \"2022-01-25T05:52:01.701Z\",\"firstName\": \"Liam2\",\"lastName\": \"Johnson2\"}]}")); + + var response = await mainQuery.query(); + + expect(response.results?.first, isA()); + + ParseObject parseObject = response.results?.first; + + expect(parseObject.get("firstName"), "Liam1"); + expect(parseObject.objectId, "fqx5BECOME"); + expect(parseObject.createdAt, DateTime.parse("2022-10-25T06:04:47.138Z")); + expect(parseObject.updatedAt, DateTime.parse("2022-10-25T06:05:22.328Z")); + + final Uri result = Uri.parse(verify(client.get( + captureAny, + options: anyNamed("options"), + onReceiveProgress: anyNamed("onReceiveProgress"), + )).captured.single); + + + expect(result.path, '/classes/_User'); + + final Uri expectedQuery = Uri( + query: + 'where={"\$or":[{"firstName":{"\$regex":"Liam"}},{"lastName":{"\$regex":"Johnson"}}]}'); + expect(result.query, expectedQuery.query); + }); + + test('QueryBuilder.and', () async { + final MockParseClient client = MockParseClient(); + + await Parse().initialize( + 'appId', + 'https://test.parse.com', + debug: true, + // to prevent automatic detection + fileDirectory: 'someDirectory', + // to prevent automatic detection + appName: 'appName', + // to prevent automatic detection + appPackageName: 'somePackageName', + // to prevent automatic detection + appVersion: 'someAppVersion', + ); + + ParseObject user = ParseObject("_User", client: client); + var firstName = QueryBuilder(user)..regEx('firstName', "jak"); + + var lastName = QueryBuilder(user)..regEx('lastName', "jaki"); + + QueryBuilder mainQuery = QueryBuilder.and( + user, + [firstName, lastName], + ); + + when(client.get( + any, + options: anyNamed("options"), + onReceiveProgress: anyNamed("onReceiveProgress"), + )).thenAnswer((_) async => ParseNetworkResponse( + statusCode: 200, + data: + "{\"results\": [{\"className\": \"_User\",\"objectId\": \"fqx5BECOME\",\"createdAt\": \"2022-10-25T06:04:47.138Z\",\"updatedAt\": \"2022-10-25T06:05:22.328Z\",\"firstName\": \"jak1\",\"lastName\": \"jaki1\"},{\"className\": \"_User\",\"objectId\": \"hAtRRYGrUO\",\"createdAt\": \"2022-01-24T15:53:48.396Z\",\"updatedAt\": \"2022-01-25T05:52:01.701Z\",\"firstName\": \"jak2\",\"lastName\": \"jaki2\"}]}")); + + var response = await mainQuery.query(); + + expect(response.results?.first, isA()); + + ParseObject parseObject = response.results?.first; + + expect(parseObject.get("firstName"), "jak1"); + expect(parseObject.objectId, "fqx5BECOME"); + expect(parseObject.createdAt, DateTime.parse("2022-10-25T06:04:47.138Z")); + expect(parseObject.updatedAt, DateTime.parse("2022-10-25T06:05:22.328Z")); + + final Uri result = Uri.parse(verify(client.get( + captureAny, + options: anyNamed("options"), + onReceiveProgress: anyNamed("onReceiveProgress"), + )).captured.single); + + + expect(result.path, '/classes/_User'); + + final Uri expectedQuery = Uri( + query: + 'where={"\$and":[{"firstName":{"\$regex":"jak"}},{"lastName":{"\$regex":"jaki"}}]}'); + expect(result.query, expectedQuery.query); + }); + + test('QueryBuilder.nor', () async { + final MockParseClient client = MockParseClient(); + + await Parse().initialize( + 'appId', + 'https://test.parse.com', + debug: true, + // to prevent automatic detection + fileDirectory: 'someDirectory', + // to prevent automatic detection + appName: 'appName', + // to prevent automatic detection + appPackageName: 'somePackageName', + // to prevent automatic detection + appVersion: 'someAppVersion', + ); + + ParseObject user = ParseObject("_User", client: client); + var firstName = QueryBuilder(user)..regEx('firstName', "Oliver"); + + var lastName = QueryBuilder(user)..regEx('lastName', "Smith"); + + QueryBuilder mainQuery = QueryBuilder.nor( + user, + [firstName, lastName], + ); + + when(client.get( + any, + options: anyNamed("options"), + onReceiveProgress: anyNamed("onReceiveProgress"), + )).thenAnswer((_) async => ParseNetworkResponse( + statusCode: 200, + data: + "{\"results\": [{\"className\": \"_User\",\"objectId\": \"fqx5BECOME\",\"createdAt\": \"2022-10-25T06:04:47.138Z\",\"updatedAt\": \"2022-10-25T06:05:22.328Z\",\"firstName\": \"Oliver1\",\"lastName\": \"Smith1\"},{\"className\": \"_User\",\"objectId\": \"hAtRRYGrUO\",\"createdAt\": \"2022-01-24T15:53:48.396Z\",\"updatedAt\": \"2022-01-25T05:52:01.701Z\",\"firstName\": \"Oliver2\",\"lastName\": \"Smith2\"}]}")); + + var response = await mainQuery.query(); + + expect(response.results?.first, isA()); + + ParseObject parseObject = response.results?.first; + + expect(parseObject.get("firstName"), "Oliver1"); + expect(parseObject.objectId, "fqx5BECOME"); + expect(parseObject.createdAt, DateTime.parse("2022-10-25T06:04:47.138Z")); + expect(parseObject.updatedAt, DateTime.parse("2022-10-25T06:05:22.328Z")); + + final Uri result = Uri.parse(verify(client.get( + captureAny, + options: anyNamed("options"), + onReceiveProgress: anyNamed("onReceiveProgress"), + )).captured.single); + + + expect(result.path, '/classes/_User'); + + final Uri expectedQuery = Uri( + query: + 'where={"\$nor":[{"firstName":{"\$regex":"Oliver"}},{"lastName":{"\$regex":"Smith"}}]}'); expect(result.query, expectedQuery.query); }); }); From e76a03e9cede995f8e7b3f0c9078c88d213f19a6 Mon Sep 17 00:00:00 2001 From: mbfakourii Date: Fri, 28 Oct 2022 09:39:54 +0330 Subject: [PATCH 4/8] fix lint error for dart code format --- .../dart/lib/src/network/parse_query.dart | 3 +- packages/dart/test/parse_query_test.dart | 37 ++++++++++--------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/packages/dart/lib/src/network/parse_query.dart b/packages/dart/lib/src/network/parse_query.dart index d94d3e93c..55178dff2 100644 --- a/packages/dart/lib/src/network/parse_query.dart +++ b/packages/dart/lib/src/network/parse_query.dart @@ -21,7 +21,8 @@ class QueryBuilder { _constructorInitializer(query: '"\$nor":[', list: list); } - void _constructorInitializer({required String query, required List> list}) { + void _constructorInitializer( + {required String query, required List> list}) { for (int i = 0; i < list.length; ++i) { if (i > 0) { query += ','; diff --git a/packages/dart/test/parse_query_test.dart b/packages/dart/test/parse_query_test.dart index d382a915f..e93c2a77c 100644 --- a/packages/dart/test/parse_query_test.dart +++ b/packages/dart/test/parse_query_test.dart @@ -25,7 +25,8 @@ void main() { appVersion: 'someAppVersion', ); - final QueryBuilder queryBuilder = QueryBuilder(ParseObject('_User', client: client)); + final QueryBuilder queryBuilder = + QueryBuilder(ParseObject('_User', client: client)); queryBuilder.whereRelatedTo('likes', 'Post', '8TOXdXf3tz'); when(client.get( @@ -35,7 +36,7 @@ void main() { )).thenAnswer((_) async => ParseNetworkResponse( statusCode: 200, data: - "{\"results\":[{\"objectId\":\"eT9muOxBTJ\",\"username\":\"test\",\"createdAt\":\"2021-04-23T13:46:06.092Z\",\"updatedAt\":\"2021-04-23T13:46:23.586Z\",\"ACL\":{\"*\":{\"read\":true},\"eT9muOxBTJ\":{\"read\":true,\"write\":true}}}]}")); + "{\"results\":[{\"objectId\":\"eT9muOxBTJ\",\"username\":\"test\",\"createdAt\":\"2021-04-23T13:46:06.092Z\",\"updatedAt\":\"2021-04-23T13:46:23.586Z\",\"ACL\":{\"*\":{\"read\":true},\"eT9muOxBTJ\":{\"read\":true,\"write\":true}}}]}")); ParseResponse response = await queryBuilder.query(); @@ -58,7 +59,7 @@ void main() { final Uri expectedQuery = Uri( query: - 'where={"\$relatedTo":{"object":{"__type":"Pointer","className":"Post","objectId":"8TOXdXf3tz"},"key":"likes"}}'); + 'where={"\$relatedTo":{"object":{"__type":"Pointer","className":"Post","objectId":"8TOXdXf3tz"},"key":"likes"}}'); expect(result.query, expectedQuery.query); }); @@ -80,9 +81,11 @@ void main() { ); ParseObject user = ParseObject("_User", client: client); - var firstName = QueryBuilder(user)..regEx('firstName', "Liam"); + var firstName = QueryBuilder(user) + ..regEx('firstName', "Liam"); - var lastName = QueryBuilder(user)..regEx('lastName', "Johnson"); + var lastName = QueryBuilder(user) + ..regEx('lastName', "Johnson"); QueryBuilder mainQuery = QueryBuilder.or( user, @@ -96,7 +99,7 @@ void main() { )).thenAnswer((_) async => ParseNetworkResponse( statusCode: 200, data: - "{\"results\": [{\"className\": \"_User\",\"objectId\": \"fqx5BECOME\",\"createdAt\": \"2022-10-25T06:04:47.138Z\",\"updatedAt\": \"2022-10-25T06:05:22.328Z\",\"firstName\": \"Liam1\",\"lastName\": \"Johnson1\"},{\"className\": \"_User\",\"objectId\": \"hAtRRYGrUO\",\"createdAt\": \"2022-01-24T15:53:48.396Z\",\"updatedAt\": \"2022-01-25T05:52:01.701Z\",\"firstName\": \"Liam2\",\"lastName\": \"Johnson2\"}]}")); + "{\"results\": [{\"className\": \"_User\",\"objectId\": \"fqx5BECOME\",\"createdAt\": \"2022-10-25T06:04:47.138Z\",\"updatedAt\": \"2022-10-25T06:05:22.328Z\",\"firstName\": \"Liam1\",\"lastName\": \"Johnson1\"},{\"className\": \"_User\",\"objectId\": \"hAtRRYGrUO\",\"createdAt\": \"2022-01-24T15:53:48.396Z\",\"updatedAt\": \"2022-01-25T05:52:01.701Z\",\"firstName\": \"Liam2\",\"lastName\": \"Johnson2\"}]}")); var response = await mainQuery.query(); @@ -115,12 +118,11 @@ void main() { onReceiveProgress: anyNamed("onReceiveProgress"), )).captured.single); - expect(result.path, '/classes/_User'); final Uri expectedQuery = Uri( query: - 'where={"\$or":[{"firstName":{"\$regex":"Liam"}},{"lastName":{"\$regex":"Johnson"}}]}'); + 'where={"\$or":[{"firstName":{"\$regex":"Liam"}},{"lastName":{"\$regex":"Johnson"}}]}'); expect(result.query, expectedQuery.query); }); @@ -142,7 +144,8 @@ void main() { ); ParseObject user = ParseObject("_User", client: client); - var firstName = QueryBuilder(user)..regEx('firstName', "jak"); + var firstName = QueryBuilder(user) + ..regEx('firstName', "jak"); var lastName = QueryBuilder(user)..regEx('lastName', "jaki"); @@ -158,7 +161,7 @@ void main() { )).thenAnswer((_) async => ParseNetworkResponse( statusCode: 200, data: - "{\"results\": [{\"className\": \"_User\",\"objectId\": \"fqx5BECOME\",\"createdAt\": \"2022-10-25T06:04:47.138Z\",\"updatedAt\": \"2022-10-25T06:05:22.328Z\",\"firstName\": \"jak1\",\"lastName\": \"jaki1\"},{\"className\": \"_User\",\"objectId\": \"hAtRRYGrUO\",\"createdAt\": \"2022-01-24T15:53:48.396Z\",\"updatedAt\": \"2022-01-25T05:52:01.701Z\",\"firstName\": \"jak2\",\"lastName\": \"jaki2\"}]}")); + "{\"results\": [{\"className\": \"_User\",\"objectId\": \"fqx5BECOME\",\"createdAt\": \"2022-10-25T06:04:47.138Z\",\"updatedAt\": \"2022-10-25T06:05:22.328Z\",\"firstName\": \"jak1\",\"lastName\": \"jaki1\"},{\"className\": \"_User\",\"objectId\": \"hAtRRYGrUO\",\"createdAt\": \"2022-01-24T15:53:48.396Z\",\"updatedAt\": \"2022-01-25T05:52:01.701Z\",\"firstName\": \"jak2\",\"lastName\": \"jaki2\"}]}")); var response = await mainQuery.query(); @@ -177,12 +180,11 @@ void main() { onReceiveProgress: anyNamed("onReceiveProgress"), )).captured.single); - expect(result.path, '/classes/_User'); final Uri expectedQuery = Uri( query: - 'where={"\$and":[{"firstName":{"\$regex":"jak"}},{"lastName":{"\$regex":"jaki"}}]}'); + 'where={"\$and":[{"firstName":{"\$regex":"jak"}},{"lastName":{"\$regex":"jaki"}}]}'); expect(result.query, expectedQuery.query); }); @@ -204,9 +206,11 @@ void main() { ); ParseObject user = ParseObject("_User", client: client); - var firstName = QueryBuilder(user)..regEx('firstName', "Oliver"); + var firstName = QueryBuilder(user) + ..regEx('firstName', "Oliver"); - var lastName = QueryBuilder(user)..regEx('lastName', "Smith"); + var lastName = QueryBuilder(user) + ..regEx('lastName', "Smith"); QueryBuilder mainQuery = QueryBuilder.nor( user, @@ -220,7 +224,7 @@ void main() { )).thenAnswer((_) async => ParseNetworkResponse( statusCode: 200, data: - "{\"results\": [{\"className\": \"_User\",\"objectId\": \"fqx5BECOME\",\"createdAt\": \"2022-10-25T06:04:47.138Z\",\"updatedAt\": \"2022-10-25T06:05:22.328Z\",\"firstName\": \"Oliver1\",\"lastName\": \"Smith1\"},{\"className\": \"_User\",\"objectId\": \"hAtRRYGrUO\",\"createdAt\": \"2022-01-24T15:53:48.396Z\",\"updatedAt\": \"2022-01-25T05:52:01.701Z\",\"firstName\": \"Oliver2\",\"lastName\": \"Smith2\"}]}")); + "{\"results\": [{\"className\": \"_User\",\"objectId\": \"fqx5BECOME\",\"createdAt\": \"2022-10-25T06:04:47.138Z\",\"updatedAt\": \"2022-10-25T06:05:22.328Z\",\"firstName\": \"Oliver1\",\"lastName\": \"Smith1\"},{\"className\": \"_User\",\"objectId\": \"hAtRRYGrUO\",\"createdAt\": \"2022-01-24T15:53:48.396Z\",\"updatedAt\": \"2022-01-25T05:52:01.701Z\",\"firstName\": \"Oliver2\",\"lastName\": \"Smith2\"}]}")); var response = await mainQuery.query(); @@ -239,12 +243,11 @@ void main() { onReceiveProgress: anyNamed("onReceiveProgress"), )).captured.single); - expect(result.path, '/classes/_User'); final Uri expectedQuery = Uri( query: - 'where={"\$nor":[{"firstName":{"\$regex":"Oliver"}},{"lastName":{"\$regex":"Smith"}}]}'); + 'where={"\$nor":[{"firstName":{"\$regex":"Oliver"}},{"lastName":{"\$regex":"Smith"}}]}'); expect(result.query, expectedQuery.query); }); }); From 5020aca5764270603727a57197409c0abb070fdb Mon Sep 17 00:00:00 2001 From: mbfakourii Date: Sat, 29 Oct 2022 20:41:25 +0330 Subject: [PATCH 5/8] add `QueryBuilder.and` and `QueryBuilder.nor` in dart and flutter README.md --- packages/dart/README.md | 1 + packages/flutter/README.md | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/dart/README.md b/packages/dart/README.md index 2e0477b21..39b59227b 100644 --- a/packages/dart/README.md +++ b/packages/dart/README.md @@ -312,6 +312,7 @@ QueryBuilder mainQuery = QueryBuilder.or( var apiResponse = await mainQuery.query(); ``` +and also if you want to find objects that match several queries you can use __QueryBuilder.and__ and If you want to find objects that do not match all queries, you can use __QueryBuilder.nor__ The features available are:- * Equals diff --git a/packages/flutter/README.md b/packages/flutter/README.md index 563af2194..b2a58e6cd 100644 --- a/packages/flutter/README.md +++ b/packages/flutter/README.md @@ -350,6 +350,7 @@ QueryBuilder mainQuery = QueryBuilder.or( var apiResponse = await mainQuery.query(); ``` +and also if you want to find objects that match several queries you can use __QueryBuilder.and__ and If you want to find objects that do not match all queries, you can use __QueryBuilder.nor__ The features available are:- * Equals From 80a618dc2026c8618f21c14fd6ec28ff24d80ff0 Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Sun, 13 Nov 2022 21:44:53 +0100 Subject: [PATCH 6/8] rewording docs --- packages/dart/README.md | 3 ++- packages/flutter/README.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/dart/README.md b/packages/dart/README.md index 39b59227b..0be5d7be4 100644 --- a/packages/dart/README.md +++ b/packages/dart/README.md @@ -312,7 +312,8 @@ QueryBuilder mainQuery = QueryBuilder.or( var apiResponse = await mainQuery.query(); ``` -and also if you want to find objects that match several queries you can use __QueryBuilder.and__ and If you want to find objects that do not match all queries, you can use __QueryBuilder.nor__ + +To find objects that match several queries use __QueryBuilder.and__. To find objects that do not match any given query use __QueryBuilder.nor__. The features available are:- * Equals diff --git a/packages/flutter/README.md b/packages/flutter/README.md index b2a58e6cd..245c3ee16 100644 --- a/packages/flutter/README.md +++ b/packages/flutter/README.md @@ -350,7 +350,8 @@ QueryBuilder mainQuery = QueryBuilder.or( var apiResponse = await mainQuery.query(); ``` -and also if you want to find objects that match several queries you can use __QueryBuilder.and__ and If you want to find objects that do not match all queries, you can use __QueryBuilder.nor__ + +To find objects that match several queries use __QueryBuilder.and__. To find objects that do not match any given query use __QueryBuilder.nor__. The features available are:- * Equals From dee1093037b307efac2ec1c7af3a29e0a90b8908 Mon Sep 17 00:00:00 2001 From: mbfakourii Date: Wed, 21 Dec 2022 18:35:40 +0330 Subject: [PATCH 7/8] bump versions + Changes were added in CHANGELOG --- packages/dart/CHANGELOG.md | 6 ++++++ packages/dart/lib/src/base/parse_constants.dart | 2 +- packages/dart/pubspec.yaml | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/dart/CHANGELOG.md b/packages/dart/CHANGELOG.md index 7f22d1aed..021d8db15 100644 --- a/packages/dart/CHANGELOG.md +++ b/packages/dart/CHANGELOG.md @@ -1,3 +1,9 @@ +## [3.1.6](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.5...dart-3.1.6) (2022-12-21) + +### Bug Fixes + +* Add and, nor operators in QueryBuilder ([#795](https://github.com/parse-community/Parse-SDK-Flutter/issues/795)) + ## [3.1.5](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.4...dart-3.1.5) (2022-12-16) ### Bug Fixes diff --git a/packages/dart/lib/src/base/parse_constants.dart b/packages/dart/lib/src/base/parse_constants.dart index 5e3f4a0de..133420012 100644 --- a/packages/dart/lib/src/base/parse_constants.dart +++ b/packages/dart/lib/src/base/parse_constants.dart @@ -1,7 +1,7 @@ part of flutter_parse_sdk; // Library -const String keySdkVersion = '3.1.5'; +const String keySdkVersion = '3.1.6'; const String keyLibraryName = 'Flutter Parse SDK'; // End Points diff --git a/packages/dart/pubspec.yaml b/packages/dart/pubspec.yaml index 7e04a6e19..e642205d6 100644 --- a/packages/dart/pubspec.yaml +++ b/packages/dart/pubspec.yaml @@ -1,6 +1,6 @@ name: parse_server_sdk description: Dart plugin for Parse Server, (https://parseplatform.org), (https://back4app.com) -version: 3.1.5 +version: 3.1.6 homepage: https://github.com/parse-community/Parse-SDK-Flutter environment: From 67e7a5cc1c880fe1eaa2c86303e2e91430374b21 Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Wed, 21 Dec 2022 16:14:29 +0100 Subject: [PATCH 8/8] add changelog format --- packages/dart/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dart/CHANGELOG.md b/packages/dart/CHANGELOG.md index 021d8db15..a8b86c369 100644 --- a/packages/dart/CHANGELOG.md +++ b/packages/dart/CHANGELOG.md @@ -2,7 +2,7 @@ ### Bug Fixes -* Add and, nor operators in QueryBuilder ([#795](https://github.com/parse-community/Parse-SDK-Flutter/issues/795)) +* Add `and`, `nor` operators in QueryBuilder ([#795](https://github.com/parse-community/Parse-SDK-Flutter/issues/795)) ## [3.1.5](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.4...dart-3.1.5) (2022-12-16)