|
16 | 16 |
|
17 | 17 | #include "velox/common/base/tests/GTestUtils.h" |
18 | 18 | #include "velox/functions/sparksql/tests/SparkFunctionBaseTest.h" |
| 19 | +#include "velox/functions/sparksql/types/TimestampNTZType.h" |
19 | 20 | #include "velox/type/Timestamp.h" |
20 | 21 | #include "velox/type/tz/TimeZoneMap.h" |
21 | 22 |
|
@@ -943,6 +944,29 @@ TEST_F(DateTimeFunctionsTest, hour) { |
943 | 944 | EXPECT_EQ(2, hour("1969-01-01 13:23:00.001")); |
944 | 945 | } |
945 | 946 |
|
| 947 | +TEST_F(DateTimeFunctionsTest, hourTimestampNTZ) { |
| 948 | + const auto hourNtz = [&](const StringView timestampStr) { |
| 949 | + auto micros = std::make_optional(parseTimestamp(timestampStr).toMicros()); |
| 950 | + return evaluateOnce<int32_t>("hour(c0)", TIMESTAMP_NTZ(), micros); |
| 951 | + }; |
| 952 | + |
| 953 | + EXPECT_EQ( |
| 954 | + std::nullopt, |
| 955 | + evaluateOnce<int32_t>( |
| 956 | + "hour(c0)", TIMESTAMP_NTZ(), std::optional<int64_t>{})); |
| 957 | + |
| 958 | + EXPECT_EQ(0, hourNtz("2024-01-08 00:23:00.001")); |
| 959 | + EXPECT_EQ(1, hourNtz("2024-01-08 01:23:00.001")); |
| 960 | + EXPECT_EQ(13, hourNtz("2024-01-20 13:23:00.001")); |
| 961 | + |
| 962 | + // TIMESTAMP_NTZ should not be affected by session timezone. |
| 963 | + setQueryTimeZone("Pacific/Apia"); |
| 964 | + |
| 965 | + EXPECT_EQ(0, hourNtz("2024-01-08 00:23:00.001")); |
| 966 | + EXPECT_EQ(1, hourNtz("2024-01-08 01:23:00.001")); |
| 967 | + EXPECT_EQ(13, hourNtz("2024-01-20 13:23:00.001")); |
| 968 | +} |
| 969 | + |
946 | 970 | TEST_F(DateTimeFunctionsTest, minute) { |
947 | 971 | const auto minute = [&](const StringView& timestampStr) { |
948 | 972 | const auto timeStamp = std::make_optional(parseTimestamp(timestampStr)); |
|
0 commit comments