Skip to content

Commit

Permalink
Merge pull request #42554 from arenadata/ADQM-604
Browse files Browse the repository at this point in the history
Add support of Date32 arguments for dateName function
  • Loading branch information
rschu1ze committed Oct 22, 2022
2 parents 5c32cd1 + 537f700 commit b746224
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 18 deletions.
2 changes: 1 addition & 1 deletion docs/en/sql-reference/functions/date-time-functions.md
Expand Up @@ -1156,7 +1156,7 @@ dateName(date_part, date)
**Arguments**

- `date_part` — Date part. Possible values: 'year', 'quarter', 'month', 'week', 'dayofyear', 'day', 'weekday', 'hour', 'minute', 'second'. [String](../../sql-reference/data-types/string.md).
- `date` — Date. [Date](../../sql-reference/data-types/date.md), [DateTime](../../sql-reference/data-types/datetime.md) or [DateTime64](../../sql-reference/data-types/datetime64.md).
- `date` — Date. [Date](../../sql-reference/data-types/date.md), [Date32](../../sql-reference/data-types/date32.md), [DateTime](../../sql-reference/data-types/datetime.md) or [DateTime64](../../sql-reference/data-types/datetime64.md).
- `timezone` — Timezone. Optional. [String](../../sql-reference/data-types/string.md).

**Returned value**
Expand Down
2 changes: 1 addition & 1 deletion docs/ru/sql-reference/functions/date-time-functions.md
Expand Up @@ -1078,7 +1078,7 @@ dateName(date_part, date)
**Аргументы**

- `date_part` — часть даты. Возможные значения: 'year', 'quarter', 'month', 'week', 'dayofyear', 'day', 'weekday', 'hour', 'minute', 'second'. [String](../../sql-reference/data-types/string.md).
- `date` — дата. [Date](../../sql-reference/data-types/date.md), [DateTime](../../sql-reference/data-types/datetime.md) или [DateTime64](../../sql-reference/data-types/datetime64.md).
- `date` — дата. [Date](../../sql-reference/data-types/date.md), [Date32](../../sql-reference/data-types/date32.md), [DateTime](../../sql-reference/data-types/datetime.md) или [DateTime64](../../sql-reference/data-types/datetime64.md).
- `timezone` — часовой пояс. Необязательный аргумент. [String](../../sql-reference/data-types/string.md).

**Возвращаемое значение**
Expand Down
11 changes: 9 additions & 2 deletions src/Functions/dateName.cpp
Expand Up @@ -4,6 +4,7 @@
#include <IO/WriteHelpers.h>

#include <DataTypes/DataTypeDate.h>
#include <DataTypes/DataTypeDate32.h>
#include <DataTypes/DataTypeDateTime.h>
#include <DataTypes/DataTypeDateTime64.h>
#include <DataTypes/DataTypeString.h>
Expand Down Expand Up @@ -34,6 +35,11 @@ template <> struct DataTypeToTimeTypeMap<DataTypeDate>
using TimeType = UInt16;
};

template <> struct DataTypeToTimeTypeMap<DataTypeDate32>
{
using TimeType = Int32;
};

template <> struct DataTypeToTimeTypeMap<DataTypeDateTime>
{
using TimeType = UInt32;
Expand Down Expand Up @@ -72,7 +78,7 @@ class FunctionDateNameImpl : public IFunction
ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH,
"Number of arguments for function {} doesn't match: passed {}",
getName(),
toString(arguments.size()));
arguments.size());

