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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]