From 03ab6699e3c4ae6ca382fbf83816883cf9d1c289 Mon Sep 17 00:00:00 2001 From: Mihai Budiu Date: Thu, 14 May 2026 11:52:14 -0700 Subject: [PATCH] [CALCITE-7526] Incorrect TIMESTAMP WITH TIME ZONE produces wrong error message Signed-off-by: Mihai Budiu --- .../calcite/util/TimestampWithTimeZoneString.java | 2 +- .../org/apache/calcite/rex/RexProgramTest.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/calcite/util/TimestampWithTimeZoneString.java b/core/src/main/java/org/apache/calcite/util/TimestampWithTimeZoneString.java index 5816b12a652..52e9eb6d4f0 100644 --- a/core/src/main/java/org/apache/calcite/util/TimestampWithTimeZoneString.java +++ b/core/src/main/java/org/apache/calcite/util/TimestampWithTimeZoneString.java @@ -68,7 +68,7 @@ public TimestampWithTimeZoneString(String v) { if (pos == -1) { throw RESOURCE.illegalLiteral("TIMESTAMP WITH LOCAL TIME ZONE", v, - RESOURCE.badFormat(TIMESTAMP_FORMAT_STRING).str()).ex(); + RESOURCE.badFormat(TIMESTAMP_FORMAT_STRING + " zone").str()).ex(); } String tsStr = v.substring(0, pos); diff --git a/core/src/test/java/org/apache/calcite/rex/RexProgramTest.java b/core/src/test/java/org/apache/calcite/rex/RexProgramTest.java index 3faf9173d63..01da3e67727 100644 --- a/core/src/test/java/org/apache/calcite/rex/RexProgramTest.java +++ b/core/src/test/java/org/apache/calcite/rex/RexProgramTest.java @@ -3413,6 +3413,20 @@ private SqlOperator getNoDeterministicOperator() { assertThat(timestampLTZChar1.equals(timestampLTZChar4), is(true)); } + /** Test case for [CALCITE-7526] + * Incorrect TIMESTAMP WITH TIME ZONE produces wrong error message. */ + @Test void testMalformedTimezone() { + try { + new TimestampWithTimeZoneString("2011-07-20T10:34:56America/Los_Angeles"); + } catch (Exception ex) { + assertThat( + ex.getMessage(), is("Illegal TIMESTAMP WITH LOCAL TIME ZONE literal " + + "'2011-07-20T10:34:56America/Los_Angeles': not in format 'yyyy-MM-dd HH:mm:ss zone'")); + return; + } + fail("Should not be reached"); + } + @Test void testSimplifyLiterals() { final RexLiteral literalAbc = rexBuilder.makeLiteral("abc"); final RexLiteral literalDef = rexBuilder.makeLiteral("def");