From 865e32383cd5fd5656a808321dd244b756d0bae3 Mon Sep 17 00:00:00 2001 From: Corey's iMac Date: Sun, 20 Jun 2021 12:43:05 -0400 Subject: [PATCH 1/5] failing testcases --- src/Adapters/Storage/Mongo/MongoStorageAdapter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Adapters/Storage/Mongo/MongoStorageAdapter.js b/src/Adapters/Storage/Mongo/MongoStorageAdapter.js index 2b5eaa0f09..dfac2eb8de 100644 --- a/src/Adapters/Storage/Mongo/MongoStorageAdapter.js +++ b/src/Adapters/Storage/Mongo/MongoStorageAdapter.js @@ -622,7 +622,7 @@ export class MongoStorageAdapter implements StorageAdapter { ) .then(objects => { if (explain) { - return objects; + return [objects]; } return objects.map(object => mongoObjectToParseObject(className, object, schema)); }) From 74cb902355b6d56af624a25b49f582af18b0b0c1 Mon Sep 17 00:00:00 2001 From: Corey's iMac Date: Sun, 20 Jun 2021 12:52:05 -0400 Subject: [PATCH 2/5] fix explain --- spec/MongoStorageAdapter.spec.js | 4 ++-- spec/ParseQuery.hint.spec.js | 2 +- spec/ParseQuery.spec.js | 7 +++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/spec/MongoStorageAdapter.spec.js b/spec/MongoStorageAdapter.spec.js index f6d2866417..af2f4e3492 100644 --- a/spec/MongoStorageAdapter.spec.js +++ b/spec/MongoStorageAdapter.spec.js @@ -338,8 +338,8 @@ describe_only_db('mongo')('MongoStorageAdapter', () => { { username: 'bugs' }, { caseInsensitive: true, explain: true } ); - expect(preIndexPlan.executionStats.executionStages.stage).toBe('COLLSCAN'); - expect(postIndexPlan.executionStats.executionStages.stage).toBe('FETCH'); + expect(preIndexPlan[0].executionStats.executionStages.stage).toBe('COLLSCAN'); + expect(postIndexPlan[0].executionStats.executionStages.stage).toBe('FETCH'); }); it('should delete field without index', async () => { diff --git a/spec/ParseQuery.hint.spec.js b/spec/ParseQuery.hint.spec.js index 2685137801..17974740be 100644 --- a/spec/ParseQuery.hint.spec.js +++ b/spec/ParseQuery.hint.spec.js @@ -163,7 +163,7 @@ describe_only_db('mongo')('Parse.Query hint', () => { }, }); response = await request(options); - explain = response.data.results; + explain = response.data.results[0]; expect(explain.queryPlanner.winningPlan.inputStage.inputStage.indexName).toBe('_id_'); }); diff --git a/spec/ParseQuery.spec.js b/spec/ParseQuery.spec.js index e196280a5c..df4a563d08 100644 --- a/spec/ParseQuery.spec.js +++ b/spec/ParseQuery.spec.js @@ -5214,8 +5214,11 @@ describe('Parse.Query testing', () => { const query = new Parse.Query('_User'); query.equalTo('objectId', user.id); query.explain(); - const result = await query.find(); - // Validate + //First + const result = await query.first(); expect(result.executionStats).not.toBeUndefined(); + //Find + const results = await query.find(); + expect(results[0].executionStats).not.toBeUndefined(); }); }); From 7710f64b6ef436150df694a61a76c323419a8514 Mon Sep 17 00:00:00 2001 From: Corey's iMac Date: Sun, 20 Jun 2021 18:54:21 -0400 Subject: [PATCH 3/5] pass without modification to JS SDK --- spec/ParseQuery.hint.spec.js | 6 +++--- spec/ParseQuery.spec.js | 5 +---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/spec/ParseQuery.hint.spec.js b/spec/ParseQuery.hint.spec.js index 17974740be..853889d976 100644 --- a/spec/ParseQuery.hint.spec.js +++ b/spec/ParseQuery.hint.spec.js @@ -153,7 +153,7 @@ describe_only_db('mongo')('Parse.Query hint', () => { }); let response = await request(options); let explain = response.data.results; - expect(explain.queryPlanner.winningPlan.inputStage.stage).toBe('COLLSCAN'); + expect(explain[0].queryPlanner.winningPlan.inputStage.stage).toBe('COLLSCAN'); options = Object.assign({}, masterKeyOptions, { url: Parse.serverURL + '/classes/TestObject', @@ -163,8 +163,8 @@ describe_only_db('mongo')('Parse.Query hint', () => { }, }); response = await request(options); - explain = response.data.results[0]; - expect(explain.queryPlanner.winningPlan.inputStage.inputStage.indexName).toBe('_id_'); + explain = response.data.results; + expect(explain[0].queryPlanner.winningPlan.inputStage.inputStage.indexName).toBe('_id_'); }); it_only_mongodb_version('<4.4')('query aggregate with hint (rest)', async () => { diff --git a/spec/ParseQuery.spec.js b/spec/ParseQuery.spec.js index df4a563d08..6ba0c372e3 100644 --- a/spec/ParseQuery.spec.js +++ b/spec/ParseQuery.spec.js @@ -5214,10 +5214,7 @@ describe('Parse.Query testing', () => { const query = new Parse.Query('_User'); query.equalTo('objectId', user.id); query.explain(); - //First - const result = await query.first(); - expect(result.executionStats).not.toBeUndefined(); - //Find + //Verify const results = await query.find(); expect(results[0].executionStats).not.toBeUndefined(); }); From 65941a16ce2b74731ec1b400880cf39648c2e92e Mon Sep 17 00:00:00 2001 From: Corey's iMac Date: Sun, 20 Jun 2021 19:11:51 -0400 Subject: [PATCH 4/5] add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fb0b32bac..4c3ad4a10c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -96,6 +96,7 @@ ___ - Remove support for MongoDB 3.6 which has reached its End-of-Life date and PostgreSQL 10 (Manuel Trezza) [#7315](https://github.com/parse-community/parse-server/pull/7315) - Remove support for Node 10 which has reached its End-of-Life date (Manuel Trezza) [#7314](https://github.com/parse-community/parse-server/pull/7314) - Remove S3 Files Adapter from Parse Server, instead install separately as `@parse/s3-files-adapter` (Manuel Trezza) [#7324](https://github.com/parse-community/parse-server/pull/7324) +- Fix explain for mongoDB which was returning a single object for query results instead of an array of objects. This conflicts with the rest of the find query server responses as find is always suppose to return an array (Corey Baker) [#7440](https://github.com/parse-community/parse-server/pull/7440) ### Notable Changes - Added Parse Server Security Check to report weak security settings (Manuel Trezza, dblythy) [#7247](https://github.com/parse-community/parse-server/issues/7247) - EXPERIMENTAL: Added new page router with placeholder rendering and localization of custom and feature pages such as password reset and email verification (Manuel Trezza) [#7128](https://github.com/parse-community/parse-server/pull/7128) From 86f686382460c48fbdb18413c3ff830f28676302 Mon Sep 17 00:00:00 2001 From: Corey Date: Tue, 22 Jun 2021 11:19:38 -0400 Subject: [PATCH 5/5] Revert comment changes --- spec/ParseQuery.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/ParseQuery.spec.js b/spec/ParseQuery.spec.js index 6ba0c372e3..ff3aac6c9e 100644 --- a/spec/ParseQuery.spec.js +++ b/spec/ParseQuery.spec.js @@ -5214,8 +5214,8 @@ describe('Parse.Query testing', () => { const query = new Parse.Query('_User'); query.equalTo('objectId', user.id); query.explain(); - //Verify const results = await query.find(); + // Validate expect(results[0].executionStats).not.toBeUndefined(); }); });