From 60dec358e9b9ee6a357441a90bd1556c895d8bac Mon Sep 17 00:00:00 2001 From: fscheibner Date: Thu, 15 Sep 2016 09:07:13 -0700 Subject: [PATCH 1/2] Mark ScanAllValues as inline to prevent link error When reader.h is included in multiple cpp files, it causes a linker error because ScanAllValues is defined in multiple TUs --- src/parquet/column/scan-all.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parquet/column/scan-all.h b/src/parquet/column/scan-all.h index fd63bffe..5ff3ea04 100644 --- a/src/parquet/column/scan-all.h +++ b/src/parquet/column/scan-all.h @@ -30,7 +30,7 @@ int64_t ScanAll(int32_t batch_size, int16_t* def_levels, int16_t* rep_levels, batch_size, def_levels, rep_levels, vals, values_buffered); } -int64_t ScanAllValues(int32_t batch_size, int16_t* def_levels, int16_t* rep_levels, +inline int64_t ScanAllValues(int32_t batch_size, int16_t* def_levels, int16_t* rep_levels, uint8_t* values, int64_t* values_buffered, parquet::ColumnReader* reader) { switch (reader->type()) { case parquet::Type::BOOLEAN: From 8f915501aabd33ad6ce27312bbcb6940ec5df08e Mon Sep 17 00:00:00 2001 From: fscheibner Date: Thu, 15 Sep 2016 19:53:15 -0700 Subject: [PATCH 2/2] Move ScanAllValues to scan-all.cc --- CMakeLists.txt | 1 + src/parquet/column/scan-all.cc | 56 ++++++++++++++++++++++++++++++++++ src/parquet/column/scan-all.h | 35 ++------------------- 3 files changed, 59 insertions(+), 33 deletions(-) create mode 100644 src/parquet/column/scan-all.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 86d06842..3878056e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -493,6 +493,7 @@ set(LIBPARQUET_SRCS src/parquet/column/reader.cc src/parquet/column/writer.cc src/parquet/column/scanner.cc + src/parquet/column/scan-all.cc src/parquet/compression/codec.cc src/parquet/compression/snappy-codec.cc diff --git a/src/parquet/column/scan-all.cc b/src/parquet/column/scan-all.cc new file mode 100644 index 00000000..2823c60e --- /dev/null +++ b/src/parquet/column/scan-all.cc @@ -0,0 +1,56 @@ +// 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 "parquet/column/scan-all.h" + +namespace parquet { + +int64_t ScanAllValues(int32_t batch_size, int16_t* def_levels, int16_t* rep_levels, + uint8_t* values, int64_t* values_buffered, parquet::ColumnReader* reader) { + switch (reader->type()) { + case parquet::Type::BOOLEAN: + return ScanAll( + batch_size, def_levels, rep_levels, values, values_buffered, reader); + case parquet::Type::INT32: + return ScanAll( + batch_size, def_levels, rep_levels, values, values_buffered, reader); + case parquet::Type::INT64: + return ScanAll( + batch_size, def_levels, rep_levels, values, values_buffered, reader); + case parquet::Type::INT96: + return ScanAll( + batch_size, def_levels, rep_levels, values, values_buffered, reader); + case parquet::Type::FLOAT: + return ScanAll( + batch_size, def_levels, rep_levels, values, values_buffered, reader); + case parquet::Type::DOUBLE: + return ScanAll( + batch_size, def_levels, rep_levels, values, values_buffered, reader); + case parquet::Type::BYTE_ARRAY: + return ScanAll( + batch_size, def_levels, rep_levels, values, values_buffered, reader); + case parquet::Type::FIXED_LEN_BYTE_ARRAY: + return ScanAll( + batch_size, def_levels, rep_levels, values, values_buffered, reader); + default: + parquet::ParquetException::NYI("type reader not implemented"); + } + // Unreachable code, but supress compiler warning + return 0; +} + +} // namespace parquet diff --git a/src/parquet/column/scan-all.h b/src/parquet/column/scan-all.h index 5ff3ea04..b80e2c20 100644 --- a/src/parquet/column/scan-all.h +++ b/src/parquet/column/scan-all.h @@ -30,38 +30,7 @@ int64_t ScanAll(int32_t batch_size, int16_t* def_levels, int16_t* rep_levels, batch_size, def_levels, rep_levels, vals, values_buffered); } -inline int64_t ScanAllValues(int32_t batch_size, int16_t* def_levels, int16_t* rep_levels, - uint8_t* values, int64_t* values_buffered, parquet::ColumnReader* reader) { - switch (reader->type()) { - case parquet::Type::BOOLEAN: - return ScanAll( - batch_size, def_levels, rep_levels, values, values_buffered, reader); - case parquet::Type::INT32: - return ScanAll( - batch_size, def_levels, rep_levels, values, values_buffered, reader); - case parquet::Type::INT64: - return ScanAll( - batch_size, def_levels, rep_levels, values, values_buffered, reader); - case parquet::Type::INT96: - return ScanAll( - batch_size, def_levels, rep_levels, values, values_buffered, reader); - case parquet::Type::FLOAT: - return ScanAll( - batch_size, def_levels, rep_levels, values, values_buffered, reader); - case parquet::Type::DOUBLE: - return ScanAll( - batch_size, def_levels, rep_levels, values, values_buffered, reader); - case parquet::Type::BYTE_ARRAY: - return ScanAll( - batch_size, def_levels, rep_levels, values, values_buffered, reader); - case parquet::Type::FIXED_LEN_BYTE_ARRAY: - return ScanAll( - batch_size, def_levels, rep_levels, values, values_buffered, reader); - default: - parquet::ParquetException::NYI("type reader not implemented"); - } - // Unreachable code, but supress compiler warning - return 0; -} +int64_t ScanAllValues(int32_t batch_size, int16_t* def_levels, int16_t* rep_levels, + uint8_t* values, int64_t* values_buffered, parquet::ColumnReader* reader); #endif // PARQUET_SCAN_ALL_H