From 53a39197422d45e670f86d6136c1c36f7fb9d5b3 Mon Sep 17 00:00:00 2001 From: skrzypo987 Date: Wed, 21 Dec 2022 12:03:26 +0100 Subject: [PATCH] Provide more verbose exception messages --- .../io/trino/plugin/hive/HiveMetadata.java | 18 +++++++++++------- .../plugin/hive/BaseHiveConnectorTest.java | 8 ++++---- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveMetadata.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveMetadata.java index f041f9ba2dce..51fb0463b177 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveMetadata.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveMetadata.java @@ -3697,27 +3697,31 @@ private static void validateColumns(ConnectorTableMetadata tableMetadata) private static void validateTimestampColumns(List columns, HiveTimestampPrecision precision) { for (ColumnMetadata column : columns) { - validateTimestampTypes(column.getType(), precision); + validateTimestampTypes(column.getType(), precision, column); } } - private static void validateTimestampTypes(Type type, HiveTimestampPrecision precision) + private static void validateTimestampTypes(Type type, HiveTimestampPrecision precision, ColumnMetadata column) { if (type instanceof TimestampType) { if (((TimestampType) type).getPrecision() != precision.getPrecision()) { - throw new TrinoException(NOT_SUPPORTED, format("Incorrect timestamp precision for %s; the configured precision is %s", type, precision)); + throw new TrinoException(NOT_SUPPORTED, format( + "Incorrect timestamp precision for %s; the configured precision is %s; column name: %s", + type, + precision, + column.getName())); } } else if (type instanceof ArrayType) { - validateTimestampTypes(((ArrayType) type).getElementType(), precision); + validateTimestampTypes(((ArrayType) type).getElementType(), precision, column); } else if (type instanceof MapType) { - validateTimestampTypes(((MapType) type).getKeyType(), precision); - validateTimestampTypes(((MapType) type).getValueType(), precision); + validateTimestampTypes(((MapType) type).getKeyType(), precision, column); + validateTimestampTypes(((MapType) type).getValueType(), precision, column); } else if (type instanceof RowType) { for (Type fieldType : ((RowType) type).getTypeParameters()) { - validateTimestampTypes(fieldType, precision); + validateTimestampTypes(fieldType, precision, column); } } } diff --git a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/BaseHiveConnectorTest.java b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/BaseHiveConnectorTest.java index 845f05094d40..78f2769740aa 100644 --- a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/BaseHiveConnectorTest.java +++ b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/BaseHiveConnectorTest.java @@ -7866,19 +7866,19 @@ public void testWriteInvalidPrecisionTimestamp() assertQueryFails( session, "CREATE TABLE test_invalid_precision_timestamp(ts) AS SELECT TIMESTAMP '2001-02-03 11:22:33.123456789'", - "\\QIncorrect timestamp precision for timestamp(9); the configured precision is " + HiveTimestampPrecision.MICROSECONDS); + "\\QIncorrect timestamp precision for timestamp(9); the configured precision is " + HiveTimestampPrecision.MICROSECONDS + "; column name: ts"); assertQueryFails( session, "CREATE TABLE test_invalid_precision_timestamp (ts TIMESTAMP(9))", - "\\QIncorrect timestamp precision for timestamp(9); the configured precision is " + HiveTimestampPrecision.MICROSECONDS); + "\\QIncorrect timestamp precision for timestamp(9); the configured precision is " + HiveTimestampPrecision.MICROSECONDS + "; column name: ts"); assertQueryFails( session, "CREATE TABLE test_invalid_precision_timestamp(ts) AS SELECT TIMESTAMP '2001-02-03 11:22:33.123'", - "\\QIncorrect timestamp precision for timestamp(3); the configured precision is " + HiveTimestampPrecision.MICROSECONDS); + "\\QIncorrect timestamp precision for timestamp(3); the configured precision is " + HiveTimestampPrecision.MICROSECONDS + "; column name: ts"); assertQueryFails( session, "CREATE TABLE test_invalid_precision_timestamp (ts TIMESTAMP(3))", - "\\QIncorrect timestamp precision for timestamp(3); the configured precision is " + HiveTimestampPrecision.MICROSECONDS); + "\\QIncorrect timestamp precision for timestamp(3); the configured precision is " + HiveTimestampPrecision.MICROSECONDS + "; column name: ts"); } @Test