Skip to content

Commit

Permalink
fixes #331 Typed queries ignore @SerialName annotations on enum value…
Browse files Browse the repository at this point in the history
…s, regression from 4.4.0
  • Loading branch information
zigzago committed Mar 30, 2022
1 parent 7dfbeca commit 69c8163
Show file tree
Hide file tree
Showing 15 changed files with 176 additions and 29 deletions.
2 changes: 1 addition & 1 deletion kmongo-benchmark/common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<parent>
<groupId>org.litote.kmongo</groupId>
<artifactId>kmongo-benchmark</artifactId>
<version>4.2.9-SNAPSHOT</version>
<version>4.5.1-SNAPSHOT</version>
</parent>

<artifactId>kmongo-benchmark-common</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@

package org.litote.kmongo

import com.mongodb.MongoClientSettings
import org.bson.BsonBinaryReader
import org.bson.Document
import org.bson.codecs.DecoderContext
import org.bson.codecs.configuration.CodecRegistry
import org.bson.types.ObjectId
import org.litote.kmongo.service.ClassMappingType
import org.litote.kmongo.util.KMongoUtil
import java.nio.ByteBuffer

/**
Expand Down Expand Up @@ -54,8 +54,8 @@ object KMongoBenchmark {
)
}

val defaultCodecRegistry = MongoClientSettings.getDefaultCodecRegistry()
val kmongoCodecRegistry = ClassMappingType.codecRegistry(MongoClientSettings.getDefaultCodecRegistry())
val defaultCodecRegistry = KMongoUtil.defaultCodecRegistry
val kmongoCodecRegistry = ClassMappingType.codecRegistry(KMongoUtil.defaultCodecRegistry)

inline fun <reified T : Any> decode(registry: CodecRegistry): T =
registry
Expand Down
2 changes: 1 addition & 1 deletion kmongo-benchmark/jackson/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<parent>
<groupId>org.litote.kmongo</groupId>
<artifactId>kmongo-benchmark</artifactId>
<version>4.2.9-SNAPSHOT</version>
<version>4.5.1-SNAPSHOT</version>
</parent>

<artifactId>kmongo-benchmark-jackson</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion kmongo-benchmark/native/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<parent>
<groupId>org.litote.kmongo</groupId>
<artifactId>kmongo-benchmark</artifactId>
<version>4.2.9-SNAPSHOT</version>
<version>4.5.1-SNAPSHOT</version>
</parent>

<artifactId>kmongo-benchmark-native</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion kmongo-benchmark/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<parent>
<groupId>org.litote.kmongo</groupId>
<artifactId>kmongo-root</artifactId>
<version>4.2.9-SNAPSHOT</version>
<version>4.5.1-SNAPSHOT</version>
</parent>

<artifactId>kmongo-benchmark</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion kmongo-benchmark/serialization/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<parent>
<groupId>org.litote.kmongo</groupId>
<artifactId>kmongo-benchmark</artifactId>
<version>4.2.9-SNAPSHOT</version>
<version>4.5.1-SNAPSHOT</version>
</parent>

<artifactId>kmongo-benchmark-serialization</artifactId>
Expand Down
7 changes: 6 additions & 1 deletion kmongo-core/src/main/kotlin/org/litote/kmongo/KMongo.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import org.bson.codecs.configuration.CodecConfigurationException
import org.bson.codecs.configuration.CodecRegistry
import org.bson.internal.OverridableUuidRepresentationCodecRegistry
import org.litote.kmongo.service.ClassMappingType
import org.litote.kmongo.util.KMongoUtil

/**
* Main object used to create a [MongoClient](https://api.mongodb.com/java/current/com/mongodb/MongoClient.html) instance.
Expand Down Expand Up @@ -57,7 +58,11 @@ object KMongo {
*/
fun createClient(connectionString: ConnectionString): MongoClient =
createClient(
MongoClientSettings.builder().applyConnectionString(connectionString).build()
MongoClientSettings
.builder()
.codecRegistry(KMongoUtil.defaultCodecRegistry)
.applyConnectionString(connectionString)
.build()
)

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.mongodb.ConnectionString
import com.mongodb.MongoClientSettings
import com.mongodb.client.MongoClient
import com.mongodb.client.MongoClients
import org.litote.kmongo.util.KMongoUtil

