Skip to content

Commit 219cc95

Browse files
committed
refactor: Restructure catalog module
1 parent 3b945a0 commit 219cc95

19 files changed

+386
-7
lines changed

.github/workflows/cpp-linter.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ jobs:
3434
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
3535
with:
3636
fetch-depth: 0
37+
- name: Install dependencies
38+
shell: bash
39+
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev
3740
- name: Run build
3841
run: |
3942
mkdir build && cd build

.github/workflows/sanitizer_test.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ jobs:
4242
steps:
4343
- name: Checkout iceberg-cpp
4444
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
45+
- name: Install dependencies
46+
shell: bash
47+
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev
4548
- name: Configure and Build with ASAN & UBSAN
4649
run: |
4750
mkdir build && cd build

.github/workflows/test.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ jobs:
4848
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
4949
with:
5050
fetch-depth: 0
51+
- name: Install dependencies
52+
shell: bash
53+
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev
5154
- name: Build Iceberg
5255
shell: bash
5356
run: ci/scripts/build_iceberg.sh $(pwd)
@@ -85,7 +88,7 @@ jobs:
8588
- name: Install dependencies
8689
shell: cmd
8790
run: |
88-
vcpkg install zlib:x64-windows nlohmann-json:x64-windows nanoarrow:x64-windows roaring:x64-windows
91+
vcpkg install zlib:x64-windows nlohmann-json:x64-windows nanoarrow:x64-windows roaring:x64-windows cpr:x64-windows
8992
- name: Build Iceberg
9093
shell: cmd
9194
run: |

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ option(ICEBERG_BUILD_STATIC "Build static library" ON)
3838
option(ICEBERG_BUILD_SHARED "Build shared library" OFF)
3939
option(ICEBERG_BUILD_TESTS "Build tests" ON)
4040
option(ICEBERG_BUILD_BUNDLE "Build the battery included library" ON)
41+
option(ICEBERG_BUILD_REST "Build rest catalog client" ON)
4142
option(ICEBERG_ENABLE_ASAN "Enable Address Sanitizer" OFF)
4243
option(ICEBERG_ENABLE_UBSAN "Enable Undefined Behavior Sanitizer" OFF)
4344

cmake_modules/IcebergThirdpartyToolchain.cmake

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,58 @@ function(resolve_zlib_dependency)
430430

431431
endfunction()
432432

433+
# ----------------------------------------------------------------------
434+
# cpr (C++ Requests)
435+
436+
function(resolve_cpr_dependency)
437+
prepare_fetchcontent()
438+
439+
set(CPR_BUILD_TESTS OFF)
440+
set(CPR_ENABLE_CURL_HTTP_ONLY ON)
441+
set(CPR_ENABLE_SSL ON)
442+
set(CPR_USE_SYSTEM_CURL ON)
443+
444+
fetchcontent_declare(cpr
445+
${FC_DECLARE_COMMON_OPTIONS}
446+
URL https://github.com/libcpr/cpr/archive/refs/tags/1.12.0.tar.gz
447+
FIND_PACKAGE_ARGS
448+
NAMES
449+
cpr
450+
CONFIG)
451+
452+
fetchcontent_makeavailable(cpr)
453+
454+
if(cpr_SOURCE_DIR)
455+
if(NOT TARGET cpr::cpr)
456+
add_library(cpr::cpr INTERFACE IMPORTED)
457+
target_link_libraries(cpr::cpr INTERFACE cpr)
458+
target_include_directories(cpr::cpr INTERFACE ${cpr_BINARY_DIR}
459+
${cpr_SOURCE_DIR}/include)
460+
endif()
461+
462+
set(CPR_VENDORED TRUE)
463+
set_target_properties(cpr PROPERTIES OUTPUT_NAME "iceberg_vendored_cpr"
464+
POSITION_INDEPENDENT_CODE ON)
465+
add_library(Iceberg::cpr ALIAS cpr)
466+
install(TARGETS cpr
467+
EXPORT iceberg_targets
468+
RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR}"
469+
ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR}"
470+
LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR}")
471+
list(APPEND ICEBERG_SYSTEM_DEPENDENCIES OpenSSL)
472+
else()
473+
set(CPR_VENDORED FALSE)
474+
list(APPEND ICEBERG_SYSTEM_DEPENDENCIES cpr)
475+
endif()
476+
477+
set(ICEBERG_SYSTEM_DEPENDENCIES
478+
${ICEBERG_SYSTEM_DEPENDENCIES}
479+
PARENT_SCOPE)
480+
set(CPR_VENDORED
481+
${CPR_VENDORED}
482+
PARENT_SCOPE)
483+
endfunction()
484+
433485
# ----------------------------------------------------------------------
434486
# Zstd
435487

