Skip to content

Commit 0fd3101

Browse files
committed
Initial commit to add comment to a query
1 parent c604657 commit 0fd3101

File tree

9 files changed

+113
-12
lines changed

9 files changed

+113
-12
lines changed

spec/ParseQuery.Comment.spec.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
'use strict';
2+
3+
const Config = require('../lib/Config');
4+
const TestUtils = require('../lib/TestUtils');
5+
const { MongoClient } = require('mongodb');
6+
const databaseURI = 'mongodb://localhost:27017/';
7+
8+
let config, client, database;
9+
10+
describe_only_db('mongo')('Parse.Query testing', () => {
11+
beforeEach(async () => {
12+
config = Config.get('test');
13+
client = await MongoClient.connect(databaseURI, {
14+
useNewUrlParser: true,
15+
useUnifiedTopology: true,
16+
});
17+
database = client.db('parseServerMongoAdapterTestDatabase');
18+
const level = 2;
19+
const profiling = await database.command({ profile: level });
20+
console.log(`profiling ${JSON.stringify(profiling)}`);
21+
});
22+
23+
afterEach(async () => {
24+
await client.close();
25+
await TestUtils.destroyAllDataPermanently(false);
26+
});
27+
it('send comment with query', async () => {
28+
const object = new TestObject();
29+
object.set('name', 'object');
30+
const comment = 'comment';
31+
await object.save();
32+
33+
const collection = await config.database.adapter._adaptiveCollection('TestObject');
34+
35+
await collection._rawFind({ name: 'object' }, { comment: comment });
36+
37+
const result = await database.collection('system.profile').findOne({}, { sort: { ts: -1 } });
38+
expect(result.command.comment).toBe(comment);
39+
});
40+
});

