From 914f84b733b0714cc03899aeca3bc58f0a4ca9d9 Mon Sep 17 00:00:00 2001 From: zherui cao Date: Fri, 25 May 2018 11:30:22 -0400 Subject: [PATCH] deal with orc file without file format --- c++/include/orc/Common.hh | 3 +++ c++/src/Common.cc | 10 ++++++++++ c++/src/Reader.cc | 2 +- c++/src/Writer.cc | 2 +- examples/orc_no_format.orc | Bin 0 -> 745 bytes tools/test/TestFileMetadata.cc | 32 ++++++++++++++++++++++++++++++++ 6 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 examples/orc_no_format.orc diff --git a/c++/include/orc/Common.hh b/c++/include/orc/Common.hh index b23d019a0b..9bfa82d288 100644 --- a/c++/include/orc/Common.hh +++ b/c++/include/orc/Common.hh @@ -32,6 +32,9 @@ namespace orc { uint32_t majorVersion; uint32_t minorVersion; public: + static const FileVersion& v_0_11(); + static const FileVersion& v_0_12(); + FileVersion(uint32_t major, uint32_t minor) : majorVersion(major), minorVersion(minor) { } diff --git a/c++/src/Common.cc b/c++/src/Common.cc index 0542188d18..0a5256e9e7 100644 --- a/c++/src/Common.cc +++ b/c++/src/Common.cc @@ -109,4 +109,14 @@ namespace orc { ss << getMajor() << '.' << getMinor(); return ss.str(); } + + const FileVersion& FileVersion::v_0_11(){ + static FileVersion version(0,11); + return version; + } + + const FileVersion& FileVersion::v_0_12(){ + static FileVersion version(0,12); + return version; + } } diff --git a/c++/src/Reader.cc b/c++/src/Reader.cc index 6db8008e4d..776f4d80e9 100644 --- a/c++/src/Reader.cc +++ b/c++/src/Reader.cc @@ -406,7 +406,7 @@ namespace orc { FileVersion ReaderImpl::getFormatVersion() const { if (contents->postscript->version_size() != 2) { - throw std::logic_error("Unrecognized file version."); + return FileVersion::v_0_11(); } return FileVersion( contents->postscript->version(0), diff --git a/c++/src/Writer.cc b/c++/src/Writer.cc index 016ce35413..16c2af4850 100644 --- a/c++/src/Writer.cc +++ b/c++/src/Writer.cc @@ -40,7 +40,7 @@ namespace orc { bool enableIndex; WriterOptionsPrivate() : - fileVersion(0, 11) { // default to Hive_0_11 + fileVersion(FileVersion::v_0_11()) { // default to Hive_0_11 stripeSize = 64 * 1024 * 1024; // 64M compressionBlockSize = 64 * 1024; // 64K rowIndexStride = 10000; diff --git a/examples/orc_no_format.orc b/examples/orc_no_format.orc new file mode 100644 index 0000000000000000000000000000000000000000..3efb93a4de7f94bd3fa3f713edebd6c3ff05521d GIT binary patch literal 745 zcmeYda^_`V;9?PC;$W3vV0irKX;OLvgQ6N=7{fjw_tXOrcVPry*isKY-SphtzYV7* z_587^oquM}B`#UvWM=Qx4=#n&3MV@=YahSkC981F+{8fO(l;+1?<@QtI4*qW((%<@ z#iC_uvZd&Z=URr9rklFFe9m296m+=CfMOvVg96Y(p(kMb&G^_9)i~K0WI#@O4i*yQ zV^d{gkOVrGi;IN;2!Kw;l*eKQD+9y-AM6YaObm=*CeXkC7=dCeK*nz^4OLxj2}TCn za|gK&8St<@V2@IK8>N0a_nngK!dGXbWm`LMHAZFLzjw@w|35#cyh`%r2G94EA2;m& zB`|Z+p5ws<3zj^vun{`VcyQ-7dG6$AS4($9>fQWknq_@g!uRj}P}Q)CKbjXG-gBGA zylFwykrcaMo8~QWdb`Jejn1v6v)3BzSibu#VdX0q=iFYg?eduwpQguyT*&|?ZZI&! zp0gA?tiZz(pvXAsu7&sF&rh9p79BC@4gO%qe7NY`4E~dkW47&C@Qhum_`JEy&z8xr z&&k}FZe{PKtG-ET`=f1JTd z(n&*EHH=SB(M?TNjjv4Aj4w}7O)N}dw&WRcwycz-=M$1ndY|!~nxyM@PTz~wn?Y1! zLzH2mLxB$a>L8Wr(>8D0R_BoF=~g#ypMP3hW@}&P#>SPRj h5#kBck>T;;Nf6}V)_P}fke`9$5~Bd4L_>oBCjf)l9|8aX literal 0 HcmV?d00001 diff --git a/tools/test/TestFileMetadata.cc b/tools/test/TestFileMetadata.cc index ec962e52ae..45d6d5b623 100644 --- a/tools/test/TestFileMetadata.cc +++ b/tools/test/TestFileMetadata.cc @@ -205,3 +205,35 @@ TEST (TestFileMetadata, testJson) { EXPECT_EQ("", error); } + + +TEST (TestFileMetadata, testNoFormat) { + const std::string pgm = findProgram("tools/src/orc-metadata"); + const std::string file = findExample("orc_no_format.orc"); + const std::string expected = + "{ \"name\": \"" + file + "\",\n" + " \"type\": \"struct<_col0:array,_col1:map,_col2:struct>\",\n" + " \"rows\": 5,\n" + " \"stripe count\": 1,\n" + " \"format\": \"0.11\", \"writer version\": \"original\",\n" + " \"compression\": \"zlib\", \"compression block\": 262144,\n" + " \"file length\": 745,\n" + " \"content\": 525, \"stripe stats\": 0, \"footer\": 210, \"postscript\": 9,\n" + " \"row index stride\": 10000,\n" + " \"user metadata\": {\n" + " },\n" + " \"stripes\": [\n" + " { \"stripe\": 0, \"rows\": 5,\n" + " \"offset\": 3, \"length\": 522,\n" + " \"index\": 224, \"data\": 187, \"footer\": 111\n" + " }\n" + " ]\n" + "}\n"; + + std::string output; + std::string error; + std::cout << expected; + EXPECT_EQ(0, runProgram({pgm, file}, output, error)); + EXPECT_EQ(expected, output); + EXPECT_EQ("", error); +}