You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					55 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					55 lines
				
				2.1 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | exports.EvalOperation = void 0; | ||
|  | const bson_1 = require("../bson"); | ||
|  | const error_1 = require("../error"); | ||
|  | const read_preference_1 = require("../read_preference"); | ||
|  | const command_1 = require("./command"); | ||
|  | /** @internal */ | ||
|  | class EvalOperation extends command_1.CommandOperation { | ||
|  |     constructor(db, code, parameters, options) { | ||
|  |         super(db, options); | ||
|  |         this.options = options ?? {}; | ||
|  |         this.code = code; | ||
|  |         this.parameters = parameters; | ||
|  |         // force primary read preference
 | ||
|  |         Object.defineProperty(this, 'readPreference', { | ||
|  |             value: read_preference_1.ReadPreference.primary, | ||
|  |             configurable: false, | ||
|  |             writable: false | ||
|  |         }); | ||
|  |     } | ||
|  |     execute(server, session, callback) { | ||
|  |         let finalCode = this.code; | ||
|  |         let finalParameters = []; | ||
|  |         // If not a code object translate to one
 | ||
|  |         if (!(finalCode && finalCode._bsontype === 'Code')) { | ||
|  |             finalCode = new bson_1.Code(finalCode); | ||
|  |         } | ||
|  |         // Ensure the parameters are correct
 | ||
|  |         if (this.parameters != null && typeof this.parameters !== 'function') { | ||
|  |             finalParameters = Array.isArray(this.parameters) ? this.parameters : [this.parameters]; | ||
|  |         } | ||
|  |         // Create execution selector
 | ||
|  |         const cmd = { $eval: finalCode, args: finalParameters }; | ||
|  |         // Check if the nolock parameter is passed in
 | ||
|  |         if (this.options.nolock) { | ||
|  |             cmd.nolock = this.options.nolock; | ||
|  |         } | ||
|  |         // Execute the command
 | ||
|  |         super.executeCommand(server, session, cmd, (err, result) => { | ||
|  |             if (err) | ||
|  |                 return callback(err); | ||
|  |             if (result && result.ok === 1) { | ||
|  |                 return callback(undefined, result.retval); | ||
|  |             } | ||
|  |             if (result) { | ||
|  |                 callback(new error_1.MongoServerError({ message: `eval failed: ${result.errmsg}` })); | ||
|  |                 return; | ||
|  |             } | ||
|  |             callback(err, result); | ||
|  |         }); | ||
|  |     } | ||
|  | } | ||
|  | exports.EvalOperation = EvalOperation; | ||
|  | //# sourceMappingURL=eval.js.map
 |