From a6d59c9f76deb15f03b7dc7506c66683f8f0303a Mon Sep 17 00:00:00 2001 From: Bharatbhushan Shetty Date: Fri, 22 Oct 2021 18:57:49 -0700 Subject: [PATCH] Allow null UDTs to JavaBean --- .../mapper/GettableDataToMappedTypeConverter.scala | 4 ++-- .../GettableDataToMappedTypeConverterSpec.scala | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/driver/src/main/scala/com/datastax/spark/connector/mapper/GettableDataToMappedTypeConverter.scala b/driver/src/main/scala/com/datastax/spark/connector/mapper/GettableDataToMappedTypeConverter.scala index 33f42c801..f06420d66 100644 --- a/driver/src/main/scala/com/datastax/spark/connector/mapper/GettableDataToMappedTypeConverter.scala +++ b/driver/src/main/scala/com/datastax/spark/connector/mapper/GettableDataToMappedTypeConverter.scala @@ -19,7 +19,7 @@ import scala.reflect.runtime.universe._ class GettableDataToMappedTypeConverter[T : TypeTag : ColumnMapper]( structDef: StructDef, columnSelection: IndexedSeq[ColumnRef]) - extends TypeConverter[T] { + extends NullableTypeConverter[T] { // can't be lazy, because TypeTags are not serializable, and if we made it lazy, // the right side would be stored in a hidden serialized variable anyway @@ -267,4 +267,4 @@ class GettableDataToMappedTypeConverter[T : TypeTag : ColumnMapper]( fillBuffer(data, buf) factory.newInstance(buf: _*) } -} \ No newline at end of file +} diff --git a/driver/src/test/scala/com/datastax/spark/connector/mapper/GettableDataToMappedTypeConverterSpec.scala b/driver/src/test/scala/com/datastax/spark/connector/mapper/GettableDataToMappedTypeConverterSpec.scala index 985c50a58..18f81da02 100644 --- a/driver/src/test/scala/com/datastax/spark/connector/mapper/GettableDataToMappedTypeConverterSpec.scala +++ b/driver/src/test/scala/com/datastax/spark/connector/mapper/GettableDataToMappedTypeConverterSpec.scala @@ -345,6 +345,16 @@ class GettableDataToMappedTypeConverterSpec extends FlatSpec with Matchers { user.getAddress.getNumber shouldBe 5 } + it should "convert a CassandraRow with null UDTs to nested JavaBeans" in { + implicit val cm: ColumnMapper[UserBeanWithAddress] = new JavaBeanColumnMapper[UserBeanWithAddress] + val row = CassandraRow.fromMap(Map("login" -> "foo", "address" -> null)) + val converter = new GettableDataToMappedTypeConverter[UserBeanWithAddress]( + userTable, userTable.columnRefs) + val user = converter.convert(row) + user.getLogin shouldBe "foo" + user.getAddress shouldBe null + } + class LongBean { private[this] var number: java.lang.Long = null def getNumber: java.lang.Long = number @@ -410,4 +420,4 @@ class GettableDataToMappedTypeConverterSpec extends FlatSpec with Matchers { val deserialized = SerializationUtils.roundtrip(converter) a [NullPointerException] should be thrownBy deserialized.targetTypeTag } -} \ No newline at end of file +}