Skip to content

Commit

Permalink
[FLINK-9432][table-planner] Enable EXTRACT for DECADE, ISODOW, ISOYEAR
Browse files Browse the repository at this point in the history
This closes #17422.
  • Loading branch information
snuyanzin authored and twalthr committed Oct 19, 2021
1 parent 6bb15f3 commit dc02f2f
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 0 deletions.
3 changes: 3 additions & 0 deletions docs/content/docs/dev/table/functions/systemFunctions.md
Expand Up @@ -126,6 +126,7 @@ For Table API, please use `_` for spaces (e.g., `DAY_TO_HOUR`).
| :----------------------- | :----------------------------- |
| `MILLENIUM` _(SQL-only)_ | |
| `CENTURY` _(SQL-only)_ | |
| `DECADE` _(SQL-only)_ | |
| `YEAR` | `YEAR` |
| `YEAR TO MONTH` | |
| `QUARTER` | `QUARTER` |
Expand All @@ -145,6 +146,8 @@ For Table API, please use `_` for spaces (e.g., `DAY_TO_HOUR`).
| | `MICROSECOND` |
| `DOY` _(SQL-only)_ | |
| `DOW` _(SQL-only)_ | |
| `ISODOW` _(SQL-only)_ | |
| `ISOYEAR` _(SQL-only)_ | |
| | `SQL_TSI_YEAR` _(SQL-only)_ |
| | `SQL_TSI_QUARTER` _(SQL-only)_ |
| | `SQL_TSI_MONTH` _(SQL-only)_ |
Expand Down
Expand Up @@ -43,8 +43,11 @@ class ExtractCallGen(method: Method)
TimeUnit.DAY |
TimeUnit.QUARTER |
TimeUnit.DOY |
TimeUnit.ISOYEAR |
TimeUnit.DOW |
TimeUnit.ISODOW |
TimeUnit.WEEK |
TimeUnit.DECADE |
TimeUnit.CENTURY |
TimeUnit.MILLENNIUM =>
tpe.getTypeRoot match {
Expand Down
Expand Up @@ -2935,6 +2935,14 @@ class ScalarFunctionsTest extends ScalarTypesTestBase {
"EXTRACT(CENTURY FROM f16)",
"20")

testSqlApi(
"EXTRACT(DECADE FROM f18)",
"199")

testSqlApi(
"EXTRACT(DECADE FROM f16)",
"199")

testSqlApi(
"EXTRACT(DOY FROM f18)",
"315")
Expand All @@ -2943,6 +2951,14 @@ class ScalarFunctionsTest extends ScalarTypesTestBase {
"EXTRACT(DOY FROM f16)",
"315")

testSqlApi(
"EXTRACT(ISOYEAR FROM f18)",
"1996")

testSqlApi(
"EXTRACT(ISOYEAR FROM f16)",
"1996")

testSqlApi(
"EXTRACT(DOW FROM f18)",
"1")
Expand All @@ -2951,6 +2967,14 @@ class ScalarFunctionsTest extends ScalarTypesTestBase {
"EXTRACT(DOW FROM f16)",
"1")

testSqlApi(
"EXTRACT(ISODOW FROM f18)",
"7")

testSqlApi(
"EXTRACT(ISODOW FROM f16)",
"7")

testSqlApi(
"EXTRACT(QUARTER FROM f18)",
"4")
Expand Down
Expand Up @@ -196,6 +196,18 @@ class ScalarFunctionsValidationTest extends ScalarTypesTestBase {
testSqlApi("EXTRACT(DOY FROM TIME '12:42:25')", "0")
}

@Test
def testISODOWWithTimeWhichIsUnsupported(): Unit = {
thrown.expect(classOf[ValidationException])
testSqlApi("EXTRACT(ISODOW FROM TIME '12:42:25')", "0")
}

@Test
def testISOYEARWithTimeWhichIsUnsupported(): Unit = {
thrown.expect(classOf[ValidationException])
testSqlApi("EXTRACT(ISOYEAR FROM TIME '12:42:25')", "0")
}

private def testExtractFromTimeZeroResult(unit: TimeUnit): Unit = {
thrown.expect(classOf[ValidationException])
testSqlApi("EXTRACT(" + unit + " FROM TIME '00:00:00')", "0")
Expand All @@ -213,6 +225,12 @@ class ScalarFunctionsValidationTest extends ScalarTypesTestBase {
testExtractFromTimeZeroResult(TimeUnit.CENTURY)
}

@Test
def testDecadeWithTime(): Unit = {
thrown.expect(classOf[ValidationException])
testExtractFromTimeZeroResult(TimeUnit.DECADE)
}

@Test
def testYearWithTime(): Unit = {
thrown.expect(classOf[ValidationException])
Expand Down

0 comments on commit dc02f2f

Please sign in to comment.