From 84b210a3a040e40bbf1a961107836a3c771a84a2 Mon Sep 17 00:00:00 2001 From: Yuya Ebihara Date: Thu, 20 Jan 2022 13:29:38 +0900 Subject: [PATCH] Extract a method to read timestamp in Oracle --- .../io/trino/plugin/oracle/OracleClient.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/plugin/trino-oracle/src/main/java/io/trino/plugin/oracle/OracleClient.java b/plugin/trino-oracle/src/main/java/io/trino/plugin/oracle/OracleClient.java index 653b4d788231..666406a9f94c 100644 --- a/plugin/trino-oracle/src/main/java/io/trino/plugin/oracle/OracleClient.java +++ b/plugin/trino-oracle/src/main/java/io/trino/plugin/oracle/OracleClient.java @@ -25,6 +25,7 @@ import io.trino.plugin.jdbc.JdbcJoinCondition; import io.trino.plugin.jdbc.JdbcTableHandle; import io.trino.plugin.jdbc.JdbcTypeHandle; +import io.trino.plugin.jdbc.LongReadFunction; import io.trino.plugin.jdbc.LongWriteFunction; import io.trino.plugin.jdbc.SliceWriteFunction; import io.trino.plugin.jdbc.WriteMapping; @@ -412,18 +413,23 @@ public static ColumnMapping oracleTimestampColumnMapping() { return ColumnMapping.longMapping( TIMESTAMP_MILLIS, - (resultSet, columnIndex) -> { - LocalDateTime timestamp = resultSet.getObject(columnIndex, LocalDateTime.class); - // Adjust years when the value is B.C. dates because Oracle returns +1 year unless converting to string in their server side - if (timestamp.getYear() <= 0) { - timestamp = timestamp.minusYears(1); - } - return timestamp.toInstant(ZoneOffset.UTC).toEpochMilli() * MICROSECONDS_PER_MILLISECOND; - }, + oracleTimestampReadFunction(), oracleTimestampWriteFunction(), FULL_PUSHDOWN); } + private static LongReadFunction oracleTimestampReadFunction() + { + return (resultSet, columnIndex) -> { + LocalDateTime timestamp = resultSet.getObject(columnIndex, LocalDateTime.class); + // Adjust years when the value is B.C. dates because Oracle returns +1 year unless converting to string in their server side + if (timestamp.getYear() <= 0) { + timestamp = timestamp.minusYears(1); + } + return timestamp.toInstant(ZoneOffset.UTC).toEpochMilli() * MICROSECONDS_PER_MILLISECOND; + }; + } + public static ColumnMapping oracleTimestampWithTimeZoneColumnMapping() { return ColumnMapping.longMapping(