You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@orc.apache.org by om...@apache.org on 2018/05/01 22:08:42 UTC

orc git commit: ORC-356: Fix C09Adaper.cc (as Adaptor.cc)

Repository: orc
Updated Branches:
  refs/heads/master 45b9c5082 -> 6eccd4721


ORC-356: Fix C09Adaper.cc (as Adaptor.cc)

Fixes #261

Signed-off-by: Owen O'Malley <om...@apache.org>


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

Branch: refs/heads/master
Commit: 6eccd472122252499d8757634adaaa89be00a051
Parents: 45b9c50
Author: rip-nsk <ri...@gmail.com>
Authored: Tue May 1 10:32:04 2018 -0700
Committer: Owen O'Malley <om...@apache.org>
Committed: Tue May 1 15:08:12 2018 -0700

----------------------------------------------------------------------
 c++/src/Adaptor.cc       | 43 +++++++++++++++++++++++++++++++++++++++++++
 c++/src/Adaptor.hh.in    |  5 +++++
 c++/src/C09Adapter.cc    | 28 ----------------------------
 c++/src/CMakeLists.txt   | 10 ++++++++++
 c++/test/TestTimezone.cc |  5 ++---
 5 files changed, 60 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/orc/blob/6eccd472/c++/src/Adaptor.cc
----------------------------------------------------------------------
diff --git a/c++/src/Adaptor.cc b/c++/src/Adaptor.cc
new file mode 100644
index 0000000..9c0a74c
--- /dev/null
+++ b/c++/src/Adaptor.cc
@@ -0,0 +1,43 @@
+/**
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "Adaptor.hh"
+#include <sstream>
+#include <iomanip>
+
+#ifndef HAS_STOLL
+namespace std {
+  int64_t std::stoll(std::string str) {
+    int64_t val = 0;
+    stringstream ss;
+    ss << str;
+    ss >> val;
+    return val;
+  }
+}
+#endif
+
+#ifndef HAS_STRPTIME
+char* strptime(const char* s, const char* f, struct tm* tm) {
+  std::istringstream input(s);
+  input.imbue(std::locale(setlocale(LC_ALL, nullptr)));
+  input >> std::get_time(tm, f);
+  if (input.fail()) return nullptr;
+  return (char*)(s + input.tellg());
+}
+#endif

http://git-wip-us.apache.org/repos/asf/orc/blob/6eccd472/c++/src/Adaptor.hh.in
----------------------------------------------------------------------
diff --git a/c++/src/Adaptor.hh.in b/c++/src/Adaptor.hh.in
index 5d9ea15..5fefa3f 100644
--- a/c++/src/Adaptor.hh.in
+++ b/c++/src/Adaptor.hh.in
@@ -21,6 +21,7 @@
 
 #cmakedefine INT64_IS_LL
 #cmakedefine HAS_PREAD
+#cmakedefine HAS_STRPTIME
 #cmakedefine HAS_STOLL
 #cmakedefine HAS_DIAGNOSTIC_PUSH
 #cmakedefine HAS_PRE_1970
@@ -40,6 +41,10 @@
   }
 #endif
 
+#ifndef HAS_STRPTIME
+  char* strptime(const char* buf, const char* format, struct tm* tm);
+#endif
+
 #ifndef HAS_PREAD
   ssize_t pread(int fd, void *buf, size_t count, off_t offset);
 #endif

http://git-wip-us.apache.org/repos/asf/orc/blob/6eccd472/c++/src/C09Adapter.cc
----------------------------------------------------------------------
diff --git a/c++/src/C09Adapter.cc b/c++/src/C09Adapter.cc
deleted file mode 100644
index 8afc752..0000000
--- a/c++/src/C09Adapter.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-#include "orc/C09Adapter.hh"
-#include <sstream>
-
-int64_t std::stoll(std::string str) {
-  int64_t val = 0;
-  stringstream ss ;
-  ss << str ;
-  ss >> val ;
-  return val;
-}

http://git-wip-us.apache.org/repos/asf/orc/blob/6eccd472/c++/src/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/c++/src/CMakeLists.txt b/c++/src/CMakeLists.txt
index 8254574..695a0ae 100644
--- a/c++/src/CMakeLists.txt
+++ b/c++/src/CMakeLists.txt
@@ -26,6 +26,15 @@ CHECK_CXX_SOURCE_COMPILES("
 )
 
 CHECK_CXX_SOURCE_COMPILES("
+    #include<time.h>
+    int main(int,char*[]){
+      struct tm time2020;
+      return !strptime(\"2020-02-02 12:34:56\", \"%Y-%m-%d %H:%M:%S\", &time2020);
+    }"
+  HAS_STRPTIME
+)
+
+CHECK_CXX_SOURCE_COMPILES("
     #include<string>
     int main(int,char* argv[]){
       return static_cast<int>(std::stoll(argv[0]));
@@ -156,6 +165,7 @@ set(SOURCE_FILES
   io/InputStream.cc
   io/OutputStream.cc
   wrap/orc-proto-wrapper.cc
+  Adaptor.cc
   ByteRLE.cc
   ColumnPrinter.cc
   ColumnReader.cc

http://git-wip-us.apache.org/repos/asf/orc/blob/6eccd472/c++/test/TestTimezone.cc
----------------------------------------------------------------------
diff --git a/c++/test/TestTimezone.cc b/c++/test/TestTimezone.cc
index 88415cc..f690786 100644
--- a/c++/test/TestTimezone.cc
+++ b/c++/test/TestTimezone.cc
@@ -21,7 +21,6 @@
 #include "wrap/gtest-wrapper.h"
 
 #include <iostream>
-#include <unistd.h>
 #include <vector>
 
 namespace orc {
@@ -123,7 +122,7 @@ namespace orc {
   const std::string& getZoneFromRule(FutureRule *rule,
                                      const std::string& date) {
     tm timeStruct;
-    if (strptime(date.c_str(), "%F %H:%M:%S", &timeStruct) == nullptr) {
+    if (strptime(date.c_str(), "%Y-%m-%d %H:%M:%S", &timeStruct) == nullptr) {
       throw TimezoneError("bad time " + date);
     }
     return rule->getVariant(timegm(&timeStruct)).name;
@@ -319,7 +318,7 @@ namespace orc {
   const std::string& getVariantFromZone(const Timezone& zone,
                                         const std::string& date) {
     tm timeStruct;
-    if (strptime(date.c_str(), "%F %H:%M:%S", &timeStruct) == nullptr) {
+    if (strptime(date.c_str(), "%Y-%m-%d %H:%M:%S", &timeStruct) == nullptr) {
       throw TimezoneError("bad time " + date);
     }
     return zone.getVariant(timegm(&timeStruct)).name;