Skip to content

Commit

Permalink
[CALCITE-6165] Add DATE_ADD test and DATE_DIFF test on SqlOperatorTest
Browse files Browse the repository at this point in the history
  • Loading branch information
caicancai authored and chucheng92 committed Dec 22, 2023
1 parent e74ff3e commit cf49f59
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 1 deletion.
2 changes: 1 addition & 1 deletion core/src/main/java/org/apache/calcite/sql/SqlKind.java
Original file line number Diff line number Diff line change
Expand Up @@ -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). */
Expand Down
55 changes: 55 additions & 0 deletions testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -11914,6 +11914,42 @@ void testTimestampDiff(boolean coercionEnabled) {
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);
Expand Down Expand Up @@ -12003,6 +12039,25 @@ void testTimestampDiff(boolean coercionEnabled) {
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
Expand Down

0 comments on commit cf49f59

Please sign in to comment.