This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 4c6ca88088 Revert "[refactor](function) ignore DST for function `from_unixtime` (#19151)" (#19333) 4c6ca88088 is described below commit 4c6ca8808888acfdae7df99e6c8a8b8c08d931d0 Author: Gabriel <gabrielleeb...@gmail.com> AuthorDate: Sat May 6 16:33:58 2023 +0800 Revert "[refactor](function) ignore DST for function `from_unixtime` (#19151)" (#19333) This reverts commit 9dd6c8f87b73db238bfd38fb1d76f3796910f398. --- be/src/vec/runtime/vdatetime_value.cpp | 44 ++++++---------------- be/test/vec/function/function_time_test.cpp | 8 ++-- .../utils/arrow_column_to_doris_column_test.cpp | 34 ++++++++--------- .../org/apache/doris/analysis/DateLiteral.java | 18 ++++----- .../data/datatype_p0/date/test_from_unixtime.out | 6 --- .../datetime_functions/test_date_function.out | 12 +++--- .../datetime_functions/test_date_function.out | 12 +++--- .../datatype_p0/date/test_from_unixtime.groovy | 6 --- .../datetime_functions/test_date_function.groovy | 18 ++++----- 9 files changed, 61 insertions(+), 97 deletions(-) diff --git a/be/src/vec/runtime/vdatetime_value.cpp b/be/src/vec/runtime/vdatetime_value.cpp index e1c6b6c5c5..af3d6d8223 100644 --- a/be/src/vec/runtime/vdatetime_value.cpp +++ b/be/src/vec/runtime/vdatetime_value.cpp @@ -1627,22 +1627,16 @@ bool VecDateTimeValue::from_unixtime(int64_t timestamp, const cctz::time_zone& c std::chrono::system_clock::from_time_t(0)); cctz::time_point<cctz::sys_seconds> t = epoch + cctz::seconds(timestamp); - const auto res = ctz.lookup(t); + const auto tp = cctz::convert(t, ctz); _neg = 0; _type = TIME_DATETIME; - _year = res.cs.year(); - _month = res.cs.month(); - _day = res.cs.day(); - _hour = res.cs.hour(); - _minute = res.cs.minute(); - _second = res.cs.second(); - - if (res.is_dst) { - TimeInterval interval; - interval.second = -3600; - date_add_interval<SECOND>(interval); - } + _year = tp.year(); + _month = tp.month(); + _day = tp.day(); + _hour = tp.hour(); + _minute = tp.minute(); + _second = tp.second(); return true; } @@ -2849,17 +2843,9 @@ bool DateV2Value<T>::from_unixtime(int64_t timestamp, const cctz::time_zone& ctz std::chrono::system_clock::from_time_t(0)); cctz::time_point<cctz::sys_seconds> t = epoch + cctz::seconds(timestamp); - const auto res = ctz.lookup(t); - - set_time(res.cs.year(), res.cs.month(), res.cs.day(), res.cs.hour(), res.cs.minute(), - res.cs.second(), 0); - - if (res.is_dst) { - TimeInterval interval; - interval.second = -3600; - date_add_interval<SECOND>(interval); - } + const auto tp = cctz::convert(t, ctz); + set_time(tp.year(), tp.month(), tp.day(), tp.hour(), tp.minute(), tp.second(), 0); return true; } @@ -2881,16 +2867,10 @@ bool DateV2Value<T>::from_unixtime(int64_t timestamp, int32_t nano_seconds, std::chrono::system_clock::from_time_t(0)); cctz::time_point<cctz::sys_seconds> t = epoch + cctz::seconds(timestamp); - const auto res = ctz.lookup(t); - - set_time(res.cs.year(), res.cs.month(), res.cs.day(), res.cs.hour(), res.cs.minute(), - res.cs.second(), nano_seconds / std::pow(10, 9 - scale) * std::pow(10, 6 - scale)); + const auto tp = cctz::convert(t, ctz); - if (res.is_dst) { - TimeInterval interval; - interval.second = -3600; - date_add_interval<SECOND>(interval); - } + set_time(tp.year(), tp.month(), tp.day(), tp.hour(), tp.minute(), tp.second(), + nano_seconds / std::pow(10, 9 - scale) * std::pow(10, 6 - scale)); return true; } diff --git a/be/test/vec/function/function_time_test.cpp b/be/test/vec/function/function_time_test.cpp index 199bc87578..45f0c96dbd 100644 --- a/be/test/vec/function/function_time_test.cpp +++ b/be/test/vec/function/function_time_test.cpp @@ -545,9 +545,9 @@ TEST(VTimestampFunctionsTest, convert_tz_test) { DataSet data_set = { {{DATETIME("2019-08-01 13:21:03"), STRING("Asia/Shanghai"), STRING("America/Los_Angeles")}, - str_to_date_time("2019-07-31 21:21:03", true)}, + str_to_date_time("2019-07-31 22:21:03", true)}, {{DATETIME("2019-08-01 13:21:03"), STRING("+08:00"), STRING("America/Los_Angeles")}, - str_to_date_time("2019-07-31 21:21:03", true)}}; + str_to_date_time("2019-07-31 22:21:03", true)}}; check_function<DataTypeDateTime, true>(func_name, input_types, data_set); } @@ -1684,9 +1684,9 @@ TEST(VTimestampFunctionsTest, convert_tz_v2_test) { DataSet data_set = { {{DATETIME("2019-08-01 13:21:03"), STRING("Asia/Shanghai"), STRING("America/Los_Angeles")}, - str_to_datetime_v2("2019-07-31 21:21:03", "%Y-%m-%d %H:%i:%s.%f")}, + str_to_datetime_v2("2019-07-31 22:21:03", "%Y-%m-%d %H:%i:%s.%f")}, {{DATETIME("2019-08-01 13:21:03"), STRING("+08:00"), STRING("America/Los_Angeles")}, - str_to_datetime_v2("2019-07-31 21:21:03", "%Y-%m-%d %H:%i:%s.%f")}}; + str_to_datetime_v2("2019-07-31 22:21:03", "%Y-%m-%d %H:%i:%s.%f")}}; check_function<DataTypeDateTimeV2, true>(func_name, input_types, data_set); } diff --git a/be/test/vec/utils/arrow_column_to_doris_column_test.cpp b/be/test/vec/utils/arrow_column_to_doris_column_test.cpp index 81a450bc48..e88dee6029 100644 --- a/be/test/vec/utils/arrow_column_to_doris_column_test.cpp +++ b/be/test/vec/utils/arrow_column_to_doris_column_test.cpp @@ -205,23 +205,23 @@ TEST(ArrowColumnToDorisColumnTest, test_date64_to_datetime) { test_datetime<arrow::Date64Type, ColumnVector<Int64>, true>(type, test_cases, 64); } -//TEST(ArrowColumnToDorisColumnTest, test_timestamp_to_datetime) { -// auto type = std::make_shared<arrow::Date64Type>(); -// std::vector<std::string> test_cases = { -// {"1970-01-01 12:12:12"}, {"2021-05-30 22:22:22"}, {"2022-05-08 00:00:01"}}; -// std::vector<std::string> zones = {"UTC", "GMT", "CST", "+01:00", -// "-09:00", "Asia/Shanghai", "Europe/Zurich"}; -// std::vector<arrow::TimeUnit::type> time_units = {arrow::TimeUnit::SECOND, -// arrow::TimeUnit::MICRO, arrow::TimeUnit::MILLI, -// arrow::TimeUnit::NANO}; -// for (auto& unit : time_units) { -// for (auto& zone : zones) { -// auto type = std::make_shared<arrow::TimestampType>(unit, zone); -// test_datetime<arrow::TimestampType, ColumnVector<Int64>, false>(type, test_cases, 64); -// test_datetime<arrow::TimestampType, ColumnVector<Int64>, true>(type, test_cases, 64); -// } -// } -//} +TEST(ArrowColumnToDorisColumnTest, test_timestamp_to_datetime) { + auto type = std::make_shared<arrow::Date64Type>(); + std::vector<std::string> test_cases = { + {"1970-01-01 12:12:12"}, {"2021-05-30 22:22:22"}, {"2022-05-08 00:00:01"}}; + std::vector<std::string> zones = {"UTC", "GMT", "CST", "+01:00", + "-09:00", "Asia/Shanghai", "Europe/Zurich"}; + std::vector<arrow::TimeUnit::type> time_units = {arrow::TimeUnit::SECOND, + arrow::TimeUnit::MICRO, arrow::TimeUnit::MILLI, + arrow::TimeUnit::NANO}; + for (auto& unit : time_units) { + for (auto& zone : zones) { + auto type = std::make_shared<arrow::TimestampType>(unit, zone); + test_datetime<arrow::TimestampType, ColumnVector<Int64>, false>(type, test_cases, 64); + test_datetime<arrow::TimestampType, ColumnVector<Int64>, true>(type, test_cases, 64); + } + } +} template <typename ArrowType, typename CppType, bool is_nullable, typename ColumnType = ColumnVector<CppType>, diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java index 0c27e9146b..1063f67345 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java @@ -225,17 +225,13 @@ public class DateLiteral extends LiteralExpr { Timestamp timestamp = new Timestamp(unixTimestamp); ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(timestamp.toInstant(), ZoneId.of(timeZone.getID())); - - // Ignore DST transition - LocalDateTime time = zonedDateTime.minusSeconds( - zonedDateTime.getOffset().getTotalSeconds() - timeZone.getRawOffset() / 1000).toLocalDateTime(); - year = time.getYear(); - month = time.getMonthValue(); - day = time.getDayOfMonth(); - hour = time.getHour(); - minute = time.getMinute(); - second = time.getSecond(); - microsecond = time.get(ChronoField.MICRO_OF_SECOND); + year = zonedDateTime.getYear(); + month = zonedDateTime.getMonthValue(); + day = zonedDateTime.getDayOfMonth(); + hour = zonedDateTime.getHour(); + minute = zonedDateTime.getMinute(); + second = zonedDateTime.getSecond(); + microsecond = zonedDateTime.get(ChronoField.MICRO_OF_SECOND); if (type.equals(Type.DATE)) { hour = 0; minute = 0; diff --git a/regression-test/data/datatype_p0/date/test_from_unixtime.out b/regression-test/data/datatype_p0/date/test_from_unixtime.out index df98390a2f..c202e0aeea 100644 --- a/regression-test/data/datatype_p0/date/test_from_unixtime.out +++ b/regression-test/data/datatype_p0/date/test_from_unixtime.out @@ -5,9 +5,3 @@ -- !sql2 -- 2019-03-21 07:10:55 --- !sql3 -- -2023-04-26 14:42:20 - --- !sql4 -- -2023-04-26 14:42:20 - diff --git a/regression-test/data/nereids_p0/sql_functions/datetime_functions/test_date_function.out b/regression-test/data/nereids_p0/sql_functions/datetime_functions/test_date_function.out index 078c0cb043..b2ed2aae64 100644 --- a/regression-test/data/nereids_p0/sql_functions/datetime_functions/test_date_function.out +++ b/regression-test/data/nereids_p0/sql_functions/datetime_functions/test_date_function.out @@ -1,15 +1,15 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql -- -2019-07-31T21:21:03 +2019-07-31T22:21:03 -- !sql -- -2019-07-31T21:21:03 +2019-07-31T22:21:03 -- !sql -- -2019-08-01T05:21:03 +2019-08-01T06:21:03 -- !sql -- -2019-08-01T05:21:03 +2019-08-01T06:21:03 -- !sql -- \N @@ -40,7 +40,7 @@ 14 2019-08-06T13:21:03 Asia/Shanghai Australia/Lindeman 2019-08-06T15:21:03 15 2019-08-07T13:21:03 Asia/Shanghai America/Aruba 2019-08-07T01:21:03 16 2019-08-07T13:21:03 Asia/Shanghai America/Blanc-Sablon 2019-08-07T01:21:03 -17 2019-08-08T13:21:03 Africa/Lusaka America/Dawson 2019-08-08T03:21:03 +17 2019-08-08T13:21:03 Africa/Lusaka America/Dawson 2019-08-08T04:21:03 18 2019-08-08T13:21:03 Africa/Lusaka America/Creston 2019-08-08T04:21:03 -- !sql2 -- @@ -69,7 +69,7 @@ 14 2019-08-06T13:21:03 Asia/Shanghai Australia/Lindeman 2019-08-06T15:21:03 15 2019-08-07T13:21:03 Asia/Shanghai America/Aruba 2019-08-07T01:21:03 16 2019-08-07T13:21:03 Asia/Shanghai America/Blanc-Sablon 2019-08-07T01:21:03 -17 2019-08-08T13:21:03 Africa/Lusaka America/Dawson 2019-08-08T03:21:03 +17 2019-08-08T13:21:03 Africa/Lusaka America/Dawson 2019-08-08T04:21:03 18 2019-08-08T13:21:03 Africa/Lusaka America/Creston 2019-08-08T04:21:03 -- !sql_vec2 -- diff --git a/regression-test/data/query_p0/sql_functions/datetime_functions/test_date_function.out b/regression-test/data/query_p0/sql_functions/datetime_functions/test_date_function.out index 3a70d2ca2f..c5aeb461fc 100644 --- a/regression-test/data/query_p0/sql_functions/datetime_functions/test_date_function.out +++ b/regression-test/data/query_p0/sql_functions/datetime_functions/test_date_function.out @@ -1,15 +1,15 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql -- -2019-07-31T21:21:03 +2019-07-31T22:21:03 -- !sql -- -2019-07-31T21:21:03 +2019-07-31T22:21:03 -- !sql -- -2019-08-01T05:21:03 +2019-08-01T06:21:03 -- !sql -- -2019-08-01T05:21:03 +2019-08-01T06:21:03 -- !sql -- \N @@ -60,7 +60,7 @@ 14 2019-08-06T13:21:03 Asia/Shanghai Australia/Lindeman 2019-08-06T15:21:03 15 2019-08-07T13:21:03 Asia/Shanghai America/Aruba 2019-08-07T01:21:03 16 2019-08-07T13:21:03 Asia/Shanghai America/Blanc-Sablon 2019-08-07T01:21:03 -17 2019-08-08T13:21:03 Africa/Lusaka America/Dawson 2019-08-08T03:21:03 +17 2019-08-08T13:21:03 Africa/Lusaka America/Dawson 2019-08-08T04:21:03 18 2019-08-08T13:21:03 Africa/Lusaka America/Creston 2019-08-08T04:21:03 -- !sql2 -- @@ -89,7 +89,7 @@ 14 2019-08-06T13:21:03 Asia/Shanghai Australia/Lindeman 2019-08-06T15:21:03 15 2019-08-07T13:21:03 Asia/Shanghai America/Aruba 2019-08-07T01:21:03 16 2019-08-07T13:21:03 Asia/Shanghai America/Blanc-Sablon 2019-08-07T01:21:03 -17 2019-08-08T13:21:03 Africa/Lusaka America/Dawson 2019-08-08T03:21:03 +17 2019-08-08T13:21:03 Africa/Lusaka America/Dawson 2019-08-08T04:21:03 18 2019-08-08T13:21:03 Africa/Lusaka America/Creston 2019-08-08T04:21:03 -- !sql_vec2 -- diff --git a/regression-test/suites/datatype_p0/date/test_from_unixtime.groovy b/regression-test/suites/datatype_p0/date/test_from_unixtime.groovy index ffd3145299..5cdbcf85af 100644 --- a/regression-test/suites/datatype_p0/date/test_from_unixtime.groovy +++ b/regression-test/suites/datatype_p0/date/test_from_unixtime.groovy @@ -24,10 +24,4 @@ suite("test_from_unixtime") { sql "set time_zone='+00:00'" qt_sql2 "select from_unixtime(1553152255)" - - sql """ set time_zone = 'Europe/London' """ - qt_sql3 "select from_unixtime(1682520140)" - - sql "set enable_fold_constant_by_be=false" - qt_sql4 "select from_unixtime(1682520140)" } diff --git a/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_function.groovy b/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_function.groovy index 9f99b0aec5..37514224f4 100644 --- a/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_function.groovy +++ b/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_function.groovy @@ -632,15 +632,15 @@ suite("test_date_function") { PROPERTIES( "replication_allocation" = "tag.location.default: 1"); """ - // explain { - // sql("select * from ${tableName} where date(birth) < timestamp(date '2022-01-01')") - // contains "`birth` < '2022-01-01 00:00:00'" - // } - - // explain { - // sql("select * from ${tableName} where date(birth1) < timestamp(date '2022-01-01')") - // contains "`birth1` < '2022-01-01'" - // } + explain { + sql("select * from ${tableName} where date(birth) < timestamp(date '2022-01-01')") + contains "`birth` < '2022-01-01 00:00:00'" + } + + explain { + sql("select * from ${tableName} where date(birth1) < timestamp(date '2022-01-01')") + contains "`birth1` < '2022-01-01'" + } sql """ insert into ${tableName} values --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org