diff --git a/isthmus/src/main/java/io/substrait/isthmus/SubstraitTypeSystem.java b/isthmus/src/main/java/io/substrait/isthmus/SubstraitTypeSystem.java index 0949584b0..2666af438 100644 --- a/isthmus/src/main/java/io/substrait/isthmus/SubstraitTypeSystem.java +++ b/isthmus/src/main/java/io/substrait/isthmus/SubstraitTypeSystem.java @@ -91,7 +91,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 01e7bd0c7..159816c6f 100644 --- a/isthmus/src/test/java/io/substrait/isthmus/SubstraitTypeSystemTest.java +++ b/isthmus/src/test/java/io/substrait/isthmus/SubstraitTypeSystemTest.java @@ -2,6 +2,7 @@ import static io.substrait.isthmus.SubstraitTypeSystem.TYPE_FACTORY; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.rel.type.RelDataTypeSystem; @@ -42,6 +43,20 @@ void timeMaxPrecision() { assertEquals(6, typeSystem.getMaxPrecision(SqlTypeName.TIME)); } + @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);