[
https://issues.apache.org/jira/browse/NIFI-12885?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17825673#comment-17825673
]
David Handermann commented on NIFI-12885:
-----------------------------------------
Thanks for the additional background.
The {{getAsDate()}} method is more of a convenience function that performs
optional conversion from a string using the provided format. If the source of
the values is a JDBC ResultSet, then {{getValue()}} can be used to return a
java.sql.Timestamp as shown in one of the current test classes. If the source
value is a string, then the conversion could be performed after retrieving the
value from the MapRecord.
Can you provide any additional details on the source of the data for the
MapRecord?
Going forward, it sounds like it could be useful to add a new method, and
change {{getAsDate()}} to {{getAsLocalDate()}} to clarify the behavior. On the
other hand, removing the convenience function would then require calling code
to perform the conversion as needed. This might be better, as date and time
conversion can vary significantly from one use case to another.
> MapRecord.getAsDate timestamp breaking bug
> ------------------------------------------
>
> Key: NIFI-12885
> URL: https://issues.apache.org/jira/browse/NIFI-12885
> Project: Apache NiFi
> Issue Type: Bug
> Affects Versions: 2.0.0-M2
> Reporter: crissaegrim
> Priority: Major
>
> I think I found a breaking bug from this commit
> [https://github.com/apache/nifi/commit/250fe90b348fac515ea597c1985ca432ac7c3ac3#diff-ce496d3f0fc5a7e8a3c0431972f7069b4cf1af2e94f3a199f595ef195eb5ebfa]
> The below passes in 1.20.0 but fails in 2.0
> {code:java}
> @Test
> void testBasic() throws Exception {
> // setup
> final String schemaText = "{" +
> "\"type\" : \"record\"," +
> "\"name\" : \"TestRecord\"," +
> "\"namespace\" : \"org.apache.nifi\"," +
> "\"fields\" : [ {" +
> "\"name\" : \"my_datestamp_field\"," +
> "\"type\" : {" +
> "\"type\" : \"long\"," +
> "\"logicalType\" : \"timestamp-millis\"" +
> "}" +
> "} ]" +
> "}";
> final RecordSchema schemaParsed = AvroTypeUtil.createSchema(new
> Schema.Parser().parse(schemaText));
> final HashMap<String, Object> item = new HashMap<>();
> item.put("my_datestamp_field", "2022-01-01 10:00:00.000");
> // act
> final MapRecord record = new MapRecord(schemaParsed, item);
> final Date myDateStampField = record.getAsDate("my_datestamp_field",
> "yyyy-MM-dd HH:mm:ss.SSS");
> // assert
> // fails in 2.0; actual in 2.0.0-M2 is `1640995200000`
> assertEquals(1641031200000L, myDateStampField.getTime());
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)