Skip to content

Commit dc02f2f

Browse files
snuyanzintwalthr
authored andcommitted
[FLINK-9432][table-planner] Enable EXTRACT for DECADE, ISODOW, ISOYEAR
This closes apache#17422.
1 parent 6bb15f3 commit dc02f2f

File tree

4 files changed

+48
-0
lines changed

4 files changed

+48
-0
lines changed

docs/content/docs/dev/table/functions/systemFunctions.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ For Table API, please use `_` for spaces (e.g., `DAY_TO_HOUR`).
126126
| :----------------------- | :----------------------------- |
127127
| `MILLENIUM` _(SQL-only)_ | |
128128
| `CENTURY` _(SQL-only)_ | |
129+
| `DECADE` _(SQL-only)_ | |
129130
| `YEAR` | `YEAR` |
130131
| `YEAR TO MONTH` | |
131132
| `QUARTER` | `QUARTER` |
@@ -145,6 +146,8 @@ For Table API, please use `_` for spaces (e.g., `DAY_TO_HOUR`).
145146
| | `MICROSECOND` |
146147
| `DOY` _(SQL-only)_ | |
147148
| `DOW` _(SQL-only)_ | |
149+
| `ISODOW` _(SQL-only)_ | |
150+
| `ISOYEAR` _(SQL-only)_ | |
148151
| | `SQL_TSI_YEAR` _(SQL-only)_ |
149152
| | `SQL_TSI_QUARTER` _(SQL-only)_ |
150153
| | `SQL_TSI_MONTH` _(SQL-only)_ |

flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/ExtractCallGen.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,11 @@ class ExtractCallGen(method: Method)
4343
TimeUnit.DAY |
4444
TimeUnit.QUARTER |
4545
TimeUnit.DOY |
46+
TimeUnit.ISOYEAR |
4647
TimeUnit.DOW |
48+
TimeUnit.ISODOW |
4749
TimeUnit.WEEK |
50+
TimeUnit.DECADE |
4851
TimeUnit.CENTURY |
4952
TimeUnit.MILLENNIUM =>
5053
tpe.getTypeRoot match {

flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/expressions/ScalarFunctionsTest.scala

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2935,6 +2935,14 @@ class ScalarFunctionsTest extends ScalarTypesTestBase {
29352935
"EXTRACT(CENTURY FROM f16)",
29362936
"20")
29372937

2938+
testSqlApi(
2939+
"EXTRACT(DECADE FROM f18)",
2940+
"199")
2941+
2942+
testSqlApi(
2943+
"EXTRACT(DECADE FROM f16)",
2944+
"199")
2945+
29382946
testSqlApi(
29392947
"EXTRACT(DOY FROM f18)",
29402948
"315")
@@ -2943,6 +2951,14 @@ class ScalarFunctionsTest extends ScalarTypesTestBase {
29432951
"EXTRACT(DOY FROM f16)",
29442952
"315")
29452953

2954+
testSqlApi(
2955+
"EXTRACT(ISOYEAR FROM f18)",
2956+
"1996")
2957+
2958+
testSqlApi(
2959+
"EXTRACT(ISOYEAR FROM f16)",
2960+
"1996")
2961+
29462962
testSqlApi(
29472963
"EXTRACT(DOW FROM f18)",
29482964
"1")
@@ -2951,6 +2967,14 @@ class ScalarFunctionsTest extends ScalarTypesTestBase {
29512967
"EXTRACT(DOW FROM f16)",
29522968
"1")
29532969

2970+
testSqlApi(
2971+
"EXTRACT(ISODOW FROM f18)",
2972+
"7")
2973+
2974+
testSqlApi(
2975+
"EXTRACT(ISODOW FROM f16)",
2976+
"7")
2977+
29542978
testSqlApi(
29552979
"EXTRACT(QUARTER FROM f18)",
29562980
"4")

flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/expressions/validation/ScalarFunctionsValidationTest.scala

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,18 @@ class ScalarFunctionsValidationTest extends ScalarTypesTestBase {
196196
testSqlApi("EXTRACT(DOY FROM TIME '12:42:25')", "0")
197197
}
198198

199+
@Test
200+
def testISODOWWithTimeWhichIsUnsupported(): Unit = {
201+
thrown.expect(classOf[ValidationException])
202+
testSqlApi("EXTRACT(ISODOW FROM TIME '12:42:25')", "0")
203+
}
204+
205+
@Test
206+
def testISOYEARWithTimeWhichIsUnsupported(): Unit = {
207+
thrown.expect(classOf[ValidationException])
208+
testSqlApi("EXTRACT(ISOYEAR FROM TIME '12:42:25')", "0")
209+
}
210+
199211
private def testExtractFromTimeZeroResult(unit: TimeUnit): Unit = {
200212
thrown.expect(classOf[ValidationException])
201213
testSqlApi("EXTRACT(" + unit + " FROM TIME '00:00:00')", "0")
@@ -213,6 +225,12 @@ class ScalarFunctionsValidationTest extends ScalarTypesTestBase {
213225
testExtractFromTimeZeroResult(TimeUnit.CENTURY)
214226
}
215227

228+
@Test
229+
def testDecadeWithTime(): Unit = {
230+
thrown.expect(classOf[ValidationException])
231+
testExtractFromTimeZeroResult(TimeUnit.DECADE)
232+
}
233+
216234
@Test
217235
def testYearWithTime(): Unit = {
218236
thrown.expect(classOf[ValidationException])

0 commit comments

Comments
 (0)