@@ -3,11 +3,10 @@ import { type BSONSerializeOptions, type Document, resolveBSONOptions } from './
33import { ChangeStream , type ChangeStreamDocument , type ChangeStreamOptions } from './change_stream' ;
44import { Collection , type CollectionOptions } from './collection' ;
55import * as CONSTANTS from './constants' ;
6- import { CursorTimeoutContext } from './cursor/abstract_cursor' ;
76import { AggregationCursor } from './cursor/aggregation_cursor' ;
87import { ListCollectionsCursor } from './cursor/list_collections_cursor' ;
98import { RunCommandCursor , type RunCursorCommandOptions } from './cursor/run_command_cursor' ;
10- import { MONGODB_ERROR_CODES , MongoInvalidArgumentError , MongoServerError } from './error' ;
9+ import { MongoInvalidArgumentError } from './error' ;
1110import type { MongoClient , PkFactory } from './mongo_client' ;
1211import type { Abortable , TODO_NODE_3286 } from './mongo_types' ;
1312import type { AggregateOptions } from './operations/aggregate' ;
@@ -17,8 +16,8 @@ import {
1716 type CreateCollectionOptions
1817} from './operations/create_collection' ;
1918import {
20- DropCollectionOperation ,
2119 type DropCollectionOptions ,
20+ dropCollections ,
2221 DropDatabaseOperation ,
2322 type DropDatabaseOptions
2423} from './operations/drop' ;
@@ -44,7 +43,6 @@ import {
4443import { DbStatsOperation , type DbStatsOptions } from './operations/stats' ;
4544import { ReadConcern } from './read_concern' ;
4645import { ReadPreference , type ReadPreferenceLike } from './read_preference' ;
47- import { TimeoutContext } from './timeout' ;
4846import { DEFAULT_PK_FACTORY , filterOptions , MongoDBNamespace , resolveOptions } from './utils' ;
4947import { WriteConcern , type WriteConcernOptions } from './write_concern' ;
5048
@@ -362,13 +360,13 @@ export class Db {
362360 ) : ListCollectionsCursor < CollectionInfo > ;
363361 listCollections <
364362 T extends Pick < CollectionInfo , 'name' | 'type' > | CollectionInfo =
365- | Pick < CollectionInfo , 'name' | 'type' >
366- | CollectionInfo
363+ | Pick < CollectionInfo , 'name' | 'type' >
364+ | CollectionInfo
367365 > ( filter ?: Document , options ?: ListCollectionsOptions & Abortable ) : ListCollectionsCursor < T > ;
368366 listCollections <
369367 T extends Pick < CollectionInfo , 'name' | 'type' > | CollectionInfo =
370- | Pick < CollectionInfo , 'name' | 'type' >
371- | CollectionInfo
368+ | Pick < CollectionInfo , 'name' | 'type' >
369+ | CollectionInfo
372370 > (
373371 filter : Document = { } ,
374372 options : ListCollectionsOptions & Abortable = { }
@@ -413,61 +411,15 @@ export class Db {
413411 * @param options - Optional settings for the command
414412 */
415413 async dropCollection ( name : string , options ?: DropCollectionOptions ) : Promise < boolean > {
416- options = resolveOptions ( this , options ) ;
417- options . session ??= this . client . startSession ( { owner : Symbol ( ) , explicit : false } ) ;
418-
419- const timeoutContext = TimeoutContext . create ( {
420- session : options . session ,
421- serverSelectionTimeoutMS : this . client . s . options . serverSelectionTimeoutMS ,
422- waitQueueTimeoutMS : this . client . s . options . waitQueueTimeoutMS ,
423- timeoutMS : options . timeoutMS
424- } ) ;
425-
426- const encryptedFieldsMap = this . client . s . options . autoEncryption ?. encryptedFieldsMap ;
427- let encryptedFields : Document | undefined =
428- options . encryptedFields ?? encryptedFieldsMap ?. [ `${ this . databaseName } .${ name } ` ] ;
429-
430- if ( ! encryptedFields && encryptedFieldsMap ) {
431- // If the MongoClient was configured with an encryptedFieldsMap,
432- // and no encryptedFields config was available in it or explicitly
433- // passed as an argument, the spec tells us to look one up using
434- // listCollections().
435- const listCollectionsResult = await this . listCollections (
436- { name } ,
437- {
438- nameOnly : false ,
439- session : options . session ,
440- timeoutContext : new CursorTimeoutContext ( timeoutContext , Symbol ( ) )
441- }
442- ) . toArray ( ) ;
443- encryptedFields = listCollectionsResult ?. [ 0 ] ?. options ?. encryptedFields ;
444- }
445-
446- if ( encryptedFields ) {
447- const escCollection = encryptedFields . escCollection || `enxcol_.${ name } .esc` ;
448- const ecocCollection = encryptedFields . ecocCollection || `enxcol_.${ name } .ecoc` ;
449-
450- for ( const collectionName of [ escCollection , ecocCollection ] ) {
451- // Drop auxilliary collections, ignoring potential NamespaceNotFound errors.
452- const dropOp = new DropCollectionOperation ( this , collectionName , options ) ;
453- try {
454- await executeOperation ( this . client , dropOp , timeoutContext ) ;
455- } catch ( err ) {
456- if (
457- ! ( err instanceof MongoServerError ) ||
458- err . code !== MONGODB_ERROR_CODES . NamespaceNotFound
459- ) {
460- throw err ;
461- }
462- }
463- }
414+ options = resolveOptions ( this , { ...options } ) ;
415+ if ( options . session ) {
416+ return await dropCollections ( this , name , options ) ;
464417 }
465418
466- return await executeOperation (
467- this . client ,
468- new DropCollectionOperation ( this , name , options ) ,
469- timeoutContext
470- ) ;
419+ return await this . client . withSession ( { explicit : false } , async session => {
420+ options . session = session ;
421+ return await dropCollections ( this , name , options ) ;
422+ } ) ;
471423 }
472424
473425 /**
0 commit comments