@@ -455,3 +507,7 @@ if(ICEBERG_BUILD_BUNDLE)
455507
resolve_avro_dependency()
456508
resolve_zstd_dependency()
457509
endif()
510+
511+
if(ICEBERG_BUILD_REST)
512+
resolve_cpr_dependency()
513+
endif()

example/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ find_package(Iceberg CONFIG REQUIRED)
2626

2727
add_executable(demo_example demo_example.cc)
2828

29-
target_link_libraries(demo_example PRIVATE Iceberg::iceberg_bundle_static)
29+
target_link_libraries(demo_example PRIVATE Iceberg::iceberg_bundle_static
30+
Iceberg::iceberg_rest_static)

example/demo_example.cc

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

2222
#include "iceberg/arrow/arrow_file_io.h"
2323
#include "iceberg/avro/avro_register.h"
24-
#include "iceberg/catalog/in_memory_catalog.h"
24+
#include "iceberg/catalog/memory/in_memory_catalog.h"
2525
#include "iceberg/parquet/parquet_register.h"
2626
#include "iceberg/table.h"
2727
#include "iceberg/table_scan.h"

src/iceberg/CMakeLists.txt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
set(ICEBERG_INCLUDES "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src>"
1919
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>")
2020
set(ICEBERG_SOURCES
21-
catalog/in_memory_catalog.cc
21+
catalog/memory/in_memory_catalog.cc
2222
expression/expression.cc
2323
expression/literal.cc
2424
file_reader.cc
@@ -137,13 +137,23 @@ if(ICEBERG_BUILD_BUNDLE)
137137
"$<IF:$<TARGET_EXISTS:Parquet::parquet_static>,Parquet::parquet_static,Parquet::parquet_shared>"
138138
"$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_static>,avro-cpp::avrocpp_static,avro-cpp::avrocpp_shared>"
139139
)
140+
if(ICEBERG_BUILD_REST_CATALOG)
141+
list(APPEND ICEBERG_BUNDLE_STATIC_BUILD_INTERFACE_LIBS
142+
"$<IF:$<TARGET_EXISTS:CURL::libcurl>,CURL::libcurl,CURL::libcurl>"
143+
"$<IF:$<TARGET_EXISTS:cpr::cpr>,cpr::cpr,cpr::cpr>")
144+
endif()
140145
list(APPEND
141146
ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS
142147
"$<IF:$<TARGET_EXISTS:iceberg_shared>,iceberg_shared,iceberg_static>"
143148
"$<IF:$<TARGET_EXISTS:Arrow::arrow_shared>,Arrow::arrow_shared,Arrow::arrow_static>"
144149
"$<IF:$<TARGET_EXISTS:Parquet::parquet_shared>,Parquet::parquet_shared,Parquet::parquet_static>"
145150
"$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_shared>,avro-cpp::avrocpp_shared,avro-cpp::avrocpp_static>"
146151
)
152+
if(ICEBERG_BUILD_REST_CATALOG)
153+
list(APPEND ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS
154+
"$<IF:$<TARGET_EXISTS:CURL::libcurl>,CURL::libcurl,CURL::libcurl>"
155+
"$<IF:$<TARGET_EXISTS:cpr::cpr>,cpr::cpr,cpr::cpr>")
156+
endif()
147157

148158
list(APPEND
149159
ICEBERG_BUNDLE_STATIC_INSTALL_INTERFACE_LIBS
@@ -152,13 +162,27 @@ if(ICEBERG_BUILD_BUNDLE)
152162
"$<IF:$<BOOL:${ARROW_VENDORED}>,Iceberg::parquet_static,$<IF:$<TARGET_EXISTS:Parquet::parquet_static>,Parquet::parquet_static,Parquet::parquet_shared>>"
153163
"$<IF:$<BOOL:${AVRO_VENDORED}>,Iceberg::avrocpp_s,$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_static>,avro-cpp::avrocpp_static,avro-cpp::avrocpp_shared>>"
154164
)
165+
if(ICEBERG_BUILD_REST_CATALOG)
166+
list(APPEND
167+
ICEBERG_BUNDLE_STATIC_INSTALL_INTERFACE_LIBS
168+
"$<IF:$<BOOL:${CURL_VENDORED}>,Iceberg::libcurl_static,$<IF:$<TARGET_EXISTS:CURL::libcurl>,CURL::libcurl,CURL::libcurl>>"
169+
"$<IF:$<BOOL:${CPR_VENDORED}>,Iceberg::cpr,$<IF:$<TARGET_EXISTS:cpr::cpr>,cpr::cpr,cpr::cpr>>"
170+
)
171+
endif()
155172
list(APPEND
156173
ICEBERG_BUNDLE_SHARED_INSTALL_INTERFACE_LIBS
157174
"$<IF:$<TARGET_EXISTS:Iceberg::iceberg_shared>,Iceberg::iceberg_shared,Iceberg::iceberg_static>"
158175
"$<IF:$<BOOL:${ARROW_VENDORED}>,Iceberg::arrow_static,$<IF:$<TARGET_EXISTS:Arrow::arrow_shared>,Arrow::arrow_shared,Arrow::arrow_static>>"
159176
"$<IF:$<BOOL:${ARROW_VENDORED}>,Iceberg::parquet_static,$<IF:$<TARGET_EXISTS:Parquet::parquet_shared>,Parquet::parquet_shared,Parquet::parquet_static>>"
160177
"$<IF:$<BOOL:${AVRO_VENDORED}>,Iceberg::avrocpp_s,$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_shared>,avro-cpp::avrocpp_shared,avro-cpp::avrocpp_static>>"
161178
)
179+
if(ICEBERG_BUILD_REST_CATALOG)
180+
list(APPEND
181+
ICEBERG_BUNDLE_SHARED_INSTALL_INTERFACE_LIBS
182+
"$<IF:$<BOOL:${CURL_VENDORED}>,Iceberg::libcurl_static,$<IF:$<TARGET_EXISTS:CURL::libcurl>,CURL::libcurl,CURL::libcurl>>"
183+
"$<IF:$<BOOL:${CPR_VENDORED}>,Iceberg::cpr,$<IF:$<TARGET_EXISTS:cpr::cpr>,cpr::cpr,cpr::cpr>>"
184+
)
185+
endif()
162186

163187
add_iceberg_lib(iceberg_bundle
164188
SOURCES

src/iceberg/IcebergConfig.cmake.in

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
# Iceberg::iceberg_static
2727
# Iceberg::iceberg_bundle_shared
2828
# Iceberg::iceberg_bundle_static
29+
# Iceberg::iceberg_rest_shared
30+
# Iceberg::iceberg_rest_static
2931

3032
@PACKAGE_INIT@
3133

@@ -79,6 +81,10 @@ if(NOT TARGET roaring::roaring-headers-cpp)
7981
add_library(roaring::roaring-headers-cpp INTERFACE IMPORTED)
8082
endif()
8183

84+
if(NOT TARGET CURL::libcurl)
85+
add_library(CURL::libcurl INTERFACE IMPORTED)
86+
endif()
87+
8288
include("${CMAKE_CURRENT_LIST_DIR}/IcebergTargets.cmake")
8389

8490
if(TARGET Iceberg::arrow_static)

src/iceberg/catalog/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,7 @@
1616
# under the License.
1717

1818
iceberg_install_all_headers(iceberg/catalog)
19+
20+
if(ICEBERG_BUILD_REST)
21+
add_subdirectory(rest)
22+
endif()

0 commit comments

Comments
 (0)