/**
* only used for test
Expand All @@ -32,9 +33,7 @@ internal class SyncMongoClientProviderService : MongoClientProviderService<Mongo
.builder()
.applyConnectionString(connectionString)
.codecRegistry(
ClassMappingType.codecRegistry(
MongoClientSettings.getDefaultCodecRegistry()
)
ClassMappingType.codecRegistry(KMongoUtil.defaultCodecRegistry)
)
.build()
)
Expand Down
2 changes: 0 additions & 2 deletions kmongo-serialization/src/test/kotlin/Issue287UUID.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import org.bson.BsonReader
import org.bson.BsonWriter
import org.bson.Document
import org.bson.codecs.Codec
import org.bson.codecs.DecoderContext
import org.bson.codecs.EncoderContext
Expand All @@ -37,7 +36,6 @@ import org.litote.kmongo.AllCategoriesKMongoBaseTest
import org.litote.kmongo.eq
import org.litote.kmongo.findOne
import org.litote.kmongo.serialization.registerSerializer
import org.litote.kmongo.withDocumentClass
import java.util.UUID
import kotlin.test.assertNotNull

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,9 @@ import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import org.bson.Document
import org.junit.Test
import org.litote.kmongo.AllCategoriesKMongoBaseTest
import org.litote.kmongo.findOne
import org.litote.kmongo.withDocumentClass
import java.nio.file.Path
import java.nio.file.Paths
import kotlin.test.assertEquals
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright (C) 2016/2021 Litote
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.litote.kmongo.issues

import kotlinx.serialization.Contextual
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import org.bson.types.ObjectId
import org.junit.Test
import org.litote.kmongo.AllCategoriesKMongoBaseTest
import org.litote.kmongo.Id
import org.litote.kmongo.MongoOperator
import org.litote.kmongo.MongoOperator.*
import org.litote.kmongo.eq
import org.litote.kmongo.id.toId
import org.litote.kmongo.json
import org.litote.kmongo.newId
import org.litote.kmongo.toId
import kotlin.test.assertEquals

@Serializable
data class UserSubscription(
@SerialName("_id")
@Contextual val id: Id<UserSubscription> = newId(),
@Contextual val user: Id<User>
)

/**
*
*/
class Issue328FieldIdQueryFilterSerialization : AllCategoriesKMongoBaseTest<UserSubscription>() {

@Test
fun testSerialization() {
val json = (UserSubscription::user eq ObjectId("6244ba8b131ffc0267c9a10c").toId()).json
assertEquals("""{"user": {"$oid": "6244ba8b131ffc0267c9a10c"}}""", json)

val json2 = (UserSubscription::user eq "6244ba8b131ffc0267c9a10c".toId()).json
assertEquals("""{"user": "6244ba8b131ffc0267c9a10c"}""", json2)
}
}
59 changes: 59 additions & 0 deletions kmongo-serialization/src/test/kotlin/Issue331EnumSerialName.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
* Copyright (C) 2016/2021 Litote
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.litote.kmongo.issues

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import org.junit.Test
import org.litote.kmongo.AllCategoriesKMongoBaseTest
import org.litote.kmongo.eq
import org.litote.kmongo.findOne
import org.litote.kmongo.json
import kotlin.test.assertEquals
import kotlin.test.assertNotNull

@Serializable
data class Jedi(
@SerialName("Name")
val name: String,
val age: Int,
val rating: Rating
)

@Serializable
enum class Rating {
@SerialName("Favourite")
FAVOURITE,

@SerialName("Hated")
HATED,
}

