diff --git a/isthmus/src/main/java/io/substrait/isthmus/SubstraitTypeSystem.java b/isthmus/src/main/java/io/substrait/isthmus/SubstraitTypeSystem.java index 849be1526..86d64f589 100644 --- a/isthmus/src/main/java/io/substrait/isthmus/SubstraitTypeSystem.java +++ b/isthmus/src/main/java/io/substrait/isthmus/SubstraitTypeSystem.java @@ -110,7 +110,6 @@ public int getMaxPrecision(final SqlTypeName typeName) { case INTERVAL_YEAR: case INTERVAL_YEAR_MONTH: case TIME: - case TIME_WITH_LOCAL_TIME_ZONE: case TIMESTAMP: case TIMESTAMP_WITH_LOCAL_TIME_ZONE: return 6; diff --git a/isthmus/src/test/java/io/substrait/isthmus/SubstraitTypeSystemTest.java b/isthmus/src/test/java/io/substrait/isthmus/SubstraitTypeSystemTest.java index 03dd4c77f..78730badf 100644 --- a/isthmus/src/test/java/io/substrait/isthmus/SubstraitTypeSystemTest.java +++ b/isthmus/src/test/java/io/substrait/isthmus/SubstraitTypeSystemTest.java @@ -161,6 +161,20 @@ void aRaggedBinaryUnionKeepsTheWidestWidth() { assertEquals(100_000, unified.getPrecision()); } + @Test + void timeWithLocalTimeZoneHasNoSubstraitMaxPrecision() { + // Substrait has precision_timestamp_tz but no time-with-timezone counterpart, so this type + // converts in neither direction and there is no Substrait maximum to report for it. + assertThrows( + UnsupportedOperationException.class, + () -> + TypeConverter.DEFAULT.toSubstrait( + TYPE_FACTORY.createSqlType(SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE, 3))); + assertEquals( + RelDataTypeSystem.DEFAULT.getMaxPrecision(SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE), + typeSystem.getMaxPrecision(SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE)); + } + @Test void canCreateDecimalWithMaxPrecision() { RelDataType decimalType = TYPE_FACTORY.createSqlType(SqlTypeName.DECIMAL, 38, 10);