Skip to content

Commit 02c011d

Browse files
committed
use forward declare and add missing export
1 parent 6ca48c6 commit 02c011d

38 files changed

+317
-165
lines changed

CMakeLists.txt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,17 @@ if(ICEBERG_BUILD_SHARED)
5050
else()
5151
set(ICEBERG_TEST_LINKAGE_DEFAULT "static")
5252
endif()
53-
set(ICEBERG_TEST_LINKAGE ${ICEBERG_TEST_LINKAGE_DEFAULT} CACHE STRING "Linkage of Iceberg libraries with unit tests executables")
53+
set(ICEBERG_TEST_LINKAGE
54+
${ICEBERG_TEST_LINKAGE_DEFAULT}
55+
CACHE STRING "Linkage of Iceberg libraries with unit tests executables")
5456
if(ICEBERG_BUILD_TESTS)
5557
if(ICEBERG_TEST_LINKAGE STREQUAL "shared" AND NOT ICEBERG_BUILD_SHARED)
56-
message(FATAL_ERROR "If using ICEBERG_TEST_LINKAGE=shared, must also pass ICEBERG_BUILD_SHARED=ON")
58+
message(FATAL_ERROR "If using ICEBERG_TEST_LINKAGE=shared, must also pass ICEBERG_BUILD_SHARED=ON"
59+
)
5760
endif()
5861
if(ICEBERG_TEST_LINKAGE STREQUAL "static" AND NOT ICEBERG_BUILD_STATIC)
59-
message(FATAL_ERROR "If using ICEBERG_TEST_LINKAGE=static, must also pass ICEBERG_BUILD_STATIC=ON")
62+
message(FATAL_ERROR "If using ICEBERG_TEST_LINKAGE=static, must also pass ICEBERG_BUILD_STATIC=ON"
63+
)
6064
endif()
6165
endif()
6266

src/iceberg/CMakeLists.txt

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ set(ICEBERG_SOURCES
7878

7979
set(ICEBERG_STATIC_BUILD_INTERFACE_LIBS)
8080
set(ICEBERG_SHARED_BUILD_INTERFACE_LIBS)
81+
set(ICEBERG_SHARED_PRIVATE_BUILD_INTERFACE_LIBS)
8182
set(ICEBERG_STATIC_INSTALL_INTERFACE_LIBS)
8283
set(ICEBERG_SHARED_INSTALL_INTERFACE_LIBS)
8384

@@ -88,25 +89,23 @@ list(APPEND
8889
roaring::roaring
8990
spdlog::spdlog
9091
ZLIB::ZLIB)
92+
list(APPEND ICEBERG_SHARED_BUILD_INTERFACE_LIBS nanoarrow::nanoarrow_shared)
9193
list(APPEND
92-
ICEBERG_SHARED_BUILD_INTERFACE_LIBS
93-
nanoarrow::nanoarrow_shared
94+
ICEBERG_SHARED_PRIVATE_BUILD_INTERFACE_LIBS
9495
nlohmann_json::nlohmann_json
9596
roaring::roaring
9697
spdlog::spdlog
9798
ZLIB::ZLIB)
9899
list(APPEND
99100
ICEBERG_STATIC_INSTALL_INTERFACE_LIBS
100-
"$<IF:$<BOOL:${NANOARROW_VENDORED}>,iceberg::nanoarrow_static,$<IF:$<TARGET_EXISTS:nanoarrow::nanoarrow_static>,nanoarrow::nanoarrow_static,nanoarrow::nanoarrow_shared>>"
101-
"$<IF:$<BOOL:${NLOHMANN_JSON_VENDORED}>,iceberg::nlohmann_json,$<IF:$<TARGET_EXISTS:nlohmann_json::nlohmann_json>,nlohmann_json::nlohmann_json,nlohmann_json::nlohmann_json>>"
101+
"$<IF:$<BOOL:${NANOARROW_VENDORED}>,iceberg::nanoarrow_static,nanoarrow::nanoarrow_static>"
102+
"$<IF:$<BOOL:${NLOHMANN_JSON_VENDORED}>,iceberg::nlohmann_json,nlohmann_json::nlohmann_json>"
102103
"$<IF:$<BOOL:${CROARING_VENDORED}>,iceberg::roaring,roaring::roaring>"
103104
"$<IF:$<BOOL:${SPDLOG_VENDORED}>,iceberg::spdlog,spdlog::spdlog>")
104105
list(APPEND
105106
ICEBERG_SHARED_INSTALL_INTERFACE_LIBS
106-
"$<IF:$<BOOL:${NANOARROW_VENDORED}>,iceberg::nanoarrow_shared,$<IF:$<TARGET_EXISTS:nanoarrow::nanoarrow_shared>,nanoarrow::nanoarrow_shared,nanoarrow::nanoarrow_static>>"
107-
"$<IF:$<BOOL:${NLOHMANN_JSON_VENDORED}>,iceberg::nlohmann_json,$<IF:$<TARGET_EXISTS:nlohmann_json::nlohmann_json>,nlohmann_json::nlohmann_json,nlohmann_json::nlohmann_json>>"
108-
"$<IF:$<BOOL:${CROARING_VENDORED}>,iceberg::roaring,roaring::roaring>"
109-
"$<IF:$<BOOL:${SPDLOG_VENDORED}>,iceberg::spdlog,spdlog::spdlog>")
107+
"$<IF:$<BOOL:${NANOARROW_VENDORED}>,iceberg::nanoarrow_shared,nanoarrow::nanoarrow_shared>"
108+
)
110109

