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.
		
		
		
		
		
			
		
			
				
					62 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					62 lines
				
				2.0 KiB
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | const OperationBase = require('./operation').OperationBase; | ||
|  | const applyWriteConcern = require('../utils').applyWriteConcern; | ||
|  | const checkCollectionName = require('../utils').checkCollectionName; | ||
|  | const executeDbAdminCommand = require('./db_ops').executeDbAdminCommand; | ||
|  | const handleCallback = require('../utils').handleCallback; | ||
|  | const loadCollection = require('../dynamic_loaders').loadCollection; | ||
|  | const toError = require('../utils').toError; | ||
|  | 
 | ||
|  | class RenameOperation extends OperationBase { | ||
|  |   constructor(collection, newName, options) { | ||
|  |     super(options); | ||
|  | 
 | ||
|  |     this.collection = collection; | ||
|  |     this.newName = newName; | ||
|  |   } | ||
|  | 
 | ||
|  |   execute(callback) { | ||
|  |     const coll = this.collection; | ||
|  |     const newName = this.newName; | ||
|  |     const options = this.options; | ||
|  | 
 | ||
|  |     let Collection = loadCollection(); | ||
|  |     // Check the collection name
 | ||
|  |     checkCollectionName(newName); | ||
|  |     // Build the command
 | ||
|  |     const renameCollection = coll.namespace; | ||
|  |     const toCollection = coll.s.namespace.withCollection(newName).toString(); | ||
|  |     const dropTarget = typeof options.dropTarget === 'boolean' ? options.dropTarget : false; | ||
|  |     const cmd = { renameCollection: renameCollection, to: toCollection, dropTarget: dropTarget }; | ||
|  | 
 | ||
|  |     // Decorate command with writeConcern if supported
 | ||
|  |     applyWriteConcern(cmd, { db: coll.s.db, collection: coll }, options); | ||
|  | 
 | ||
|  |     // Execute against admin
 | ||
|  |     executeDbAdminCommand(coll.s.db.admin().s.db, cmd, options, (err, doc) => { | ||
|  |       if (err) return handleCallback(callback, err, null); | ||
|  |       // We have an error
 | ||
|  |       if (doc.errmsg) return handleCallback(callback, toError(doc), null); | ||
|  |       try { | ||
|  |         return handleCallback( | ||
|  |           callback, | ||
|  |           null, | ||
|  |           new Collection( | ||
|  |             coll.s.db, | ||
|  |             coll.s.topology, | ||
|  |             coll.s.namespace.db, | ||
|  |             newName, | ||
|  |             coll.s.pkFactory, | ||
|  |             coll.s.options | ||
|  |           ) | ||
|  |         ); | ||
|  |       } catch (err) { | ||
|  |         return handleCallback(callback, toError(err), null); | ||
|  |       } | ||
|  |     }); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = RenameOperation; |