Skip to content

Commit 3451fc3

Browse files
committed
fixes same bug affecting $select and $dontSelect
1 parent 3ed3982 commit 3451fc3

File tree

2 files changed

+92
-3
lines changed

2 files changed

+92
-3
lines changed

spec/ParseRelation.spec.js

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,6 @@ describe('Parse.Relation testing', () => {
550550
});
551551
return Promise.resolve();
552552
}).then(() => {
553-
console.log('');
554553
// Query on the relation of another owner
555554
let object = new Parse.Object('AnotherOwner');
556555
object.id = anotherOwner.id;
@@ -571,4 +570,86 @@ describe('Parse.Relation testing', () => {
571570
done();
572571
})
573572
});
573+
574+
it("select query", function(done) {
575+
var RestaurantObject = Parse.Object.extend("Restaurant");
576+
var PersonObject = Parse.Object.extend("Person");
577+
var OwnerObject = Parse.Object.extend('Owner');
578+
var restaurants = [
579+
new RestaurantObject({ ratings: 5, location: "Djibouti" }),
580+
new RestaurantObject({ ratings: 3, location: "Ouagadougou" }),
581+
];
582+
let persons = [
583+
new PersonObject({ name: "Bob", hometown: "Djibouti" }),
584+
new PersonObject({ name: "Tom", hometown: "Ouagadougou" }),
585+
new PersonObject({ name: "Billy", hometown: "Detroit" }),
586+
];
587+
let owner = new OwnerObject({name: 'Joe'});
588+
let ownerId;
589+
let allObjects = [owner].concat(restaurants).concat(persons);
590+
expect(allObjects.length).toEqual(6);
591+
Parse.Object.saveAll([owner].concat(restaurants).concat(persons)).then(function() {
592+
ownerId = owner.id;
593+
owner.relation('restaurants').add(restaurants);
594+
return owner.save()
595+
}).then(() => {
596+
let unfetchedOwner = new OwnerObject();
597+
unfetchedOwner.id = owner.id;
598+
var query = unfetchedOwner.relation('restaurants').query();
599+
query.greaterThan("ratings", 4);
600+
var mainQuery = new Parse.Query(PersonObject);
601+
mainQuery.matchesKeyInQuery("hometown", "location", query);
602+
mainQuery.find(expectSuccess({
603+
success: function(results) {
604+
equal(results.length, 1);
605+
if (results.length > 0) {
606+
equal(results[0].get('name'), 'Bob');
607+
}
608+
done();
609+
}
610+
}));
611+
});
612+
});
613+
614+
it("dontSelect query", function(done) {
615+
var RestaurantObject = Parse.Object.extend("Restaurant");
616+
var PersonObject = Parse.Object.extend("Person");
617+
var OwnerObject = Parse.Object.extend('Owner');
618+
var restaurants = [
619+
new RestaurantObject({ ratings: 5, location: "Djibouti" }),
620+
new RestaurantObject({ ratings: 3, location: "Ouagadougou" }),
621+
];
622+
let persons = [
623+
new PersonObject({ name: "Bob", hometown: "Djibouti" }),
624+
new PersonObject({ name: "Tom", hometown: "Ouagadougou" }),
625+
new PersonObject({ name: "Billy", hometown: "Detroit" }),
626+
];
627+
let owner = new OwnerObject({name: 'Joe'});
628+
let ownerId;
629+
let allObjects = [owner].concat(restaurants).concat(persons);
630+
expect(allObjects.length).toEqual(6);
631+
Parse.Object.saveAll([owner].concat(restaurants).concat(persons)).then(function() {
632+
ownerId = owner.id;
633+
owner.relation('restaurants').add(restaurants);
634+
return owner.save()
635+
}).then(() => {
636+
let unfetchedOwner = new OwnerObject();
637+
unfetchedOwner.id = owner.id;
638+
var query = unfetchedOwner.relation('restaurants').query();
639+
query.greaterThan("ratings", 4);
640+
var mainQuery = new Parse.Query(PersonObject);
641+
mainQuery.doesNotMatchKeyInQuery("hometown", "location", query);
642+
mainQuery.ascending('name');
643+
mainQuery.find(expectSuccess({
644+
success: function(results) {
645+
equal(results.length, 2);
646+
if (results.length > 0) {
647+
equal(results[0].get('name'), 'Billy');
648+
equal(results[1].get('name'), 'Tom');
649+
}
650+
done();
651+
}
652+
}));
653+
});
654+
});
574655
});

src/RestQuery.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,9 +299,13 @@ RestQuery.prototype.replaceSelect = function() {
299299
'improper usage of $select');
300300
}
301301

302+
let additionalOptions = {
303+
redirectClassNameForKey: selectValue.query.redirectClassNameForKey
304+
};
305+
302306
var subquery = new RestQuery(
303307
this.config, this.auth, selectValue.query.className,
304-
selectValue.query.where);
308+
selectValue.query.where, additionalOptions);
305309
return subquery.execute().then((response) => {
306310
var values = [];
307311
for (var result of response.results) {
@@ -340,9 +344,13 @@ RestQuery.prototype.replaceDontSelect = function() {
340344
throw new Parse.Error(Parse.Error.INVALID_QUERY,
341345
'improper usage of $dontSelect');
342346
}
347+
let additionalOptions = {
348+
redirectClassNameForKey: dontSelectValue.query.redirectClassNameForKey
349+
};
350+
343351
var subquery = new RestQuery(
344352
this.config, this.auth, dontSelectValue.query.className,
345-
dontSelectValue.query.where);
353+
dontSelectValue.query.where, additionalOptions);
346354
return subquery.execute().then((response) => {
347355
var values = [];
348356
for (var result of response.results) {

0 commit comments

Comments
 (0)