Skip to content

Commit 2f05d81

Browse files
authored
beforeFind: Improve request.query object (#6237)
* beforeFind: Improve request.query object Closes: #6164 * can modify exclude query
1 parent 7c7a870 commit 2f05d81

File tree

2 files changed

+42
-13
lines changed

2 files changed

+42
-13
lines changed

spec/CloudCode.spec.js

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -878,7 +878,10 @@ describe('Cloud Code', () => {
878878
url: 'https://some.url',
879879
}),
880880
array: ['a', 'b', 'c'],
881-
arrayOfArray: [['a', 'b', 'c'], ['d', 'e', 'f']],
881+
arrayOfArray: [
882+
['a', 'b', 'c'],
883+
['d', 'e', 'f'],
884+
],
882885
};
883886
Parse.Cloud.run('params', params).then(() => {
884887
done();
@@ -1763,8 +1766,15 @@ describe('beforeFind hooks', () => {
17631766
expect(jsonQuery.where.key).toEqual('value');
17641767
expect(jsonQuery.where.some).toEqual({ $gt: 10 });
17651768
expect(jsonQuery.include).toEqual('otherKey,otherValue');
1769+
expect(jsonQuery.excludeKeys).toBe('exclude');
17661770
expect(jsonQuery.limit).toEqual(100);
17671771
expect(jsonQuery.skip).toBe(undefined);
1772+
expect(jsonQuery.order).toBe('key');
1773+
expect(jsonQuery.keys).toBe('select');
1774+
expect(jsonQuery.readPreference).toBe('PRIMARY');
1775+
expect(jsonQuery.includeReadPreference).toBe('SECONDARY');
1776+
expect(jsonQuery.subqueryReadPreference).toBe('SECONDARY_PREFERRED');
1777+
17681778
expect(req.isGet).toEqual(false);
17691779
});
17701780

@@ -1773,6 +1783,10 @@ describe('beforeFind hooks', () => {
17731783
query.greaterThan('some', 10);
17741784
query.include('otherKey');
17751785
query.include('otherValue');
1786+
query.ascending('key');
1787+
query.select('select');
1788+
query.exclude('exclude');
1789+
query.readPreference('PRIMARY', 'SECONDARY', 'SECONDARY_PREFERRED');
17761790
query.find().then(() => {
17771791
done();
17781792
});
@@ -1824,6 +1838,25 @@ describe('beforeFind hooks', () => {
18241838
});
18251839
});
18261840

1841+
it('should use the modified exclude query', async () => {
1842+
Parse.Cloud.beforeFind('MyObject', req => {
1843+
const q = req.query;
1844+
q.exclude('number');
1845+
});
1846+
1847+
const obj = new Parse.Object('MyObject');
1848+
obj.set('number', 100);
1849+
obj.set('string', 'hello');
1850+
await obj.save();
1851+
1852+
const query = new Parse.Query('MyObject');
1853+
query.equalTo('objectId', obj.id);
1854+
const results = await query.find();
1855+
expect(results.length).toBe(1);
1856+
expect(results[0].get('number')).toBeUndefined();
1857+
expect(results[0].get('string')).toBe('hello');
1858+
});
1859+
18271860
it('should reject queries', done => {
18281861
Parse.Cloud.beforeFind('MyObject', () => {
18291862
return Promise.reject('Do not run that query');

src/triggers.js

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -451,22 +451,14 @@ export function maybeRunQueryTrigger(
451451
restOptions,
452452
});
453453
}
454+
const json = Object.assign({}, restOptions);
455+
json.where = restWhere;
454456

455457
const parseQuery = new Parse.Query(className);
456-
if (restWhere) {
457-
parseQuery._where = restWhere;
458-
}
458+
parseQuery.withJSON(json);
459+
459460
let count = false;
460461
if (restOptions) {
461-
if (restOptions.include && restOptions.include.length > 0) {
462-
parseQuery._include = restOptions.include.split(',');
463-
}
464-
if (restOptions.skip) {
465-
parseQuery._skip = restOptions.skip;
466-
}
467-
if (restOptions.limit) {
468-
parseQuery._limit = restOptions.limit;
469-
}
470462
count = !!restOptions.count;
471463
}
472464
const requestObject = getRequestQueryObject(
@@ -503,6 +495,10 @@ export function maybeRunQueryTrigger(
503495
restOptions = restOptions || {};
504496
restOptions.include = jsonQuery.include;
505497
}
498+
if (jsonQuery.excludeKeys) {
499+
restOptions = restOptions || {};
500+
restOptions.excludeKeys = jsonQuery.excludeKeys;
501+
}
506502
if (jsonQuery.keys) {
507503
restOptions = restOptions || {};
508504
restOptions.keys = jsonQuery.keys;

0 commit comments

Comments
 (0)