class Issue331EnumSerialName : AllCategoriesKMongoBaseTest<Jedi>() {

@Test
fun testSerialization() {
val json = (Jedi::rating eq Rating.FAVOURITE).json
assertEquals("""{"rating": "Favourite"}""", json)

col.insertOne(Jedi("Luke Skywalker", 19, Rating.FAVOURITE))

val jedi1 = col.findOne(Jedi::rating eq Rating.FAVOURITE)
assertNotNull(jedi1)

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@

package org.litote.kmongo.service

import com.mongodb.MongoClientSettings
import org.bson.BsonDocument
import org.bson.codecs.Codec
import org.bson.codecs.configuration.CodecProvider
import org.bson.codecs.configuration.CodecRegistries
import org.bson.codecs.configuration.CodecRegistry
import org.litote.kmongo.util.KMongoUtil
import java.util.concurrent.ConcurrentHashMap
import kotlin.reflect.KClass
import kotlin.reflect.KProperty
Expand Down Expand Up @@ -83,7 +83,7 @@ interface ClassMappingTypeService {
coreCodeRegistry
)

fun coreCodecRegistry(baseCodecRegistry: CodecRegistry = MongoClientSettings.getDefaultCodecRegistry()): CodecRegistry
fun coreCodecRegistry(baseCodecRegistry: CodecRegistry = KMongoUtil.defaultCodecRegistry): CodecRegistry

fun <T> getPath(property: KProperty<T>): String {
//sanity check
Expand Down
41 changes: 37 additions & 4 deletions kmongo-shared/src/main/kotlin/org/litote/kmongo/util/KMongoUtil.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@

package org.litote.kmongo.util

import com.mongodb.MongoClientSettings
import com.mongodb.DBObjectCodecProvider
import com.mongodb.DBRefCodecProvider
import com.mongodb.DocumentToDBRefTransformer
import com.mongodb.client.gridfs.codecs.GridFSFileCodecProvider
import com.mongodb.client.model.BsonField
import com.mongodb.client.model.DeleteManyModel
import com.mongodb.client.model.DeleteOneModel
Expand All @@ -28,6 +31,7 @@ import com.mongodb.client.model.UpdateManyModel
import com.mongodb.client.model.UpdateOneModel
import com.mongodb.client.model.UpdateOptions
import com.mongodb.client.model.WriteModel
import com.mongodb.client.model.geojson.codecs.GeoJsonCodecProvider
import org.bson.BsonBoolean
import org.bson.BsonDocument
import org.bson.BsonDocumentWriter
Expand All @@ -39,10 +43,19 @@ import org.bson.BsonString
import org.bson.BsonValue
import org.bson.Document
import org.bson.codecs.BsonArrayCodec
import org.bson.codecs.BsonCodecProvider
import org.bson.codecs.BsonValueCodecProvider
import org.bson.codecs.DecoderContext
import org.bson.codecs.DocumentCodecProvider
import org.bson.codecs.Encoder
import org.bson.codecs.EncoderContext
import org.bson.codecs.IterableCodecProvider
import org.bson.codecs.JsonObjectCodecProvider
import org.bson.codecs.MapCodecProvider
import org.bson.codecs.ValueCodecProvider
import org.bson.codecs.configuration.CodecRegistries
import org.bson.codecs.configuration.CodecRegistry
import org.bson.codecs.jsr310.Jsr310CodecProvider
import org.bson.conversions.Bson
import org.bson.json.JsonReader
import org.bson.types.ObjectId
Expand Down Expand Up @@ -91,8 +104,25 @@ object KMongoUtil {
).map { it.toString() }

private val internalDefaultRegistry: CodecRegistry by lazy(PUBLICATION) {
ClassMappingType.codecRegistry(
MongoClientSettings.getDefaultCodecRegistry()
ClassMappingType.codecRegistry(defaultCodecRegistry)
}

val defaultCodecRegistry: CodecRegistry by lazy(PUBLICATION) {
CodecRegistries.fromProviders(
listOf(
ValueCodecProvider(),
BsonValueCodecProvider(),
DBRefCodecProvider(),
DBObjectCodecProvider(),
DocumentCodecProvider(DocumentToDBRefTransformer()),
IterableCodecProvider(DocumentToDBRefTransformer()),
MapCodecProvider(DocumentToDBRefTransformer()),
GeoJsonCodecProvider(),
GridFSFileCodecProvider(),
Jsr310CodecProvider(),
JsonObjectCodecProvider(),
BsonCodecProvider()
)
)
}

Expand Down Expand Up @@ -147,7 +177,10 @@ object KMongoUtil {
json.map { toBson(it) }
}

fun filterIdToBson(obj: Any, filterNullProperties: Boolean = !ObjectMappingConfiguration.serializeNull): BsonDocument =
fun filterIdToBson(
obj: Any,
filterNullProperties: Boolean = !ObjectMappingConfiguration.serializeNull
): BsonDocument =
ClassMappingType.filterIdToBson(obj, filterNullProperties)

fun formatJson(json: String): String {
Expand Down
14 changes: 7 additions & 7 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,11 @@
<coroutine.version>1.6.0</coroutine.version>
<rxjava.version>2.2.21</rxjava.version>
<rxkotlin.version>2.4.0</rxkotlin.version>
<reactor.version>2020.0.15</reactor.version>
<reactor.version>2020.0.17</reactor.version>
<mongo.reactor.adapter.version>0.3.2</mongo.reactor.adapter.version>
<jackson.version>2.13.1</jackson.version>
<jackson-module.version>2.13.1</jackson-module.version>
<bson4jackson.version>2.13.0</bson4jackson.version>
<jackson.version>2.13.2.2</jackson.version>
<jackson-module.version>2.13.2</jackson-module.version>
<bson4jackson.version>2.13.1</bson4jackson.version>
<kreflect.version>1.0.0</kreflect.version>
<jackson-module-loader.version>0.4.0</jackson-module-loader.version>
<kotlinx-serialization.version>1.3.2</kotlinx-serialization.version>
Expand All @@ -92,13 +92,13 @@
<kgenerator.version>0.4.0</kgenerator.version>
<kjackson-data.version>0.4.0</kjackson-data.version>
<kjackson-generator.version>0.4.0</kjackson-generator.version>
<kotlinx.metadata>0.4.1</kotlinx.metadata>
<kotlinx.metadata>0.4.2</kotlinx.metadata>

<!-- test dependencies -->
<flapdoodle.version>2.2.0</flapdoodle.version>
<sl4j.version>2.0.0-alpha5</sl4j.version>
<sl4j.version>2.0.0-alpha7</sl4j.version>
<junit.version>4.13.2</junit.version>
<jmh.version>1.34</jmh.version>
<jmh.version>1.35</jmh.version>
<compiler-testing.version>0.19</compiler-testing.version>
<mockito.kotlin.version>2.2.0</mockito.kotlin.version>

Expand Down

0 comments on commit 69c8163

Please sign in to comment.