111110
add_iceberg_lib(iceberg
112111
SOURCES
@@ -115,6 +114,8 @@ add_iceberg_lib(iceberg
115114
${ICEBERG_INCLUDES}
116115
SHARED_LINK_LIBS
117116
${ICEBERG_SHARED_BUILD_INTERFACE_LIBS}
117+
SHARED_PRIVATE_LINK_LIBS
118+
${ICEBERG_SHARED_PRIVATE_BUILD_INTERFACE_LIBS}
118119
STATIC_LINK_LIBS
119120
${ICEBERG_STATIC_BUILD_INTERFACE_LIBS}
120121
STATIC_INSTALL_INTERFACE_LIBS
@@ -149,44 +150,37 @@ if(ICEBERG_BUILD_BUNDLE)
149150
# Libraries to link with exported libiceberg_bundle.{so,a}.
150151
set(ICEBERG_BUNDLE_STATIC_BUILD_INTERFACE_LIBS)
151152
set(ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS)
153+
set(ICEBERG_BUNDLE_SHARED_PRIVATE_BUILD_INTERFACE_LIBS)
152154
set(ICEBERG_BUNDLE_STATIC_INSTALL_INTERFACE_LIBS)
153155
set(ICEBERG_BUNDLE_SHARED_INSTALL_INTERFACE_LIBS)
154156

155157
list(APPEND
156158
ICEBERG_BUNDLE_STATIC_BUILD_INTERFACE_LIBS
157-
"$<IF:$<TARGET_EXISTS:iceberg_static>,iceberg_static,iceberg_shared>"
158-
"$<IF:$<TARGET_EXISTS:Arrow::arrow_static>,Arrow::arrow_static,Arrow::arrow_shared>"
159-
"$<IF:$<TARGET_EXISTS:Parquet::parquet_static>,Parquet::parquet_static,Parquet::parquet_shared>"
160-
"$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_static>,avro-cpp::avrocpp_static,avro-cpp::avrocpp_shared>"
161-
)
159+
iceberg_static
160+
Arrow::arrow_static
161+
Parquet::parquet_static
162+
avro-cpp::avrocpp_static)
163+
list(APPEND ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS iceberg_shared)
162164
list(APPEND
163-
ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS
164-
"$<IF:$<TARGET_EXISTS:iceberg_shared>,iceberg_shared,iceberg_static>"
165-
"$<IF:$<TARGET_EXISTS:Arrow::arrow_shared>,Arrow::arrow_shared,Arrow::arrow_static>"
166-
"$<IF:$<TARGET_EXISTS:Parquet::parquet_shared>,Parquet::parquet_shared,Parquet::parquet_static>"
167-
"$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_shared>,avro-cpp::avrocpp_shared,avro-cpp::avrocpp_static>"
168-
)
169-
165+
ICEBERG_BUNDLE_SHARED_PRIVATE_BUILD_INTERFACE_LIBS
166+
Arrow::arrow_static
167+
Parquet::parquet_static
168+
avro-cpp::avrocpp_static)
170169
list(APPEND
171170
ICEBERG_BUNDLE_STATIC_INSTALL_INTERFACE_LIBS
172-
"$<IF:$<TARGET_EXISTS:iceberg::iceberg_static>,iceberg::iceberg_static,iceberg::iceberg_shared>"
173-
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::arrow_static,$<IF:$<TARGET_EXISTS:Arrow::arrow_static>,Arrow::arrow_static,Arrow::arrow_shared>>"
174-
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::parquet_static,$<IF:$<TARGET_EXISTS:Parquet::parquet_static>,Parquet::parquet_static,Parquet::parquet_shared>>"
175-
"$<IF:$<BOOL:${AVRO_VENDORED}>,iceberg::avrocpp_s,$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_static>,avro-cpp::avrocpp_static,avro-cpp::avrocpp_shared>>"
176-
)
177-
list(APPEND
178-
ICEBERG_BUNDLE_SHARED_INSTALL_INTERFACE_LIBS
179-
"$<IF:$<TARGET_EXISTS:iceberg::iceberg_shared>,iceberg::iceberg_shared,iceberg::iceberg_static>"
180-
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::arrow_static,$<IF:$<TARGET_EXISTS:Arrow::arrow_shared>,Arrow::arrow_shared,Arrow::arrow_static>>"
181-
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::parquet_static,$<IF:$<TARGET_EXISTS:Parquet::parquet_shared>,Parquet::parquet_shared,Parquet::parquet_static>>"
182-
"$<IF:$<BOOL:${AVRO_VENDORED}>,iceberg::avrocpp_s,$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_shared>,avro-cpp::avrocpp_shared,avro-cpp::avrocpp_static>>"
183-
)
171+
iceberg::iceberg_static
172+
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::arrow_static,Arrow::arrow_static>"
173+
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::parquet_static,Parquet::parquet_static>"
174+
"$<IF:$<BOOL:${AVRO_VENDORED}>,iceberg::avrocpp_s,avro-cpp::avrocpp_static>")
175+
list(APPEND ICEBERG_BUNDLE_SHARED_INSTALL_INTERFACE_LIBS iceberg::iceberg_shared)
184176

