Parse-SDK-JS
Parse-SDK-JS copied to clipboard
Can not combine equalTo clause with any other clause
New Issue Checklist
- [x] I am not disclosing a vulnerability.
- [x] I am not just asking a question.
- [x] I have searched through existing issues.
- [x] 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
Here's pr https://github.com/parse-community/Parse-SDK-JS/pull/1373 with a failing test case.
After looking into code for equalTo
, wherever we had queries like this
q.greaterThan(age, 0);
q.equalTo(age, 10); // this will override any existing query on that key
// will result in where={age: 10}
It 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,
q.equalTo(age, 10);
q.greaterThan(age, 0);
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 .
yes, we can directly use greaterThanOrEqual, but for other clauses, should
equalTo
override ?
I posted this in the PHP SDK because a developer had the same idea you had or similar at almost the same time.
https://github.com/parse-community/parse-php-sdk/issues/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
Yes, that's a very good solution! But what do you think about this scenario
q.equalTo(age, 10);
q.equalTo(age);
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 giving where={age: {$exists: false}}
.