This is an automated email from the ASF dual-hosted git repository.

ycai pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-analytics.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 555e849  CASSANDRA-19836: Fix NPE when writing UDT values (#74)
555e849 is described below

commit 555e8494d3ca27a7b35aebabb1f669eede20cc53
Author: Yifan Cai <[email protected]>
AuthorDate: Tue Aug 20 17:33:35 2024 -0700

    CASSANDRA-19836: Fix NPE when writing UDT values (#74)
    
    When UDT field values are set to null, the bulk writer throws NPE
    
    Patch by Yifan Cai; Reviewed by Dinesh Joshi, Doug Rohrer for 
CASSANDRA-19836
---
 CHANGES.txt                                        |  1 +
 .../bulkwriter/CassandraBulkWriterContext.java     |  2 +-
 .../spark/bulkwriter/RecordWriterTest.java         |  2 +-
 .../cassandra/analytics/BulkWriteUdtTest.java      | 12 ++++++--
 .../cassandra/analytics/DataGenerationUtils.java   | 35 ++++++++++++----------
 .../org/apache/cassandra/spark/data/CqlType.java   | 29 ++++++++++++++++--
 .../cassandra/spark/data/complex/CqlFrozen.java    |  2 +-
 .../cassandra/spark/data/complex/CqlList.java      |  2 +-
 .../cassandra/spark/data/complex/CqlMap.java       |  2 +-
 .../cassandra/spark/data/complex/CqlSet.java       |  2 +-
 .../cassandra/spark/data/complex/CqlTuple.java     |  4 +--
 .../cassandra/spark/data/complex/CqlUdt.java       | 22 +++++++-------
 .../apache/cassandra/spark/data/types/BigInt.java  |  2 +-
 .../apache/cassandra/spark/data/types/Blob.java    |  2 +-
 .../apache/cassandra/spark/data/types/Boolean.java |  2 +-
 .../apache/cassandra/spark/data/types/Date.java    |  2 +-
 .../apache/cassandra/spark/data/types/Decimal.java |  2 +-
 .../apache/cassandra/spark/data/types/Double.java  |  2 +-
 .../apache/cassandra/spark/data/types/Empty.java   |  2 +-
 .../apache/cassandra/spark/data/types/Float.java   |  2 +-
 .../apache/cassandra/spark/data/types/Inet.java    |  2 +-
 .../org/apache/cassandra/spark/data/types/Int.java |  2 +-
 .../cassandra/spark/data/types/SmallInt.java       |  2 +-
 .../cassandra/spark/data/types/StringBased.java    |  2 +-
 .../apache/cassandra/spark/data/types/Time.java    |  2 +-
 .../cassandra/spark/data/types/Timestamp.java      |  2 +-
 .../apache/cassandra/spark/data/types/TinyInt.java |  2 +-
 .../apache/cassandra/spark/data/types/UUID.java    |  2 +-
 .../apache/cassandra/spark/data/types/VarInt.java  |  2 +-
 29 files changed, 94 insertions(+), 55 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 108172a..cec6e0a 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 1.0.0
+ * Fix NPE when writing UDT values (CASSANDRA-19836)
  * Add job_timeout_seconds writer option (CASSANDRA-19827)
  * Prevent double closing sstable writer (CASSANDRA-19821)
  * Stream sstable eagerly when bulk writing to reclaim local disk space sooner 
(CASSANDRA-19806)
diff --git 
a/cassandra-analytics-core/src/main/java/org/apache/cassandra/spark/bulkwriter/CassandraBulkWriterContext.java
 
b/cassandra-analytics-core/src/main/java/org/apache/cassandra/spark/bulkwriter/CassandraBulkWriterContext.java
index 89f2bb9..632b6c0 100644
--- 
a/cassandra-analytics-core/src/main/java/org/apache/cassandra/spark/bulkwriter/CassandraBulkWriterContext.java
+++ 
b/cassandra-analytics-core/src/main/java/org/apache/cassandra/spark/bulkwriter/CassandraBulkWriterContext.java
@@ -254,6 +254,6 @@ public class CassandraBulkWriterContext implements 
BulkWriterContext, KryoSerial
                                conf.getTTLOptions(),
                                conf.getTimestampOptions(),
                                lowestCassandraVersion,
-                               
jobInfo.qualifiedTableName().quoteIdentifiers());
+                               conf.quoteIdentifiers);
     }
 }