if (!WhichDataType(arguments[0].type).isString())
throw Exception(
Expand All @@ -83,7 +89,7 @@ class FunctionDateNameImpl : public IFunction

WhichDataType first_argument_type(arguments[1].type);

if (!(first_argument_type.isDate() || first_argument_type.isDateTime() || first_argument_type.isDateTime64()))
if (!(first_argument_type.isDate() || first_argument_type.isDateTime() || first_argument_type.isDate32() || first_argument_type.isDateTime64()))
throw Exception(
ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT,
"Illegal type {} of 2 argument of function {}. Must be a date or a date with time",
Expand All @@ -108,6 +114,7 @@ class FunctionDateNameImpl : public IFunction
ColumnPtr res;

if (!((res = executeType<DataTypeDate>(arguments, result_type))
|| (res = executeType<DataTypeDate32>(arguments, result_type))
|| (res = executeType<DataTypeDateTime>(arguments, result_type))
|| (res = executeType<DataTypeDateTime64>(arguments, result_type))))
throw Exception(
Expand Down
14 changes: 7 additions & 7 deletions tests/queries/0_stateless/01811_datename.reference
@@ -1,10 +1,10 @@
2021 2021 2021
2 2 2
April April April
104 104 104
14 14 14
15 15 15
Wednesday Wednesday Wednesday
2021 2021 2021 2021
2 2 2 2
April April April April
104 104 104 104
14 14 14 14
15 15 15 15
Wednesday Wednesday Wednesday Wednesday
11 11
22 22
33 33
Expand Down
21 changes: 14 additions & 7 deletions tests/queries/0_stateless/01811_datename.sql
@@ -1,44 +1,51 @@
WITH
toDate('2021-04-14') AS date_value,
toDate32('2021-04-14') AS date_32_value,
toDateTime('2021-04-14 11:22:33') AS date_time_value,
toDateTime64('2021-04-14 11:22:33', 3) AS date_time_64_value
SELECT dateName('year', date_value), dateName('year', date_time_value), dateName('year', date_time_64_value);
SELECT dateName('year', date_value), dateName('year', date_32_value), dateName('year', date_time_value), dateName('year', date_time_64_value);

WITH
toDate('2021-04-14') AS date_value,
toDate32('2021-04-14') AS date_32_value,
toDateTime('2021-04-14 11:22:33') AS date_time_value,
toDateTime64('2021-04-14 11:22:33', 3) AS date_time_64_value
SELECT dateName('quarter', date_value), dateName('quarter', date_time_value), dateName('quarter', date_time_64_value);
SELECT dateName('quarter', date_value), dateName('quarter', date_32_value), dateName('quarter', date_time_value), dateName('quarter', date_time_64_value);

WITH
toDate('2021-04-14') AS date_value,
toDate32('2021-04-14') AS date_32_value,
toDateTime('2021-04-14 11:22:33') AS date_time_value,
toDateTime64('2021-04-14 11:22:33', 3) AS date_time_64_value
SELECT dateName('month', date_value), dateName('month', date_time_value), dateName('month', date_time_64_value);
SELECT dateName('month', date_value), dateName('month', date_32_value), dateName('month', date_time_value), dateName('month', date_time_64_value);

WITH
toDate('2021-04-14') AS date_value,
toDate32('2021-04-14') AS date_32_value,
toDateTime('2021-04-14 11:22:33') AS date_time_value,
toDateTime64('2021-04-14 11:22:33', 3) AS date_time_64_value
SELECT dateName('dayofyear', date_value), dateName('dayofyear', date_time_value), dateName('dayofyear', date_time_64_value);
SELECT dateName('dayofyear', date_value), dateName('dayofyear', date_32_value), dateName('dayofyear', date_time_value), dateName('dayofyear', date_time_64_value);

WITH
toDate('2021-04-14') AS date_value,
toDate32('2021-04-14') AS date_32_value,
toDateTime('2021-04-14 11:22:33') AS date_time_value,
toDateTime64('2021-04-14 11:22:33', 3) AS date_time_64_value
SELECT dateName('day', date_value), dateName('day', date_time_value), dateName('day', date_time_64_value);
SELECT dateName('day', date_value), dateName('day', date_32_value), dateName('day', date_time_value), dateName('day', date_time_64_value);

WITH
toDate('2021-04-14') AS date_value,
toDate32('2021-04-14') AS date_32_value,
toDateTime('2021-04-14 11:22:33') AS date_time_value,
toDateTime64('2021-04-14 11:22:33', 3) AS date_time_64_value
SELECT dateName('week', date_value), dateName('week', date_time_value), dateName('week', date_time_64_value);
SELECT dateName('week', date_value), dateName('week', date_32_value), dateName('week', date_time_value), dateName('week', date_time_64_value);

WITH
toDate('2021-04-14') AS date_value,
toDate32('2021-04-14') AS date_32_value,
toDateTime('2021-04-14 11:22:33') AS date_time_value,
toDateTime64('2021-04-14 11:22:33', 3) AS date_time_64_value
SELECT dateName('weekday', date_value), dateName('weekday', date_time_value), dateName('weekday', date_time_64_value);
SELECT dateName('weekday', date_value), dateName('weekday', date_32_value), dateName('weekday', date_time_value), dateName('weekday', date_time_64_value);

WITH
toDateTime('2021-04-14 11:22:33') AS date_time_value,
Expand Down

0 comments on commit b746224

Please sign in to comment.