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
							 |