185177
add_iceberg_lib(iceberg_bundle
186178
SOURCES
187179
${ICEBERG_BUNDLE_SOURCES}
188180
SHARED_LINK_LIBS
189181
${ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS}
182+
SHARED_PRIVATE_LINK_LIBS
183+
${ICEBERG_BUNDLE_SHARED_PRIVATE_BUILD_INTERFACE_LIBS}
190184
STATIC_LINK_LIBS
191185
${ICEBERG_BUNDLE_STATIC_BUILD_INTERFACE_LIBS}
192186
STATIC_INSTALL_INTERFACE_LIBS

src/iceberg/arrow/arrow_fs_file_io_internal.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@
2121

2222
#include <memory>
2323

24-
#include <arrow/filesystem/filesystem.h>
25-
2624
#include "iceberg/file_io.h"
2725
#include "iceberg/iceberg_bundle_export.h"
2826

27+
namespace arrow::fs {
28+
class FileSystem;
29+
}
30+
2931
namespace iceberg::arrow {
3032

3133
/// \brief A concrete implementation of FileIO for Arrow file system.

src/iceberg/arrow_c_data_guard_internal.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
#include "iceberg/arrow_c_data_guard_internal.h"
2121

22+
#include <nanoarrow/nanoarrow.h>
23+
2224
namespace iceberg::internal {
2325

2426
ArrowArrayGuard::~ArrowArrayGuard() {

src/iceberg/arrow_c_data_guard_internal.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,16 @@
1919

2020
#pragma once
2121

22-
#include <nanoarrow/nanoarrow.h>
22+
#include "iceberg/iceberg_export.h"
2323

24-
#include "iceberg/arrow_c_data.h"
24+
struct ArrowArray;
25+
struct ArrowArrayView;
26+
struct ArrowBuffer;
27+
struct ArrowSchema;
2528

2629
namespace iceberg::internal {
2730

28-
class ArrowArrayGuard {
31+
class ICEBERG_EXPORT ArrowArrayGuard {
2932
public:
3033
explicit ArrowArrayGuard(ArrowArray* array) : array_(array) {}
3134
~ArrowArrayGuard();
@@ -34,7 +37,7 @@ class ArrowArrayGuard {
3437
ArrowArray* array_;
3538
};
3639

37-
class ArrowSchemaGuard {
40+
class ICEBERG_EXPORT ArrowSchemaGuard {
3841
public:
3942
explicit ArrowSchemaGuard(ArrowSchema* schema) : schema_(schema) {}
4043
~ArrowSchemaGuard();
@@ -43,7 +46,7 @@ class ArrowSchemaGuard {
4346
ArrowSchema* schema_;
4447
};
4548

46-
class ArrowArrayViewGuard {
49+
class ICEBERG_EXPORT ArrowArrayViewGuard {
4750
public:
4851
explicit ArrowArrayViewGuard(ArrowArrayView* view) : view_(view) {}
4952
~ArrowArrayViewGuard();
@@ -52,7 +55,7 @@ class ArrowArrayViewGuard {
5255
ArrowArrayView* view_;
5356
};
5457

55-
class ArrowArrayBufferGuard {
58+
class ICEBERG_EXPORT ArrowArrayBufferGuard {
5659
public:
5760
explicit ArrowArrayBufferGuard(ArrowBuffer* buffer) : buffer_(buffer) {}
5861
~ArrowArrayBufferGuard();

src/iceberg/avro/avro_data_util.cc

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
* under the License.
1818
*/
1919

20-
#include <ranges>
21-
2220
#include <arrow/array/builder_binary.h>
2321
#include <arrow/array/builder_decimal.h>
2422
#include <arrow/array/builder_nested.h>
@@ -42,8 +40,6 @@
4240

4341
namespace iceberg::avro {
4442

45-
using ::iceberg::arrow::ToErrorKind;
46-
4743
namespace {
4844

4945
/// \brief Forward declaration for mutual recursion.

src/iceberg/avro/avro_data_util_internal.h

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,20 @@
1919

2020
#pragma once
2121

22-
#include <arrow/array/builder_base.h>
23-
#include <avro/GenericDatum.hh>
24-
22+
#include "iceberg/iceberg_bundle_export.h"
2523
#include "iceberg/schema_util.h"
2624

25+
namespace arrow {
26+
class Array;
27+
class ArrayBuilder;
28+
} // namespace arrow
29+
30+
namespace avro {
31+
class Node;
32+
class GenericDatum;
33+
using NodePtr = std::shared_ptr<Node>;
34+
} // namespace avro
35+
2736
namespace iceberg::avro {
2837

2938
/// \brief Append an Avro datum to an Arrow array builder.
@@ -37,19 +46,20 @@ namespace iceberg::avro {
3746
/// \param projected_schema The projected schema
3847
/// \param array_builder The Arrow array builder to append to (must be a struct builder)
3948
/// \return Status indicating success or failure
40-
Status AppendDatumToBuilder(const ::avro::NodePtr& avro_node,
41-
const ::avro::GenericDatum& avro_datum,
42-
const SchemaProjection& projection,
43-
const Schema& projected_schema,
44-
::arrow::ArrayBuilder* array_builder);
49+
ICEBERG_BUNDLE_EXPORT Status AppendDatumToBuilder(const ::avro::NodePtr& avro_node,
50+
const ::avro::GenericDatum& avro_datum,
51+
const SchemaProjection& projection,
52+
const Schema& projected_schema,
53+
::arrow::ArrayBuilder* array_builder);
4554

4655
/// \brief Extract an Avro datum from an Arrow array.
4756
///
4857
/// \param array The Arrow array to extract from.
4958
/// \param index The index of the element to extract.
5059
/// \param datum The Avro datum to extract to. Its Avro type should be consistent with the
5160
/// Arrow type.
52-
Status ExtractDatumFromArray(const ::arrow::Array& array, int64_t index,
53-
::avro::GenericDatum* datum);
61+
ICEBERG_BUNDLE_EXPORT Status ExtractDatumFromArray(const ::arrow::Array& array,
62+
int64_t index,
63+
::avro::GenericDatum* datum);
5464

5565
} // namespace iceberg::avro

src/iceberg/avro/avro_reader.cc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
#include "iceberg/avro/avro_register.h"
3838
#include "iceberg/avro/avro_schema_util_internal.h"
3939
#include "iceberg/avro/avro_stream_internal.h"
40-
#include "iceberg/name_mapping.h"
4140
#include "iceberg/schema_internal.h"
4241
#include "iceberg/util/checked_cast.h"
4342
#include "iceberg/util/macros.h"

src/iceberg/avro/avro_register.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
#include "iceberg/avro/avro_register.h"
2121

22-
#include "iceberg/avro/avro_schema_util_internal.h"
22+
#include "iceberg/avro/avro_register_internal.h"
2323

2424
namespace iceberg::avro {
2525

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
#pragma once
21+
22+
#include <avro/LogicalType.hh>
23+
24+
namespace iceberg::avro {
25+
26+
struct MapLogicalType : public ::avro::CustomLogicalType {
27+
MapLogicalType() : ::avro::CustomLogicalType("map") {}
28+
};
29+
30+
} // namespace iceberg::avro

0 commit comments

Comments
 (0)