From a52e97fad5e8646a74a51b7dffec8768a22bf3a1 Mon Sep 17 00:00:00 2001 From: Piotr Findeisen Date: Wed, 16 Dec 2020 21:31:38 +0100 Subject: [PATCH 1/4] Remove obsolete TODO The legacy mapping does not provide support for `time with time zone`. --- .../java/io/prestosql/plugin/postgresql/PostgreSqlClient.java | 1 - 1 file changed, 1 deletion(-) diff --git a/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java b/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java index 839ef07854be..ce8c1ac8a68e 100644 --- a/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java +++ b/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java @@ -471,7 +471,6 @@ public Optional toPrestoType(ConnectorSession session, Connection break; } - // TODO support PostgreSQL's TIME WITH TIME ZONE explicitly, otherwise predicate pushdown for these types may be incorrect return legacyToPrestoType(session, connection, typeHandle); } From 1bd62c3d917d76d13860e0056f599b728ce3e6fa Mon Sep 17 00:00:00 2001 From: Piotr Findeisen Date: Wed, 16 Dec 2020 21:33:45 +0100 Subject: [PATCH 2/4] Remove use of legacy mappings from PostgreSQL connector --- .../prestosql/plugin/postgresql/PostgreSqlClient.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java b/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java index ce8c1ac8a68e..b0aa4291f211 100644 --- a/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java +++ b/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java @@ -141,6 +141,7 @@ import static io.prestosql.plugin.jdbc.StandardColumnMappings.varbinaryWriteFunction; import static io.prestosql.plugin.jdbc.StandardColumnMappings.varcharWriteFunction; import static io.prestosql.plugin.jdbc.TypeHandlingJdbcSessionProperties.getUnsupportedTypeHandling; +import static io.prestosql.plugin.jdbc.UnsupportedTypeHandling.CONVERT_TO_VARCHAR; import static io.prestosql.plugin.jdbc.UnsupportedTypeHandling.IGNORE; import static io.prestosql.plugin.postgresql.PostgreSqlConfig.ArrayMapping.AS_ARRAY; import static io.prestosql.plugin.postgresql.PostgreSqlConfig.ArrayMapping.AS_JSON; @@ -471,7 +472,11 @@ public Optional toPrestoType(ConnectorSession session, Connection break; } - return legacyToPrestoType(session, connection, typeHandle); + if (getUnsupportedTypeHandling(session) == CONVERT_TO_VARCHAR) { + return mapToUnboundedVarchar(typeHandle); + } + + return Optional.empty(); } private Optional arrayToPrestoType(ConnectorSession session, Connection connection, JdbcTypeHandle typeHandle) @@ -616,7 +621,8 @@ public WriteMapping toWriteMapping(ConnectorSession session, Type type) String elementDataType = toWriteMapping(session, elementType).getDataType(); return WriteMapping.objectMapping(elementDataType + "[]", arrayWriteFunction(session, elementType, getArrayElementPgTypeName(session, this, elementType))); } - return legacyToWriteMapping(session, type); + + throw new PrestoException(NOT_SUPPORTED, "Unsupported column type: " + type.getDisplayName()); } @Override From c716029825a57bf9a933e361308d9de902aba830 Mon Sep 17 00:00:00 2001 From: Piotr Findeisen Date: Wed, 16 Dec 2020 21:34:04 +0100 Subject: [PATCH 3/4] Remove redundant else --- .../prestosql/plugin/postgresql/PostgreSqlClient.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java b/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java index b0aa4291f211..6fb7b2a08591 100644 --- a/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java +++ b/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java @@ -735,12 +735,10 @@ private static ColumnMapping timestampWithTimeZoneColumnMapping(int precision) shortTimestampWithTimeZoneReadFunction(), shortTimestampWithTimeZoneWriteFunction()); } - else { - return ColumnMapping.objectMapping( - prestoType, - longTimestampWithTimeZoneReadFunction(), - longTimestampWithTimeZoneWriteFunction()); - } + return ColumnMapping.objectMapping( + prestoType, + longTimestampWithTimeZoneReadFunction(), + longTimestampWithTimeZoneWriteFunction()); } private static LongReadFunction shortTimestampWithTimeZoneReadFunction() From b1624901fbdaca64298c09e2e104ec4d6b2af770 Mon Sep 17 00:00:00 2001 From: Piotr Findeisen Date: Wed, 16 Dec 2020 21:34:33 +0100 Subject: [PATCH 4/4] Fix typo --- .../java/io/prestosql/plugin/postgresql/PostgreSqlClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java b/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java index 6fb7b2a08591..2f4b87eb272d 100644 --- a/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java +++ b/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java @@ -726,7 +726,7 @@ public void setColumnComment(ConnectorSession session, JdbcTableHandle handle, J private static ColumnMapping timestampWithTimeZoneColumnMapping(int precision) { - // PosgreSQL supports timestamptz precision up to microseconds + // PostgreSQL supports timestamptz precision up to microseconds checkArgument(precision <= POSTGRESQL_MAX_SUPPORTED_TIMESTAMP_PRECISION, "unsupported precision value %d", precision); TimestampWithTimeZoneType prestoType = createTimestampWithTimeZoneType(precision); if (precision <= TimestampWithTimeZoneType.MAX_SHORT_PRECISION) {