12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- '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;
|