You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by ta...@apache.org on 2018/03/28 04:26:27 UTC

[4/7] impala git commit: IMPALA-6699: Fix DST end time for Australian time zones

IMPALA-6699: Fix DST end time for Australian time zones

In Australian time zones where Daylight Saving Time is used (except
LHDT) DST should end at 3am on the first Sunday of April when the
clock is set back to 2am. However, the current time zone DB contains
wrong DST end time for them. This fix sets the DST end time to 3am
for the mentioned time zones.

Change-Id: I461cd4a9057dfebfe8dd85b568cba4f1e87ad215
Reviewed-on: http://gerrit.cloudera.org:8080/9724
Reviewed-by: Tim Armstrong <ta...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/c8ad56f1
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/c8ad56f1
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/c8ad56f1

Branch: refs/heads/master
Commit: c8ad56f1d9886712b458b12e8ebb98777a99376c
Parents: 4851b03
Author: Gabor Kaszab <ga...@cloudera.com>
Authored: Mon Mar 19 15:28:36 2018 +0100
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Wed Mar 28 03:18:19 2018 +0000

----------------------------------------------------------------------
 be/src/exprs/expr-test.cc   | 47 ++++++++++++++++++++++++++++++++++++++++
 be/src/exprs/timezone_db.cc | 28 ++++++++++++------------
 2 files changed, 61 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/c8ad56f1/be/src/exprs/expr-test.cc
----------------------------------------------------------------------
diff --git a/be/src/exprs/expr-test.cc b/be/src/exprs/expr-test.cc
index 3bf4462..a381af9 100644
--- a/be/src/exprs/expr-test.cc
+++ b/be/src/exprs/expr-test.cc
@@ -265,6 +265,10 @@ class ExprTest : public testing::Test {
     EXPECT_EQ(expected_result, GetValue(expr, TYPE_STRING)) << expr;
   }
 
