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.
		
		
		
		
		
			
		
			
				
					119 lines
				
				4.5 KiB
			
		
		
			
		
	
	
					119 lines
				
				4.5 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", { value: true });
							 | 
						||
| 
								 | 
							
								exports.makeDeleteStatement = exports.DeleteManyOperation = exports.DeleteOneOperation = exports.DeleteOperation = void 0;
							 | 
						||
| 
								 | 
							
								const error_1 = require("../error");
							 | 
						||
| 
								 | 
							
								const command_1 = require("./command");
							 | 
						||
| 
								 | 
							
								const operation_1 = require("./operation");
							 | 
						||
| 
								 | 
							
								/** @internal */
							 | 
						||
| 
								 | 
							
								class DeleteOperation extends command_1.CommandOperation {
							 | 
						||
| 
								 | 
							
								    constructor(ns, statements, options) {
							 | 
						||
| 
								 | 
							
								        super(undefined, options);
							 | 
						||
| 
								 | 
							
								        this.options = options;
							 | 
						||
| 
								 | 
							
								        this.ns = ns;
							 | 
						||
| 
								 | 
							
								        this.statements = statements;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    get canRetryWrite() {
							 | 
						||
| 
								 | 
							
								        if (super.canRetryWrite === false) {
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return this.statements.every(op => (op.limit != null ? op.limit > 0 : true));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    execute(server, session, callback) {
							 | 
						||
| 
								 | 
							
								        const options = this.options ?? {};
							 | 
						||
| 
								 | 
							
								        const ordered = typeof options.ordered === 'boolean' ? options.ordered : true;
							 | 
						||
| 
								 | 
							
								        const command = {
							 | 
						||
| 
								 | 
							
								            delete: this.ns.collection,
							 | 
						||
| 
								 | 
							
								            deletes: this.statements,
							 | 
						||
| 
								 | 
							
								            ordered
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								        if (options.let) {
							 | 
						||
| 
								 | 
							
								            command.let = options.let;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // we check for undefined specifically here to allow falsy values
							 | 
						||
| 
								 | 
							
								        // eslint-disable-next-line no-restricted-syntax
							 | 
						||
| 
								 | 
							
								        if (options.comment !== undefined) {
							 | 
						||
| 
								 | 
							
								            command.comment = options.comment;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        const unacknowledgedWrite = this.writeConcern && this.writeConcern.w === 0;
							 | 
						||
| 
								 | 
							
								        if (unacknowledgedWrite) {
							 | 
						||
| 
								 | 
							
								            if (this.statements.find((o) => o.hint)) {
							 | 
						||
| 
								 | 
							
								                // TODO(NODE-3541): fix error for hint with unacknowledged writes
							 | 
						||
| 
								 | 
							
								                callback(new error_1.MongoCompatibilityError(`hint is not supported with unacknowledged writes`));
							 | 
						||
| 
								 | 
							
								                return;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        super.executeCommand(server, session, command, callback);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.DeleteOperation = DeleteOperation;
							 | 
						||
| 
								 | 
							
								class DeleteOneOperation extends DeleteOperation {
							 | 
						||
| 
								 | 
							
								    constructor(collection, filter, options) {
							 | 
						||
| 
								 | 
							
								        super(collection.s.namespace, [makeDeleteStatement(filter, { ...options, limit: 1 })], options);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    execute(server, session, callback) {
							 | 
						||
| 
								 | 
							
								        super.execute(server, session, (err, res) => {
							 | 
						||
| 
								 | 
							
								            if (err || res == null)
							 | 
						||
| 
								 | 
							
								                return callback(err);
							 | 
						||
| 
								 | 
							
								            if (res.code)
							 | 
						||
| 
								 | 
							
								                return callback(new error_1.MongoServerError(res));
							 | 
						||
| 
								 | 
							
								            if (res.writeErrors)
							 | 
						||
| 
								 | 
							
								                return callback(new error_1.MongoServerError(res.writeErrors[0]));
							 | 
						||
| 
								 | 
							
								            if (this.explain)
							 | 
						||
| 
								 | 
							
								                return callback(undefined, res);
							 | 
						||
| 
								 | 
							
								            callback(undefined, {
							 | 
						||
| 
								 | 
							
								                acknowledged: this.writeConcern?.w !== 0 ?? true,
							 | 
						||
| 
								 | 
							
								                deletedCount: res.n
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.DeleteOneOperation = DeleteOneOperation;
							 | 
						||
| 
								 | 
							
								class DeleteManyOperation extends DeleteOperation {
							 | 
						||
| 
								 | 
							
								    constructor(collection, filter, options) {
							 | 
						||
| 
								 | 
							
								        super(collection.s.namespace, [makeDeleteStatement(filter, options)], options);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    execute(server, session, callback) {
							 | 
						||
| 
								 | 
							
								        super.execute(server, session, (err, res) => {
							 | 
						||
| 
								 | 
							
								            if (err || res == null)
							 | 
						||
| 
								 | 
							
								                return callback(err);
							 | 
						||
| 
								 | 
							
								            if (res.code)
							 | 
						||
| 
								 | 
							
								                return callback(new error_1.MongoServerError(res));
							 | 
						||
| 
								 | 
							
								            if (res.writeErrors)
							 | 
						||
| 
								 | 
							
								                return callback(new error_1.MongoServerError(res.writeErrors[0]));
							 | 
						||
| 
								 | 
							
								            if (this.explain)
							 | 
						||
| 
								 | 
							
								                return callback(undefined, res);
							 | 
						||
| 
								 | 
							
								            callback(undefined, {
							 | 
						||
| 
								 | 
							
								                acknowledged: this.writeConcern?.w !== 0 ?? true,
							 | 
						||
| 
								 | 
							
								                deletedCount: res.n
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.DeleteManyOperation = DeleteManyOperation;
							 | 
						||
| 
								 | 
							
								function makeDeleteStatement(filter, options) {
							 | 
						||
| 
								 | 
							
								    const op = {
							 | 
						||
| 
								 | 
							
								        q: filter,
							 | 
						||
| 
								 | 
							
								        limit: typeof options.limit === 'number' ? options.limit : 0
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    if (options.collation) {
							 | 
						||
| 
								 | 
							
								        op.collation = options.collation;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (options.hint) {
							 | 
						||
| 
								 | 
							
								        op.hint = options.hint;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return op;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.makeDeleteStatement = makeDeleteStatement;
							 | 
						||
| 
								 | 
							
								(0, operation_1.defineAspects)(DeleteOperation, [operation_1.Aspect.RETRYABLE, operation_1.Aspect.WRITE_OPERATION]);
							 | 
						||
| 
								 | 
							
								(0, operation_1.defineAspects)(DeleteOneOperation, [
							 | 
						||
| 
								 | 
							
								    operation_1.Aspect.RETRYABLE,
							 | 
						||
| 
								 | 
							
								    operation_1.Aspect.WRITE_OPERATION,
							 | 
						||
| 
								 | 
							
								    operation_1.Aspect.EXPLAINABLE,
							 | 
						||
| 
								 | 
							
								    operation_1.Aspect.SKIP_COLLATION
							 | 
						||
| 
								 | 
							
								]);
							 | 
						||
| 
								 | 
							
								(0, operation_1.defineAspects)(DeleteManyOperation, [
							 | 
						||
| 
								 | 
							
								    operation_1.Aspect.WRITE_OPERATION,
							 | 
						||
| 
								 | 
							
								    operation_1.Aspect.EXPLAINABLE,
							 | 
						||
| 
								 | 
							
								    operation_1.Aspect.SKIP_COLLATION
							 | 
						||
| 
								 | 
							
								]);
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=delete.js.map
							 |