diff --git 
a/cassandra-analytics-core/src/test/java/org/apache/cassandra/spark/bulkwriter/RecordWriterTest.java
 
b/cassandra-analytics-core/src/test/java/org/apache/cassandra/spark/bulkwriter/RecordWriterTest.java
index 6fcd366..bb2c4f9 100644
--- 
a/cassandra-analytics-core/src/test/java/org/apache/cassandra/spark/bulkwriter/RecordWriterTest.java
+++ 
b/cassandra-analytics-core/src/test/java/org/apache/cassandra/spark/bulkwriter/RecordWriterTest.java
@@ -22,8 +22,8 @@ package org.apache.cassandra.spark.bulkwriter;
 import java.math.BigInteger;
 import java.nio.file.Path;
 import java.util.Arrays;
-import java.util.HashSet;
 import java.util.Comparator;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
diff --git 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/BulkWriteUdtTest.java
 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/BulkWriteUdtTest.java
index 47ad6cf..abd8beb 100644
--- 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/BulkWriteUdtTest.java
+++ 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/BulkWriteUdtTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.cassandra.analytics;
 
+import java.util.function.Predicate;
+
 import org.junit.jupiter.api.Test;
 
 import org.apache.cassandra.distributed.api.ConsistencyLevel;
@@ -61,7 +63,8 @@ class BulkWriteUdtTest extends 
SharedClusterSparkIntegrationTestBase
     void testWriteWithUdt()
     {
         SparkSession spark = getOrCreateSparkSession();
-        Dataset<Row> df = DataGenerationUtils.generateUdtData(spark, 
ROW_COUNT);
+        Predicate<Integer> nullSetter = index -> index % 2 == 0;
+        Dataset<Row> df = DataGenerationUtils.generateUdtData(spark, 
ROW_COUNT, nullSetter);
 
         bulkWriterDataFrameWriter(df, UDT_TABLE_NAME).save();
 
@@ -76,7 +79,8 @@ class BulkWriteUdtTest extends 
SharedClusterSparkIntegrationTestBase
     void testWriteWithNestedUdt()
     {
         SparkSession spark = getOrCreateSparkSession();
-        Dataset<Row> df = DataGenerationUtils.generateNestedUdtData(spark, 
ROW_COUNT);
+        Predicate<Integer> nullSetter = index -> index % 2 == 0;
+        Dataset<Row> df = DataGenerationUtils.generateNestedUdtData(spark, 
ROW_COUNT, nullSetter);
 
         bulkWriterDataFrameWriter(df, NESTED_TABLE_NAME).save();
 
@@ -90,9 +94,11 @@ class BulkWriteUdtTest extends 
SharedClusterSparkIntegrationTestBase
     @NotNull
     public static String defaultRowFormatter(com.datastax.driver.core.Row row)
     {
+        // Formats as field:value with no whitespaces, and strings quoted
+        // Driver Codec writes "NULL" for null value. Spark DF writes "null".
         return row.getLong(0) +
                ":" +
-               row.getUDTValue(1); // Formats as field:value with no 
whitespaces, and strings quoted
+               row.getUDTValue(1).toString().replace("NULL", "null");
     }
 
     @Override
diff --git 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/DataGenerationUtils.java
 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/DataGenerationUtils.java
index 8ed742a..0503c03 100644
--- 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/DataGenerationUtils.java
+++ 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/DataGenerationUtils.java
@@ -23,6 +23,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
@@ -154,6 +155,7 @@ public final class DataGenerationUtils
     public static Dataset<Row> generateCourseData(SparkSession spark, Integer 
ttl, Long timestamp, int rowCount)
     {
         SQLContext sql = spark.sqlContext();
+        // Note: only primary key columns are required to be not nullable; All 
columns are nullable only for test convenience
         StructType schema = new StructType()
                             .add("id", IntegerType, false)
                             .add("course", StringType, false)
@@ -189,40 +191,43 @@ public final class DataGenerationUtils
         return sql.createDataFrame(rows, schema);
     }
 
-    public static Dataset<Row> generateUdtData(SparkSession spark, int 
rowCount)
+    public static Dataset<Row> generateUdtData(SparkSession spark, int 
rowCount, Predicate<Integer> nullUdtFieldValuePredicate)
     {
         SQLContext sql = spark.sqlContext();
-        StructType udtType = createStructType(new StructField[]{new 
StructField("f1", StringType, false, Metadata.empty()),
-                                                                new 
StructField("f2", IntegerType, false, Metadata.empty())});
+        StructType udtType = createStructType(new StructField[]{new 
StructField("f1", StringType, true, Metadata.empty()),
+                                                                new 
StructField("f2", IntegerType, true, Metadata.empty())});
         StructType schema = new StructType()
-                            .add("id", IntegerType, false)
-                            .add("udtfield", udtType, false);
+                            .add("id", IntegerType, false) // pk is not 
nullable
+                            .add("udtfield", udtType, true); // value column 
is nullable
 
         List<Row> rows = IntStream.range(0, rowCount)
                                   .mapToObj(id -> {
                                       String course = "course" + id;
-                                      Object[] values = {id, 
RowFactory.create(course, id)};
+                                      Row udt = RowFactory.create(course, 
nullUdtFieldValuePredicate.test(id) ? null : id);
+                                      Object[] values = {id, udt};
                                       return RowFactory.create(values);
                                   }).collect(Collectors.toList());
         return sql.createDataFrame(rows, schema);
     }
 
-    public static Dataset<Row> generateNestedUdtData(SparkSession spark, int 
rowCount)
+    public static Dataset<Row> generateNestedUdtData(SparkSession spark, int 
rowCount, Predicate<Integer> nullUdtFieldValuePredicate)
     {
         SQLContext sql = spark.sqlContext();
-        StructType udtType = createStructType(new StructField[]{new 
StructField("f1", StringType, false, Metadata.empty()),
-                                                                new 
StructField("f2", IntegerType, false, Metadata.empty())});
-        StructType nestedType = createStructType(new StructField[] {new 
StructField("n1", IntegerType, false, Metadata.empty()),
-                                                                    new 
StructField("n2", udtType, false, Metadata.empty())});
+        StructType udtType = createStructType(new StructField[]{new 
StructField("f1", StringType, true, Metadata.empty()),
+                                                                new 
StructField("f2", IntegerType, true, Metadata.empty())});
+        StructType nestedType = createStructType(new StructField[] {new 
StructField("n1", IntegerType, true, Metadata.empty()),
+                                                                    new 
StructField("n2", udtType, true, Metadata.empty())});
         StructType schema = new StructType()
-                            .add("id", IntegerType, false)
-                            .add("nested", nestedType, false);
+                            .add("id", IntegerType, false) // pk is not 
nullable
+                            .add("nested", nestedType, true); // value column 
is nullable
 
         List<Row> rows = IntStream.range(0, rowCount)
                                   .mapToObj(id -> {
                                       String course = "course" + id;
-                                      Row innerUdt = RowFactory.create(id, 
RowFactory.create(course, id));
-                                      Object[] values = {id, innerUdt};
+                                      Row outerUdt = RowFactory.create(id,
+                                                                       // 
inner udt value
+                                                                       
nullUdtFieldValuePredicate.test(id) ? null : RowFactory.create(course, id));
+                                      Object[] values = {id, outerUdt};
                                       return RowFactory.create(values);
                                   }).collect(Collectors.toList());
         return sql.createDataFrame(rows, schema);
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/CqlType.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/CqlType.java
index cbcd814..bc36a43 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/CqlType.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/CqlType.java
@@ -30,6 +30,8 @@ import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.serializers.TypeSerializer;
 import org.apache.spark.sql.Row;
 import org.apache.spark.sql.catalyst.expressions.GenericInternalRow;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 public abstract class CqlType implements CqlField.CqlType
 {
@@ -106,12 +108,35 @@ public abstract class CqlType implements CqlField.CqlType
         throw CqlField.notImplemented(this);
     }
 
-    // Set inner value for UDTs or Tuples
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    /**
+     * Set inner value for UDTs or Tuples
+     * @param udtValue udtValue to update
+     * @param position position in the vdtValue to set
+     * @param value value to set; the value is guaranteed to not be null
+     */
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, @NotNull Object value)
     {
         throw CqlField.notImplemented(this);
     }
 
+    /**
+     * Set nullable inner value at the position for UDTs or Tuples
+     * @param udtValue udtValue to update
+     * @param position position in the vdtValue to set
+     * @param value nullable value to set
+     */
+    public final void setInnerValue(SettableByIndexData<?> udtValue, int 
position, @Nullable Object value)
+    {
+        if (value == null)
+        {
+            udtValue.setToNull(position);
+        }
+        else
+        {
+            setInnerValueInternal(udtValue, position, value);
+        }
+    }
+
     @Override
     public String toString()
     {
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlFrozen.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlFrozen.java
index ca615ac..26ff6b9 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlFrozen.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlFrozen.java
@@ -163,7 +163,7 @@ public class CqlFrozen extends CqlType implements 
CqlField.CqlFrozen
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         ((CqlType) inner()).setInnerValue(udtValue, position, value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlList.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlList.java
index cd9b38b..c6f35a7 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlList.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlList.java
@@ -116,7 +116,7 @@ public class CqlList extends CqlCollection implements 
CqlField.CqlList
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setList(position, (List<?>) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlMap.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlMap.java
index 7098b9a..901a285 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlMap.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlMap.java
@@ -174,7 +174,7 @@ public class CqlMap extends CqlCollection implements 
CqlField.CqlMap
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setMap(position, (Map<?, ?>) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlSet.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlSet.java
index f6f7189..17a9ad0 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlSet.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlSet.java
@@ -94,7 +94,7 @@ public class CqlSet extends CqlList implements CqlField.CqlSet
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setSet(position, (Set<?>) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlTuple.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlTuple.java
index 03e6ea4..5ede513 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlTuple.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlTuple.java
@@ -203,7 +203,7 @@ public class CqlTuple extends CqlCollection implements 
CqlField.CqlTuple
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setTupleValue(position, 
toTupleValue(CassandraVersion.FOURZERO, this, value));
     }
@@ -237,7 +237,7 @@ public class CqlTuple extends CqlCollection implements 
CqlField.CqlTuple
         Object[] array = (Object[]) value;
         for (int position = 0; position < array.length; position++)
         {
-            CqlUdt.setInnerValue(version, tupleValue, (CqlType) 
tuple.type(position), position, array[position]);
+            CqlUdt.setNullableInnerValue(version, tupleValue, (CqlType) 
tuple.type(position), position, array[position]);
         }
         return tupleValue;
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlUdt.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlUdt.java
index 5538ca6..90870dc 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlUdt.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/complex/CqlUdt.java
@@ -60,6 +60,8 @@ import 
org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema;
 import org.apache.spark.sql.types.DataType;
 import org.apache.spark.sql.types.DataTypes;
 import org.apache.spark.sql.types.StructField;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 public class CqlUdt extends CqlType implements CqlField.CqlUdt
 {
@@ -133,7 +135,7 @@ public class CqlUdt extends CqlType implements 
CqlField.CqlUdt
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setUDTValue(position, (UDTValue) value);
     }
@@ -153,7 +155,7 @@ public class CqlUdt extends CqlType implements 
CqlField.CqlUdt
     }
 
     @Override
-    public Object convertForCqlWriter(Object value, CassandraVersion version)
+    public Object convertForCqlWriter(@NotNull Object value, CassandraVersion 
version)
     {
         if (value instanceof UDTValue)
         {
@@ -503,26 +505,26 @@ public class CqlUdt extends CqlType implements 
CqlField.CqlUdt
     }
 
     @SuppressWarnings("unchecked")
-    public static UDTValue toUserTypeValue(CassandraVersion version, CqlUdt 
udt, Object value)
+    public static UDTValue toUserTypeValue(CassandraVersion version, CqlUdt 
udt, @NotNull Object value)
     {
         Map<String, Object> values = (Map<String, Object>) value;
         UDTValue udtValue = UserTypeHelper.newUDTValue(toUserType(udt));
         int position = 0;
         for (CqlField field : udt.fields())
         {
-            setInnerValue(version, udtValue, (CqlType) field.type(), 
position++, values.get(field.name()));
+            setNullableInnerValue(version, udtValue, (CqlType) field.type(), 
position++, values.get(field.name()));
         }
         return udtValue;
     }
 
     // Set inner value for UDTs or Tuples
-    public static void setInnerValue(CassandraVersion version,
-                                     SettableByIndexData<?> udtValue,
-                                     CqlType type,
-                                     int position,
-                                     Object value)
+    public static void setNullableInnerValue(CassandraVersion version,
+                                             SettableByIndexData<?> udtValue,
+                                             CqlType type,
+                                             int position,
+                                             @Nullable Object value)
     {
-        type.setInnerValue(udtValue, position, type.convertForCqlWriter(value, 
version));
+        type.setInnerValue(udtValue, position, value == null ? null : 
type.convertForCqlWriter(value, version));
     }
 
     public static UserType toUserType(CqlUdt udt)
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/BigInt.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/BigInt.java
index 86f998a..d7b67eb 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/BigInt.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/BigInt.java
@@ -41,7 +41,7 @@ public class BigInt extends LongBased
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setLong(position, (long) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Blob.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Blob.java
index a74251c..e747822 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Blob.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Blob.java
@@ -63,7 +63,7 @@ public class Blob extends BinaryBased
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setBytes(position, (ByteBuffer) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Boolean.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Boolean.java
index 062b3e6..7347197 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Boolean.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Boolean.java
@@ -84,7 +84,7 @@ public class Boolean extends NativeType
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setBool(position, (boolean) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Date.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Date.java
index ccc6a9f..cade94e 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Date.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Date.java
@@ -105,7 +105,7 @@ public class Date extends NativeType
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setDate(position, (LocalDate) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Decimal.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Decimal.java
index 670c934..c0aaf56 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Decimal.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Decimal.java
@@ -100,7 +100,7 @@ public class Decimal extends NativeType
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setDecimal(position, (BigDecimal) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Double.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Double.java
index 8f4650b..c157874 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Double.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Double.java
@@ -78,7 +78,7 @@ public class Double extends NativeType
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setDouble(position, (double) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Empty.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Empty.java
index cae82ce..93fdd52 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Empty.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Empty.java
@@ -89,7 +89,7 @@ public class Empty extends NativeType
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setToNull(position);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Float.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Float.java
index 046fb74..1df6848 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Float.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Float.java
@@ -78,7 +78,7 @@ public class Float extends NativeType
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setFloat(position, (float) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Inet.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Inet.java
index c684ca5..c2ba840 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Inet.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Inet.java
@@ -73,7 +73,7 @@ public class Inet extends BinaryBased
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setInet(position, (InetAddress) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Int.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Int.java
index 3239e77..2797b5e 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Int.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Int.java
@@ -78,7 +78,7 @@ public class Int extends NativeType
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setInt(position, (int) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/SmallInt.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/SmallInt.java
index 9101b5a..98eabf6 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/SmallInt.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/SmallInt.java
@@ -78,7 +78,7 @@ public class SmallInt extends NativeType
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setShort(position, (short) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/StringBased.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/StringBased.java
index 5bb4d20..f60ac2f 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/StringBased.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/StringBased.java
@@ -93,7 +93,7 @@ public abstract class StringBased extends NativeType
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setString(position, (String) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Time.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Time.java
index 39ce259..21a3867 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Time.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Time.java
@@ -41,7 +41,7 @@ public class Time extends LongBased
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setTime(position, (long) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Timestamp.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Timestamp.java
index c232400..7359460 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Timestamp.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/Timestamp.java
@@ -87,7 +87,7 @@ public class Timestamp extends NativeType
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setTimestamp(position, (java.util.Date) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/TinyInt.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/TinyInt.java
index fe00e54..9e776c4 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/TinyInt.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/TinyInt.java
@@ -78,7 +78,7 @@ public class TinyInt extends NativeType
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setByte(position, (byte) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/UUID.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/UUID.java
index 967db99..a10fb47 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/UUID.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/UUID.java
@@ -60,7 +60,7 @@ public class UUID extends StringBased
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setUUID(position, (java.util.UUID) value);
     }
diff --git 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/VarInt.java
 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/VarInt.java
index 6635920..f2278f5 100644
--- 
a/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/VarInt.java
+++ 
b/cassandra-four-zero-types/src/main/java/org/apache/cassandra/spark/data/types/VarInt.java
@@ -93,7 +93,7 @@ public class VarInt extends Decimal
     }
 
     @Override
-    public void setInnerValue(SettableByIndexData<?> udtValue, int position, 
Object value)
+    protected void setInnerValueInternal(SettableByIndexData<?> udtValue, int 
position, Object value)
     {
         udtValue.setVarint(position, (BigInteger) value);
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to