From c262c77540112f43715491f04227193cd25efe25 Mon Sep 17 00:00:00 2001 From: kingtous Date: Fri, 24 Sep 2021 16:42:23 +0800 Subject: [PATCH 1/6] add nested relational and query test --- spec/CloudCode.spec.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/spec/CloudCode.spec.js b/spec/CloudCode.spec.js index 07d94a366f..0dce96a790 100644 --- a/spec/CloudCode.spec.js +++ b/spec/CloudCode.spec.js @@ -3458,4 +3458,23 @@ describe('sendEmail', () => { 'Failed to send email because no mail adapter is configured for Parse Server.' ); }); + + it('should have object found with nested relational data query', async () => { + const obj1 = Parse.Object.extend('TestObject'); + const obj2 = Parse.Object.extend('TestObject2'); + let item2 = new obj2(); + item2 = await item2.save(); + let item1 = new obj1(); + const relation = item1.relation('rel'); + relation.add(item2); + item1 = await item1.save(); + Parse.Cloud.beforeFind('TestObject', req => { + const additionalQ = new Parse.Query('TestObject'); + additionalQ.equalTo('rel', item2); + return Parse.Query.and(req.query, additionalQ); + }); + const q = new Parse.Query('TestObject'); + const res = await q.first(); + expect(res).toBeDefined(); + }); }); From 6c66d7778904b3640bca44f4c9c9c884404e9655 Mon Sep 17 00:00:00 2001 From: Kingtous Date: Sat, 23 Oct 2021 11:17:16 +0800 Subject: [PATCH 2/6] fix: add $and incursive process --- src/Controllers/DatabaseController.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Controllers/DatabaseController.js b/src/Controllers/DatabaseController.js index be2e61ab42..b1883466a7 100644 --- a/src/Controllers/DatabaseController.js +++ b/src/Controllers/DatabaseController.js @@ -971,6 +971,18 @@ class DatabaseController { return Promise.resolve(query); }); } + if (query['$and']) { + const ors = query['$and']; + return Promise.all( + ors.map((aQuery, index) => { + return this.reduceInRelation(className, aQuery, schema).then(aQuery => { + query['$and'][index] = aQuery; + }); + }) + ).then(() => { + return Promise.resolve(query); + }); + } const promises = Object.keys(query).map(key => { const t = schema.getExpectedType(className, key); @@ -1049,7 +1061,13 @@ class DatabaseController { }) ); } - + if (query['$and']) { + return Promise.all( + query['$or'].map(aQuery => { + return this.reduceRelationKeys(className, aQuery, queryOptions); + }) + ); + } var relatedTo = query['$relatedTo']; if (relatedTo) { return this.relatedIds( From 741959fe55882998537c6e3d3940fbb3dbc8f9ae Mon Sep 17 00:00:00 2001 From: Kingtous Date: Sat, 23 Oct 2021 11:32:30 +0800 Subject: [PATCH 3/6] fix: or->and --- src/Controllers/DatabaseController.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Controllers/DatabaseController.js b/src/Controllers/DatabaseController.js index b1883466a7..20d5c4ba66 100644 --- a/src/Controllers/DatabaseController.js +++ b/src/Controllers/DatabaseController.js @@ -1063,7 +1063,7 @@ class DatabaseController { } if (query['$and']) { return Promise.all( - query['$or'].map(aQuery => { + query['$and'].map(aQuery => { return this.reduceRelationKeys(className, aQuery, queryOptions); }) ); From 3c771f70ca4506bff7429ddbae0aab8602883da3 Mon Sep 17 00:00:00 2001 From: Kingtous Date: Sat, 23 Oct 2021 12:06:16 +0800 Subject: [PATCH 4/6] add: changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c876810e6b..31423b9097 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -105,7 +105,7 @@ ___ ## Features - (none) ## Bug Fixes - - (none) +- fix: relational query with nested condition not working [#7593](https://github.com/parse-community/parse-server/pull/7593) # [5.0.0-alpha.1](https://github.com/parse-community/parse-server/compare/4.10.4...5.0.0-alpha.1) (2021-10-12) From db61c5a3caaa48ce03f897b16201b62be87ca1f4 Mon Sep 17 00:00:00 2001 From: Kingtous Date: Fri, 29 Oct 2021 10:29:29 +0800 Subject: [PATCH 5/6] Revert "add: changelog" This reverts commit 3c771f70ca4506bff7429ddbae0aab8602883da3. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31423b9097..c876810e6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -105,7 +105,7 @@ ___ ## Features - (none) ## Bug Fixes -- fix: relational query with nested condition not working [#7593](https://github.com/parse-community/parse-server/pull/7593) + - (none) # [5.0.0-alpha.1](https://github.com/parse-community/parse-server/compare/4.10.4...5.0.0-alpha.1) (2021-10-12) From df3437308caef6d1d12e318e9a9fc010b33d2bca Mon Sep 17 00:00:00 2001 From: Kingtous Date: Fri, 29 Oct 2021 10:44:59 +0800 Subject: [PATCH 6/6] refactor: change toBeDefined to be specific id --- spec/CloudCode.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/CloudCode.spec.js b/spec/CloudCode.spec.js index 62341fab9f..17968c33d7 100644 --- a/spec/CloudCode.spec.js +++ b/spec/CloudCode.spec.js @@ -3541,6 +3541,6 @@ describe('sendEmail', () => { }); const q = new Parse.Query('TestObject'); const res = await q.first(); - expect(res).toBeDefined(); + expect(res.id).toEqual(item1.id); }); });