Closed
Description
Issue Description
When building a query with a matchesKeyInQuery
operator with a DOT notation (made available in #4399 thanks for that), an uncaught error occurs if the first part of the DOT notation is undefined.
Steps to reproduce
let subQuery = new Parse.Query('SubClass');
subQuery.equalTo('condition', 'not_important'); // any condition // don't care
let parentQuery = new Parse.Query('ParentClass');
parentQuery.matchesKeyInQuery('objectId', 'parent.objectId', subQuery); // "parent" is undefined for some of the sub-results
parentQuery.find({
success: (results) => {
console.log(results);
},
error: (error) => {
console.log(error);
}
});
SubClass has a Pointer parent to ParentClass but sometimes, it is undefined.
Expected Results
I expect to see the results matching the filters and ignoring the fields that are undefined
Actual Outcome
I receive an Undefined error
ParseError { code: 1, message: undefined }
Server logs:
{"level":"error","message":"Uncaught internal server error. TypeError: Cannot read property 'objectId' of undefined\n at values.push.key.split.reduce (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:330:50)\n at Array.reduce (native)\n at transformSelect (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:330:32)\n at subquery.execute.then.response (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:369:5)\n at process._tickDomainCallback (internal/process/next_tick.js:129:7) TypeError: Cannot read property 'objectId' of undefined\n at values.push.key.split.reduce (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:330:50)\n at Array.reduce (native)\n at transformSelect (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:330:32)\n at subquery.execute.then.response (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:369:5)\n at process._tickDomainCallback (internal/process/next_tick.js:129:7)"}
TypeError: Cannot read property 'objectId' of undefined
at values.push.key.split.reduce (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:330:50)
at Array.reduce (native)
at transformSelect (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:330:32)
at subquery.execute.then.response (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:369:5)
at process._tickDomainCallback (internal/process/next_tick.js:129:7)
Environment Setup
-
Server
- parse-server version (Be specific! Don't say 'latest'.) : 2.7.4
- Operating System: Ubuntu 16.04
- Hardware: Intel i7 16 GO RAM
- Localhost or remote server? (AWS, Heroku, Azure, Digital Ocean, etc): [FILL THIS OUT]
-
Database
- MongoDB version: 3.2
- Storage engine: S3
- Hardware: Intel i7 16 GO RAM
- Localhost or remote server? (AWS, mLab, ObjectRocket, Digital Ocean, etc): Local
Logs/Trace
{"level":"error","message":"Uncaught internal server error. TypeError: Cannot read property 'objectId' of undefined\n at values.push.key.split.reduce (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:330:50)\n at Array.reduce (native)\n at transformSelect (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:330:32)\n at subquery.execute.then.response (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:369:5)\n at process._tickDomainCallback (internal/process/next_tick.js:129:7) TypeError: Cannot read property 'objectId' of undefined\n at values.push.key.split.reduce (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:330:50)\n at Array.reduce (native)\n at transformSelect (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:330:32)\n at subquery.execute.then.response (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:369:5)\n at process._tickDomainCallback (internal/process/next_tick.js:129:7)"}
TypeError: Cannot read property 'objectId' of undefined
at values.push.key.split.reduce (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:330:50)
at Array.reduce (native)
at transformSelect (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:330:32)
at subquery.execute.then.response (/home/app/parse/node_modules/parse-server/lib/RestQuery.js:369:5)
at process._tickDomainCallback (internal/process/next_tick.js:129:7)
Metadata
Metadata
Assignees
Labels
No labels