This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 1bd6475444f IGNITE-25811 Sql. Forbid use of an expression as interval
string (#6364)
1bd6475444f is described below
commit 1bd6475444f8342f445c02e87d692df76bdc1018
Author: Andrew V. Mashenkov <[email protected]>
AuthorDate: Fri Aug 8 11:44:34 2025 +0300
IGNITE-25811 Sql. Forbid use of an expression as interval string (#6364)
---
.../ignite/jdbc/ItJdbcResultSetSelfTest.java | 32 +-
.../sql/engine/ItDynamicParameterTest.java | 52 +-
.../ignite/internal/sql/engine/ItIntervalTest.java | 202 +++---
.../internal/sql/engine/ItSqlOperatorsTest.java | 6 +-
.../sql/group1/cast/test_cast_bigint.test | 2 +-
.../sql/group1/cast/test_cast_decimal.test | 6 +-
.../sql/group1/cast/test_cast_float.test | 2 +-
.../sql/group1/cast/test_cast_int.test | 2 +-
.../sql/group1/cast/test_cast_interval_day.test | 2 +-
.../sql/group1/cast/test_cast_interval_year.test | 2 +-
.../sql/group1/cast/test_cast_smallint.test | 2 +-
.../sql/group1/cast/test_cast_tinyint.test | 2 +-
.../group1/function/date/test_extract_month.test | 750 +--------------------
.../group1/function/date/test_extract_year.test | 644 +-----------------
.../generic/test_in_list_of_single_element.test | 2 +-
.../group1/types/date/test_incorrect_dates.test | 8 +-
.../group1/types/interval/interval_constants.test | 54 +-
.../types/timestamp/test_incorrect_timestamp.test | 18 +-
.../timestamp/test_incorrect_timestamp_ltz.test | 18 +-
.../sql/engine/prepare/IgniteSqlValidator.java | 9 +
.../internal/sql/engine/rex/IgniteRexBuilder.java | 34 +
.../sql/engine/planner/CastResolutionTest.java | 2 +-
.../src/testFixtures/resources/tpcds/query12.sql | 2 +-
.../src/testFixtures/resources/tpcds/query16.sql | 2 +-
.../src/testFixtures/resources/tpcds/query20.sql | 2 +-
.../src/testFixtures/resources/tpcds/query21.sql | 4 +-
.../src/testFixtures/resources/tpcds/query32.sql | 4 +-
.../src/testFixtures/resources/tpcds/query37.sql | 2 +-
.../src/testFixtures/resources/tpcds/query40.sql | 4 +-
.../src/testFixtures/resources/tpcds/query5.sql | 6 +-
.../src/testFixtures/resources/tpcds/query72.sql | 2 +-
.../src/testFixtures/resources/tpcds/query77.sql | 12 +-
.../src/testFixtures/resources/tpcds/query80.sql | 6 +-
.../src/testFixtures/resources/tpcds/query82.sql | 2 +-
.../src/testFixtures/resources/tpcds/query92.sql | 4 +-
.../src/testFixtures/resources/tpcds/query94.sql | 2 +-
.../src/testFixtures/resources/tpcds/query95.sql | 2 +-
.../src/testFixtures/resources/tpcds/query98.sql | 2 +-
38 files changed, 307 insertions(+), 1602 deletions(-)
diff --git
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcResultSetSelfTest.java
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcResultSetSelfTest.java
index a9c1c85b1ad..318452a6381 100644
---
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcResultSetSelfTest.java
+++
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcResultSetSelfTest.java
@@ -100,17 +100,19 @@ public class ItJdbcResultSetSelfTest extends
AbstractJdbcSelfTest {
@Test
public void testIntervalResult() throws SQLException {
- assertEquals(Duration.ofDays(4), eval("INTERVAL 4 DAYS"));
- assertEquals(Duration.ofSeconds(1), eval("INTERVAL 1 SECONDS"));
- assertEquals(Duration.ofSeconds(-1), eval("INTERVAL -1 SECONDS"));
- assertEquals(Duration.ofSeconds(123), eval("INTERVAL 123 SECONDS"));
+ assertEquals(Duration.ofDays(4), eval("INTERVAL '4' DAYS"));
+ assertEquals(Duration.ofSeconds(1), eval("INTERVAL '1' SECONDS"));
+ assertEquals(Duration.ofSeconds(-1), eval("INTERVAL - '1' SECONDS"));
+ assertEquals(Duration.ofSeconds(-1), eval("INTERVAL '-1' SECONDS"));
+ assertEquals(Duration.ofSeconds(123), eval("INTERVAL '123' SECONDS"));
assertEquals(Duration.ofSeconds(123), eval("INTERVAL '123'
SECONDS(3)"));
- assertEquals(Duration.ofMinutes(2), eval("INTERVAL 2 MINUTES"));
- assertEquals(Duration.ofHours(3), eval("INTERVAL 3 HOURS"));
- assertEquals(Duration.ofDays(4), eval("INTERVAL 4 DAYS"));
- assertEquals(Period.ofMonths(5), eval("INTERVAL 5 MONTHS"));
- assertEquals(Period.ofMonths(-5), eval("INTERVAL -5 MONTHS"));
- assertEquals(Period.ofYears(6), eval("INTERVAL 6 YEARS"));
+ assertEquals(Duration.ofMinutes(2), eval("INTERVAL '2' MINUTES"));
+ assertEquals(Duration.ofHours(3), eval("INTERVAL '3' HOURS"));
+ assertEquals(Duration.ofDays(4), eval("INTERVAL '4' DAYS"));
+ assertEquals(Period.ofMonths(5), eval("INTERVAL '5' MONTHS"));
+ assertEquals(Period.ofMonths(-5), eval("INTERVAL - '5' MONTHS"));
+ assertEquals(Period.ofMonths(-5), eval("INTERVAL '-5' MONTHS"));
+ assertEquals(Period.ofYears(6), eval("INTERVAL '6' YEARS"));
assertEquals(Period.of(1, 2, 0), eval("INTERVAL '1-2' YEAR TO MONTH"));
assertEquals(Duration.ofHours(25), eval("INTERVAL '1 1' DAY TO HOUR"));
assertEquals(Duration.ofMinutes(62), eval("INTERVAL '1:2' HOUR TO
MINUTE"));
@@ -123,13 +125,13 @@ public class ItJdbcResultSetSelfTest extends
AbstractJdbcSelfTest {
@Test
public void testTemporalArithmetic() throws SQLException {
- assertEquals(LocalDate.parse("2021-01-02"), eval("DATE '2021-01-01' +
interval (1) days"));
+ assertEquals(LocalDate.parse("2021-01-02"), eval("DATE '2021-01-01' +
interval '1' days"));
assertEquals(Period.ofMonths(2), eval("(DATE '2021-03-01' - DATE
'2021-01-01') months"));
assertEquals(Duration.ofHours(24), eval("(DATE '2021-03-02' - DATE
'2021-03-01') hours"));
- assertEquals(Duration.ofHours(48), eval("INTERVAL (3) DAYS - INTERVAL
(1) DAYS"));
- assertEquals(Period.ofMonths(1), eval("INTERVAL 5 MONTHS - INTERVAL 4
MONTHS"));
- assertEquals(Duration.ofSeconds(1), eval("INTERVAL 5 SECONDS -
INTERVAL 4 SECONDS"));
- assertEquals(Duration.ofSeconds(10), eval("INTERVAL 5 SECONDS * 2"));
+ assertEquals(Duration.ofHours(48), eval("INTERVAL '3' DAYS - INTERVAL
'1' DAYS"));
+ assertEquals(Period.ofMonths(1), eval("INTERVAL '5' MONTHS - INTERVAL
'4' MONTHS"));
+ assertEquals(Duration.ofSeconds(1), eval("INTERVAL '5' SECONDS -
INTERVAL '4' SECONDS"));
+ assertEquals(Duration.ofSeconds(10), eval("INTERVAL '5' SECONDS * 2"));
}
private Object eval(String exp) throws SQLException {
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java
index 87619ca9ba4..e702d00eb44 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java
@@ -790,13 +790,13 @@ public class ItDynamicParameterTest extends
BaseSqlIntegrationTest {
arguments(ColumnType.DATE, "SELECT ?, ?::VARCHAR",
DATE_MAX, DATE_MAX, "9999-12-31"),
- arguments(ColumnType.DATE, "SELECT ? + INTERVAL 86399 SECOND,
(? + INTERVAL 86399 SECOND)::VARCHAR",
+ arguments(ColumnType.DATE, "SELECT ? + INTERVAL '86399'
SECOND, (? + INTERVAL '86399' SECOND)::VARCHAR",
DATE_MAX, DATE_MAX, "9999-12-31"),
arguments(ColumnType.DATE, "SELECT ?, ?::VARCHAR",
DATE_MIN, DATE_MIN, "0001-01-01"),
- arguments(ColumnType.DATE, "SELECT ? - INTERVAL 86399 SECOND,
(? - INTERVAL 86399 SECOND)::VARCHAR",
+ arguments(ColumnType.DATE, "SELECT ? - INTERVAL '86399'
SECOND, (? - INTERVAL '86399' SECOND)::VARCHAR",
DATE_MIN, DATE_MIN, "0001-01-01"),
// TIMESTAMP
@@ -838,39 +838,39 @@ public class ItDynamicParameterTest extends
BaseSqlIntegrationTest {
return Stream.of(
// DATE
arguments(SqlTypeName.DATE, "?", DATE_MAX.plusDays(1)),
- arguments(SqlTypeName.DATE, "(? + INTERVAL 86400 SECOND)",
DATE_MAX),
- arguments(SqlTypeName.DATE, "(? + INTERVAL 1 DAY)", DATE_MAX),
- arguments(SqlTypeName.DATE, "(? + INTERVAL 1 MONTH)",
DATE_MAX),
- arguments(SqlTypeName.DATE, "(? + INTERVAL 1 YEAR)", DATE_MAX),
+ arguments(SqlTypeName.DATE, "(? + INTERVAL '86400' SECOND)",
DATE_MAX),
+ arguments(SqlTypeName.DATE, "(? + INTERVAL '1' DAY)",
DATE_MAX),
+ arguments(SqlTypeName.DATE, "(? + INTERVAL '1' MONTH)",
DATE_MAX),
+ arguments(SqlTypeName.DATE, "(? + INTERVAL '1' YEAR)",
DATE_MAX),
arguments(SqlTypeName.DATE, "?", DATE_MIN.minusDays(1)),
- arguments(SqlTypeName.DATE, "(? - INTERVAL 86400 SECOND)",
DATE_MIN),
- arguments(SqlTypeName.DATE, "(? - INTERVAL 1 DAY)", DATE_MIN),
- arguments(SqlTypeName.DATE, "(? - INTERVAL 1 MONTH)",
DATE_MIN),
- arguments(SqlTypeName.DATE, "(? - INTERVAL 1 YEAR)", DATE_MIN),
+ arguments(SqlTypeName.DATE, "(? - INTERVAL '86400' SECOND)",
DATE_MIN),
+ arguments(SqlTypeName.DATE, "(? - INTERVAL '1' DAY)",
DATE_MIN),
+ arguments(SqlTypeName.DATE, "(? - INTERVAL '1' MONTH)",
DATE_MIN),
+ arguments(SqlTypeName.DATE, "(? - INTERVAL '1' YEAR)",
DATE_MIN),
// TIMESTAMP
arguments(SqlTypeName.TIMESTAMP, "?",
DATETIME_MAX.plusNanos(1)),
- arguments(SqlTypeName.TIMESTAMP, "(? + INTERVAL 1 SECOND)",
DATETIME_MAX),
- arguments(SqlTypeName.TIMESTAMP, "(? + INTERVAL 1 DAY)",
DATETIME_MAX),
- arguments(SqlTypeName.TIMESTAMP, "(? + INTERVAL 1 MONTH)",
DATETIME_MAX),
- arguments(SqlTypeName.TIMESTAMP, "(? + INTERVAL 1 YEAR)",
DATETIME_MAX),
+ arguments(SqlTypeName.TIMESTAMP, "(? + INTERVAL '1' SECOND)",
DATETIME_MAX),
+ arguments(SqlTypeName.TIMESTAMP, "(? + INTERVAL '1' DAY)",
DATETIME_MAX),
+ arguments(SqlTypeName.TIMESTAMP, "(? + INTERVAL '1' MONTH)",
DATETIME_MAX),
+ arguments(SqlTypeName.TIMESTAMP, "(? + INTERVAL '1' YEAR)",
DATETIME_MAX),
arguments(SqlTypeName.TIMESTAMP, "?",
DATETIME_MIN.minusNanos(1)),
- arguments(SqlTypeName.TIMESTAMP, "(? - INTERVAL 1 SECOND)",
DATETIME_MIN),
- arguments(SqlTypeName.TIMESTAMP, "(? - INTERVAL 1 DAY)",
DATETIME_MIN),
- arguments(SqlTypeName.TIMESTAMP, "(? - INTERVAL 1 MONTH)",
DATETIME_MIN),
- arguments(SqlTypeName.TIMESTAMP, "(? - INTERVAL 1 YEAR)",
DATETIME_MIN),
+ arguments(SqlTypeName.TIMESTAMP, "(? - INTERVAL '1' SECOND)",
DATETIME_MIN),
+ arguments(SqlTypeName.TIMESTAMP, "(? - INTERVAL '1' DAY)",
DATETIME_MIN),
+ arguments(SqlTypeName.TIMESTAMP, "(? - INTERVAL '1' MONTH)",
DATETIME_MIN),
+ arguments(SqlTypeName.TIMESTAMP, "(? - INTERVAL '1' YEAR)",
DATETIME_MIN),
// TIMESTAMP WITH LOCAL TIME ZONE
arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "?",
TIMESTAMP_MAX.plusNanos(1)),
- arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? +
INTERVAL 1 SECOND)", TIMESTAMP_MAX),
- arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? +
INTERVAL 1 DAY)", TIMESTAMP_MAX),
- arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? +
INTERVAL 1 MONTH)", TIMESTAMP_MAX),
- arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? +
INTERVAL 1 YEAR)", TIMESTAMP_MAX),
+ arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? +
INTERVAL '1' SECOND)", TIMESTAMP_MAX),
+ arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? +
INTERVAL '1' DAY)", TIMESTAMP_MAX),
+ arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? +
INTERVAL '1' MONTH)", TIMESTAMP_MAX),
+ arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? +
INTERVAL '1' YEAR)", TIMESTAMP_MAX),
arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "?",
TIMESTAMP_MIN.minusNanos(1)),
- arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? -
INTERVAL 1 SECOND)", TIMESTAMP_MIN),
- arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? -
INTERVAL 1 DAY)", TIMESTAMP_MIN),
- arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? -
INTERVAL 1 MONTH)", TIMESTAMP_MIN),
- arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? -
INTERVAL 1 YEAR)", TIMESTAMP_MIN)
+ arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? -
INTERVAL '1' SECOND)", TIMESTAMP_MIN),
+ arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? -
INTERVAL '1' DAY)", TIMESTAMP_MIN),
+ arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? -
INTERVAL '1' MONTH)", TIMESTAMP_MIN),
+ arguments(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "(? -
INTERVAL '1' YEAR)", TIMESTAMP_MIN)
);
}
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItIntervalTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItIntervalTest.java
index 564a2e372f1..c027af1c067 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItIntervalTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItIntervalTest.java
@@ -149,17 +149,21 @@ public class ItIntervalTest extends
BaseSqlIntegrationTest {
*/
@Test
public void testIntervalResult() {
- assertEquals(Duration.ofDays(4), eval("INTERVAL 4 DAYS"));
- assertEquals(Duration.ofSeconds(1), eval("INTERVAL 1 SECONDS"));
- assertEquals(Duration.ofSeconds(-1), eval("INTERVAL -1 SECONDS"));
- assertEquals(Duration.ofSeconds(123), eval("INTERVAL 123 SECONDS"));
+ assertEquals(Duration.ofDays(4), eval("INTERVAL '4' DAYS"));
+ assertEquals(Duration.ofSeconds(1), eval("INTERVAL '1' SECONDS"));
+ assertEquals(Duration.ofSeconds(1), eval("INTERVAL - '-1' SECONDS"));
+ assertEquals(Duration.ofSeconds(-1), eval("INTERVAL - '1' SECONDS"));
+ assertEquals(Duration.ofSeconds(-1), eval("INTERVAL '-1' SECONDS"));
+ assertEquals(Duration.ofSeconds(123), eval("INTERVAL '123' SECONDS"));
assertEquals(Duration.ofSeconds(123), eval("INTERVAL '123'
SECONDS(3)"));
- assertEquals(Duration.ofMinutes(2), eval("INTERVAL 2 MINUTES"));
- assertEquals(Duration.ofHours(3), eval("INTERVAL 3 HOURS"));
- assertEquals(Duration.ofDays(4), eval("INTERVAL 4 DAYS"));
- assertEquals(Period.ofMonths(5), eval("INTERVAL 5 MONTHS"));
- assertEquals(Period.ofMonths(-5), eval("INTERVAL -5 MONTHS"));
- assertEquals(Period.ofYears(6), eval("INTERVAL 6 YEARS"));
+ assertEquals(Duration.ofMinutes(2), eval("INTERVAL '2' MINUTES"));
+ assertEquals(Duration.ofHours(3), eval("INTERVAL '3' HOURS"));
+ assertEquals(Duration.ofDays(4), eval("INTERVAL '4' DAYS"));
+ assertEquals(Period.ofMonths(5), eval("INTERVAL '5' MONTHS"));
+ assertEquals(Period.ofMonths(5), eval("INTERVAL - '-5' MONTHS"));
+ assertEquals(Period.ofMonths(-5), eval("INTERVAL - '5' MONTHS"));
+ assertEquals(Period.ofMonths(-5), eval("INTERVAL '-5' MONTHS"));
+ assertEquals(Period.ofYears(6), eval("INTERVAL '6' YEARS"));
assertEquals(Period.of(1, 2, 0), eval("INTERVAL '1-2' YEAR TO MONTH"));
assertEquals(Duration.ofHours(25), eval("INTERVAL '1 1' DAY TO HOUR"));
assertEquals(Duration.ofMinutes(62), eval("INTERVAL '1:2' HOUR TO
MINUTE"));
@@ -173,9 +177,23 @@ public class ItIntervalTest extends BaseSqlIntegrationTest
{
// assertEquals(Duration.ofMillis(123987654), eval("INTERVAL
'123.987654' SECONDS"));
// Interval range overflow
- assertThrowsSqlException(Sql.RUNTIME_ERR, "INTEGER out of range", ()
-> sql("SELECT INTERVAL 5000000 MONTHS * 1000"));
- assertThrowsSqlException(Sql.RUNTIME_ERR, "BIGINT out of range", () ->
sql("SELECT DATE '2021-01-01' + INTERVAL 999999999999 DAY"));
- assertThrowsSqlException(Sql.RUNTIME_ERR, "INTEGER out of range", ()
-> sql("SELECT DATE '2021-01-01' + INTERVAL -999999999 YEAR"));
+ assertThrowsSqlException(Sql.RUNTIME_ERR, "INTEGER out of range",
+ () -> sql("SELECT INTERVAL '5000000' MONTHS * 1000"));
+ assertThrowsSqlException(Sql.STMT_VALIDATION_ERR, "Failed to validate
query.",
+ () -> sql("SELECT DATE '2021-01-01' + INTERVAL '999999999999'
DAY"));
+ assertThrowsSqlException(Sql.RUNTIME_ERR, "DATE out of range",
+ () -> sql("SELECT DATE '2021-01-01' + INTERVAL - '999999999'
YEAR"));
+
+ // Invalid interval literals format
+ assertThrowsSqlException(Sql.STMT_VALIDATION_ERR, "String literal
expected", () -> sql("SELECT INTERVAL 1 HOUR"));
+ assertThrowsSqlException(Sql.STMT_VALIDATION_ERR, "String literal
expected", () -> sql("SELECT INTERVAL 1 YEAR"));
+ assertThrowsSqlException(Sql.STMT_VALIDATION_ERR, "String literal
expected", () -> sql("SELECT INTERVAL -1 HOUR"));
+ assertThrowsSqlException(Sql.STMT_VALIDATION_ERR, "String literal
expected", () -> sql("SELECT INTERVAL -1 YEAR"));
+ assertThrowsSqlException(Sql.STMT_VALIDATION_ERR, "String literal
expected", () -> sql("SELECT INTERVAL 5000000 MONTHS * 1000"));
+ assertThrowsSqlException(Sql.STMT_VALIDATION_ERR, "String literal
expected",
+ () -> sql("SELECT DATE '2021-01-01' + INTERVAL 999999999999
DAY"));
+ assertThrowsSqlException(Sql.STMT_VALIDATION_ERR, "String literal
expected",
+ () -> sql("SELECT DATE '2021-01-01' + INTERVAL -999999999
YEAR"));
}
/**
@@ -185,18 +203,18 @@ public class ItIntervalTest extends
BaseSqlIntegrationTest {
public void testIntervalIntCast() {
assertNull(eval("CAST(NULL::INTERVAL SECONDS AS INT)"));
assertNull(eval("CAST(NULL::INTERVAL MONTHS AS INT)"));
- assertEquals(1, eval("CAST(INTERVAL 1 SECONDS AS INT)"));
- assertEquals(2, eval("CAST(INTERVAL 2 MINUTES AS INT)"));
- assertEquals(3, eval("CAST(INTERVAL 3 HOURS AS INT)"));
- assertEquals(4, eval("CAST(INTERVAL 4 DAYS AS INT)"));
- assertEquals(-4, eval("CAST(INTERVAL -4 DAYS AS INT)"));
- assertEquals(5, eval("CAST(INTERVAL 5 MONTHS AS INT)"));
- assertEquals(6, eval("CAST(INTERVAL 6 YEARS AS INT)"));
- assertEquals(-6, eval("CAST(INTERVAL -6 YEARS AS INT)"));
-
- assertEquals("+6", eval("CAST(INTERVAL 6 YEARS AS VARCHAR)"));
- assertEquals("+1", eval("CAST(INTERVAL 1 HOUR AS VARCHAR)"));
- assertEquals("+7.000000", eval("CAST(INTERVAL 7 SECONDS AS VARCHAR)"));
+ assertEquals(1, eval("CAST(INTERVAL '1' SECONDS AS INT)"));
+ assertEquals(2, eval("CAST(INTERVAL '2' MINUTES AS INT)"));
+ assertEquals(3, eval("CAST(INTERVAL '3' HOURS AS INT)"));
+ assertEquals(4, eval("CAST(INTERVAL '4' DAYS AS INT)"));
+ assertEquals(-4, eval("CAST(INTERVAL '-4' DAYS AS INT)"));
+ assertEquals(5, eval("CAST(INTERVAL '5' MONTHS AS INT)"));
+ assertEquals(6, eval("CAST(INTERVAL '6' YEARS AS INT)"));
+ assertEquals(-6, eval("CAST(INTERVAL - '6' YEARS AS INT)"));
+
+ assertEquals("+6", eval("CAST(INTERVAL '6' YEARS AS VARCHAR)"));
+ assertEquals("+1", eval("CAST(INTERVAL '1' HOUR AS VARCHAR)"));
+ assertEquals("+7.000000", eval("CAST(INTERVAL '7' SECONDS AS
VARCHAR)"));
assertNull(eval("CAST(NULL::INT AS INTERVAL SECONDS)"));
assertNull(eval("CAST(NULL::INT AS INTERVAL MONTHS)"));
@@ -223,12 +241,12 @@ public class ItIntervalTest extends
BaseSqlIntegrationTest {
assertNull(eval("CAST(NULL::INTERVAL SECONDS AS VARCHAR)"));
assertNull(eval("CAST(NULL::INTERVAL MONTHS AS VARCHAR)"));
assertEquals("+1.234", eval("CAST(INTERVAL '1.234' SECONDS (1,3) AS
VARCHAR)"));
- assertEquals("+1.000000", eval("CAST(INTERVAL 1 SECONDS AS VARCHAR)"));
- assertEquals("+2", eval("CAST(INTERVAL 2 MINUTES AS VARCHAR)"));
- assertEquals("+3", eval("CAST(INTERVAL 3 HOURS AS VARCHAR)"));
- assertEquals("+4", eval("CAST(INTERVAL 4 DAYS AS VARCHAR)"));
- assertEquals("+5", eval("CAST(INTERVAL 5 MONTHS AS VARCHAR)"));
- assertEquals("+6", eval("CAST(INTERVAL 6 YEARS AS VARCHAR)"));
+ assertEquals("+1.000000", eval("CAST(INTERVAL '1' SECONDS AS
VARCHAR)"));
+ assertEquals("+2", eval("CAST(INTERVAL '2' MINUTES AS VARCHAR)"));
+ assertEquals("+3", eval("CAST(INTERVAL '3' HOURS AS VARCHAR)"));
+ assertEquals("+4", eval("CAST(INTERVAL '4' DAYS AS VARCHAR)"));
+ assertEquals("+5", eval("CAST(INTERVAL '5' MONTHS AS VARCHAR)"));
+ assertEquals("+6", eval("CAST(INTERVAL '6' YEARS AS VARCHAR)"));
assertEquals("+1-02", eval("CAST(INTERVAL '1-2' YEAR TO MONTH AS
VARCHAR)"));
assertEquals("+1 02", eval("CAST(INTERVAL '1 2' DAY TO HOUR AS
VARCHAR)"));
assertEquals("-1 02:03:04.000000", eval("CAST(INTERVAL '-1 2:3:4' DAY
TO SECOND AS VARCHAR)"));
@@ -255,15 +273,15 @@ public class ItIntervalTest extends
BaseSqlIntegrationTest {
public void testIntervalToIntervalCast() {
assertNull(eval("CAST(NULL::INTERVAL MINUTE AS INTERVAL SECONDS)"));
assertNull(eval("CAST(NULL::INTERVAL YEAR AS INTERVAL MONTHS)"));
- assertEquals(Duration.ofMinutes(1), eval("CAST(INTERVAL 60 SECONDS AS
INTERVAL MINUTE)"));
- assertEquals(Duration.ofHours(1), eval("CAST(INTERVAL 60 MINUTES AS
INTERVAL HOUR)"));
- assertEquals(Duration.ofDays(1), eval("CAST(INTERVAL 24 HOURS AS
INTERVAL DAY)"));
- assertEquals(Period.ofYears(1), eval("CAST(INTERVAL 1 YEAR AS INTERVAL
MONTHS)"));
- assertEquals(Period.ofYears(1), eval("CAST(INTERVAL 12 MONTHS AS
INTERVAL YEARS)"));
+ assertEquals(Duration.ofMinutes(1), eval("CAST(INTERVAL '60' SECONDS
AS INTERVAL MINUTE)"));
+ assertEquals(Duration.ofHours(1), eval("CAST(INTERVAL '60' MINUTES AS
INTERVAL HOUR)"));
+ assertEquals(Duration.ofDays(1), eval("CAST(INTERVAL '24' HOURS AS
INTERVAL DAY)"));
+ assertEquals(Period.ofYears(1), eval("CAST(INTERVAL '1' YEAR AS
INTERVAL MONTHS)"));
+ assertEquals(Period.ofYears(1), eval("CAST(INTERVAL '12' MONTHS AS
INTERVAL YEARS)"));
// Cannot convert between month-year and day-time interval types.
- assertThrowsEx("SELECT CAST(INTERVAL 1 MONTHS AS INTERVAL DAYS)",
IgniteException.class, "cannot convert");
- assertThrowsEx("SELECT CAST(INTERVAL 1 DAYS AS INTERVAL MONTHS)",
IgniteException.class, "cannot convert");
+ assertThrowsEx("SELECT CAST(INTERVAL '1' MONTHS AS INTERVAL DAYS)",
IgniteException.class, "cannot convert");
+ assertThrowsEx("SELECT CAST(INTERVAL '1' DAYS AS INTERVAL MONTHS)",
IgniteException.class, "cannot convert");
}
/**
@@ -273,15 +291,15 @@ public class ItIntervalTest extends
BaseSqlIntegrationTest {
@Test
public void testDml() {
sql("CREATE TABLE test(id int PRIMARY KEY, ym INTERVAL YEAR, dt
INTERVAL DAYS)");
- sql("INSERT INTO test VALUES (1, INTERVAL 1 MONTH, INTERVAL 2 DAYS)");
- sql("INSERT INTO test VALUES (2, INTERVAL 3 YEARS, INTERVAL 4 HOURS)");
+ sql("INSERT INTO test VALUES (1, INTERVAL '1' MONTH, INTERVAL 2
DAYS)");
+ sql("INSERT INTO test VALUES (2, INTERVAL '3' YEARS, INTERVAL 4
HOURS)");
sql("INSERT INTO test VALUES (3, INTERVAL '4-5' YEARS TO MONTHS,
INTERVAL '6:7' HOURS TO MINUTES)");
sql("INSERT INTO test VALUES (4, NULL, NULL)");
- assertThrowsEx("INSERT INTO test VALUES (5, INTERVAL 1 DAYS, INTERVAL
1 HOURS)", IgniteInternalException.class,
+ assertThrowsEx("INSERT INTO test VALUES (5, INTERVAL '1' DAYS,
INTERVAL '1' HOURS)", IgniteInternalException.class,
"cannot assign");
- assertThrowsEx("INSERT INTO test VALUES (6, INTERVAL 1 YEARS, INTERVAL
1 MONTHS)", IgniteInternalException.class,
+ assertThrowsEx("INSERT INTO test VALUES (6, INTERVAL '1' YEARS,
INTERVAL '1' MONTHS)", IgniteInternalException.class,
"cannot assign");
assertQuery("SELECT ym, dt FROM test")
@@ -291,18 +309,18 @@ public class ItIntervalTest extends
BaseSqlIntegrationTest {
.returns(null, null)
.check();
- assertThrowsEx("SELECT * FROM test WHERE ym = INTERVAL 6 DAYS",
IgniteInternalException.class, "Cannot apply");
- assertThrowsEx("SELECT * FROM test WHERE dt = INTERVAL 6 YEARS",
IgniteInternalException.class, "Cannot apply");
+ assertThrowsEx("SELECT * FROM test WHERE ym = INTERVAL '6' DAYS",
IgniteInternalException.class, "Cannot apply");
+ assertThrowsEx("SELECT * FROM test WHERE dt = INTERVAL '6' YEARS",
IgniteInternalException.class, "Cannot apply");
- sql("UPDATE test SET dt = INTERVAL 3 DAYS WHERE ym = INTERVAL 1
MONTH");
- sql("UPDATE test SET ym = INTERVAL 5 YEARS WHERE dt = INTERVAL 4
HOURS");
+ sql("UPDATE test SET dt = INTERVAL '3' DAYS WHERE ym = INTERVAL '1'
MONTH");
+ sql("UPDATE test SET ym = INTERVAL '5' YEARS WHERE dt = INTERVAL '4'
HOURS");
sql("UPDATE test SET ym = INTERVAL '6-7' YEARS TO MONTHS, dt =
INTERVAL '8 9' DAYS TO HOURS "
+ "WHERE ym = INTERVAL '4-5' YEARS TO MONTHS AND dt = INTERVAL
'6:7' HOURS TO MINUTES");
- assertThrowsEx("UPDATE test SET dt = INTERVAL 5 YEARS WHERE ym =
INTERVAL 1 MONTH", IgniteInternalException.class,
+ assertThrowsEx("UPDATE test SET dt = INTERVAL '5' YEARS WHERE ym =
INTERVAL '1' MONTH", IgniteInternalException.class,
"Cannot assign");
- assertThrowsEx("UPDATE test SET ym = INTERVAL 8 YEARS WHERE dt =
INTERVAL 1 MONTH", IgniteInternalException.class,
+ assertThrowsEx("UPDATE test SET ym = INTERVAL '8' YEARS WHERE dt =
INTERVAL '1' MONTH", IgniteInternalException.class,
"Cannot apply");
assertQuery("SELECT * FROM test")
@@ -315,8 +333,8 @@ public class ItIntervalTest extends BaseSqlIntegrationTest {
assertThrowsEx("DELETE FROM test WHERE ym = INTERVAL 6 DAYS",
IgniteInternalException.class, "cannot apply");
assertThrowsEx("DELETE FROM test WHERE dt = INTERVAL 6 YEARS",
IgniteInternalException.class, "cannot apply");
- sql("DELETE FROM test WHERE ym = INTERVAL 1 MONTH");
- sql("DELETE FROM test WHERE dt = INTERVAL 4 HOURS");
+ sql("DELETE FROM test WHERE ym = INTERVAL '1' MONTH");
+ sql("DELETE FROM test WHERE dt = INTERVAL '4' HOURS");
sql("DELETE FROM test WHERE ym = INTERVAL '6-7' YEARS TO MONTHS AND dt
= INTERVAL '8 9' DAYS TO HOURS");
sql("DELETE FROM test WHERE ym IS NULL AND dt IS NULL");
@@ -324,8 +342,8 @@ public class ItIntervalTest extends BaseSqlIntegrationTest {
sql("ALTER TABLE test ADD (ym2 INTERVAL MONTH, dt2 INTERVAL HOURS)");
- sql("INSERT INTO test(id, ym, ym2, dt, dt2) VALUES (7, INTERVAL 1
YEAR, INTERVAL 2 YEARS, "
- + "INTERVAL 1 SECOND, INTERVAL 2 MINUTES)");
+ sql("INSERT INTO test(id, ym, ym2, dt, dt2) VALUES (7, INTERVAL '1'
YEAR, INTERVAL 2 YEARS, "
+ + "INTERVAL '1' SECOND, INTERVAL 2 MINUTES)");
assertQuery("SELECT ym, ym2, dt, dt2 FROM test")
.returns(Period.ofYears(1), Period.ofYears(2),
Duration.ofSeconds(1), Duration.ofMinutes(2))
@@ -466,7 +484,7 @@ public class ItIntervalTest extends BaseSqlIntegrationTest {
@Test
public void testDateTimeIntervalArithmetic() {
// Date +/- interval.
- assertEquals(LocalDate.parse("2020-12-31"), eval("DATE '2021-01-01' +
INTERVAL -1 DAY"));
+ assertEquals(LocalDate.parse("2020-12-31"), eval("DATE '2021-01-01' +
INTERVAL '-1' DAY"));
assertEquals(LocalDate.parse("2022-02-01"), eval("DATE '2021-01-01' +
INTERVAL '1-1' YEAR TO MONTH"));
// Date - date as interval.
@@ -520,11 +538,11 @@ public class ItIntervalTest extends
BaseSqlIntegrationTest {
ZoneId zoneId = ZoneId.systemDefault();
String tzSuffix = sqlTypeName ==
SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE ? ' ' + zoneId.getId() : "";
- assertQuery(format("SELECT ({} '2021-11-06 02:30:00' + interval (23)
hours)::varchar", typeName))
+ assertQuery(format("SELECT ({} '2021-11-06 02:30:00' + interval '23'
hours)::varchar", typeName))
.withTimeZoneId(zoneId)
.returns("2021-11-07 01:30:00" + tzSuffix).check();
- assertQuery(format("SELECT ({} '2021-11-06 01:30:00' + interval (24)
hours)::varchar", typeName))
+ assertQuery(format("SELECT ({} '2021-11-06 01:30:00' + interval '24'
hours)::varchar", typeName))
.withTimeZoneId(zoneId)
.returns("2021-11-07 01:30:00" + tzSuffix).check();
@@ -1013,30 +1031,30 @@ public class ItIntervalTest extends
BaseSqlIntegrationTest {
@Test
public void testIntervalArithmetic() {
// Interval +/- interval.
- assertEquals(Duration.ofSeconds(2), eval("INTERVAL 1 SECONDS +
INTERVAL 1 SECONDS"));
- assertEquals(Duration.ofSeconds(1), eval("INTERVAL 2 SECONDS -
INTERVAL 1 SECONDS"));
- assertEquals(Duration.ofSeconds(61), eval("INTERVAL 1 MINUTE +
INTERVAL 1 SECONDS"));
- assertEquals(Duration.ofSeconds(59), eval("INTERVAL 1 MINUTE -
INTERVAL 1 SECONDS"));
- assertEquals(Duration.ofSeconds(59), eval("INTERVAL 1 MINUTE +
INTERVAL -1 SECONDS"));
- assertEquals(Duration.ofSeconds(3723), eval("INTERVAL 1 HOUR +
INTERVAL '2:3' MINUTE TO SECONDS"));
- assertEquals(Duration.ofSeconds(3477), eval("INTERVAL 1 HOUR -
INTERVAL '2:3' MINUTE TO SECONDS"));
- assertEquals(Duration.ofHours(25), eval("INTERVAL 1 DAY + INTERVAL 1
HOUR"));
- assertEquals(Period.ofMonths(2), eval("INTERVAL 1 MONTH + INTERVAL 1
MONTH"));
- assertEquals(Period.ofYears(2), eval("INTERVAL 1 YEAR + INTERVAL 1
YEAR"));
- assertEquals(Period.of(1, 1, 0), eval("INTERVAL 1 YEAR + INTERVAL 1
MONTH"));
- assertEquals(Period.ofMonths(11), eval("INTERVAL 1 YEAR - INTERVAL 1
MONTH"));
- assertEquals(Period.ofMonths(11), eval("INTERVAL 1 YEAR + INTERVAL -1
MONTH"));
- assertThrowsEx("SELECT INTERVAL 1 DAY + INTERVAL 1 MONTH",
IgniteException.class, "Cannot apply");
+ assertEquals(Duration.ofSeconds(2), eval("INTERVAL '1' SECONDS +
INTERVAL '1' SECONDS"));
+ assertEquals(Duration.ofSeconds(1), eval("INTERVAL '2' SECONDS -
INTERVAL '1' SECONDS"));
+ assertEquals(Duration.ofSeconds(61), eval("INTERVAL '1' MINUTE +
INTERVAL '1' SECONDS"));
+ assertEquals(Duration.ofSeconds(59), eval("INTERVAL '1' MINUTE -
INTERVAL '1' SECONDS"));
+ assertEquals(Duration.ofSeconds(59), eval("INTERVAL '1' MINUTE +
INTERVAL '-1' SECONDS"));
+ assertEquals(Duration.ofSeconds(3723), eval("INTERVAL '1' HOUR +
INTERVAL '2:3' MINUTE TO SECONDS"));
+ assertEquals(Duration.ofSeconds(3477), eval("INTERVAL '1' HOUR -
INTERVAL '2:3' MINUTE TO SECONDS"));
+ assertEquals(Duration.ofHours(25), eval("INTERVAL '1' DAY + INTERVAL
'1 'HOUR"));
+ assertEquals(Period.ofMonths(2), eval("INTERVAL '1' MONTH + INTERVAL
'1' MONTH"));
+ assertEquals(Period.ofYears(2), eval("INTERVAL '1' YEAR + INTERVAL '1'
YEAR"));
+ assertEquals(Period.of(1, 1, 0), eval("INTERVAL '1' YEAR + INTERVAL
'1' MONTH"));
+ assertEquals(Period.ofMonths(11), eval("INTERVAL '1' YEAR - INTERVAL
'1' MONTH"));
+ assertEquals(Period.ofMonths(11), eval("INTERVAL '1' YEAR + INTERVAL
'-1' MONTH"));
+ assertThrowsEx("SELECT INTERVAL '1' DAY + INTERVAL '1' MONTH",
IgniteException.class, "Cannot apply");
// Interval * scalar.
- assertEquals(Duration.ofSeconds(2), eval("INTERVAL 1 SECONDS * 2"));
- assertEquals(Duration.ofSeconds(-2), eval("INTERVAL -1 SECONDS * 2"));
- assertEquals(Duration.ofMinutes(4), eval("INTERVAL 2 MINUTES * 2"));
- assertEquals(Duration.ofHours(6), eval("INTERVAL 3 HOURS * 2"));
- assertEquals(Duration.ofDays(8), eval("INTERVAL 4 DAYS * 2"));
- assertEquals(Period.ofMonths(10), eval("INTERVAL 5 MONTHS * 2"));
- assertEquals(Period.ofMonths(-10), eval("INTERVAL -5 MONTHS * 2"));
- assertEquals(Period.ofYears(12), eval("INTERVAL 6 YEARS * 2"));
+ assertEquals(Duration.ofSeconds(2), eval("INTERVAL '1' SECONDS * 2"));
+ assertEquals(Duration.ofSeconds(-2), eval("INTERVAL '-1' SECONDS *
2"));
+ assertEquals(Duration.ofMinutes(4), eval("INTERVAL '2' MINUTES * 2"));
+ assertEquals(Duration.ofHours(6), eval("INTERVAL '3' HOURS * 2"));
+ assertEquals(Duration.ofDays(8), eval("INTERVAL '4' DAYS * 2"));
+ assertEquals(Period.ofMonths(10), eval("INTERVAL '5' MONTHS * 2"));
+ assertEquals(Period.ofMonths(-10), eval("INTERVAL '-5' MONTHS * 2"));
+ assertEquals(Period.ofYears(12), eval("INTERVAL '6' YEARS * 2"));
assertEquals(Period.of(2, 4, 0), eval("INTERVAL '1-2' YEAR TO MONTH *
2"));
assertEquals(Duration.ofHours(50), eval("INTERVAL '1 1' DAY TO HOUR *
2"));
assertEquals(Duration.ofMinutes(124), eval("INTERVAL '1:2' HOUR TO
MINUTE * 2"));
@@ -1045,14 +1063,14 @@ public class ItIntervalTest extends
BaseSqlIntegrationTest {
assertEquals(Duration.ofMillis(7446912), eval("INTERVAL '0 1:2:3.456'
DAY TO SECOND * 2"));
// Interval / scalar
- assertEquals(Duration.ofSeconds(1), eval("INTERVAL 2 SECONDS / 2"));
- assertEquals(Duration.ofSeconds(-1), eval("INTERVAL -2 SECONDS / 2"));
- assertEquals(Duration.ofSeconds(30), eval("INTERVAL 1 MINUTES / 2"));
- assertEquals(Duration.ofMinutes(90), eval("INTERVAL 3 HOURS / 2"));
- assertEquals(Duration.ofDays(2), eval("INTERVAL 4 DAYS / 2"));
- assertEquals(Period.ofMonths(2), eval("INTERVAL 5 MONTHS / 2"));
- assertEquals(Period.ofMonths(-2), eval("INTERVAL -5 MONTHS / 2"));
- assertEquals(Period.of(3, 6, 0), eval("INTERVAL 7 YEARS / 2"));
+ assertEquals(Duration.ofSeconds(1), eval("INTERVAL '2' SECONDS / 2"));
+ assertEquals(Duration.ofSeconds(-1), eval("INTERVAL '-2' SECONDS /
2"));
+ assertEquals(Duration.ofSeconds(30), eval("INTERVAL '1' MINUTES / 2"));
+ assertEquals(Duration.ofMinutes(90), eval("INTERVAL '3' HOURS / 2"));
+ assertEquals(Duration.ofDays(2), eval("INTERVAL '4' DAYS / 2"));
+ assertEquals(Period.ofMonths(2), eval("INTERVAL '5' MONTHS / 2"));
+ assertEquals(Period.ofMonths(-2), eval("INTERVAL '-5' MONTHS / 2"));
+ assertEquals(Period.of(3, 6, 0), eval("INTERVAL '7' YEARS / 2"));
assertEquals(Period.ofMonths(7), eval("INTERVAL '1-2' YEAR TO MONTH /
2"));
assertEquals(Duration.ofHours(13), eval("INTERVAL '1 2' DAY TO HOUR /
2"));
assertEquals(Duration.ofMinutes(31), eval("INTERVAL '1:2' HOUR TO
MINUTE / 2"));
@@ -1066,13 +1084,13 @@ public class ItIntervalTest extends
BaseSqlIntegrationTest {
*/
@Test
public void testExtract() {
- assertEquals(2L, eval("EXTRACT(MONTH FROM INTERVAL 14 MONTHS)"));
- assertEquals(0L, eval("EXTRACT(MONTH FROM INTERVAL 1 YEAR)"));
+ assertEquals(2L, eval("EXTRACT(MONTH FROM INTERVAL '14' MONTHS)"));
+ assertEquals(0L, eval("EXTRACT(MONTH FROM INTERVAL '1' YEAR)"));
assertEquals(2L, eval("EXTRACT(MONTH FROM INTERVAL '1-2' YEAR TO
MONTH)"));
assertEquals(1L, eval("EXTRACT(YEAR FROM INTERVAL '1-2' YEAR TO
MONTH)"));
- assertEquals(-1L, eval("EXTRACT(MONTH FROM INTERVAL -1 MONTHS)"));
- assertEquals(-1L, eval("EXTRACT(YEAR FROM INTERVAL -14 MONTHS)"));
- assertEquals(-2L, eval("EXTRACT(MONTH FROM INTERVAL -14 MONTHS)"));
+ assertEquals(-1L, eval("EXTRACT(MONTH FROM INTERVAL '-1' MONTHS)"));
+ assertEquals(-1L, eval("EXTRACT(YEAR FROM INTERVAL '-14' MONTHS)"));
+ assertEquals(-2L, eval("EXTRACT(MONTH FROM INTERVAL '-14' MONTHS)"));
assertEquals(-20L, eval("EXTRACT(MINUTE FROM INTERVAL '-10:20' HOURS
TO MINUTES)"));
assertEquals(1L, eval("EXTRACT(DAY FROM INTERVAL '1 2:3:4.567' DAY TO
SECOND)"));
assertEquals(2L, eval("EXTRACT(HOUR FROM INTERVAL '1 2:3:4.567' DAY TO
SECOND)"));
@@ -1084,9 +1102,9 @@ public class ItIntervalTest extends
BaseSqlIntegrationTest {
assertEquals(-3L, eval("EXTRACT(MINUTE FROM INTERVAL '-1 2:3:4.567'
DAY TO SECOND)"));
assertEquals(-4L, eval("EXTRACT(SECOND FROM INTERVAL '-1 2:3:4.567'
DAY TO SECOND)"));
assertEquals(-4567L, eval("EXTRACT(MILLISECOND FROM INTERVAL '-1
2:3:4.567' DAY TO SECOND)"));
- assertEquals(0L, eval("EXTRACT(DAY FROM INTERVAL 1 MONTH)"));
+ assertEquals(0L, eval("EXTRACT(DAY FROM INTERVAL '1' MONTH)"));
- assertThrowsEx("SELECT EXTRACT(MONTH FROM INTERVAL 1 DAY)",
IgniteException.class, "Cannot apply");
+ assertThrowsEx("SELECT EXTRACT(MONTH FROM INTERVAL '1' DAY)",
IgniteException.class, "Cannot apply");
}
/**
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlOperatorsTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlOperatorsTest.java
index 21ed6e5afe1..842b536243c 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlOperatorsTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlOperatorsTest.java
@@ -223,7 +223,7 @@ public class ItSqlOperatorsTest extends
BaseSqlIntegrationTest {
@Test
public void testDateAndTime() {
- assertExpression("DATE '2021-01-01' + interval (1)
days").returns(LocalDate.parse("2021-01-02")).check();
+ assertExpression("DATE '2021-01-01' + interval '1'
days").returns(LocalDate.parse("2021-01-02")).check();
assertExpression("(DATE '2021-03-01' - DATE '2021-01-01')
months").returns(Period.ofMonths(2)).check();
assertExpression("(DATE '2021-03-02' - DATE '2021-03-01')
hours").returns(Duration.ofHours(24)).check();
assertExpression("EXTRACT(DAY FROM DATE
'2021-01-15')").returns(15L).check();
@@ -296,8 +296,8 @@ public class ItSqlOperatorsTest extends
BaseSqlIntegrationTest {
assertExpression("COMPRESS('')").returns(new byte[]{}).check();
assertExpression("OCTET_LENGTH(x'01')").returns(1).check();
assertExpression("OCTET_LENGTH('text')").returns(4).check();
- assertExpression("CAST(INTERVAL 1 SECONDS AS
INT)").returns(1).check(); // Converted to REINTERPRED.
- assertExpression("CAST(INTERVAL 1 DAY AS INT)").returns(1).check(); //
Converted to REINTERPRED.
+ assertExpression("CAST(INTERVAL '1' SECONDS AS
INT)").returns(1).check(); // Converted to REINTERPRED.
+ assertExpression("CAST(INTERVAL '1' DAY AS INT)").returns(1).check();
// Converted to REINTERPRED.
}
@Test
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_bigint.test
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_bigint.test
index 33e89236136..d3a66c25cb8 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_bigint.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_bigint.test
@@ -65,7 +65,7 @@ SELECT CAST(x'00'::VARBINARY AS BIGINT);
for interval_type in [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, YEARS, MONTHS,
DAYS, HOURS, MINUTES, SECONDS]
query T
-SELECT CAST(INTERVAL 11 ${interval_type} AS BIGINT);
+SELECT CAST(INTERVAL '11' ${interval_type} AS BIGINT);
----
11
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_decimal.test
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_decimal.test
index a28dbf3b325..708499b03c8 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_decimal.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_decimal.test
@@ -115,7 +115,7 @@ SELECT CAST(x'00'::VARBINARY AS DECIMAL);
for interval_type in [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, YEARS, MONTHS,
DAYS, HOURS, MINUTES, SECONDS]
query T
-SELECT CAST(INTERVAL 11 ${interval_type} AS DECIMAL);
+SELECT CAST(INTERVAL '11' ${interval_type} AS DECIMAL);
----
11
@@ -126,7 +126,7 @@ endfor
for interval_type in [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, YEARS, MONTHS,
DAYS, HOURS, MINUTES, SECONDS]
query T
-SELECT CAST(INTERVAL 11 ${interval_type} AS DECIMAL(5,2));
+SELECT CAST(INTERVAL '11' ${interval_type} AS DECIMAL(5,2));
----
11
@@ -165,7 +165,7 @@ SELECT CAST(INTERVAL '1-1' YEARS TO MONTHS AS DECIMAL(5));
for interval_type in [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, YEARS, MONTHS,
DAYS, HOURS, MINUTES, SECONDS]
statement error: Numeric field overflow
-SELECT CAST(INTERVAL 11 ${interval_type} AS DECIMAL(1));
+SELECT CAST(INTERVAL '11' ${interval_type} AS DECIMAL(1));
endfor
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_float.test
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_float.test
index 2b4dcbdc812..b4457187d86 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_float.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_float.test
@@ -80,7 +80,7 @@ SELECT CAST(x'00'::VARBINARY AS FLOAT);
for interval_type in [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, YEARS, MONTHS,
DAYS, HOURS, MINUTES, SECONDS]
statement error: Cast function cannot convert value
-SELECT CAST(INTERVAL 11 ${interval_type} AS FLOAT);
+SELECT CAST(INTERVAL '11' ${interval_type} AS FLOAT);
endfor
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_int.test
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_int.test
index bb3f94468ca..ad54a004b7a 100644
--- a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_int.test
+++ b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_int.test
@@ -65,7 +65,7 @@ SELECT CAST(x'00'::VARBINARY AS INT);
for interval_type in [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, YEARS, MONTHS,
DAYS, HOURS, MINUTES, SECONDS]
query T
-SELECT CAST(INTERVAL 11 ${interval_type} AS INT);
+SELECT CAST(INTERVAL '11' ${interval_type} AS INT);
----
11
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_interval_day.test
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_interval_day.test
index 4960bcf60aa..f1d846779c2 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_interval_day.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_interval_day.test
@@ -4,7 +4,7 @@
# group: [cast]
query T
-SELECT CAST(INTERVAL 1 DAYS AS INTERVAL DAYS);
+SELECT CAST(INTERVAL '1' DAYS AS INTERVAL DAYS);
----
PT24H
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_interval_year.test
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_interval_year.test
index bdf16c6c514..456a9345f66 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_interval_year.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_interval_year.test
@@ -4,7 +4,7 @@
# group: [cast]
query T
-SELECT CAST(INTERVAL 1 YEARS AS INTERVAL YEARS);
+SELECT CAST(INTERVAL '1' YEARS AS INTERVAL YEARS);
----
P1Y
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_smallint.test
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_smallint.test
index 59b8e353986..5b2a3d8233d 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_smallint.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_smallint.test
@@ -65,7 +65,7 @@ SELECT CAST(x'00'::VARBINARY AS SMALLINT);
for interval_type in [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, YEARS, MONTHS,
DAYS, HOURS, MINUTES, SECONDS]
query T
-SELECT CAST(INTERVAL 11 ${interval_type} AS SMALLINT);
+SELECT CAST(INTERVAL '11' ${interval_type} AS SMALLINT);
----
11
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_tinyint.test
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_tinyint.test
index 03c06e0e891..172dc48a030 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_tinyint.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/cast/test_cast_tinyint.test
@@ -65,7 +65,7 @@ SELECT CAST(x'00'::VARBINARY AS TINYINT);
for interval_type in [YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, YEARS, MONTHS,
DAYS, HOURS, MINUTES, SECONDS]
query T
-SELECT CAST(INTERVAL 11 ${interval_type} AS TINYINT);
+SELECT CAST(INTERVAL '11' ${interval_type} AS TINYINT);
----
11
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/function/date/test_extract_month.test
b/modules/sql-engine/src/integrationTest/sql/group1/function/date/test_extract_month.test
index e6b02ec7321..e5d8c927115 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/function/date/test_extract_month.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/function/date/test_extract_month.test
@@ -3,746 +3,38 @@
# group: [date]
query II
-select date '1992-01-01' + interval (18) days, month(date '1992-01-01' +
interval (18) days);
+select date '1992-01-01' + interval '18' days, month(date '1992-01-01' +
interval '18' days);
----
1992-01-19 1
query II
-select date '1992-01-01' + interval (x) days, month(date '1992-01-01' +
interval (x) days) from table(system_range(0, 365));
+select date '1992-01-01' + interval '30' days, month(date '1992-01-01' +
interval '30' days);
----
-1992-01-01 1
-1992-01-02 1
-1992-01-03 1
-1992-01-04 1
-1992-01-05 1
-1992-01-06 1
-1992-01-07 1
-1992-01-08 1
-1992-01-09 1
-1992-01-10 1
-1992-01-11 1
-1992-01-12 1
-1992-01-13 1
-1992-01-14 1
-1992-01-15 1
-1992-01-16 1
-1992-01-17 1
-1992-01-18 1
-1992-01-19 1
-1992-01-20 1
-1992-01-21 1
-1992-01-22 1
-1992-01-23 1
-1992-01-24 1
-1992-01-25 1
-1992-01-26 1
-1992-01-27 1
-1992-01-28 1
-1992-01-29 1
-1992-01-30 1
1992-01-31 1
+
+query II
+select date '1992-01-01' + interval '31' days, month(date '1992-01-01' +
interval '31' days);
+----
1992-02-01 2
-1992-02-02 2
-1992-02-03 2
-1992-02-04 2
-1992-02-05 2
-1992-02-06 2
-1992-02-07 2
-1992-02-08 2
-1992-02-09 2
-1992-02-10 2
-1992-02-11 2
-1992-02-12 2
-1992-02-13 2
-1992-02-14 2
-1992-02-15 2
-1992-02-16 2
-1992-02-17 2
-1992-02-18 2
-1992-02-19 2
-1992-02-20 2
-1992-02-21 2
-1992-02-22 2
-1992-02-23 2
-1992-02-24 2
-1992-02-25 2
-1992-02-26 2
-1992-02-27 2
-1992-02-28 2
+
+# Leap year
+query II
+select date '1992-01-01' + interval '59' days, month(date '1992-01-01' +
interval '59' days);
+----
1992-02-29 2
-1992-03-01 3
-1992-03-02 3
-1992-03-03 3
-1992-03-04 3
-1992-03-05 3
-1992-03-06 3
-1992-03-07 3
-1992-03-08 3
-1992-03-09 3
-1992-03-10 3
-1992-03-11 3
-1992-03-12 3
-1992-03-13 3
-1992-03-14 3
-1992-03-15 3
-1992-03-16 3
-1992-03-17 3
-1992-03-18 3
-1992-03-19 3
-1992-03-20 3
-1992-03-21 3
-1992-03-22 3
-1992-03-23 3
-1992-03-24 3
-1992-03-25 3
-1992-03-26 3
-1992-03-27 3
-1992-03-28 3
-1992-03-29 3
-1992-03-30 3
-1992-03-31 3
-1992-04-01 4
-1992-04-02 4
-1992-04-03 4
-1992-04-04 4
-1992-04-05 4
-1992-04-06 4
-1992-04-07 4
-1992-04-08 4
-1992-04-09 4
-1992-04-10 4
-1992-04-11 4
-1992-04-12 4
-1992-04-13 4
-1992-04-14 4
-1992-04-15 4
-1992-04-16 4
-1992-04-17 4
-1992-04-18 4
-1992-04-19 4
-1992-04-20 4
-1992-04-21 4
-1992-04-22 4
-1992-04-23 4
-1992-04-24 4
-1992-04-25 4
-1992-04-26 4
-1992-04-27 4
-1992-04-28 4
-1992-04-29 4
-1992-04-30 4
-1992-05-01 5
-1992-05-02 5
-1992-05-03 5
-1992-05-04 5
-1992-05-05 5
-1992-05-06 5
-1992-05-07 5
-1992-05-08 5
-1992-05-09 5
-1992-05-10 5
-1992-05-11 5
-1992-05-12 5
-1992-05-13 5
-1992-05-14 5
-1992-05-15 5
-1992-05-16 5
-1992-05-17 5
-1992-05-18 5
-1992-05-19 5
-1992-05-20 5
-1992-05-21 5
-1992-05-22 5
-1992-05-23 5
-1992-05-24 5
-1992-05-25 5
-1992-05-26 5
-1992-05-27 5
-1992-05-28 5
-1992-05-29 5
-1992-05-30 5
-1992-05-31 5
-1992-06-01 6
-1992-06-02 6
-1992-06-03 6
-1992-06-04 6
-1992-06-05 6
-1992-06-06 6
-1992-06-07 6
-1992-06-08 6
-1992-06-09 6
-1992-06-10 6
-1992-06-11 6
-1992-06-12 6
-1992-06-13 6
-1992-06-14 6
-1992-06-15 6
-1992-06-16 6
-1992-06-17 6
-1992-06-18 6
-1992-06-19 6
-1992-06-20 6
-1992-06-21 6
-1992-06-22 6
-1992-06-23 6
-1992-06-24 6
-1992-06-25 6
-1992-06-26 6
-1992-06-27 6
-1992-06-28 6
-1992-06-29 6
-1992-06-30 6
-1992-07-01 7
-1992-07-02 7
-1992-07-03 7
-1992-07-04 7
-1992-07-05 7
-1992-07-06 7
-1992-07-07 7
-1992-07-08 7
-1992-07-09 7
-1992-07-10 7
-1992-07-11 7
-1992-07-12 7
-1992-07-13 7
-1992-07-14 7
-1992-07-15 7
-1992-07-16 7
-1992-07-17 7
-1992-07-18 7
-1992-07-19 7
-1992-07-20 7
-1992-07-21 7
-1992-07-22 7
-1992-07-23 7
-1992-07-24 7
-1992-07-25 7
-1992-07-26 7
-1992-07-27 7
-1992-07-28 7
-1992-07-29 7
-1992-07-30 7
-1992-07-31 7
-1992-08-01 8
-1992-08-02 8
-1992-08-03 8
-1992-08-04 8
-1992-08-05 8
-1992-08-06 8
-1992-08-07 8
-1992-08-08 8
-1992-08-09 8
-1992-08-10 8
-1992-08-11 8
-1992-08-12 8
-1992-08-13 8
-1992-08-14 8
-1992-08-15 8
-1992-08-16 8
-1992-08-17 8
-1992-08-18 8
-1992-08-19 8
-1992-08-20 8
-1992-08-21 8
-1992-08-22 8
-1992-08-23 8
-1992-08-24 8
-1992-08-25 8
-1992-08-26 8
-1992-08-27 8
-1992-08-28 8
-1992-08-29 8
-1992-08-30 8
-1992-08-31 8
-1992-09-01 9
-1992-09-02 9
-1992-09-03 9
-1992-09-04 9
-1992-09-05 9
-1992-09-06 9
-1992-09-07 9
-1992-09-08 9
-1992-09-09 9
-1992-09-10 9
-1992-09-11 9
-1992-09-12 9
-1992-09-13 9
-1992-09-14 9
-1992-09-15 9
-1992-09-16 9
-1992-09-17 9
-1992-09-18 9
-1992-09-19 9
-1992-09-20 9
-1992-09-21 9
-1992-09-22 9
-1992-09-23 9
-1992-09-24 9
-1992-09-25 9
-1992-09-26 9
-1992-09-27 9
-1992-09-28 9
-1992-09-29 9
-1992-09-30 9
-1992-10-01 10
-1992-10-02 10
-1992-10-03 10
-1992-10-04 10
-1992-10-05 10
-1992-10-06 10
-1992-10-07 10
-1992-10-08 10
-1992-10-09 10
-1992-10-10 10
-1992-10-11 10
-1992-10-12 10
-1992-10-13 10
-1992-10-14 10
-1992-10-15 10
-1992-10-16 10
-1992-10-17 10
-1992-10-18 10
-1992-10-19 10
-1992-10-20 10
-1992-10-21 10
-1992-10-22 10
-1992-10-23 10
-1992-10-24 10
-1992-10-25 10
-1992-10-26 10
-1992-10-27 10
-1992-10-28 10
-1992-10-29 10
-1992-10-30 10
-1992-10-31 10
-1992-11-01 11
-1992-11-02 11
-1992-11-03 11
-1992-11-04 11
-1992-11-05 11
-1992-11-06 11
-1992-11-07 11
-1992-11-08 11
-1992-11-09 11
-1992-11-10 11
-1992-11-11 11
-1992-11-12 11
-1992-11-13 11
-1992-11-14 11
-1992-11-15 11
-1992-11-16 11
-1992-11-17 11
-1992-11-18 11
-1992-11-19 11
-1992-11-20 11
-1992-11-21 11
-1992-11-22 11
-1992-11-23 11
-1992-11-24 11
-1992-11-25 11
-1992-11-26 11
-1992-11-27 11
-1992-11-28 11
-1992-11-29 11
-1992-11-30 11
-1992-12-01 12
-1992-12-02 12
-1992-12-03 12
-1992-12-04 12
-1992-12-05 12
-1992-12-06 12
-1992-12-07 12
-1992-12-08 12
-1992-12-09 12
-1992-12-10 12
-1992-12-11 12
-1992-12-12 12
-1992-12-13 12
-1992-12-14 12
-1992-12-15 12
-1992-12-16 12
-1992-12-17 12
-1992-12-18 12
-1992-12-19 12
-1992-12-20 12
-1992-12-21 12
-1992-12-22 12
-1992-12-23 12
-1992-12-24 12
-1992-12-25 12
-1992-12-26 12
-1992-12-27 12
-1992-12-28 12
-1992-12-29 12
-1992-12-30 12
+
+query II
+select date '1992-01-01' + interval '365' days, month(date '1992-01-01' +
interval '365' days);
+----
1992-12-31 12
+# Non-leap year
query II
-select date '1993-01-01' + interval (x) days, month(date '1993-01-01' +
interval (x) days) from table(system_range(0, 365));
+select date '1993-01-01' + interval '59' days, month(date '1993-01-01' +
interval '59' days);
----
-1993-01-01 1
-1993-01-02 1
-1993-01-03 1
-1993-01-04 1
-1993-01-05 1
-1993-01-06 1
-1993-01-07 1
-1993-01-08 1
-1993-01-09 1
-1993-01-10 1
-1993-01-11 1
-1993-01-12 1
-1993-01-13 1
-1993-01-14 1
-1993-01-15 1
-1993-01-16 1
-1993-01-17 1
-1993-01-18 1
-1993-01-19 1
-1993-01-20 1
-1993-01-21 1
-1993-01-22 1
-1993-01-23 1
-1993-01-24 1
-1993-01-25 1
-1993-01-26 1
-1993-01-27 1
-1993-01-28 1
-1993-01-29 1
-1993-01-30 1
-1993-01-31 1
-1993-02-01 2
-1993-02-02 2
-1993-02-03 2
-1993-02-04 2
-1993-02-05 2
-1993-02-06 2
-1993-02-07 2
-1993-02-08 2
-1993-02-09 2
-1993-02-10 2
-1993-02-11 2
-1993-02-12 2
-1993-02-13 2
-1993-02-14 2
-1993-02-15 2
-1993-02-16 2
-1993-02-17 2
-1993-02-18 2
-1993-02-19 2
-1993-02-20 2
-1993-02-21 2
-1993-02-22 2
-1993-02-23 2
-1993-02-24 2
-1993-02-25 2
-1993-02-26 2
-1993-02-27 2
-1993-02-28 2
1993-03-01 3
-1993-03-02 3
-1993-03-03 3
-1993-03-04 3
-1993-03-05 3
-1993-03-06 3
-1993-03-07 3
-1993-03-08 3
-1993-03-09 3
-1993-03-10 3
-1993-03-11 3
-1993-03-12 3
-1993-03-13 3
-1993-03-14 3
-1993-03-15 3
-1993-03-16 3
-1993-03-17 3
-1993-03-18 3
-1993-03-19 3
-1993-03-20 3
-1993-03-21 3
-1993-03-22 3
-1993-03-23 3
-1993-03-24 3
-1993-03-25 3
-1993-03-26 3
-1993-03-27 3
-1993-03-28 3
-1993-03-29 3
-1993-03-30 3
-1993-03-31 3
-1993-04-01 4
-1993-04-02 4
-1993-04-03 4
-1993-04-04 4
-1993-04-05 4
-1993-04-06 4
-1993-04-07 4
-1993-04-08 4
-1993-04-09 4
-1993-04-10 4
-1993-04-11 4
-1993-04-12 4
-1993-04-13 4
-1993-04-14 4
-1993-04-15 4
-1993-04-16 4
-1993-04-17 4
-1993-04-18 4
-1993-04-19 4
-1993-04-20 4
-1993-04-21 4
-1993-04-22 4
-1993-04-23 4
-1993-04-24 4
-1993-04-25 4
-1993-04-26 4
-1993-04-27 4
-1993-04-28 4
-1993-04-29 4
-1993-04-30 4
-1993-05-01 5
-1993-05-02 5
-1993-05-03 5
-1993-05-04 5
-1993-05-05 5
-1993-05-06 5
-1993-05-07 5
-1993-05-08 5
-1993-05-09 5
-1993-05-10 5
-1993-05-11 5
-1993-05-12 5
-1993-05-13 5
-1993-05-14 5
-1993-05-15 5
-1993-05-16 5
-1993-05-17 5
-1993-05-18 5
-1993-05-19 5
-1993-05-20 5
-1993-05-21 5
-1993-05-22 5
-1993-05-23 5
-1993-05-24 5
-1993-05-25 5
-1993-05-26 5
-1993-05-27 5
-1993-05-28 5
-1993-05-29 5
-1993-05-30 5
-1993-05-31 5
-1993-06-01 6
-1993-06-02 6
-1993-06-03 6
-1993-06-04 6
-1993-06-05 6
-1993-06-06 6
-1993-06-07 6
-1993-06-08 6
-1993-06-09 6
-1993-06-10 6
-1993-06-11 6
-1993-06-12 6
-1993-06-13 6
-1993-06-14 6
-1993-06-15 6
-1993-06-16 6
-1993-06-17 6
-1993-06-18 6
-1993-06-19 6
-1993-06-20 6
-1993-06-21 6
-1993-06-22 6
-1993-06-23 6
-1993-06-24 6
-1993-06-25 6
-1993-06-26 6
-1993-06-27 6
-1993-06-28 6
-1993-06-29 6
-1993-06-30 6
-1993-07-01 7
-1993-07-02 7
-1993-07-03 7
-1993-07-04 7
-1993-07-05 7
-1993-07-06 7
-1993-07-07 7
-1993-07-08 7
-1993-07-09 7
-1993-07-10 7
-1993-07-11 7
-1993-07-12 7
-1993-07-13 7
-1993-07-14 7
-1993-07-15 7
-1993-07-16 7
-1993-07-17 7
-1993-07-18 7
-1993-07-19 7
-1993-07-20 7
-1993-07-21 7
-1993-07-22 7
-1993-07-23 7
-1993-07-24 7
-1993-07-25 7
-1993-07-26 7
-1993-07-27 7
-1993-07-28 7
-1993-07-29 7
-1993-07-30 7
-1993-07-31 7
-1993-08-01 8
-1993-08-02 8
-1993-08-03 8
-1993-08-04 8
-1993-08-05 8
-1993-08-06 8
-1993-08-07 8
-1993-08-08 8
-1993-08-09 8
-1993-08-10 8
-1993-08-11 8
-1993-08-12 8
-1993-08-13 8
-1993-08-14 8
-1993-08-15 8
-1993-08-16 8
-1993-08-17 8
-1993-08-18 8
-1993-08-19 8
-1993-08-20 8
-1993-08-21 8
-1993-08-22 8
-1993-08-23 8
-1993-08-24 8
-1993-08-25 8
-1993-08-26 8
-1993-08-27 8
-1993-08-28 8
-1993-08-29 8
-1993-08-30 8
-1993-08-31 8
-1993-09-01 9
-1993-09-02 9
-1993-09-03 9
-1993-09-04 9
-1993-09-05 9
-1993-09-06 9
-1993-09-07 9
-1993-09-08 9
-1993-09-09 9
-1993-09-10 9
-1993-09-11 9
-1993-09-12 9
-1993-09-13 9
-1993-09-14 9
-1993-09-15 9
-1993-09-16 9
-1993-09-17 9
-1993-09-18 9
-1993-09-19 9
-1993-09-20 9
-1993-09-21 9
-1993-09-22 9
-1993-09-23 9
-1993-09-24 9
-1993-09-25 9
-1993-09-26 9
-1993-09-27 9
-1993-09-28 9
-1993-09-29 9
-1993-09-30 9
-1993-10-01 10
-1993-10-02 10
-1993-10-03 10
-1993-10-04 10
-1993-10-05 10
-1993-10-06 10
-1993-10-07 10
-1993-10-08 10
-1993-10-09 10
-1993-10-10 10
-1993-10-11 10
-1993-10-12 10
-1993-10-13 10
-1993-10-14 10
-1993-10-15 10
-1993-10-16 10
-1993-10-17 10
-1993-10-18 10
-1993-10-19 10
-1993-10-20 10
-1993-10-21 10
-1993-10-22 10
-1993-10-23 10
-1993-10-24 10
-1993-10-25 10
-1993-10-26 10
-1993-10-27 10
-1993-10-28 10
-1993-10-29 10
-1993-10-30 10
-1993-10-31 10
-1993-11-01 11
-1993-11-02 11
-1993-11-03 11
-1993-11-04 11
-1993-11-05 11
-1993-11-06 11
-1993-11-07 11
-1993-11-08 11
-1993-11-09 11
-1993-11-10 11
-1993-11-11 11
-1993-11-12 11
-1993-11-13 11
-1993-11-14 11
-1993-11-15 11
-1993-11-16 11
-1993-11-17 11
-1993-11-18 11
-1993-11-19 11
-1993-11-20 11
-1993-11-21 11
-1993-11-22 11
-1993-11-23 11
-1993-11-24 11
-1993-11-25 11
-1993-11-26 11
-1993-11-27 11
-1993-11-28 11
-1993-11-29 11
-1993-11-30 11
-1993-12-01 12
-1993-12-02 12
-1993-12-03 12
-1993-12-04 12
-1993-12-05 12
-1993-12-06 12
-1993-12-07 12
-1993-12-08 12
-1993-12-09 12
-1993-12-10 12
-1993-12-11 12
-1993-12-12 12
-1993-12-13 12
-1993-12-14 12
-1993-12-15 12
-1993-12-16 12
-1993-12-17 12
-1993-12-18 12
-1993-12-19 12
-1993-12-20 12
-1993-12-21 12
-1993-12-22 12
-1993-12-23 12
-1993-12-24 12
-1993-12-25 12
-1993-12-26 12
-1993-12-27 12
-1993-12-28 12
-1993-12-29 12
-1993-12-30 12
-1993-12-31 12
+
+query II
+select date '1993-01-01' + interval '365' days, month(date '1993-01-01' +
interval '365' days);
+----
1994-01-01 1
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/function/date/test_extract_year.test
b/modules/sql-engine/src/integrationTest/sql/group1/function/date/test_extract_year.test
index 40bc3633e80..fff4977a68b 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/function/date/test_extract_year.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/function/date/test_extract_year.test
@@ -2,652 +2,12 @@
# description: Extract year function
# group: [date]
-statement ok
-CREATE TABLE dates (d DATE);
-
-statement ok
-CREATE TABLE dates2 (d DATE);
-
-statement ok
-INSERT INTO dates SELECT date '1970-01-01' + INTERVAL(x) years AS d from
table(system_range(0, 429));
-
-statement ok
-INSERT INTO dates2 SELECT date '1970-01-01' + INTERVAL(x * 6) months AS d from
table(system_range(0, 199));
-
query I
-SELECT EXTRACT(year FROM d) FROM dates ORDER BY 1
+SELECT EXTRACT(year FROM (date '1970-01-01'));
----
1970
-1971
-1972
-1973
-1974
-1975
-1976
-1977
-1978
-1979
-1980
-1981
-1982
-1983
-1984
-1985
-1986
-1987
-1988
-1989
-1990
-1991
-1992
-1993
-1994
-1995
-1996
-1997
-1998
-1999
-2000
-2001
-2002
-2003
-2004
-2005
-2006
-2007
-2008
-2009
-2010
-2011
-2012
-2013
-2014
-2015
-2016
-2017
-2018
-2019
-2020
-2021
-2022
-2023
-2024
-2025
-2026
-2027
-2028
-2029
-2030
-2031
-2032
-2033
-2034
-2035
-2036
-2037
-2038
-2039
-2040
-2041
-2042
-2043
-2044
-2045
-2046
-2047
-2048
-2049
-2050
-2051
-2052
-2053
-2054
-2055
-2056
-2057
-2058
-2059
-2060
-2061
-2062
-2063
-2064
-2065
-2066
-2067
-2068
-2069
-2070
-2071
-2072
-2073
-2074
-2075
-2076
-2077
-2078
-2079
-2080
-2081
-2082
-2083
-2084
-2085
-2086
-2087
-2088
-2089
-2090
-2091
-2092
-2093
-2094
-2095
-2096
-2097
-2098
-2099
-2100
-2101
-2102
-2103
-2104
-2105
-2106
-2107
-2108
-2109
-2110
-2111
-2112
-2113
-2114
-2115
-2116
-2117
-2118
-2119
-2120
-2121
-2122
-2123
-2124
-2125
-2126
-2127
-2128
-2129
-2130
-2131
-2132
-2133
-2134
-2135
-2136
-2137
-2138
-2139
-2140
-2141
-2142
-2143
-2144
-2145
-2146
-2147
-2148
-2149
-2150
-2151
-2152
-2153
-2154
-2155
-2156
-2157
-2158
-2159
-2160
-2161
-2162
-2163
-2164
-2165
-2166
-2167
-2168
-2169
-2170
-2171
-2172
-2173
-2174
-2175
-2176
-2177
-2178
-2179
-2180
-2181
-2182
-2183
-2184
-2185
-2186
-2187
-2188
-2189
-2190
-2191
-2192
-2193
-2194
-2195
-2196
-2197
-2198
-2199
-2200
-2201
-2202
-2203
-2204
-2205
-2206
-2207
-2208
-2209
-2210
-2211
-2212
-2213
-2214
-2215
-2216
-2217
-2218
-2219
-2220
-2221
-2222
-2223
-2224
-2225
-2226
-2227
-2228
-2229
-2230
-2231
-2232
-2233
-2234
-2235
-2236
-2237
-2238
-2239
-2240
-2241
-2242
-2243
-2244
-2245
-2246
-2247
-2248
-2249
-2250
-2251
-2252
-2253
-2254
-2255
-2256
-2257
-2258
-2259
-2260
-2261
-2262
-2263
-2264
-2265
-2266
-2267
-2268
-2269
-2270
-2271
-2272
-2273
-2274
-2275
-2276
-2277
-2278
-2279
-2280
-2281
-2282
-2283
-2284
-2285
-2286
-2287
-2288
-2289
-2290
-2291
-2292
-2293
-2294
-2295
-2296
-2297
-2298
-2299
-2300
-2301
-2302
-2303
-2304
-2305
-2306
-2307
-2308
-2309
-2310
-2311
-2312
-2313
-2314
-2315
-2316
-2317
-2318
-2319
-2320
-2321
-2322
-2323
-2324
-2325
-2326
-2327
-2328
-2329
-2330
-2331
-2332
-2333
-2334
-2335
-2336
-2337
-2338
-2339
-2340
-2341
-2342
-2343
-2344
-2345
-2346
-2347
-2348
-2349
-2350
-2351
-2352
-2353
-2354
-2355
-2356
-2357
-2358
-2359
-2360
-2361
-2362
-2363
-2364
-2365
-2366
-2367
-2368
-2369
-2370
-2371
-2372
-2373
-2374
-2375
-2376
-2377
-2378
-2379
-2380
-2381
-2382
-2383
-2384
-2385
-2386
-2387
-2388
-2389
-2390
-2391
-2392
-2393
-2394
-2395
-2396
-2397
-2398
-2399
query I
-SELECT EXTRACT(year FROM d) FROM dates2 ORDER BY 1
+SELECT EXTRACT(year FROM (date '1970-01-01' + INTERVAL '5' years));
----
-1970
-1970
-1971
-1971
-1972
-1972
-1973
-1973
-1974
-1974
-1975
1975
-1976
-1976
-1977
-1977
-1978
-1978
-1979
-1979
-1980
-1980
-1981
-1981
-1982
-1982
-1983
-1983
-1984
-1984
-1985
-1985
-1986
-1986
-1987
-1987
-1988
-1988
-1989
-1989
-1990
-1990
-1991
-1991
-1992
-1992
-1993
-1993
-1994
-1994
-1995
-1995
-1996
-1996
-1997
-1997
-1998
-1998
-1999
-1999
-2000
-2000
-2001
-2001
-2002
-2002
-2003
-2003
-2004
-2004
-2005
-2005
-2006
-2006
-2007
-2007
-2008
-2008
-2009
-2009
-2010
-2010
-2011
-2011
-2012
-2012
-2013
-2013
-2014
-2014
-2015
-2015
-2016
-2016
-2017
-2017
-2018
-2018
-2019
-2019
-2020
-2020
-2021
-2021
-2022
-2022
-2023
-2023
-2024
-2024
-2025
-2025
-2026
-2026
-2027
-2027
-2028
-2028
-2029
-2029
-2030
-2030
-2031
-2031
-2032
-2032
-2033
-2033
-2034
-2034
-2035
-2035
-2036
-2036
-2037
-2037
-2038
-2038
-2039
-2039
-2040
-2040
-2041
-2041
-2042
-2042
-2043
-2043
-2044
-2044
-2045
-2045
-2046
-2046
-2047
-2047
-2048
-2048
-2049
-2049
-2050
-2050
-2051
-2051
-2052
-2052
-2053
-2053
-2054
-2054
-2055
-2055
-2056
-2056
-2057
-2057
-2058
-2058
-2059
-2059
-2060
-2060
-2061
-2061
-2062
-2062
-2063
-2063
-2064
-2064
-2065
-2065
-2066
-2066
-2067
-2067
-2068
-2068
-2069
-2069
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_in_list_of_single_element.test
b/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_in_list_of_single_element.test
index 7526b10bc76..9c481b2504b 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_in_list_of_single_element.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_in_list_of_single_element.test
@@ -84,7 +84,7 @@ false
NULL
query T rowsort
-SELECT d IN (d + INTERVAL 1 DAYS) FROM test
+SELECT d IN (d + INTERVAL '1' DAYS) FROM test
----
false
false
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/types/date/test_incorrect_dates.test
b/modules/sql-engine/src/integrationTest/sql/group1/types/date/test_incorrect_dates.test
index df927b9a9c2..72c7fbc24a4 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/types/date/test_incorrect_dates.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/types/date/test_incorrect_dates.test
@@ -105,10 +105,10 @@ INSERT INTO dates VALUES (CAST('9999-99-99' AS DATE
FORMAT 'YYYY-MM-DD'))
# The value is less than the minimum allowed
statement error: DATE out of range
-INSERT INTO dates VALUES (DATE '0001-01-01' - INTERVAL 1 DAYS)
+INSERT INTO dates VALUES (DATE '0001-01-01' - INTERVAL '1' DAYS)
statement error: DATE out of range
-INSERT INTO dates VALUES ('0001-01-01'::DATE - INTERVAL 1 DAYS)
+INSERT INTO dates VALUES ('0001-01-01'::DATE - INTERVAL '1' DAYS)
statement error: Invalid default value for column 'D'
CREATE TABLE default_overflow(d DATE DEFAULT '0000-01-01');
@@ -121,10 +121,10 @@ CREATE TABLE default_overflow(d DATE DEFAULT
'0001-01-00');
# THe value is greater than the maximum allowed
statement error: DATE out of range
-INSERT INTO dates VALUES (DATE '9999-12-31' + INTERVAL 1 DAYS)
+INSERT INTO dates VALUES (DATE '9999-12-31' + INTERVAL '1' DAYS)
statement error: DATE out of range
-INSERT INTO dates VALUES ('9999-12-31'::DATE + INTERVAL 1 DAYS)
+INSERT INTO dates VALUES ('9999-12-31'::DATE + INTERVAL '1' DAYS)
statement error: DATE out of range
INSERT INTO dates VALUES (DATE_FROM_UNIX_DATE(2932896 + 1))
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/types/interval/interval_constants.test
b/modules/sql-engine/src/integrationTest/sql/group1/types/interval/interval_constants.test
index d1ef6c70dd6..57bc412e59c 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/types/interval/interval_constants.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/types/interval/interval_constants.test
@@ -7,73 +7,63 @@ PRAGMA enable_verification
# interval constants with different representations
query I
-SELECT interval 2 days;
-----
-PT48H
-
-query T
-SELECT interval (2) day;
-----
-PT48H
-
-query T
-SELECT interval (1+1) days;
-----
-PT48H
-
-query T
SELECT interval '2' days;
----
PT48H
query TTTTTT
-SELECT interval 2 years, interval 2 months, interval 2 days, interval 2 hours,
interval 2 minutes, interval 2 seconds;
+SELECT interval '2' years, interval '2' months, interval '2' days, interval
'2' hours, interval '2' minutes, interval '2' seconds;
----
P2Y P2M PT48H PT2H PT2M PT2S
+# Non-literal interval
+statement error: Failed to validate query.
+SELECT interval ('2') days;
+
+statement error: Expression is not supported: String literal expected
+SELECT interval 2 days;
+
+statement error: Failed to validate query.
+SELECT interval ('1+1') days;
+
+statement error: Expression is not supported: String literal expected
+SELECT interval (1+1) days;
+
# non-constant expression
-query T
+statement error: Expression is not supported: String literal expected
SELECT interval (x) day from table(system_range(1, 3));
-----
-PT24H
-PT48H
-PT72H
-query T
+statement error: Expression is not supported: String literal expected
SELECT interval (x + 1) day from table(system_range(1, 3));
-----
-PT48H
-PT72H
-PT96H
# try all the different types
query TT
-SELECT interval 2 years, interval 2 year;
+SELECT interval '2' years, interval '2' year;
----
P2Y P2Y
query TT
-SELECT interval 2 months, interval 2 month;
+SELECT interval '2' months, interval '2' month;
----
P2M P2M
query TT
-SELECT interval 2 days, interval 2 day;
+SELECT interval '2' days, interval '2' day;
----
PT48H PT48H
query TT
-SELECT interval 2 hours, interval 2 hour;
+SELECT interval '2' hours, interval '2' hour;
----
PT2H PT2H
query TT
-SELECT interval 2 minutes, interval 2 minute;
+SELECT interval '2' minutes, interval '2' minute;
----
PT2M PT2M
query TT
-SELECT interval 2 seconds, interval 2 second;
+SELECT interval '2' seconds, interval '2' second;
----
PT2S PT2S
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/types/timestamp/test_incorrect_timestamp.test
b/modules/sql-engine/src/integrationTest/sql/group1/types/timestamp/test_incorrect_timestamp.test
index 3f7823f0528..a3710d7cca0 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/types/timestamp/test_incorrect_timestamp.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/types/timestamp/test_incorrect_timestamp.test
@@ -124,7 +124,7 @@ CREATE TABLE default_overflow(ts TIMESTAMP DEFAULT
'10002-01-01 00:00:00');
# The value is less than the minimum allowed
statement error: TIMESTAMP out of range
-INSERT INTO timestamp_t VALUES (TIMESTAMP '0001-01-01 18:00:00' - INTERVAL 1
SECONDS)
+INSERT INTO timestamp_t VALUES (TIMESTAMP '0001-01-01 18:00:00' - INTERVAL '1'
SECONDS)
statement error: TIMESTAMP out of range
INSERT INTO timestamp_t VALUES TIMESTAMPADD(SECOND, -1, TIMESTAMP '0001-01-01
18:00:00')
@@ -139,11 +139,11 @@ statement error: Invalid default value for column 'TS'
CREATE TABLE default_overflow(ts TIMESTAMP DEFAULT '0001-01-01
17:59:59.999999999');
statement error: TIMESTAMP out of range
-INSERT INTO timestamp_t VALUES (LOCALTIMESTAMP - INTERVAL 7999 YEARS)
+INSERT INTO timestamp_t VALUES (LOCALTIMESTAMP - INTERVAL '7999' YEARS)
# The value is greater than the maximum allowed
statement error: TIMESTAMP out of range
-INSERT INTO timestamp_t VALUES (TIMESTAMP '9999-12-31 05:59:59' + INTERVAL 1
SECONDS)
+INSERT INTO timestamp_t VALUES (TIMESTAMP '9999-12-31 05:59:59' + INTERVAL '1'
SECONDS)
statement error: TIMESTAMP out of range
INSERT INTO timestamp_t VALUES TIMESTAMPADD(SECOND, 1, TIMESTAMP '9999-12-31
05:59:59')
@@ -158,19 +158,19 @@ statement error: Invalid default value for column 'TS'
CREATE TABLE default_overflow(ts TIMESTAMP DEFAULT '9999-12-31 06:00:00');
statement error: TIMESTAMP out of range
-INSERT INTO timestamp_t VALUES (TIMESTAMP '2000-01-01 00:00:00' + INTERVAL
2922000 DAYS)
+INSERT INTO timestamp_t VALUES (TIMESTAMP '2000-01-01 00:00:00' + INTERVAL
'2922000' DAYS)
statement error: TIMESTAMP out of range
-INSERT INTO timestamp_t VALUES (TIMESTAMP '2000-01-01 00:00:00' - INTERVAL
730500 DAYS)
+INSERT INTO timestamp_t VALUES (TIMESTAMP '2000-01-01 00:00:00' - INTERVAL
'730500' DAYS)
statement error: TIMESTAMP out of range
-INSERT INTO timestamp_t VALUES (TIMESTAMP '2000-01-01 00:00:00' + INTERVAL
70128000 HOURS)
+INSERT INTO timestamp_t VALUES (TIMESTAMP '2000-01-01 00:00:00' + INTERVAL
'70128000' HOURS)
statement error: TIMESTAMP out of range
-INSERT INTO timestamp_t VALUES (TIMESTAMP '2000-01-01 00:00:00' - INTERVAL
17532000 HOURS)
+INSERT INTO timestamp_t VALUES (TIMESTAMP '2000-01-01 00:00:00' - INTERVAL
'17532000' HOURS)
statement error: TIMESTAMP out of range
-INSERT INTO timestamp_t VALUES (LOCALTIMESTAMP + INTERVAL 7999 YEARS)
+INSERT INTO timestamp_t VALUES (LOCALTIMESTAMP + INTERVAL '7999' YEARS)
statement error: TIMESTAMP out of range
-INSERT INTO timestamp_t VALUES (LOCALTIMESTAMP - INTERVAL 7999 YEARS)
+INSERT INTO timestamp_t VALUES (LOCALTIMESTAMP - INTERVAL '7999' YEARS)
diff --git
a/modules/sql-engine/src/integrationTest/sql/group1/types/timestamp/test_incorrect_timestamp_ltz.test
b/modules/sql-engine/src/integrationTest/sql/group1/types/timestamp/test_incorrect_timestamp_ltz.test
index f6cc4b7a2e7..f08569af69a 100644
---
a/modules/sql-engine/src/integrationTest/sql/group1/types/timestamp/test_incorrect_timestamp_ltz.test
+++
b/modules/sql-engine/src/integrationTest/sql/group1/types/timestamp/test_incorrect_timestamp_ltz.test
@@ -118,7 +118,7 @@ PRAGMA time_zone=UTC
# The value is less than the minimum allowed
statement error: TIMESTAMP_WITH_LOCAL_TIME_ZONE out of range
-INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '0001-01-01
18:00:00' - INTERVAL 1 SECONDS)
+INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '0001-01-01
18:00:00' - INTERVAL '1' SECONDS)
statement error: TIMESTAMP_WITH_LOCAL_TIME_ZONE out of range
INSERT INTO timestamp_t VALUES TIMESTAMPADD(SECOND, -1, TIMESTAMP WITH LOCAL
TIME ZONE '0001-01-01 18:00:00')
@@ -135,11 +135,11 @@ statement error: Invalid default value for column 'TS'
CREATE TABLE default_overflow(ts TIMESTAMP WITH LOCAL TIME ZONE DEFAULT
'0001-01-01 17:59:59.999999999');
statement error: TIMESTAMP_WITH_LOCAL_TIME_ZONE out of range
-INSERT INTO timestamp_t VALUES (CURRENT_TIMESTAMP - INTERVAL 7999 YEARS)
+INSERT INTO timestamp_t VALUES (CURRENT_TIMESTAMP - INTERVAL '7999' YEARS)
# The value is greater than the maximum allowed
statement error: TIMESTAMP_WITH_LOCAL_TIME_ZONE out of range
-INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '9999-12-31
05:59:59' + INTERVAL 1 SECONDS)
+INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '9999-12-31
05:59:59' + INTERVAL '1' SECONDS)
statement error: TIMESTAMP_WITH_LOCAL_TIME_ZONE out of range
INSERT INTO timestamp_t VALUES TIMESTAMPADD(SECOND, 1, TIMESTAMP WITH LOCAL
TIME ZONE '9999-12-31 05:59:59')
@@ -151,16 +151,16 @@ statement error: TIMESTAMP_WITH_LOCAL_TIME_ZONE out of
range
INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '9999-12-31
06:00:00')
statement error: TIMESTAMP_WITH_LOCAL_TIME_ZONE out of range
-INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '2000-01-01
00:00:00' + INTERVAL 2922000 DAYS)
+INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '2000-01-01
00:00:00' + INTERVAL '2922000' DAYS)
statement error: TIMESTAMP_WITH_LOCAL_TIME_ZONE out of range
-INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '2000-01-01
00:00:00' - INTERVAL 730500 DAYS)
+INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '2000-01-01
00:00:00' - INTERVAL '730500' DAYS)
statement error: TIMESTAMP_WITH_LOCAL_TIME_ZONE out of range
-INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '2000-01-01
00:00:00' + INTERVAL 70128000 HOURS)
+INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '2000-01-01
00:00:00' + INTERVAL '70128000' HOURS)
statement error: TIMESTAMP_WITH_LOCAL_TIME_ZONE out of range
-INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '2000-01-01
00:00:00' - INTERVAL 17532000 HOURS)
+INSERT INTO timestamp_t VALUES (TIMESTAMP WITH LOCAL TIME ZONE '2000-01-01
00:00:00' - INTERVAL '17532000' HOURS)
# TODO https://issues.apache.org/jira/browse/IGNITE-17376
skipif ignite3
@@ -168,7 +168,7 @@ statement error: Invalid default value for column 'TS'
CREATE TABLE default_overflow(ts TIMESTAMP WITH LOCAL TIME ZONE DEFAULT
'9999-12-31 06:00:00');
statement error: TIMESTAMP_WITH_LOCAL_TIME_ZONE out of range
-INSERT INTO timestamp_t VALUES (CURRENT_TIMESTAMP + INTERVAL 7999 YEARS)
+INSERT INTO timestamp_t VALUES (CURRENT_TIMESTAMP + INTERVAL '7999' YEARS)
statement error: TIMESTAMP_WITH_LOCAL_TIME_ZONE out of range
-INSERT INTO timestamp_t VALUES (CURRENT_TIMESTAMP - INTERVAL 7999 YEARS)
+INSERT INTO timestamp_t VALUES (CURRENT_TIMESTAMP - INTERVAL '7999' YEARS)
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java
index a8129cb425b..68db7dbccb8 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java
@@ -64,12 +64,14 @@ import org.apache.calcite.sql.SqlBasicCall;
import org.apache.calcite.sql.SqlBasicTypeNameSpec;
import org.apache.calcite.sql.SqlCall;
import org.apache.calcite.sql.SqlCallBinding;
+import org.apache.calcite.sql.SqlCharStringLiteral;
import org.apache.calcite.sql.SqlDataTypeSpec;
import org.apache.calcite.sql.SqlDelete;
import org.apache.calcite.sql.SqlDynamicParam;
import org.apache.calcite.sql.SqlFunction;
import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.SqlInsert;
+import org.apache.calcite.sql.SqlIntervalLiteral;
import org.apache.calcite.sql.SqlJoin;
import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.SqlLiteral;
@@ -1419,6 +1421,13 @@ public class IgniteSqlValidator extends SqlValidatorImpl
{
}
try {
+ if (call.getKind() == SqlKind.INTERVAL) {
+ assert !(call.operand(0) instanceof SqlCharStringLiteral)
+ && !(call.operand(0) instanceof SqlIntervalLiteral)
+ : "Should never got here in case of interval literal";
+
+ throw newValidationError(call,
IgniteResource.INSTANCE.unsupportedExpression("String literal expected"));
+ }
super.validateCall(call, scope);
checkCallsWithCustomTypes(call, scope);
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rex/IgniteRexBuilder.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rex/IgniteRexBuilder.java
index c73c42a758c..abc6c611815 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rex/IgniteRexBuilder.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rex/IgniteRexBuilder.java
@@ -17,13 +17,18 @@
package org.apache.ignite.internal.sql.engine.rex;
+import java.math.BigDecimal;
import java.util.UUID;
import org.apache.calcite.avatica.util.ByteString;
+import org.apache.calcite.avatica.util.TimeUnit;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rel.type.RelDataTypeFactory;
import org.apache.calcite.rex.RexBuilder;
+import org.apache.calcite.rex.RexLiteral;
import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.sql.parser.SqlParserPos;
import org.apache.calcite.sql.type.SqlTypeName;
+import org.apache.calcite.sql.type.SqlTypeUtil;
import org.apache.calcite.util.NlsString;
import org.apache.ignite.internal.sql.engine.type.IgniteCustomType;
import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
@@ -98,4 +103,33 @@ public class IgniteRexBuilder extends RexBuilder {
return super.makeLiteral(value, type, allowCast, trim);
}
+
+ @Override
+ public RexNode makeCast(
+ SqlParserPos pos,
+ RelDataType type,
+ RexNode exp,
+ boolean matchNullability,
+ boolean safe,
+ RexLiteral format) {
+ if (exp instanceof RexLiteral) {
+ // Override cast for DECIMAL from INTERVAL literal, to be
consistent with INTERVAL call behavior
+ if (SqlTypeUtil.isExactNumeric(type) &&
SqlTypeUtil.isInterval(exp.getType())) {
+ return makeCastIntervalToExact(pos, type, exp);
+ }
+ }
+
+ return super.makeCast(pos, type, exp, matchNullability, safe, format);
+ }
+
+ // Copy-pasted from RexBuilder.
+ private RexNode makeCastIntervalToExact(SqlParserPos pos, RelDataType
toType, RexNode exp) {
+ TimeUnit endUnit = exp.getType().getSqlTypeName().getEndUnit();
+ TimeUnit baseUnit = baseUnit(exp.getType().getSqlTypeName());
+ BigDecimal multiplier = baseUnit.multiplier;
+ BigDecimal divider = endUnit.multiplier;
+ RexNode value =
+ multiplyDivide(pos, decodeIntervalOrDecimal(pos, exp),
multiplier, divider);
+ return ensureType(pos, toType, value, false);
+ }
}
diff --git
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/CastResolutionTest.java
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/CastResolutionTest.java
index 34f390bc6cd..01cba2520c2 100644
---
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/CastResolutionTest.java
+++
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/CastResolutionTest.java
@@ -305,7 +305,7 @@ public class CastResolutionTest extends AbstractPlannerTest
{
private static String makeUsableIntervalFromType(String typeName) {
if (typeName.toLowerCase().contains("interval")) {
- return typeName.replace("_", " 1 ");
+ return typeName.replace("_", " '1' ");
}
return makeSpaceName(typeName);
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query12.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query12.sql
index 29e33f91f3c..afb91aed9ce 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query12.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query12.sql
@@ -16,7 +16,7 @@ where
and i_category in ('Electronics', 'Books', 'Women')
and ws_sold_date_sk = d_date_sk
and d_date between cast('1998-01-06' as date)
- and (cast('1998-01-06' as date) + interval 30
days)
+ and (cast('1998-01-06' as date) + interval '30'
days)
group by
i_item_id
,i_item_desc
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query16.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query16.sql
index 32cf8040442..e6a99390d46 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query16.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query16.sql
@@ -10,7 +10,7 @@ from
,call_center
where
d_date between '1999-4-01' and
- (cast('1999-4-01' as date) + interval 60 days)
+ (cast('1999-4-01' as date) + interval '60' days)
and cs1.cs_ship_date_sk = d_date_sk
and cs1.cs_ship_addr_sk = ca_address_sk
and ca_state = 'IL'
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query20.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query20.sql
index a7b19020705..473cac004e4 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query20.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query20.sql
@@ -14,7 +14,7 @@ select i_item_id
and i_category in ('Shoes', 'Electronics', 'Children')
and cs_sold_date_sk = d_date_sk
and d_date between cast('2001-03-14' as date)
- and (cast('2001-03-14' as date) + interval 30
days)
+ and (cast('2001-03-14' as date) + interval '30'
days)
group by i_item_id
,i_item_desc
,i_category
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query21.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query21.sql
index 02a461fd0e1..d01f4c0febc 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query21.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query21.sql
@@ -16,8 +16,8 @@ select *
and i_item_sk = inv_item_sk
and inv_warehouse_sk = w_warehouse_sk
and inv_date_sk = d_date_sk
- and d_date between (cast ('1999-03-20' as date) - interval 30 days)
- and (cast ('1999-03-20' as date) + interval 30 days)
+ and d_date between (cast ('1999-03-20' as date) - interval '30' days)
+ and (cast ('1999-03-20' as date) + interval '30' days)
group by w_warehouse_name, i_item_id) x
where (case when inv_before > 0
then inv_after / inv_before
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query32.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query32.sql
index 5e997a5b264..08ff590a5c8 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query32.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query32.sql
@@ -8,7 +8,7 @@ where
i_manufact_id = 66
and i_item_sk = cs_item_sk
and d_date between '2002-03-29' and
- (cast('2002-03-29' as date) + interval 90 days)
+ (cast('2002-03-29' as date) + interval '90' days)
and d_date_sk = cs_sold_date_sk
and cs_ext_discount_amt
> (
@@ -20,7 +20,7 @@ and cs_ext_discount_amt
where
cs_item_sk = i_item_sk
and d_date between '2002-03-29' and
- (cast('2002-03-29' as date) + interval 90 days)
+ (cast('2002-03-29' as date) + interval '90' days)
and d_date_sk = cs_sold_date_sk
)
limit 100;
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query37.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query37.sql
index 18ce2e8d003..6b152d74035 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query37.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query37.sql
@@ -6,7 +6,7 @@ select i_item_id
where i_current_price between 39 and 39 + 30
and inv_item_sk = i_item_sk
and d_date_sk=inv_date_sk
- and d_date between cast('2001-01-16' as date) and (cast('2001-01-16' as date)
+ interval 60 days)
+ and d_date between cast('2001-01-16' as date) and (cast('2001-01-16' as date)
+ interval '60' days)
and i_manufact_id in (765,886,889,728)
and inv_quantity_on_hand between 100 and 500
and cs_item_sk = i_item_sk
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query40.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query40.sql
index cfc2d43ffe0..3fa4c99dabe 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query40.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query40.sql
@@ -18,8 +18,8 @@ select
and i_item_sk = cs_item_sk
and cs_warehouse_sk = w_warehouse_sk
and cs_sold_date_sk = d_date_sk
- and d_date between (cast ('2000-03-18' as date) - interval 30 days)
- and (cast ('2000-03-18' as date) + interval 30 days)
+ and d_date between (cast ('2000-03-18' as date) - interval '30' days)
+ and (cast ('2000-03-18' as date) + interval '30' days)
group by
w_state,i_item_id
order by w_state,i_item_id
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query5.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query5.sql
index 994b211326b..9a0be7df453 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query5.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query5.sql
@@ -26,7 +26,7 @@ with ssr as
store
where date_sk = d_date_sk
and d_date between cast('2000-08-19' as date)
- and (cast('2000-08-19' as date) + interval 14 days)
+ and (cast('2000-08-19' as date) + interval '14' days)
and store_sk = s_store_sk
group by s_store_id)
,
@@ -57,7 +57,7 @@ with ssr as
catalog_page
where date_sk = d_date_sk
and d_date between cast('2000-08-19' as date)
- and (cast('2000-08-19' as date) + interval 14 days)
+ and (cast('2000-08-19' as date) + interval '14' days)
and page_sk = cp_catalog_page_sk
group by cp_catalog_page_id)
,
@@ -90,7 +90,7 @@ with ssr as
web_site
where date_sk = d_date_sk
and d_date between cast('2000-08-19' as date)
- and (cast('2000-08-19' as date) + interval 14 days)
+ and (cast('2000-08-19' as date) + interval '14' days)
and wsr_web_site_sk = web_site_sk
group by web_site_id)
select channel
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query72.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query72.sql
index 85db71ca1ef..2599c7dc679 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query72.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query72.sql
@@ -18,7 +18,7 @@ left outer join promotion on (cs_promo_sk=p_promo_sk)
left outer join catalog_returns on (cr_item_sk = cs_item_sk and
cr_order_number = cs_order_number)
where d1.d_week_seq = d2.d_week_seq
and inv_quantity_on_hand < cs_quantity
- and d3.d_date > d1.d_date + INTERVAL(5) DAY
+ and d3.d_date > d1.d_date + INTERVAL '5' DAY
and hd_buy_potential = '1001-5000'
and d1.d_year = 2000
and cd_marital_status = 'D'
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query77.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query77.sql
index 3762ac4af5a..3616ecf1ea6 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query77.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query77.sql
@@ -8,7 +8,7 @@ with ss as
store
where ss_sold_date_sk = d_date_sk
and d_date between cast('2000-08-16' as date)
- and (cast('2000-08-16' as date) + interval 30 days)
+ and (cast('2000-08-16' as date) + interval '30' days)
and ss_store_sk = s_store_sk
group by s_store_sk)
,
@@ -21,7 +21,7 @@ with ss as
store
where sr_returned_date_sk = d_date_sk
and d_date between cast('2000-08-16' as date)
- and (cast('2000-08-16' as date) + interval 30 days)
+ and (cast('2000-08-16' as date) + interval '30' days)
and sr_store_sk = s_store_sk
group by s_store_sk),
cs as
@@ -32,7 +32,7 @@ with ss as
date_dim
where cs_sold_date_sk = d_date_sk
and d_date between cast('2000-08-16' as date)
- and (cast('2000-08-16' as date) + interval 30 days)
+ and (cast('2000-08-16' as date) + interval '30' days)
group by cs_call_center_sk
),
cr as
@@ -43,7 +43,7 @@ with ss as
date_dim
where cr_returned_date_sk = d_date_sk
and d_date between cast('2000-08-16' as date)
- and (cast('2000-08-16' as date) + interval 30 days)
+ and (cast('2000-08-16' as date) + interval '30' days)
group by cr_call_center_sk
),
ws as
@@ -55,7 +55,7 @@ with ss as
web_page
where ws_sold_date_sk = d_date_sk
and d_date between cast('2000-08-16' as date)
- and (cast('2000-08-16' as date) + interval 30 days)
+ and (cast('2000-08-16' as date) + interval '30' days)
and ws_web_page_sk = wp_web_page_sk
group by wp_web_page_sk),
wr as
@@ -67,7 +67,7 @@ with ss as
web_page
where wr_returned_date_sk = d_date_sk
and d_date between cast('2000-08-16' as date)
- and (cast('2000-08-16' as date) + interval 30 days)
+ and (cast('2000-08-16' as date) + interval '30' days)
and wr_web_page_sk = wp_web_page_sk
group by wp_web_page_sk)
select channel
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query80.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query80.sql
index 154350c1c6c..6378d6f4f71 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query80.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query80.sql
@@ -12,7 +12,7 @@ with ssr as
promotion
where ss_sold_date_sk = d_date_sk
and d_date between cast('2002-08-06' as date)
- and (cast('2002-08-06' as date) + interval 30 days)
+ and (cast('2002-08-06' as date) + interval '30' days)
and ss_store_sk = s_store_sk
and ss_item_sk = i_item_sk
and i_current_price > 50
@@ -33,7 +33,7 @@ with ssr as
promotion
where cs_sold_date_sk = d_date_sk
and d_date between cast('2002-08-06' as date)
- and (cast('2002-08-06' as date) + interval 30 days)
+ and (cast('2002-08-06' as date) + interval '30' days)
and cs_catalog_page_sk = cp_catalog_page_sk
and cs_item_sk = i_item_sk
and i_current_price > 50
@@ -54,7 +54,7 @@ group by cp_catalog_page_id)
promotion
where ws_sold_date_sk = d_date_sk
and d_date between cast('2002-08-06' as date)
- and (cast('2002-08-06' as date) + interval 30 days)
+ and (cast('2002-08-06' as date) + interval '30' days)
and ws_web_site_sk = web_site_sk
and ws_item_sk = i_item_sk
and i_current_price > 50
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query82.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query82.sql
index 263bc6fc888..76103bc2e2d 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query82.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query82.sql
@@ -6,7 +6,7 @@ select i_item_id
where i_current_price between 49 and 49+30
and inv_item_sk = i_item_sk
and d_date_sk=inv_date_sk
- and d_date between cast('2001-01-28' as date) and (cast('2001-01-28' as date)
+ interval 60 days)
+ and d_date between cast('2001-01-28' as date) and (cast('2001-01-28' as date)
+ interval '60' days)
and i_manufact_id in (80,675,292,17)
and inv_quantity_on_hand between 100 and 500
and ss_item_sk = i_item_sk
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query92.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query92.sql
index c67af17d75a..7d74e745374 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query92.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query92.sql
@@ -9,7 +9,7 @@ where
i_manufact_id = 356
and i_item_sk = ws_item_sk
and d_date between '2001-03-12' and
- (cast('2001-03-12' as date) + interval 90 days)
+ (cast('2001-03-12' as date) + interval '90' days)
and d_date_sk = ws_sold_date_sk
and ws_ext_discount_amt
> (
@@ -21,7 +21,7 @@ and ws_ext_discount_amt
WHERE
ws_item_sk = i_item_sk
and d_date between '2001-03-12' and
- (cast('2001-03-12' as date) + interval 90 days)
+ (cast('2001-03-12' as date) + interval '90' days)
and d_date_sk = ws_sold_date_sk
)
order by sum(ws_ext_discount_amt)
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query94.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query94.sql
index ad28042276a..7e76882c470 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query94.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query94.sql
@@ -10,7 +10,7 @@ from
,web_site
where
d_date between '1999-4-01' and
- (cast('1999-4-01' as date) + interval 60 days)
+ (cast('1999-4-01' as date) + interval '60' days)
and ws1.ws_ship_date_sk = d_date_sk
and ws1.ws_ship_addr_sk = ca_address_sk
and ca_state = 'NE'
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query95.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query95.sql
index bdc71ee189e..2869de89c5c 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query95.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query95.sql
@@ -15,7 +15,7 @@ from
,web_site
where
d_date between '2002-4-01' and
- (cast('2002-4-01' as date) + interval 60 days)
+ (cast('2002-4-01' as date) + interval '60' days)
and ws1.ws_ship_date_sk = d_date_sk
and ws1.ws_ship_addr_sk = ca_address_sk
and ca_state = 'AL'
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query98.sql
b/modules/sql-engine/src/testFixtures/resources/tpcds/query98.sql
index 4a043f67cf5..8efaf04e709 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query98.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query98.sql
@@ -16,7 +16,7 @@ where
and i_category in ('Home', 'Sports', 'Men')
and ss_sold_date_sk = d_date_sk
and d_date between cast('2002-01-05' as date)
- and (cast('2002-01-05' as date) + interval 30
days)
+ and (cast('2002-01-05' as date) + interval '30'
days)
group by
i_item_id
,i_item_desc