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

Reply via email to