This is an automated email from the ASF dual-hosted git repository.
taoran pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/main by this push:
new cf49f594a3 [CALCITE-6165] Add DATE_ADD test and DATE_DIFF test on
SqlOperatorTest
cf49f594a3 is described below
commit cf49f594a339c32d8bcee5bae06694466391d0b0
Author: caicancai <[email protected]>
AuthorDate: Tue Dec 19 21:57:23 2023 +0800
[CALCITE-6165] Add DATE_ADD test and DATE_DIFF test on SqlOperatorTest
---
.../main/java/org/apache/calcite/sql/SqlKind.java | 2 +-
.../org/apache/calcite/test/SqlOperatorTest.java | 55 ++++++++++++++++++++++
2 files changed, 56 insertions(+), 1 deletion(-)
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlKind.java
b/core/src/main/java/org/apache/calcite/sql/SqlKind.java
index 3b11ac5cec..381531a82b 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlKind.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlKind.java
@@ -442,7 +442,7 @@ public enum SqlKind {
/** {@code LEAST} function (Oracle). */
LEAST,
- /** {@code DATE_DIFF} function (BigQuery Semantics). */
+ /** {@code DATE_ADD} function (BigQuery Semantics). */
DATE_ADD,
/** {@code DATE_TRUNC} function (BigQuery). */
diff --git a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
index 51b19b26cb..f9722692ce 100644
--- a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
+++ b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
@@ -11914,6 +11914,42 @@ public class SqlOperatorTest {
f.checkNull("time_sub(CAST(NULL AS TIME), interval 5 minute)");
}
+ @Test void testDateAdd() {
+ final SqlOperatorFixture f0 = fixture()
+ .setFor(SqlLibraryOperators.DATE_ADD);
+ f0.checkFails("^date_add(date '2008-12-25', "
+ + "interval 5 day)^",
+ "No match found for function signature "
+ + "DATE_ADD\\(<DATE>, <INTERVAL_DAY_TIME>\\)", false);
+
+ final SqlOperatorFixture f = f0.withLibrary(SqlLibrary.BIG_QUERY);
+ f.checkScalar("date_add(date '2016-02-22', interval 2 day)",
+ "2016-02-24",
+ "DATE NOT NULL");
+ f.checkScalar("date_add(date '2016-02-17', interval 1 week)",
+ "2016-02-24",
+ "DATE NOT NULL");
+ f.checkScalar("date_add(date '2016-02-10', interval 2 weeks)",
+ "2016-02-24",
+ "DATE NOT NULL");
+ f.checkScalar("date_add(date '2020-10-17', interval 0 week)",
+ "2020-10-17",
+ "DATE NOT NULL");
+ f.checkScalar("date_add(date '2016-11-24', interval 3 month)",
+ "2017-02-24",
+ "DATE NOT NULL");
+ f.checkScalar("date_add(date '2015-11-24', interval 1 quarter)",
+ "2016-02-24",
+ "DATE NOT NULL");
+ f.checkScalar("date_add(date '2015-08-24', interval 2 quarters)",
+ "2016-02-24",
+ "DATE NOT NULL");
+ f.checkScalar("date_add(date '2011-02-24', interval 5 year)",
+ "2016-02-24",
+ "DATE NOT NULL");
+ f.checkNull("date_add(CAST(NULL AS DATE), interval 5 day)");
+ }
+
@Test void testDateSub() {
final SqlOperatorFixture f0 = fixture()
.setFor(SqlLibraryOperators.DATE_SUB);
@@ -12003,6 +12039,25 @@ public class SqlOperatorTest {
f.checkFails("datediff(^\"MONTH\"^, '2019-09-14', '2019-09-15')",
"(?s)Column 'MONTH' not found in any table",
false);
+ final SqlOperatorFixture f0 = f.withLibrary(SqlLibrary.BIG_QUERY);
+ f0.checkScalar("date_diff(DATE '2010-07-07', DATE '2008-12-25', DAY)",
+ "559",
+ "INTEGER NOT NULL");
+ f0.checkScalar("date_diff(DATE '2010-07-14', DATE '2010-07-07', WEEK)",
+ "1",
+ "INTEGER NOT NULL");
+ f0.checkScalar("date_diff(DATE '2011-12-14', DATE '2011-07-14', MONTH)",
+ "5",
+ "INTEGER NOT NULL");
+ f0.checkScalar("date_diff(DATE '2011-10-14', DATE '2011-07-14', QUARTER)",
+ "1",
+ "INTEGER NOT NULL");
+ f0.checkScalar("date_diff(DATE '2021-07-14', DATE '2011-07-14', YEAR)",
+ "10",
+ "INTEGER NOT NULL");
+ f0.checkNull("date_diff(CAST(NULL AS DATE), CAST(NULL AS DATE), DAY)");
+ f0.checkNull("date_diff(DATE '2008-12-25', CAST(NULL AS DATE), DAY)");
+ f0.checkNull("date_diff(CAST(NULL AS DATE), DATE '2008-12-25', DAY)");
}
/** Tests BigQuery's {@code TIME_ADD}, which adds an interval to a time