Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide more verbose exception messages #15484

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3697,27 +3697,31 @@ private static void validateColumns(ConnectorTableMetadata tableMetadata)
private static void validateTimestampColumns(List<ColumnMetadata> 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()));
findepi marked this conversation as resolved.
Show resolved Hide resolved
}
}
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);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down