diff --git a/pom.xml b/pom.xml index 95fc8379d9..07fc56666b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 5.0.0-SNAPSHOT + 5.0.x-GH-4989-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index fc88571622..98395ad825 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -15,7 +15,7 @@ org.springframework.data spring-data-mongodb-parent - 5.0.0-SNAPSHOT + 5.0.x-GH-4989-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 6f34da5660..c630ea85fa 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 5.0.0-SNAPSHOT + 5.0.x-GH-4989-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/schema/QueryCharacteristics.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/schema/QueryCharacteristics.java index 9283bf4afa..ea95d6bfd2 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/schema/QueryCharacteristics.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/schema/QueryCharacteristics.java @@ -253,10 +253,12 @@ public Document toDocument() { target.append("min", valueRange.getLowerBound().getValue().orElse((T) BsonNull.VALUE)).append("max", valueRange.getUpperBound().getValue().orElse((T) BsonNull.VALUE)); } + if (precision != null) { + target.append("precision", precision); + } if (sparsity != null) { target.append("sparsity", sparsity); } - return target; } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/MongoQueryableEncryptionCollectionCreationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/MongoQueryableEncryptionCollectionCreationTests.java index b801d1770b..f369e5541c 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/MongoQueryableEncryptionCollectionCreationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/MongoQueryableEncryptionCollectionCreationTests.java @@ -31,7 +31,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; @@ -84,7 +83,7 @@ void beforeEach() { template.dropCollection(COLLECTION_NAME); } - @ParameterizedTest // GH-4185 + @ParameterizedTest // GH-4185, GH-4989 @MethodSource("collectionOptions") public void createsCollectionWithEncryptedFieldsCorrectly(CollectionOptions collectionOptions) { @@ -103,23 +102,33 @@ public void createsCollectionWithEncryptedFieldsCorrectly(CollectionOptions coll .containsEntry("bsonType", "long") // .containsEntry("queries", List.of(Document.parse( "{'queryType': 'range', 'contention': { '$numberLong' : '0' }, 'min': { '$numberLong' : '-1' }, 'max': { '$numberLong' : '1' }}"))); + + assertThat(fields.get(2)).containsEntry("path", "encryptedDouble") // + .containsEntry("bsonType", "double") // + .containsEntry("queries", List.of(Document.parse( + "{'queryType': 'range', 'contention': { '$numberLong' : '1' }, 'min': { '$numberDouble' : '-1.123' }, 'max': { '$numberDouble' : '1.123' }, 'precision': { '$numberInt' : '5'}}"))); } private static Stream collectionOptions() { BsonBinary key1 = new BsonBinary(UUID.randomUUID(), UuidRepresentation.STANDARD); BsonBinary key2 = new BsonBinary(UUID.randomUUID(), UuidRepresentation.STANDARD); + BsonBinary key3 = new BsonBinary(UUID.randomUUID(), UuidRepresentation.STANDARD); CollectionOptions manualOptions = CollectionOptions.encryptedCollection(options -> options // .queryable(encrypted(int32("encryptedInt")).keys(key1), range().min(5).max(100).contention(1)) // .queryable(encrypted(JsonSchemaProperty.int64("nested.encryptedLong")).keys(key2), - range().min(-1L).max(1L).contention(0))); + range().min(-1L).max(1L).contention(0)) // + .queryable(encrypted(JsonSchemaProperty.float64("encryptedDouble")).keys(key3), + range().min(-1.123D).max(1.123D).precision(5).contention(1))); CollectionOptions schemaOptions = CollectionOptions.encryptedCollection(MongoJsonSchema.builder() .property( queryable(encrypted(int32("encryptedInt")).keyId(key1), List.of(range().min(5).max(100).contention(1)))) .property(queryable(encrypted(int64("nested.encryptedLong")).keyId(key2), List.of(range().min(-1L).max(1L).contention(0)))) + .property(queryable(encrypted(float64("encryptedDouble")).keyId(key3), + List.of(range().min(-1.123D).max(1.123D).precision(5).contention(1)))) .build()); return Stream.of(Arguments.of(manualOptions), Arguments.of(schemaOptions));