Skip to content

Commit 9b9239b

Browse files
authored
Encapsulate operations used by MongoDatabase (#1028)
JAVA-4795
1 parent 1b3123a commit 9b9239b

File tree

7 files changed

+134
-180
lines changed

7 files changed

+134
-180
lines changed

driver-core/src/main/com/mongodb/internal/operation/AsyncOperations.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
import com.mongodb.client.model.BulkWriteOptions;
2626
import com.mongodb.client.model.Collation;
2727
import com.mongodb.client.model.CountOptions;
28+
import com.mongodb.client.model.CreateCollectionOptions;
2829
import com.mongodb.client.model.CreateIndexOptions;
30+
import com.mongodb.client.model.CreateViewOptions;
2931
import com.mongodb.client.model.DeleteOptions;
3032
import com.mongodb.client.model.DropCollectionOptions;
3133
import com.mongodb.client.model.DropIndexOptions;
@@ -237,6 +239,19 @@ public AsyncWriteOperation<BulkWriteResult> bulkWrite(final List<? extends Write
237239
return operations.bulkWrite(requests, options);
238240
}
239241

242+
public <TResult> AsyncReadOperation<TResult> commandRead(final Bson command, final Class<TResult> resultClass) {
243+
return operations.commandRead(command, resultClass);
244+
}
245+
246+
public AsyncWriteOperation<Void> dropDatabase() {
247+
return operations.dropDatabase();
248+
}
249+
250+
public AsyncWriteOperation<Void> createCollection(final String collectionName, final CreateCollectionOptions createCollectionOptions,
251+
final AutoEncryptionSettings autoEncryptionSettings) {
252+
return operations.createCollection(collectionName, createCollectionOptions, autoEncryptionSettings);
253+
}
254+
240255

241256
public AsyncWriteOperation<Void> dropCollection(final DropCollectionOptions dropCollectionOptions,
242257
final AutoEncryptionSettings autoEncryptionSettings) {
@@ -248,6 +263,11 @@ public AsyncWriteOperation<Void> renameCollection(final MongoNamespace newCollec
248263
return operations.renameCollection(newCollectionNamespace, options);
249264
}
250265

266+
public AsyncWriteOperation<Void> createView(final String viewName, final String viewOn, final List<? extends Bson> pipeline,
267+
final CreateViewOptions createViewOptions) {
268+
return operations.createView(viewName, viewOn, pipeline, createViewOptions);
269+
}
270+
251271
public AsyncWriteOperation<Void> createIndexes(final List<IndexModel> indexes, final CreateIndexOptions options) {
252272
return operations.createIndexes(indexes, options);
253273
}

driver-core/src/main/com/mongodb/internal/operation/Operations.java

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@
2222
import com.mongodb.ReadPreference;
2323
import com.mongodb.WriteConcern;
2424
import com.mongodb.client.model.BulkWriteOptions;
25+
import com.mongodb.client.model.ClusteredIndexOptions;
2526
import com.mongodb.client.model.Collation;
2627
import com.mongodb.client.model.CountOptions;
28+
import com.mongodb.client.model.CreateCollectionOptions;
2729
import com.mongodb.client.model.CreateIndexOptions;
30+
import com.mongodb.client.model.CreateViewOptions;
2831
import com.mongodb.client.model.DeleteManyModel;
2932
import com.mongodb.client.model.DeleteOneModel;
3033
import com.mongodb.client.model.DeleteOptions;
@@ -35,6 +38,7 @@
3538
import com.mongodb.client.model.FindOneAndReplaceOptions;
3639
import com.mongodb.client.model.FindOneAndUpdateOptions;
3740
import com.mongodb.client.model.IndexModel;
41+
import com.mongodb.client.model.IndexOptionDefaults;
3842
import com.mongodb.client.model.InsertManyOptions;
3943
import com.mongodb.client.model.InsertOneModel;
4044
import com.mongodb.client.model.InsertOneOptions;
@@ -45,6 +49,7 @@
4549
import com.mongodb.client.model.UpdateManyModel;
4650
import com.mongodb.client.model.UpdateOneModel;
4751
import com.mongodb.client.model.UpdateOptions;
52+
import com.mongodb.client.model.ValidationOptions;
4853
import com.mongodb.client.model.WriteModel;
4954
import com.mongodb.client.model.changestream.FullDocument;
5055
import com.mongodb.client.model.changestream.FullDocumentBeforeChange;
@@ -509,6 +514,64 @@ MixedBulkWriteOperation bulkWrite(final List<? extends WriteModel<? extends TDoc
509514
.let(toBsonDocument(options.getLet()));
510515
}
511516

517+
<TResult> CommandReadOperation<TResult> commandRead(final Bson command, final Class<TResult> resultClass) {
518+
notNull("command", command);
519+
notNull("resultClass", resultClass);
520+
return new CommandReadOperation<TResult>(namespace.getDatabaseName(), toBsonDocument(command), codecRegistry.get(resultClass));
521+
}
522+
523+
524+
DropDatabaseOperation dropDatabase() {
525+
return new DropDatabaseOperation(namespace.getDatabaseName(), getWriteConcern());
526+
}
527+
528+
529+
CreateCollectionOperation createCollection(final String collectionName, final CreateCollectionOptions createCollectionOptions,
530+
final AutoEncryptionSettings autoEncryptionSettings) {
531+
CreateCollectionOperation operation = new CreateCollectionOperation(namespace.getDatabaseName(), collectionName, writeConcern)
532+
.collation(createCollectionOptions.getCollation())
533+
.capped(createCollectionOptions.isCapped())
534+
.sizeInBytes(createCollectionOptions.getSizeInBytes())
535+
.maxDocuments(createCollectionOptions.getMaxDocuments())
536+
.storageEngineOptions(toBsonDocument(createCollectionOptions.getStorageEngineOptions()))
537+
.expireAfter(createCollectionOptions.getExpireAfter(TimeUnit.SECONDS))
538+
.timeSeriesOptions(createCollectionOptions.getTimeSeriesOptions())
539+
.changeStreamPreAndPostImagesOptions(createCollectionOptions.getChangeStreamPreAndPostImagesOptions());
540+
541+
ClusteredIndexOptions clusteredIndexOptions = createCollectionOptions.getClusteredIndexOptions();
542+
if (clusteredIndexOptions != null) {
543+
operation.clusteredIndexKey(toBsonDocument(clusteredIndexOptions.getKey()));
544+
operation.clusteredIndexUnique(clusteredIndexOptions.isUnique());
545+
operation.clusteredIndexName(clusteredIndexOptions.getName());
546+
}
547+
548+
Bson encryptedFields = createCollectionOptions.getEncryptedFields();
549+
operation.encryptedFields(toBsonDocument(encryptedFields));
550+
if (encryptedFields == null && autoEncryptionSettings != null) {
551+
Map<String, BsonDocument> encryptedFieldsMap = autoEncryptionSettings.getEncryptedFieldsMap();
552+
if (encryptedFieldsMap != null) {
553+
operation.encryptedFields(encryptedFieldsMap.getOrDefault(namespace.getDatabaseName() + "." + collectionName, null));
554+
}
555+
}
556+
557+
IndexOptionDefaults indexOptionDefaults = createCollectionOptions.getIndexOptionDefaults();
558+
Bson storageEngine = indexOptionDefaults.getStorageEngine();
559+
if (storageEngine != null) {
560+
operation.indexOptionDefaults(new BsonDocument("storageEngine", toBsonDocument(storageEngine)));
561+
}
562+
ValidationOptions validationOptions = createCollectionOptions.getValidationOptions();
563+
Bson validator = validationOptions.getValidator();
564+
if (validator != null) {
565+
operation.validator(toBsonDocument(validator));
566+
}
567+
if (validationOptions.getValidationLevel() != null) {
568+
operation.validationLevel(validationOptions.getValidationLevel());
569+
}
570+
if (validationOptions.getValidationAction() != null) {
571+
operation.validationAction(validationOptions.getValidationAction());
572+
}
573+
return operation;
574+
}
512575

513576
DropCollectionOperation dropCollection(
514577
final DropCollectionOptions dropCollectionOptions,
@@ -534,6 +597,13 @@ RenameCollectionOperation renameCollection(final MongoNamespace newCollectionNam
534597
.dropTarget(renameCollectionOptions.isDropTarget());
535598
}
536599

600+
CreateViewOperation createView(final String viewName, final String viewOn, final List<? extends Bson> pipeline,
601+
final CreateViewOptions createViewOptions) {
602+
notNull("options", createViewOptions);
603+
return new CreateViewOperation(namespace.getDatabaseName(), viewName, viewOn, toBsonDocumentList(pipeline), writeConcern)
604+
.collation(createViewOptions.getCollation());
605+
}
606+
537607
@SuppressWarnings("deprecation")
538608
CreateIndexesOperation createIndexes(final List<IndexModel> indexes, final CreateIndexOptions createIndexOptions) {
539609
notNull("indexes", indexes);

driver-core/src/main/com/mongodb/internal/operation/SyncOperations.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
import com.mongodb.client.model.BulkWriteOptions;
2626
import com.mongodb.client.model.Collation;
2727
import com.mongodb.client.model.CountOptions;
28+
import com.mongodb.client.model.CreateCollectionOptions;
2829
import com.mongodb.client.model.CreateIndexOptions;
30+
import com.mongodb.client.model.CreateViewOptions;
2931
import com.mongodb.client.model.DeleteOptions;
3032
import com.mongodb.client.model.DropCollectionOptions;
3133
import com.mongodb.client.model.DropIndexOptions;
@@ -209,23 +211,39 @@ public WriteOperation<BulkWriteResult> insertMany(final List<? extends TDocument
209211
return operations.insertMany(documents, options);
210212
}
211213

212-
@SuppressWarnings("unchecked")
213214
public WriteOperation<BulkWriteResult> bulkWrite(final List<? extends WriteModel<? extends TDocument>> requests,
214215
final BulkWriteOptions options) {
215216
return operations.bulkWrite(requests, options);
216217
}
217218

219+
public <TResult> ReadOperation<TResult> commandRead(final Bson command, final Class<TResult> resultClass) {
220+
return operations.commandRead(command, resultClass);
221+
}
222+
223+
public WriteOperation<Void> dropDatabase() {
224+
return operations.dropDatabase();
225+
}
226+
227+
228+
public WriteOperation<Void> createCollection(final String collectionName, final CreateCollectionOptions createCollectionOptions,
229+
final AutoEncryptionSettings autoEncryptionSettings) {
230+
return operations.createCollection(collectionName, createCollectionOptions, autoEncryptionSettings);
231+
}
218232

219233
public WriteOperation<Void> dropCollection(final DropCollectionOptions dropCollectionOptions,
220234
final AutoEncryptionSettings autoEncryptionSettings) {
221235
return operations.dropCollection(dropCollectionOptions, autoEncryptionSettings);
222236
}
223237

224-
public WriteOperation<Void> renameCollection(final MongoNamespace newCollectionNamespace,
225-
final RenameCollectionOptions options) {
238+
public WriteOperation<Void> renameCollection(final MongoNamespace newCollectionNamespace, final RenameCollectionOptions options) {
226239
return operations.renameCollection(newCollectionNamespace, options);
227240
}
228241

242+
public WriteOperation<Void> createView(final String viewName, final String viewOn, final List<? extends Bson> pipeline,
243+
final CreateViewOptions createViewOptions) {
244+
return operations.createView(viewName, viewOn, pipeline, createViewOptions);
245+
}
246+
229247
public WriteOperation<Void> createIndexes(final List<IndexModel> indexes, final CreateIndexOptions options) {
230248
return operations.createIndexes(indexes, options);
231249
}

driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MongoDatabaseImpl.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,7 @@ public Publisher<Void> createCollection(final String collectionName) {
208208
@Override
209209
public Publisher<Void> createCollection(final String collectionName, final CreateCollectionOptions options) {
210210
return mongoOperationPublisher.createCollection(null,
211-
new MongoNamespace(getName(), notNull("collectionName", collectionName)),
212-
notNull("options", options));
211+
notNull("collectionName", collectionName), notNull("options", options));
213212
}
214213

215214
@Override
@@ -221,8 +220,7 @@ public Publisher<Void> createCollection(final ClientSession clientSession, final
221220
public Publisher<Void> createCollection(final ClientSession clientSession, final String collectionName,
222221
final CreateCollectionOptions options) {
223222
return mongoOperationPublisher.createCollection(notNull("clientSession", clientSession),
224-
new MongoNamespace(getName(), notNull("collectionName", collectionName)),
225-
notNull("options", options));
223+
notNull("collectionName", collectionName), notNull("options", options));
226224
}
227225

228226
@Override

0 commit comments

Comments
 (0)