Skip to content

Commit

Permalink
refator(operation-base): support read preferences on operations
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
mbroadst authored and daprahamian committed Aug 13, 2019
1 parent 2d48b39 commit 781fcfa
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
6 changes: 3 additions & 3 deletions lib/operations/distinct.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

const Aspect = require('./operation').Aspect;
const defineAspects = require('./operation').defineAspects;
const OperationBase = require('./operation').OperationBase;
const OperationBaseV2 = require('./operation').OperationBaseV2;
const decorateWithCollation = require('../utils').decorateWithCollation;
const decorateWithReadConcern = require('../utils').decorateWithReadConcern;
const executeCommand = require('./db_ops').executeCommand;
Expand All @@ -18,7 +18,7 @@ const resolveReadPreference = require('../utils').resolveReadPreference;
* @property {object} query The query for filtering the set of documents to which we apply the distinct filter.
* @property {object} [options] Optional settings. See Collection.prototype.distinct for a list of options.
*/
class DistinctOperation extends OperationBase {
class DistinctOperation extends OperationBaseV2 {
/**
* Construct a Distinct operation.
*
Expand All @@ -28,7 +28,7 @@ class DistinctOperation extends OperationBase {
* @param {object} [options] Optional settings. See Collection.prototype.distinct for a list of options.
*/
constructor(collection, key, query, options) {
super(options);
super(collection, options);

this.collection = collection;
this.key = key;
Expand Down
13 changes: 12 additions & 1 deletion lib/operations/operation.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
'use strict';

const ReadPreference = require('../core').ReadPreference;

const Aspect = {
READ_OPERATION: Symbol('READ_OPERATION'),
SKIP_SESSION: Symbol('SKIP_SESSION'),
Expand Down Expand Up @@ -44,6 +46,14 @@ class OperationBase {
}
}

class OperationBaseV2 extends OperationBase {
constructor(parent, options) {
super(options);

this.readPreference = parent ? parent.readPreference : ReadPreference.primary;
}
}

function defineAspects(operation, aspects) {
if (!Array.isArray(aspects) && !(aspects instanceof Set)) {
aspects = [aspects];
Expand All @@ -59,5 +69,6 @@ function defineAspects(operation, aspects) {
module.exports = {
Aspect,
defineAspects,
OperationBase
OperationBase,
OperationBaseV2
};

0 comments on commit 781fcfa

Please sign in to comment.