You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flink.apache.org by "Caizhi Weng (Jira)" <ji...@apache.org> on 2022/02/21 09:05:00 UTC
[jira] [Created] (FLINK-26277) Java docs & implementation of TimestampColumnReader are contradicting
Caizhi Weng created FLINK-26277:
-----------------------------------
Summary: Java docs & implementation of TimestampColumnReader are contradicting
Key: FLINK-26277
URL: https://issues.apache.org/jira/browse/FLINK-26277
Project: Flink
Issue Type: Bug
Components: Formats (JSON, Avro, Parquet, ORC, SequenceFile)
Affects Versions: 1.15.0
Reporter: Caizhi Weng
(Not sure if this should be classified as a bug, but I don't see a more proper type.)
The Java docs of {{TimestampColumnReader}} states that
{code:java}
/**
* Timestamp {@link ColumnReader}. We only support INT96 bytes now, julianDay(4) + nanosOfDay(8).
* See https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#timestamp
* TIMESTAMP_MILLIS and TIMESTAMP_MICROS are the deprecated ConvertedType.
*/
{code}
However the implementation goes like this
{code:java}
ByteBuffer buffer = readDataBuffer(12);
column.setTimestamp(
rowId + i,
int96ToTimestamp(utcTimestamp, buffer.getLong(), buffer.getInt()));
{code}
This implementation contradicts the Java docs because {{nanosOfDay(8)}} actually precedes {{julianDay(4)}}.
This implementation is also confusing as it relies on the evaluation order of the argument list. Although it is specified in the [Java Language Specification|https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.7.4] that argument lists are evaluated from left to right, it is not true for other languages (for example c++ does not specify this and may evaluate the list in arbitrary order).
--
This message was sent by Atlassian Jira
(v8.20.1#820001)