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.
		
		
		
		
		
			
		
			
				
					
					
						
							83 lines
						
					
					
						
							3.8 KiB
						
					
					
				
			
		
		
	
	
							83 lines
						
					
					
						
							3.8 KiB
						
					
					
				| "use strict";
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| exports.DropDatabaseOperation = exports.DropCollectionOperation = void 0;
 | |
| const error_1 = require("../error");
 | |
| const command_1 = require("./command");
 | |
| const operation_1 = require("./operation");
 | |
| /** @internal */
 | |
| class DropCollectionOperation extends command_1.CommandOperation {
 | |
|     constructor(db, name, options = {}) {
 | |
|         super(db, options);
 | |
|         this.db = db;
 | |
|         this.options = options;
 | |
|         this.name = name;
 | |
|     }
 | |
|     execute(server, session, callback) {
 | |
|         (async () => {
 | |
|             const db = this.db;
 | |
|             const options = this.options;
 | |
|             const name = this.name;
 | |
|             const encryptedFieldsMap = db.s.client.options.autoEncryption?.encryptedFieldsMap;
 | |
|             let encryptedFields = options.encryptedFields ?? encryptedFieldsMap?.[`${db.databaseName}.${name}`];
 | |
|             if (!encryptedFields && encryptedFieldsMap) {
 | |
|                 // If the MongoClient was configured with an encryptedFieldsMap,
 | |
|                 // and no encryptedFields config was available in it or explicitly
 | |
|                 // passed as an argument, the spec tells us to look one up using
 | |
|                 // listCollections().
 | |
|                 const listCollectionsResult = await db
 | |
|                     .listCollections({ name }, { nameOnly: false })
 | |
|                     .toArray();
 | |
|                 encryptedFields = listCollectionsResult?.[0]?.options?.encryptedFields;
 | |
|             }
 | |
|             if (encryptedFields) {
 | |
|                 const escCollection = encryptedFields.escCollection || `enxcol_.${name}.esc`;
 | |
|                 const eccCollection = encryptedFields.eccCollection || `enxcol_.${name}.ecc`;
 | |
|                 const ecocCollection = encryptedFields.ecocCollection || `enxcol_.${name}.ecoc`;
 | |
|                 for (const collectionName of [escCollection, eccCollection, ecocCollection]) {
 | |
|                     // Drop auxilliary collections, ignoring potential NamespaceNotFound errors.
 | |
|                     const dropOp = new DropCollectionOperation(db, collectionName);
 | |
|                     try {
 | |
|                         await dropOp.executeWithoutEncryptedFieldsCheck(server, session);
 | |
|                     }
 | |
|                     catch (err) {
 | |
|                         if (!(err instanceof error_1.MongoServerError) ||
 | |
|                             err.code !== error_1.MONGODB_ERROR_CODES.NamespaceNotFound) {
 | |
|                             throw err;
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             return this.executeWithoutEncryptedFieldsCheck(server, session);
 | |
|         })().then(result => callback(undefined, result), err => callback(err));
 | |
|     }
 | |
|     executeWithoutEncryptedFieldsCheck(server, session) {
 | |
|         return new Promise((resolve, reject) => {
 | |
|             super.executeCommand(server, session, { drop: this.name }, (err, result) => {
 | |
|                 if (err)
 | |
|                     return reject(err);
 | |
|                 resolve(!!result.ok);
 | |
|             });
 | |
|         });
 | |
|     }
 | |
| }
 | |
| exports.DropCollectionOperation = DropCollectionOperation;
 | |
| /** @internal */
 | |
| class DropDatabaseOperation extends command_1.CommandOperation {
 | |
|     constructor(db, options) {
 | |
|         super(db, options);
 | |
|         this.options = options;
 | |
|     }
 | |
|     execute(server, session, callback) {
 | |
|         super.executeCommand(server, session, { dropDatabase: 1 }, (err, result) => {
 | |
|             if (err)
 | |
|                 return callback(err);
 | |
|             if (result.ok)
 | |
|                 return callback(undefined, true);
 | |
|             callback(undefined, false);
 | |
|         });
 | |
|     }
 | |
| }
 | |
| exports.DropDatabaseOperation = DropDatabaseOperation;
 | |
| (0, operation_1.defineAspects)(DropCollectionOperation, [operation_1.Aspect.WRITE_OPERATION]);
 | |
| (0, operation_1.defineAspects)(DropDatabaseOperation, [operation_1.Aspect.WRITE_OPERATION]);
 | |
| //# sourceMappingURL=drop.js.map
 |