+  // Tests that DST of the given timezone ends at 3am
+  void TestAusDSTEndingForEastTimeZone(const string& time_zone);
+  void TestAusDSTEndingForCentralTimeZone(const string& time_zone);
+
   void TestCharValue(const string& expr, const string& expected_result,
                      const ColumnType& type) {
     EXPECT_EQ(expected_result, GetValue(expr, type)) << expr;
@@ -5704,6 +5708,49 @@ TEST_F(ExprTest, MoscowTimezoneConversion) {
 #pragma pop_macro("UTC_TO_MSC")
 }
 
+void ExprTest::TestAusDSTEndingForEastTimeZone(const string& time_zone) {
+  // Timestamps between 02:00:00 and 02:59:59 inclusive on the ending day of DST are
+  // ambiguous, hence excpecting NULL for timestamps in that range. Expect a UTC adjusted
+  // timestamp otherwise.
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 01:59:59', '" + time_zone + "') "
+      "as string)", "2018-03-31 14:59:59");
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 02:00:00', '" + time_zone + "') "
+      "as string)", "NULL");
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 02:59:59', '" + time_zone + "') "
+      "as string)", "NULL");
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 03:00:00', '" + time_zone + "') "
+      "as string)", "2018-03-31 17:00:00");
+}
+
+void ExprTest::TestAusDSTEndingForCentralTimeZone(const string& time_zone) {
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 01:59:59', '" + time_zone + "') "
+      "as string)", "2018-03-31 15:29:59");
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 02:00:00', '" + time_zone + "') "
+      "as string)", "NULL");
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 02:59:59', '" + time_zone + "') "
+      "as string)", "NULL");
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 03:00:00', '" + time_zone + "') "
+      "as string)", "2018-03-31 17:30:00");
+}
+
+// IMPALA-6699: Fix DST end time for Australian time-zones
+TEST_F(ExprTest, AusDSTEndingTests) {
+  TestAusDSTEndingForEastTimeZone("AET");
+  TestAusDSTEndingForEastTimeZone("Australia/ACT");
+  TestAusDSTEndingForCentralTimeZone("Australia/Adelaide");
+  TestAusDSTEndingForCentralTimeZone("Australia/Broken_Hill");
+  TestAusDSTEndingForEastTimeZone("Australia/Canberra");
+  TestAusDSTEndingForEastTimeZone("Australia/Currie");
+  TestAusDSTEndingForEastTimeZone("Australia/Hobart");
+  TestAusDSTEndingForEastTimeZone("Australia/Melbourne");
+  TestAusDSTEndingForEastTimeZone("Australia/NSW");
+  TestAusDSTEndingForCentralTimeZone("Australia/South");
+  TestAusDSTEndingForEastTimeZone("Australia/Sydney");
+  TestAusDSTEndingForEastTimeZone("Australia/Tasmania");
+  TestAusDSTEndingForEastTimeZone("Australia/Victoria");
+  TestAusDSTEndingForCentralTimeZone("Australia/Yancowinna");
+}
+
 TEST_F(ExprTest, TimestampFunctions) {
   // Regression for IMPALA-1105
   TestIsNull("cast(cast('NOTATIMESTAMP' as timestamp) as string)", TYPE_STRING);

http://git-wip-us.apache.org/repos/asf/impala/blob/c8ad56f1/be/src/exprs/timezone_db.cc
----------------------------------------------------------------------
diff --git a/be/src/exprs/timezone_db.cc b/be/src/exprs/timezone_db.cc
index 37c466a..bf6d56c 100644
--- a/be/src/exprs/timezone_db.cc
+++ b/be/src/exprs/timezone_db.cc
@@ -44,7 +44,7 @@ const time_zone_ptr TimezoneDatabase::TIMEZONE_MSK_PRE_2014(time_zone_ptr(
 
 const char* TimezoneDatabase::TIMEZONE_DATABASE_STR = "\"ID\",\"STD ABBR\",\"STD NAME\",\"DST ABBR\",\"DST NAME\",\"GMT offset\",\"DST adjustment\",\"DST Start Date rule\",\"Start time\",\"DST End date rule\",\"End time\"\n\
 \"ACT\",\"ACST\",\"Australian Central Standard Time (Northern Territory)\",\"\",\"\",\"+09:30:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
-\"AET\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"AET\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"AGT\",\"ART\",\"Argentine Time\",\"\",\"\",\"-03:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"ART\",\"EET\",\"Eastern European Time\",\"EEST\",\"Eastern European Summer Time\",\"+02:00:00\",\"+01:00:00\",\"-1;4;4\",\"+00:00:00\",\"-1;4;9\",\"+24:00:00\"\n\
 \"AST\",\"AKST\",\"Alaska Standard Time\",\"AKDT\",\"Alaska Daylight Time\",\"-09:00:00\",\"+01:00:00\",\"2;0;3\",\"+02:00:00\",\"1;0;11\",\"+02:00:00\"\n\
@@ -387,29 +387,29 @@ const char* TimezoneDatabase::TIMEZONE_DATABASE_STR = "\"ID\",\"STD ABBR\",\"STD
 \"Atlantic/South_Georgia\",\"GST\",\"South Georgia Standard Time\",\"\",\"\",\"-02:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Atlantic/St_Helena\",\"GMT\",\"Greenwich Mean Time\",\"\",\"\",\"+00:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Atlantic/Stanley\",\"FKT\",\"Falkland Is. Time\",\"\",\"\",\"-03:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
-\"Australia/ACT\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Adelaide\",\"ACST\",\"Australian Central Standard Time (South Australia)\",\"ACDT\",\"Australian Central Daylight Time (South Australia)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"Australia/ACT\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/Adelaide\",\"ACST\",\"Australian Central Standard Time (South Australia)\",\"ACDT\",\"Australian Central Daylight Time (South Australia)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"Australia/Brisbane\",\"AEST\",\"Australian Eastern Standard Time (Queensland)\",\"\",\"\",\"+10:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
-\"Australia/Broken_Hill\",\"ACST\",\"Australian Central Standard Time (South Australia/New South Wales)\",\"ACDT\",\"Australian Central Daylight Time (South Australia/New South Wales)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Canberra\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Currie\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"Australia/Broken_Hill\",\"ACST\",\"Australian Central Standard Time (South Australia/New South Wales)\",\"ACDT\",\"Australian Central Daylight Time (South Australia/New South Wales)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/Canberra\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/Currie\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"Australia/Darwin\",\"ACST\",\"Australian Central Standard Time (Northern Territory)\",\"\",\"\",\"+09:30:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Australia/Eucla\",\"ACWST\",\"Australian Central Western Standard Time\",\"\",\"\",\"+08:45:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
-\"Australia/Hobart\",\"AEST\",\"Australian Eastern Standard Time (Tasmania)\",\"AEDT\",\"Australian Eastern Daylight Time (Tasmania)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"Australia/Hobart\",\"AEST\",\"Australian Eastern Standard Time (Tasmania)\",\"AEDT\",\"Australian Eastern Daylight Time (Tasmania)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"Australia/LHI\",\"LHST\",\"Lord Howe Standard Time\",\"LHDT\",\"Lord Howe Daylight Time\",\"+10:30:00\",\"+00:30:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
 \"Australia/Lindeman\",\"AEST\",\"Australian Eastern Standard Time (Queensland)\",\"\",\"\",\"+10:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Australia/Lord_Howe\",\"LHST\",\"Lord Howe Standard Time\",\"LHDT\",\"Lord Howe Daylight Time\",\"+10:30:00\",\"+00:30:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Melbourne\",\"AEST\",\"Australian Eastern Standard Time (Victoria)\",\"AEDT\",\"Australian Eastern Daylight Time (Victoria)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/NSW\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"Australia/Melbourne\",\"AEST\",\"Australian Eastern Standard Time (Victoria)\",\"AEDT\",\"Australian Eastern Daylight Time (Victoria)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/NSW\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"Australia/North\",\"ACST\",\"Australian Central Standard Time (Northern Territory)\",\"\",\"\",\"+09:30:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Australia/Perth\",\"AWST\",\"Australian Western Standard Time\",\"\",\"\",\"+08:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Australia/Queensland\",\"AEST\",\"Australian Eastern Standard Time (Queensland)\",\"\",\"\",\"+10:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
-\"Australia/South\",\"ACST\",\"Australian Central Standard Time (South Australia)\",\"ACDT\",\"Australian Central Daylight Time (South Australia)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Sydney\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Tasmania\",\"AEST\",\"Australian Eastern Standard Time (Tasmania)\",\"AEDT\",\"Australian Eastern Daylight Time (Tasmania)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Victoria\",\"AEST\",\"Australian Eastern Standard Time (Victoria)\",\"AEDT\",\"Australian Eastern Daylight Time (Victoria)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"Australia/South\",\"ACST\",\"Australian Central Standard Time (South Australia)\",\"ACDT\",\"Australian Central Daylight Time (South Australia)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/Sydney\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/Tasmania\",\"AEST\",\"Australian Eastern Standard Time (Tasmania)\",\"AEDT\",\"Australian Eastern Daylight Time (Tasmania)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/Victoria\",\"AEST\",\"Australian Eastern Standard Time (Victoria)\",\"AEDT\",\"Australian Eastern Daylight Time (Victoria)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"Australia/West\",\"AWST\",\"Australian Western Standard Time\",\"\",\"\",\"+08:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
-\"Australia/Yancowinna\",\"ACST\",\"Australian Central Standard Time (South Australia/New South Wales)\",\"ACDT\",\"Australian Central Daylight Time (South Australia/New South Wales)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"Australia/Yancowinna\",\"ACST\",\"Australian Central Standard Time (South Australia/New South Wales)\",\"ACDT\",\"Australian Central Daylight Time (South Australia/New South Wales)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"BET\",\"BRT\",\"Brasilia Time\",\"BRST\",\"Brasilia Summer Time\",\"-03:00:00\",\"+01:00:00\",\"3;0;10\",\"+00:00:00\",\"3;0;2\",\"+00:00:00\"\n\
 \"BST\",\"BDT\",\"Bangladesh Time\",\"\",\"\",\"+06:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Brazil/Acre\",\"ACT\",\"Acre Time\",\"\",\"\",\"-05:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\