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

pvillard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 3d3f6ac  NIFI-9471 Corrected PutKudu usage of DataTypeUtils.toString()
3d3f6ac is described below

commit 3d3f6ac070a10a951073829c61e88d9f938af915
Author: exceptionfactory <[email protected]>
AuthorDate: Thu Dec 9 15:00:24 2021 -0600

    NIFI-9471 Corrected PutKudu usage of DataTypeUtils.toString()
    
    Signed-off-by: Pierre Villard <[email protected]>
    
    This closes #5590.
---
 .../nifi/processors/kudu/AbstractKuduProcessor.java      | 15 ++++++++-------
 .../org/apache/nifi/processors/kudu/TestPutKudu.java     | 16 +++++++++++++---
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git 
a/nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/main/java/org/apache/nifi/processors/kudu/AbstractKuduProcessor.java
 
b/nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/main/java/org/apache/nifi/processors/kudu/AbstractKuduProcessor.java
index a6382d2..667058d 100644
--- 
a/nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/main/java/org/apache/nifi/processors/kudu/AbstractKuduProcessor.java
+++ 
b/nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/main/java/org/apache/nifi/processors/kudu/AbstractKuduProcessor.java
@@ -400,6 +400,8 @@ public abstract class AbstractKuduProcessor extends 
AbstractProcessor {
                 }
             } else {
                 Object value = record.getValue(recordFieldName);
+                final Optional<DataType> fieldDataType = 
record.getSchema().getDataType(recordFieldName);
+                final String dataTypeFormat = 
fieldDataType.map(DataType::getFormat).orElse(null);
                 switch (colType) {
                     case BOOL:
                         row.addBoolean(columnIndex, 
DataTypeUtils.toBoolean(value, recordFieldName));
@@ -423,10 +425,10 @@ public abstract class AbstractKuduProcessor extends 
AbstractProcessor {
                         row.addTimestamp(columnIndex, timestamp);
                         break;
                     case STRING:
-                        row.addString(columnIndex, 
DataTypeUtils.toString(value, recordFieldName));
+                        row.addString(columnIndex, 
DataTypeUtils.toString(value, dataTypeFormat));
                         break;
                     case BINARY:
-                        row.addBinary(columnIndex, 
DataTypeUtils.toString(value, recordFieldName).getBytes());
+                        row.addBinary(columnIndex, 
DataTypeUtils.toString(value, dataTypeFormat).getBytes());
                         break;
                     case FLOAT:
                         row.addFloat(columnIndex, DataTypeUtils.toFloat(value, 
recordFieldName));
@@ -435,15 +437,14 @@ public abstract class AbstractKuduProcessor extends 
AbstractProcessor {
                         row.addDouble(columnIndex, 
DataTypeUtils.toDouble(value, recordFieldName));
                         break;
                     case DECIMAL:
-                        row.addDecimal(columnIndex, new 
BigDecimal(DataTypeUtils.toString(value, recordFieldName)));
+                        row.addDecimal(columnIndex, new 
BigDecimal(DataTypeUtils.toString(value, dataTypeFormat)));
                         break;
                     case VARCHAR:
-                        row.addVarchar(columnIndex, 
DataTypeUtils.toString(value, recordFieldName));
+                        row.addVarchar(columnIndex, 
DataTypeUtils.toString(value, dataTypeFormat));
                         break;
                     case DATE:
-                        final Optional<DataType> fieldDataType = 
record.getSchema().getDataType(recordFieldName);
-                        final String format = fieldDataType.isPresent() ? 
fieldDataType.get().getFormat() : RecordFieldType.DATE.getDefaultFormat();
-                        row.addDate(columnIndex, getDate(value, 
recordFieldName, format));
+                        final String dateFormat = dataTypeFormat == null ? 
RecordFieldType.DATE.getDefaultFormat() : dataTypeFormat;
+                        row.addDate(columnIndex, getDate(value, 
recordFieldName, dateFormat));
                         break;
                     default:
                         throw new IllegalStateException(String.format("unknown 
column type %s", colType));
diff --git 
a/nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/test/java/org/apache/nifi/processors/kudu/TestPutKudu.java
 
b/nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/test/java/org/apache/nifi/processors/kudu/TestPutKudu.java
index 73913cf..126ca6e 100644
--- 
a/nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/test/java/org/apache/nifi/processors/kudu/TestPutKudu.java
+++ 
b/nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/test/java/org/apache/nifi/processors/kudu/TestPutKudu.java
@@ -511,19 +511,29 @@ public class TestPutKudu {
     }
 
     @Test
+    public void testBuildPartialRowWithDateToString() throws ParseException {
+        final SimpleDateFormat dateFormat = new 
SimpleDateFormat(ISO_8601_YEAR_MONTH_DAY_PATTERN);
+        final java.util.Date dateFieldValue = 
dateFormat.parse(ISO_8601_YEAR_MONTH_DAY);
+
+        final PartialRow row = buildPartialRowDateField(dateFieldValue, 
Type.STRING);
+        final String column = row.getString(DATE_FIELD);
+        assertEquals("Partial Row Field not matched", ISO_8601_YEAR_MONTH_DAY, 
column);
+    }
+
+    @Test
     public void testBuildPartialRowWithDateString() {
         assertPartialRowDateFieldEquals(ISO_8601_YEAR_MONTH_DAY);
     }
 
     private void assertPartialRowDateFieldEquals(final Object dateFieldValue) {
-        final PartialRow row = buildPartialRowDateField(dateFieldValue);
+        final PartialRow row = buildPartialRowDateField(dateFieldValue, 
Type.DATE);
         final java.sql.Date rowDate = row.getDate(DATE_FIELD);
         assertEquals("Partial Row Date Field not matched", 
ISO_8601_YEAR_MONTH_DAY, rowDate.toString());
     }
 
-    private PartialRow buildPartialRowDateField(final Object dateFieldValue) {
+    private PartialRow buildPartialRowDateField(final Object dateFieldValue, 
final Type columnType) {
         final Schema kuduSchema = new Schema(Collections.singletonList(
-                new ColumnSchema.ColumnSchemaBuilder(DATE_FIELD, 
Type.DATE).nullable(true).build()
+                new ColumnSchema.ColumnSchemaBuilder(DATE_FIELD, 
columnType).nullable(true).build()
         ));
 
         final RecordSchema schema = new 
SimpleRecordSchema(Collections.singletonList(

Reply via email to