Open
Description
New Issue Checklist
- I am not disclosing a vulnerability.I am not just asking a question.I have searched through existing issues.I can reproduce the issue with the latest versions of Parse Server and the Parse JS SDK.
Issue Description
Combining equalTo
clause with any other clause seem to overwriting each other.
Steps to reproduce
let q = new Parse.Query('MyClass');
q.equalTo('age', null);
q.exists('age');
// or these
q.equalTo('age', 10);
q.greaterThan('age', 0);
Actual Outcome
getting a query like this where={age: {$exists: true}}
or error in 2nd case(using greaterThan)
Expected Outcome
where={age: {$exists: true, $eq: null }}
or where={age: {$gt: 0, $eq: 10 }}
Environment
Server
- Parse Server version:
4.5.0
- Operating system:
Ubuntu
- Local or remote host (AWS, Azure, Google Cloud, Heroku, Digital Ocean, etc):
local
Database
- System (MongoDB or Postgres):
MongoDB
- Database version:
4.4
- Local or remote host (MongoDB Atlas, mLab, AWS, Azure, Google Cloud, etc):
local
Client
- Parse JS SDK version:
3.2.0
Logs
Metadata
Metadata
Assignees
Labels
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
sadakchap commentedon Jun 8, 2021
Here's pr #1373 with a failing test case.
sadakchap commentedon Jun 9, 2021
After looking into code for
equalTo
, wherever we had queries like thisIt seems like
equalTo
was always overriding any existing query on that key instead of adding new clause.And when we try to apply other clauses to equalTo query,
it was failing at line as equalTo gives
where={age: 10}
and won't be able to add any other clause.Do guys think that it should return
where={age: {$eq: 10, $gt: 0}}
? @davimacedo @mtrezza .dplewis commentedon Jun 9, 2021
I posted this in the PHP SDK because a developer had the same idea you had or similar at almost the same time.
parse-community/parse-php-sdk#476
I think they came up with a good solution of using this.addCondition(key, $eq, value) vs this.where[key] just wanted you to know. I’ll look into it more
sadakchap commentedon Jun 9, 2021
Yes, that's a very good solution!
But what do you think about this scenario
this will result in
where={age: {$eq: 10, $exists: false}}
. Do you think this make sense ?The way queries are executed, it make sense to me. But, earlier
equalTo
without any compareTo value was overriding anything and givingwhere={age: {$exists: false}}
.test case