diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala index e727abd503..ef813d4fd1 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala @@ -1408,6 +1408,12 @@ class AstBuilder(conf: SQLConf) extends SqlBaseBaseVisitor[AnyRef] with Logging DayOfMonth(expression(ctx.source)) case "DAYOFWEEK" => DayOfWeek(expression(ctx.source)) + case "DOW" => + Subtract(DayOfWeek(expression(ctx.source)), Literal(1)) + case "ISODOW" => + Add(WeekDay(expression(ctx.source)), Literal(1)) + case "DOY" => + DayOfYear(expression(ctx.source)) case "HOUR" => Hour(expression(ctx.source)) case "MINUTE" => diff --git a/sql/core/src/test/resources/sql-tests/inputs/extract.sql b/sql/core/src/test/resources/sql-tests/inputs/extract.sql index 9adf5d7005..5dd3e6686f 100644 --- a/sql/core/src/test/resources/sql-tests/inputs/extract.sql +++ b/sql/core/src/test/resources/sql-tests/inputs/extract.sql @@ -12,6 +12,12 @@ select extract(day from c) from t; select extract(dayofweek from c) from t; +select extract(dow from c) from t; + +select extract(isodow from c) from t; + +select extract(doy from c) from t; + select extract(hour from c) from t; select extract(minute from c) from t; diff --git a/sql/core/src/test/resources/sql-tests/results/extract.sql.out b/sql/core/src/test/resources/sql-tests/results/extract.sql.out index 160e4c7d78..0ca7bdc09b 100644 --- a/sql/core/src/test/resources/sql-tests/results/extract.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/extract.sql.out @@ -1,5 +1,5 @@ -- Automatically generated by SQLQueryTestSuite --- Number of queries: 11 +-- Number of queries: 14 -- !query 0 @@ -59,34 +59,58 @@ struct -- !query 7 -select extract(hour from c) from t +select extract(dow from c) from t -- !query 7 schema -struct +struct<(dayofweek(CAST(c AS DATE)) - 1):int> -- !query 7 output -7 +5 -- !query 8 -select extract(minute from c) from t +select extract(isodow from c) from t -- !query 8 schema -struct +struct<(weekday(CAST(c AS DATE)) + 1):int> -- !query 8 output -8 +5 -- !query 9 -select extract(second from c) from t +select extract(doy from c) from t -- !query 9 schema -struct +struct -- !query 9 output -9 +126 -- !query 10 -select extract(not_supported from c) from t +select extract(hour from c) from t -- !query 10 schema -struct<> +struct -- !query 10 output +7 + + +-- !query 11 +select extract(minute from c) from t +-- !query 11 schema +struct +-- !query 11 output +8 + + +-- !query 12 +select extract(second from c) from t +-- !query 12 schema +struct +-- !query 12 output +9 + + +-- !query 13 +select extract(not_supported from c) from t +-- !query 13 schema +struct<> +-- !query 13 output org.apache.spark.sql.catalyst.parser.ParseException Literals of type 'NOT_SUPPORTED' are currently not supported.(line 1, pos 7)