11import type { Document } from '../bson' ;
2- import { CursorResponse } from '../cmap/wire_protocol/responses' ;
2+ import { type Connection } from '../cmap/connection' ;
3+ import { CursorResponse , MongoDBResponse } from '../cmap/wire_protocol/responses' ;
34import type { Collection } from '../collection' ;
45import { type AbstractCursorOptions } from '../cursor/abstract_cursor' ;
56import { MongoCompatibilityError } from '../error' ;
@@ -12,6 +13,7 @@ import {
1213 type CollationOptions ,
1314 CommandOperation ,
1415 type CommandOperationOptions ,
16+ ModernizedCommandOperation ,
1517 type OperationParent
1618} from './command' ;
1719import { Aspect , defineAspects } from './operation' ;
@@ -244,7 +246,8 @@ type ResolvedIndexDescription = Omit<IndexDescription, 'key' | 'version'> & {
244246} ;
245247
246248/** @internal */
247- export class CreateIndexesOperation extends CommandOperation < string [ ] > {
249+ export class CreateIndexesOperation extends ModernizedCommandOperation < string [ ] > {
250+ override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse ;
248251 override options : CreateIndexesOptions ;
249252 collectionName : string ;
250253 indexes : ReadonlyArray < ResolvedIndexDescription > ;
@@ -258,6 +261,8 @@ export class CreateIndexesOperation extends CommandOperation<string[]> {
258261 super ( parent , options ) ;
259262
260263 this . options = options ?? { } ;
264+ // collation is set on each index, it should not be defined at the root
265+ this . options . collation = undefined ;
261266 this . collectionName = collectionName ;
262267 this . indexes = indexes . map ( ( userIndex : IndexDescription ) : ResolvedIndexDescription => {
263268 // Ensure the key is a Map to preserve index key ordering
@@ -271,6 +276,7 @@ export class CreateIndexesOperation extends CommandOperation<string[]> {
271276 key
272277 } ;
273278 } ) ;
279+ this . ns = parent . s . namespace ;
274280 }
275281
276282 static fromIndexDescriptionArray (
@@ -297,15 +303,11 @@ export class CreateIndexesOperation extends CommandOperation<string[]> {
297303 return 'createIndexes' ;
298304 }
299305
300- override async execute (
301- server : Server ,
302- session : ClientSession | undefined ,
303- timeoutContext : TimeoutContext
304- ) : Promise < string [ ] > {
306+ override buildCommandDocument ( connection : Connection ) : Document {
305307 const options = this . options ;
306308 const indexes = this . indexes ;
307309
308- const serverWireVersion = maxWireVersion ( server ) ;
310+ const serverWireVersion = maxWireVersion ( connection ) ;
309311
310312 const cmd : Document = { createIndexes : this . collectionName , indexes } ;
311313
@@ -317,13 +319,11 @@ export class CreateIndexesOperation extends CommandOperation<string[]> {
317319 }
318320 cmd . commitQuorum = options . commitQuorum ;
319321 }
322+ return cmd ;
323+ }
320324
321- // collation is set on each index, it should not be defined at the root
322- this . options . collation = undefined ;
323-
324- await super . executeCommand ( server , session , cmd , timeoutContext ) ;
325-
326- const indexNames = indexes . map ( index => index . name || '' ) ;
325+ override handleOk ( _response : InstanceType < typeof this . SERVER_COMMAND_RESPONSE_TYPE > ) : string [ ] {
326+ const indexNames = this . indexes . map ( index => index . name || '' ) ;
327327 return indexNames ;
328328 }
329329}
@@ -332,7 +332,8 @@ export class CreateIndexesOperation extends CommandOperation<string[]> {
332332export type DropIndexesOptions = CommandOperationOptions ;
333333
334334/** @internal */
335- export class DropIndexOperation extends CommandOperation < Document > {
335+ export class DropIndexOperation extends ModernizedCommandOperation < Document > {
336+ override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse ;
336337 override options : DropIndexesOptions ;
337338 collection : Collection ;
338339 indexName : string ;
@@ -343,19 +344,15 @@ export class DropIndexOperation extends CommandOperation<Document> {
343344 this . options = options ?? { } ;
344345 this . collection = collection ;
345346 this . indexName = indexName ;
347+ this . ns = collection . fullNamespace ;
346348 }
347349
348350 override get commandName ( ) {
349351 return 'dropIndexes' as const ;
350352 }
351353
352- override async execute (
353- server : Server ,
354- session : ClientSession | undefined ,
355- timeoutContext : TimeoutContext
356- ) : Promise < Document > {
357- const cmd = { dropIndexes : this . collection . collectionName , index : this . indexName } ;
358- return await super . executeCommand ( server , session , cmd , timeoutContext ) ;
354+ override buildCommandDocument ( _connection : Connection ) : Document {
355+ return { dropIndexes : this . collection . collectionName , index : this . indexName } ;
359356 }
360357}
361358
0 commit comments