src/Adapters/Storage/Mongo/MongoCollection.js

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,18 @@ export default class MongoCollection {
1515
// idea. Or even if this behavior is a good idea.
1616
find(
1717
query,
18-
{ skip, limit, sort, keys, maxTimeMS, readPreference, hint, caseInsensitive, explain } = {}
18+
{
19+
skip,
20+
limit,
21+
sort,
22+
keys,
23+
maxTimeMS,
24+
readPreference,
25+
hint,
26+
caseInsensitive,
27+
explain,
28+
comment,
29+
} = {}
1930
) {
2031
// Support for Full Text Search - $text
2132
if (keys && keys.$score) {
@@ -32,6 +43,7 @@ export default class MongoCollection {
3243
hint,
3344
caseInsensitive,
3445
explain,
46+
comment,
3547
}).catch(error => {
3648
// Check for "no geoindex" error
3749
if (error.code != 17007 && !error.message.match(/unable to find index for .geoNear/)) {
@@ -60,6 +72,7 @@ export default class MongoCollection {
6072
hint,
6173
caseInsensitive,
6274
explain,
75+
comment,
6376
})
6477
)
6578
);
@@ -75,14 +88,26 @@ export default class MongoCollection {
7588

7689
_rawFind(
7790
query,
78-
{ skip, limit, sort, keys, maxTimeMS, readPreference, hint, caseInsensitive, explain } = {}
91+
{
92+
skip,
93+
limit,
94+
sort,
95+
keys,
96+
maxTimeMS,
97+
readPreference,
98+
hint,
99+
caseInsensitive,
100+
explain,
101+
comment,
102+
} = {}
79103
) {
80104
let findOperation = this._mongoCollection.find(query, {
81105
skip,
82106
limit,
83107
sort,
84108
readPreference,
85109
hint,
110+
comment,
86111
});
87112

88113
if (keys) {
@@ -100,7 +125,7 @@ export default class MongoCollection {
100125
return explain ? findOperation.explain(explain) : findOperation.toArray();
101126
}
102127

103-
count(query, { skip, limit, sort, maxTimeMS, readPreference, hint } = {}) {
128+
count(query, { skip, limit, sort, maxTimeMS, readPreference, hint, comment } = {}) {
104129
// If query is empty, then use estimatedDocumentCount instead.
105130
// This is due to countDocuments performing a scan,
106131
// which greatly increases execution time when being run on large collections.
@@ -118,6 +143,7 @@ export default class MongoCollection {
118143
maxTimeMS,
119144
readPreference,
120145
hint,
146+
comment,
121147
});
122148

123149
return countOperation;
@@ -127,9 +153,9 @@ export default class MongoCollection {
127153
return this._mongoCollection.distinct(field, query);
128154
}
129155

130-
aggregate(pipeline, { maxTimeMS, readPreference, hint, explain } = {}) {
156+
aggregate(pipeline, { maxTimeMS, readPreference, hint, explain, comment } = {}) {
131157
return this._mongoCollection
132-
.aggregate(pipeline, { maxTimeMS, readPreference, hint, explain })
158+
.aggregate(pipeline, { maxTimeMS, readPreference, hint, explain, comment })
133159
.toArray();
134160
}
135161

src/Adapters/Storage/Mongo/MongoStorageAdapter.js

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,17 @@ export class MongoStorageAdapter implements StorageAdapter {
603603
className: string,
604604
schema: SchemaType,
605605
query: QueryType,
606-
{ skip, limit, sort, keys, readPreference, hint, caseInsensitive, explain }: QueryOptions
606+
{
607+
skip,
608+
limit,
609+
sort,
610+
keys,
611+
readPreference,
612+
hint,
613+
caseInsensitive,
614+
explain,
615+
comment,
616+
}: QueryOptions
607617
): Promise<any> {
608618
validateExplainValue(explain);
609619
schema = convertParseSchemaToMongoSchema(schema);
@@ -646,6 +656,7 @@ export class MongoStorageAdapter implements StorageAdapter {
646656
hint,
647657
caseInsensitive,
648658
explain,
659+
comment,
649660
})
650661
)
651662
.then(objects => {
@@ -735,7 +746,8 @@ export class MongoStorageAdapter implements StorageAdapter {
735746
schema: SchemaType,
736747
query: QueryType,
737748
readPreference: ?string,
738-
hint: ?mixed
749+
hint: ?mixed,
750+
comment: ?string
739751
) {
740752
schema = convertParseSchemaToMongoSchema(schema);
741753
readPreference = this._parseReadPreference(readPreference);
@@ -745,6 +757,7 @@ export class MongoStorageAdapter implements StorageAdapter {
745757
maxTimeMS: this._maxTimeMS,
746758
readPreference,
747759
hint,
760+
comment,
748761
})
749762
)
750763
.catch(err => this.handleError(err));
@@ -777,7 +790,8 @@ export class MongoStorageAdapter implements StorageAdapter {
777790
pipeline: any,
778791
readPreference: ?string,
779792
hint: ?mixed,
780-
explain?: boolean
793+
explain?: boolean,
794+
comment: ?string
781795
) {
782796
validateExplainValue(explain);
783797
let isPointerField = false;
@@ -811,6 +825,7 @@ export class MongoStorageAdapter implements StorageAdapter {
811825
maxTimeMS: this._maxTimeMS,
812826
hint,
813827
explain,
828+
comment,
814829
})
815830
)
816831
.then(results => {

src/Adapters/Storage/StorageAdapter.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export type QueryOptions = {
1919
caseInsensitive?: boolean,
2020
action?: string,
2121
addsField?: boolean,
22+
comment?: string,
2223
};
2324

2425
export type UpdateQueryOptions = {
@@ -97,7 +98,8 @@ export interface StorageAdapter {
9798
query: QueryType,
9899
readPreference?: string,
99100
estimate?: boolean,
100-
hint?: mixed
101+
hint?: mixed,
102+
comment?: string
101103
): Promise<number>;
102104
distinct(
103105
className: string,
@@ -111,7 +113,8 @@ export interface StorageAdapter {
111113
pipeline: any,
112114
readPreference: ?string,
113115
hint: ?mixed,
114-
explain?: boolean
116+
explain?: boolean,
117+
comment?: string
115118
): Promise<any>;
116119
performInitialization(options: ?any): Promise<void>;
117120
watch(callback: () => void): void;

src/Controllers/DatabaseController.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,6 +1188,7 @@ class DatabaseController {
11881188
hint,
11891189
caseInsensitive = false,
11901190
explain,
1191+
comment,
11911192
}: any = {},
11921193
auth: any = {},
11931194
validSchemaController: SchemaController.SchemaController
@@ -1237,6 +1238,7 @@ class DatabaseController {
12371238
hint,
12381239
caseInsensitive: this.options.enableCollationCaseComparison ? false : caseInsensitive,
12391240
explain,
1241+
comment,
12401242
};
12411243
Object.keys(sort).forEach(fieldName => {
12421244
if (fieldName.match(/^authData\.([a-zA-Z0-9_]+)\.id$/)) {
@@ -1306,7 +1308,8 @@ class DatabaseController {
13061308
query,
13071309
readPreference,
13081310
undefined,
1309-
hint
1311+
hint,
1312+
comment
13101313
);
13111314
}
13121315
} else if (distinct) {
@@ -1325,7 +1328,8 @@ class DatabaseController {
13251328
pipeline,
13261329
readPreference,
13271330
hint,
1328-
explain
1331+
explain,
1332+
comment
13291333
);
13301334
}
13311335
} else if (explain) {

src/RestQuery.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ function _UnsafeRestQuery(
212212
case 'skip':
213213
case 'limit':
214214
case 'readPreference':
215+
case 'comment':
215216
this.findOptions[option] = restOptions[option];
216217
break;
217218
case 'order':

src/Routers/AggregateRouter.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ export class AggregateRouter extends ClassesRouter {
1919
options.explain = body.explain;
2020
delete body.explain;
2121
}
22+
if (body.comment) {
23+
options.comment = body.comment;
24+
delete body.comment;
25+
}
2226
if (body.readPreference) {
2327
options.readPreference = body.readPreference;
2428
delete body.readPreference;

src/Routers/ClassesRouter.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ export class ClassesRouter extends PromiseRouter {
166166
'subqueryReadPreference',
167167
'hint',
168168
'explain',
169+
'comment',
169170
];
170171

171172
for (const key of Object.keys(body)) {
@@ -215,6 +216,9 @@ export class ClassesRouter extends PromiseRouter {
215216
if (body.explain) {
216217
options.explain = body.explain;
217218
}
219+
if (body.comment && typeof body.comment === 'string') {
220+
options.comment = body.comment;
221+
}
218222
return options;
219223
}
220224

src/triggers.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,10 @@ export function maybeRunQueryTrigger(
576576
restOptions = restOptions || {};
577577
restOptions.hint = jsonQuery.hint;
578578
}
579+
if (jsonQuery.comment) {
580+
restOptions = restOptions || {};
581+
restOptions.comment = jsonQuery.comment;
582+
}
579583
if (requestObject.readPreference) {
580584
restOptions = restOptions || {};
581585
restOptions.readPreference = requestObject.readPreference;

0 commit comments

Comments
 (0)