Skip to content
Prev Previous commit
Next Next commit
feat: make bulk result readonly
  • Loading branch information
durran committed Oct 14, 2024
commit b766cc3f6ee3f1fc69a8cc9c8f13de6b7d7b8f50
18 changes: 9 additions & 9 deletions src/operations/client_bulk_write/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,39 +179,39 @@ export interface ClientBulkWriteResult {
/**
* Whether the bulk write was acknowledged.
*/
acknowledged: boolean;
readonly acknowledged: boolean;
/**
* The total number of documents inserted across all insert operations.
*/
insertedCount: number;
readonly insertedCount: number;
/**
* The total number of documents upserted across all update operations.
*/
upsertedCount: number;
readonly upsertedCount: number;
/**
* The total number of documents matched across all update operations.
*/
matchedCount: number;
readonly matchedCount: number;
/**
* The total number of documents modified across all update operations.
*/
modifiedCount: number;
readonly modifiedCount: number;
/**
* The total number of documents deleted across all delete operations.
*/
deletedCount: number;
readonly deletedCount: number;
/**
* The results of each individual insert operation that was successfully performed.
*/
insertResults?: Map<number, ClientInsertOneResult>;
readonly insertResults?: ReadonlyMap<number, ClientInsertOneResult>;
/**
* The results of each individual update operation that was successfully performed.
*/
updateResults?: Map<number, ClientUpdateResult>;
readonly updateResults?: ReadonlyMap<number, ClientUpdateResult>;
/**
* The results of each individual delete operation that was successfully performed.
*/
deleteResults?: Map<number, ClientDeleteResult>;
readonly deleteResults?: ReadonlyMap<number, ClientDeleteResult>;
}

/** @public */
Expand Down
6 changes: 3 additions & 3 deletions src/operations/client_bulk_write/executor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ export class ClientBulkWriteExecutor {
message: 'Mongo client bulk write encountered an error during execution'
});
bulkWriteError.cause = error;
bulkWriteError.partialResult = resultsMerger.result;
bulkWriteError.partialResult = resultsMerger.bulkWriteResult;
throw bulkWriteError;
} else {
// Client side errors are just thrown.
Expand All @@ -128,11 +128,11 @@ export class ClientBulkWriteExecutor {
});
error.writeConcernErrors = resultsMerger.writeConcernErrors;
error.writeErrors = resultsMerger.writeErrors;
error.partialResult = resultsMerger.result;
error.partialResult = resultsMerger.bulkWriteResult;
throw error;
}

return resultsMerger.result;
return resultsMerger.bulkWriteResult;
}
}
}
62 changes: 59 additions & 3 deletions src/operations/client_bulk_write/results_merger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,53 @@ const UNACKNOWLEDGED = {
deleteResults: undefined
};

interface InternalResult {
/**
* Whether the bulk write was acknowledged.
*/
acknowledged: boolean;
/**
* The total number of documents inserted across all insert operations.
*/
insertedCount: number;
/**
* The total number of documents upserted across all update operations.
*/
upsertedCount: number;
/**
* The total number of documents matched across all update operations.
*/
matchedCount: number;
/**
* The total number of documents modified across all update operations.
*/
modifiedCount: number;
/**
* The total number of documents deleted across all delete operations.
*/
deletedCount: number;
/**
* The results of each individual insert operation that was successfully performed.
*/
insertResults?: Map<number, ClientInsertOneResult>;
/**
* The results of each individual update operation that was successfully performed.
*/
updateResults?: Map<number, ClientUpdateResult>;
/**
* The results of each individual delete operation that was successfully performed.
*/
deleteResults?: Map<number, ClientDeleteResult>;
}

/**
* Merges client bulk write cursor responses together into a single result.
* @internal
*/
export class ClientBulkWriteResultsMerger {
result: ClientBulkWriteResult;
options: ClientBulkWriteOptions;
currentBatchOffset: number;
private result: InternalResult;
private options: ClientBulkWriteOptions;
private currentBatchOffset: number;
writeConcernErrors: Document[];
writeErrors: Map<number, ClientBulkWriteError>;

Expand Down Expand Up @@ -72,6 +111,23 @@ export class ClientBulkWriteResultsMerger {
}
}

/**
* Get the bulk write result object.
*/
get bulkWriteResult(): ClientBulkWriteResult {
return {
acknowledged: this.result.acknowledged,
insertedCount: this.result.insertedCount,
upsertedCount: this.result.upsertedCount,
matchedCount: this.result.matchedCount,
modifiedCount: this.result.modifiedCount,
deletedCount: this.result.deletedCount,
insertResults: this.result.insertResults,
updateResults: this.result.updateResults,
deleteResults: this.result.deleteResults
};
}

/**
* Merge the results in the cursor to the existing result.
* @param currentBatchOffset - The offset index to the original models.
Expand Down