Skip to content

Commit 781fcfa

Browse files
mbroadstdaprahamian
authored andcommitted
refator(operation-base): support read preferences on operations
This introduces an `OperationBaseV2` which accepts a "parent" as the first parameter of the constructor. This parent is used to resolve the read preference, defaulting to primary.
1 parent 2d48b39 commit 781fcfa

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

lib/operations/distinct.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
const Aspect = require('./operation').Aspect;
44
const defineAspects = require('./operation').defineAspects;
5-
const OperationBase = require('./operation').OperationBase;
5+
const OperationBaseV2 = require('./operation').OperationBaseV2;
66
const decorateWithCollation = require('../utils').decorateWithCollation;
77
const decorateWithReadConcern = require('../utils').decorateWithReadConcern;
88
const executeCommand = require('./db_ops').executeCommand;
@@ -18,7 +18,7 @@ const resolveReadPreference = require('../utils').resolveReadPreference;
1818
* @property {object} query The query for filtering the set of documents to which we apply the distinct filter.
1919
* @property {object} [options] Optional settings. See Collection.prototype.distinct for a list of options.
2020
*/
21-
class DistinctOperation extends OperationBase {
21+
class DistinctOperation extends OperationBaseV2 {
2222
/**
2323
* Construct a Distinct operation.
2424
*
@@ -28,7 +28,7 @@ class DistinctOperation extends OperationBase {
2828
* @param {object} [options] Optional settings. See Collection.prototype.distinct for a list of options.
2929
*/
3030
constructor(collection, key, query, options) {
31-
super(options);
31+
super(collection, options);
3232

3333
this.collection = collection;
3434
this.key = key;

lib/operations/operation.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
'use strict';
22

3+
const ReadPreference = require('../core').ReadPreference;
4+
35
const Aspect = {
46
READ_OPERATION: Symbol('READ_OPERATION'),
57
SKIP_SESSION: Symbol('SKIP_SESSION'),
@@ -44,6 +46,14 @@ class OperationBase {
4446
}
4547
}
4648

49+
class OperationBaseV2 extends OperationBase {
50+
constructor(parent, options) {
51+
super(options);
52+
53+
this.readPreference = parent ? parent.readPreference : ReadPreference.primary;
54+
}
55+
}
56+
4757
function defineAspects(operation, aspects) {
4858
if (!Array.isArray(aspects) && !(aspects instanceof Set)) {
4959
aspects = [aspects];
@@ -59,5 +69,6 @@ function defineAspects(operation, aspects) {
5969
module.exports = {
6070
Aspect,
6171
defineAspects,
62-
OperationBase
72+
OperationBase,
73+
OperationBaseV2
6374
};

0 commit comments

Comments
 (0)