From 0eb1caf3cfa1fb5f5520fbaedcc2077fb2496d5f Mon Sep 17 00:00:00 2001 From: SteNicholas Date: Tue, 3 Mar 2026 18:39:09 +0800 Subject: [PATCH] feat: support x86-64 and arm64 architectures of macOS --- .github/workflows/clang_test.yaml | 26 ++- CMakeLists.txt | 113 +++++++---- ci/scripts/build_paimon.sh | 42 ++-- cmake_modules/BuildUtils.cmake | 16 +- cmake_modules/SetupCxxFlags.cmake | 6 +- cmake_modules/ThirdpartyToolchain.cmake | 113 +++++++---- docs/source/building.rst | 15 +- src/paimon/CMakeLists.txt | 82 +++++--- src/paimon/common/logging/logging.cpp | 2 +- src/paimon/common/memory/memory_pool.cpp | 2 +- .../predicate/literal_converter_test.cpp | 18 +- .../common/predicate/predicate_test.cpp | 184 ++++++++++-------- .../predicate/predicate_validator_test.cpp | 20 +- .../reader/predicate_batch_reader_test.cpp | 40 ++-- .../prefetch_file_batch_reader_impl_test.cpp | 30 +-- .../core/table/source/table_read_test.cpp | 10 +- src/paimon/core/utils/field_mapping_test.cpp | 9 +- src/paimon/format/avro/CMakeLists.txt | 57 ++++-- .../format/avro/avro_input_stream_impl.cpp | 3 +- src/paimon/format/blob/CMakeLists.txt | 52 +++-- src/paimon/format/blob/blob_format_writer.cpp | 6 +- src/paimon/format/orc/CMakeLists.txt | 61 +++--- .../format/orc/predicate_converter_test.cpp | 80 ++++---- .../format/orc/predicate_pushdown_test.cpp | 94 +++++---- src/paimon/format/parquet/CMakeLists.txt | 58 ++++-- .../parquet/predicate_converter_test.cpp | 51 +++-- .../parquet/predicate_pushdown_test.cpp | 99 ++++++---- src/paimon/fs/jindo/CMakeLists.txt | 2 + .../lumina/lumina_global_index_test.cpp | 17 +- src/paimon/symbols.list | 17 ++ src/paimon/testing/utils/CMakeLists.txt | 33 +++- test/inte/read_inte_with_index_test.cpp | 54 ++--- test/inte/scan_inte_test.cpp | 7 +- 33 files changed, 896 insertions(+), 523 deletions(-) create mode 100644 src/paimon/symbols.list diff --git a/.github/workflows/clang_test.yaml b/.github/workflows/clang_test.yaml index 3bcd2ccc..c8918b82 100644 --- a/.github/workflows/clang_test.yaml +++ b/.github/workflows/clang_test.yaml @@ -30,7 +30,8 @@ permissions: contents: read jobs: - clang-test: + clang-test-ubuntu-x86-64: + name: Ubuntu 24.04 x86_64 runs-on: ubuntu-24.04 timeout-minutes: 120 strategy: @@ -47,3 +48,26 @@ jobs: CC: clang CXX: clang++ run: ci/scripts/build_paimon.sh $(pwd) false true + clang-test-macos-x86_64: + name: macOS 26 x86_64 + runs-on: macos-26 + timeout-minutes: 120 + strategy: + fail-fast: false + steps: + - name: Checkout paimon-cpp + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + lfs: true + fetch-depth: 0 # fetch all history for git diff in clang-tidy + - name: Build Paimon + shell: bash + run: | + brew uninstall cmake + brew uninstall --ignore-dependencies brotli + wget https://cmake.org/files/v3.31/cmake-3.31.0-macos-universal.tar.gz + tar -xzf cmake-3.31.0-macos-universal.tar.gz + mv cmake-3.31.0-macos-universal/CMake.app /Applications/ + echo 'export PATH="/Applications/CMake.app/Contents/bin:$PATH"' >> ~/.zshrc + source ~/.zshrc + ci/scripts/build_paimon.sh $(pwd) false true diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a81fbb2..2b0723f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,8 +52,15 @@ option(PAIMON_ENABLE_AVRO "Whether to enable avro file format" ON) option(PAIMON_ENABLE_ORC "Whether to enable orc file format" ON) option(PAIMON_ENABLE_LANCE "Whether to enable lance file format" OFF) option(PAIMON_ENABLE_JINDO "Whether to enable jindo file system" OFF) -option(PAIMON_ENABLE_LUMINA "Whether to enable lumina vector index" ON) -option(PAIMON_ENABLE_LUCENE "Whether to enable lucene index" ON) +option(PAIMON_ENABLE_LUMINA "Whether to enable lumina vector index" OFF) +option(PAIMON_ENABLE_LUCENE "Whether to enable lucene index" OFF) +option(PAIMON_ENABLE_MACOS "Whether to enable experimental macOS support" OFF) + +if(APPLE) + if(NOT PAIMON_ENABLE_MACOS) + message(FATAL_ERROR,"macOS support is currently experimental.") + endif() +endif() if(PAIMON_ENABLE_ORC) add_definitions(-DPAIMON_ENABLE_ORC) @@ -334,8 +341,13 @@ add_compile_definitions("GLOG_USE_GLOG_EXPORT") set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) -set(PAIMON_VERSION_SCRIPT_FLAGS - "-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/paimon/symbols.map") +if(APPLE) + set(PAIMON_VERSION_SCRIPT_FLAGS + "-Wl,-exported_symbols_list,${CMAKE_SOURCE_DIR}/src/paimon/symbols.list") +else() + set(PAIMON_VERSION_SCRIPT_FLAGS + "-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/paimon/symbols.map") +endif() set(ENV{PAIMON_TEST_DATA} "${CMAKE_SOURCE_DIR}/test/test_data") @@ -363,47 +375,82 @@ if(PAIMON_BUILD_TESTS) include_directories(SYSTEM ${GTEST_INCLUDE_DIR}) include_directories("${CMAKE_SOURCE_DIR}/test/") - set(TEST_STATIC_LINK_LIBS - "-Wl,--whole-archive" - paimon_file_index_static - paimon_global_index_static - paimon_local_file_system_static - paimon_mock_file_format_static - "-Wl,--no-whole-archive" - "-Wl,--no-as-needed" - paimon_parquet_file_format_shared - paimon_blob_file_format_shared - "-Wl,--as-needed") + if(APPLE) + set(TEST_STATIC_LINK_LIBS + "-Wl,-force_load" + paimon_file_index_static + paimon_global_index_static + paimon_local_file_system_static + paimon_mock_file_format_static + paimon_parquet_file_format_shared + paimon_blob_file_format_shared) + else() + set(TEST_STATIC_LINK_LIBS + "-Wl,--whole-archive" + paimon_file_index_static + paimon_global_index_static + paimon_local_file_system_static + paimon_mock_file_format_static + "-Wl,--no-whole-archive" + "-Wl,--no-as-needed" + paimon_parquet_file_format_shared + paimon_blob_file_format_shared + "-Wl,--as-needed") + endif() if(PAIMON_ENABLE_LANCE) - list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed") - list(APPEND TEST_STATIC_LINK_LIBS paimon_lance_file_format_shared) - list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed") + if(APPLE) + list(APPEND TEST_STATIC_LINK_LIBS paimon_lance_file_format_shared) + else() + list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed") + list(APPEND TEST_STATIC_LINK_LIBS paimon_lance_file_format_shared) + list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed") + endif() endif() if(PAIMON_ENABLE_ORC) - list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed") - list(APPEND TEST_STATIC_LINK_LIBS paimon_orc_file_format_shared) - list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed") + if(APPLE) + list(APPEND TEST_STATIC_LINK_LIBS paimon_orc_file_format_shared) + else() + list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed") + list(APPEND TEST_STATIC_LINK_LIBS paimon_orc_file_format_shared) + list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed") + endif() endif() if(PAIMON_ENABLE_AVRO) - list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed") - list(APPEND TEST_STATIC_LINK_LIBS paimon_avro_file_format_shared) - list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed") + if(APPLE) + list(APPEND TEST_STATIC_LINK_LIBS paimon_avro_file_format_shared) + else() + list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed") + list(APPEND TEST_STATIC_LINK_LIBS paimon_avro_file_format_shared) + list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed") + endif() endif() if(PAIMON_ENABLE_JINDO) - list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed") - list(APPEND TEST_STATIC_LINK_LIBS paimon_jindo_file_system_shared) - list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed") + if(APPLE) + list(APPEND TEST_STATIC_LINK_LIBS paimon_jindo_file_system_shared) + else() + list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed") + list(APPEND TEST_STATIC_LINK_LIBS paimon_jindo_file_system_shared) + list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed") + endif() endif() if(PAIMON_ENABLE_LUMINA) - list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed") - list(APPEND TEST_STATIC_LINK_LIBS paimon_lumina_index_shared) - list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed") + if(APPLE) + list(APPEND TEST_STATIC_LINK_LIBS paimon_lumina_index_shared) + else() + list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed") + list(APPEND TEST_STATIC_LINK_LIBS paimon_lumina_index_shared) + list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed") + endif() endif() if(PAIMON_ENABLE_LUCENE) - list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed") - list(APPEND TEST_STATIC_LINK_LIBS paimon_lucene_index_shared) - list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed") + if(APPLE) + list(APPEND TEST_STATIC_LINK_LIBS paimon_lucene_index_shared) + else() + list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed") + list(APPEND TEST_STATIC_LINK_LIBS paimon_lucene_index_shared) + list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed") + endif() endif() endif() diff --git a/ci/scripts/build_paimon.sh b/ci/scripts/build_paimon.sh index f7771400..69b6a3a1 100755 --- a/ci/scripts/build_paimon.sh +++ b/ci/scripts/build_paimon.sh @@ -25,13 +25,31 @@ build_dir=${1}/build mkdir ${build_dir} pushd ${build_dir} -CMAKE_ARGS=( - "-G Ninja" - "-DCMAKE_BUILD_TYPE=${build_type}" - "-DPAIMON_BUILD_TESTS=ON" - "-DPAIMON_ENABLE_LANCE=ON" - "-DPAIMON_ENABLE_JINDO=ON" -) +is_macos() { + [[ "${OSTYPE}" == "darwin"* ]] +} + +if is_macos; then + CMAKE_ARGS=( + "-G Ninja" + "-DCMAKE_BUILD_TYPE=${build_type}" + "-DPAIMON_BUILD_TESTS=ON" + "-DPAIMON_ENABLE_MACOS=ON" + "-DPAIMON_ENABLE_JINDO=ON" + ) + NPROCS=$(sysctl -n hw.ncpu) +else + CMAKE_ARGS=( + "-G Ninja" + "-DCMAKE_BUILD_TYPE=${build_type}" + "-DPAIMON_BUILD_TESTS=ON" + "-DPAIMON_ENABLE_LANCE=ON" + "-DPAIMON_ENABLE_JINDO=ON" + "-DPAIMON_ENABLE_LUMINA=ON" + "-DPAIMON_ENABLE_LUCENE=ON" + ) + NPROCS=$(nproc) +fi if [[ "${enable_sanitizer}" == "true" ]]; then CMAKE_ARGS+=( @@ -41,11 +59,13 @@ if [[ "${enable_sanitizer}" == "true" ]]; then fi cmake "${CMAKE_ARGS[@]}" ${source_dir} -cmake --build . -- -j$(nproc) -ctest --output-on-failure -j $(nproc) +cmake --build . -- -j${NPROCS} +if ! is_macos; then + ctest --output-on-failure -j ${NPROCS} -if [[ "${check_clang_tidy}" == "true" ]]; then - cmake --build . --target check-clang-tidy + if [[ "${check_clang_tidy}" == "true" ]]; then + cmake --build . --target check-clang-tidy + fi fi popd diff --git a/cmake_modules/BuildUtils.cmake b/cmake_modules/BuildUtils.cmake index bed25823..f3343399 100644 --- a/cmake_modules/BuildUtils.cmake +++ b/cmake_modules/BuildUtils.cmake @@ -124,12 +124,16 @@ function(add_paimon_lib LIB_NAME) target_link_libraries(${LIB_NAME}_shared PUBLIC "$") - target_link_options(${LIB_NAME}_shared - PRIVATE - -Wl,--exclude-libs,ALL - -Wl,-Bsymbolic - -Wl,-z,defs - -Wl,--gc-sections) + if(APPLE) + target_link_options(${LIB_NAME}_shared PRIVATE -Wl,-dead_strip) + else() + target_link_options(${LIB_NAME}_shared + PRIVATE + -Wl,--exclude-libs,ALL + -Wl,-Bsymbolic + -Wl,-z,defs + -Wl,--gc-sections) + endif() install(TARGETS ${LIB_NAME}_shared ${INSTALL_IS_OPTIONAL} EXPORT ${LIB_NAME}_targets diff --git a/cmake_modules/SetupCxxFlags.cmake b/cmake_modules/SetupCxxFlags.cmake index 03b1918c..1929682d 100644 --- a/cmake_modules/SetupCxxFlags.cmake +++ b/cmake_modules/SetupCxxFlags.cmake @@ -75,13 +75,17 @@ if("${BUILD_WARNING_LEVEL}" STREQUAL "CHECKIN") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wall") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wextra") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wdocumentation") - set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wglobal-constructors") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-missing-braces") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-unused-parameter") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-unknown-warning-option") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-constant-logical-operand") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-deprecated-declarations") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-deprecated-builtins") + if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-global-constructors") + else() + set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wglobal-constructors") + endif() elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wall") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-conversion") diff --git a/cmake_modules/ThirdpartyToolchain.cmake b/cmake_modules/ThirdpartyToolchain.cmake index 046d26ef..43cdfa68 100644 --- a/cmake_modules/ThirdpartyToolchain.cmake +++ b/cmake_modules/ThirdpartyToolchain.cmake @@ -268,9 +268,13 @@ else() endif() endif() +set(JINDOSDK_C_NAME "jindosdk_c") +set(JINDOSDK_C_DYNAMIC_LIB_PREFIX "lib${JINDOSDK_C_NAME}") if(APPLE) - set(JINDOSDK_C_DYNAMIC_LIB_NAME "jindosdk_c.${PAIMON_JINDOSDK_C_BUILD_VERSION}") - set(JINDOSDK_C_DYNAMIC_LIB_FILE "lib${JINDOSDK_C_DYNAMIC_LIB_NAME}.dylib") + set(JINDOSDK_C_DYNAMIC_LIB_NAME + "${JINDOSDK_C_NAME}.${PAIMON_JINDOSDK_C_BUILD_VERSION}") + set(JINDOSDK_C_DYNAMIC_LIB_FILE + "${JINDOSDK_C_DYNAMIC_LIB_PREFIX}.${PAIMON_JINDOSDK_C_BUILD_VERSION}.dylib") if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64") set(JINDOSDK_C_BUILD_SHA256_CHECKSUM "${PAIMON_JINDOSDK_C_MACOS_X86_64_BUILD_SHA256_CHECKSUM}") @@ -293,8 +297,8 @@ if(APPLE) endif() endif() else() - set(JINDOSDK_C_DYNAMIC_LIB_NAME "jindosdk_c") - set(JINDOSDK_C_DYNAMIC_LIB_FILE "lib${JINDOSDK_C_DYNAMIC_LIB_NAME}.so") + set(JINDOSDK_C_DYNAMIC_LIB_NAME "${JINDOSDK_C_NAME}") + set(JINDOSDK_C_DYNAMIC_LIB_FILE "${JINDOSDK_C_DYNAMIC_LIB_PREFIX}.so") if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64") set(JINDOSDK_C_BUILD_SHA256_CHECKSUM "${PAIMON_JINDOSDK_C_LINUX_X86_64_BUILD_SHA256_CHECKSUM}") @@ -761,17 +765,33 @@ macro(build_jindosdk_c) set(JINDOSDK_C_DYNAMIC_LIB "${JINDOSDK_C_LIB_DIR}/${JINDOSDK_C_DYNAMIC_LIB_FILE}") # Extract and install jindosdk from precompiled package - externalproject_add(jindosdk_ep - URL ${JINDOSDK_C_SOURCE_URL} - URL_HASH "SHA256=${JINDOSDK_C_BUILD_SHA256_CHECKSUM}" - ${THIRDPARTY_LOG_OPTIONS} - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND bash -c - "cp -r /include/* ${JINDOSDK_C_INCLUDE_DIR}" - COMMAND bash -c - "cp -r /lib/native/${JINDOSDK_C_DYNAMIC_LIB_FILE}* ${JINDOSDK_C_LIB_DIR}" - BUILD_BYPRODUCTS "${JINDOSDK_C_DYNAMIC_LIB}") + if(APPLE) + externalproject_add(jindosdk_ep + URL ${JINDOSDK_C_SOURCE_URL} + URL_HASH "SHA256=${JINDOSDK_C_BUILD_SHA256_CHECKSUM}" + ${THIRDPARTY_LOG_OPTIONS} + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND bash -c + "cp -r /include/* ${JINDOSDK_C_INCLUDE_DIR}" + COMMAND bash -c + "cp -r /lib/native/${JINDOSDK_C_DYNAMIC_LIB_FILE}* ${JINDOSDK_C_LIB_DIR}" + COMMAND bash -c + "install_name_tool -id '@rpath/${JINDOSDK_C_DYNAMIC_LIB_FILE}' '${JINDOSDK_C_DYNAMIC_LIB}'" + BUILD_BYPRODUCTS "${JINDOSDK_C_DYNAMIC_LIB}") + else() + externalproject_add(jindosdk_ep + URL ${JINDOSDK_C_SOURCE_URL} + URL_HASH "SHA256=${JINDOSDK_C_BUILD_SHA256_CHECKSUM}" + ${THIRDPARTY_LOG_OPTIONS} + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND bash -c + "cp -r /include/* ${JINDOSDK_C_INCLUDE_DIR}" + COMMAND bash -c + "cp -r /lib/native/${JINDOSDK_C_DYNAMIC_LIB_FILE}* ${JINDOSDK_C_LIB_DIR}" + BUILD_BYPRODUCTS "${JINDOSDK_C_DYNAMIC_LIB}") + endif() # The include directory must exist before it is referenced by a target. file(MAKE_DIRECTORY "${JINDOSDK_C_INCLUDE_DIR}") @@ -874,7 +894,7 @@ macro(build_protobuf) -DCMAKE_INSTALL_PREFIX=${PROTOBUF_PREFIX} "-DCMAKE_CXX_FLAGS=${PROTOBUF_CXX_FLAGS}" "-DCMAKE_C_FLAGS=${PROTOBUF_C_FLAGS}" - "-DZLIB_ROOT=${THIRDPARTY_ZLIB_ROOT}" + -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_DEBUG_POSTFIX=) set(PROTOBUF_CONFIGURE SOURCE_SUBDIR "cmake" CMAKE_ARGS ${PROTOBUF_CMAKE_ARGS}) @@ -1000,25 +1020,44 @@ macro(build_orc) message("ORC_CMAKE_CXX_FLAGS ${ORC_CMAKE_CXX_FLAGS}") message("ORC_CMAKE_C_FLAGS ${ORC_CMAKE_C_FLAGS}") - set(ORC_CMAKE_ARGS - ${EP_COMMON_CMAKE_ARGS} - "-DCMAKE_INSTALL_PREFIX=${ORC_PREFIX}" - "-DCMAKE_CXX_FLAGS=${ORC_CMAKE_CXX_FLAGS}" - "-DCMAKE_C_FLAGS=${ORC_CMAKE_C_FLAGS}" - "-DCMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}=${ORC_CMAKE_CXX_FLAGS}" - "-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath=${ORC_RPATH}" - "-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-rpath=${ORC_RPATH}" - "-DCMAKE_MODULE_LINKER_FLAGS=-Wl,-rpath=${ORC_RPATH}" - "-DSNAPPY_HOME=${ORC_SNAPPY_ROOT}" - "-DLZ4_HOME=${ORC_LZ4_ROOT}" - "-DZSTD_HOME=${ORC_ZSTD_ROOT}" - "-DZLIB_HOME=${ORC_ZLIB_ROOT}" - "-DPROTOBUF_HOME=${ORC_PROTOBUF_ROOT}" - "-DProtobuf_ROOT=${ORC_PROTOBUF_ROOT}" - -DBUILD_JAVA=OFF - -DBUILD_CPP_TESTS=OFF - -DBUILD_TOOLS=OFF - -DBUILD_CPP_ENABLE_METRICS=ON) + if(APPLE) + set(ORC_CMAKE_ARGS + ${EP_COMMON_CMAKE_ARGS} + "-DCMAKE_INSTALL_PREFIX=${ORC_PREFIX}" + "-DCMAKE_CXX_FLAGS=${ORC_CMAKE_CXX_FLAGS}" + "-DCMAKE_C_FLAGS=${ORC_CMAKE_C_FLAGS}" + "-DCMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}=${ORC_CMAKE_CXX_FLAGS}" + "-DSNAPPY_HOME=${ORC_SNAPPY_ROOT}" + "-DLZ4_HOME=${ORC_LZ4_ROOT}" + "-DZSTD_HOME=${ORC_ZSTD_ROOT}" + "-DZLIB_HOME=${ORC_ZLIB_ROOT}" + "-DPROTOBUF_HOME=${ORC_PROTOBUF_ROOT}" + "-DProtobuf_ROOT=${ORC_PROTOBUF_ROOT}" + -DBUILD_JAVA=OFF + -DBUILD_CPP_TESTS=OFF + -DBUILD_TOOLS=OFF + -DBUILD_CPP_ENABLE_METRICS=ON) + else() + set(ORC_CMAKE_ARGS + ${EP_COMMON_CMAKE_ARGS} + "-DCMAKE_INSTALL_PREFIX=${ORC_PREFIX}" + "-DCMAKE_CXX_FLAGS=${ORC_CMAKE_CXX_FLAGS}" + "-DCMAKE_C_FLAGS=${ORC_CMAKE_C_FLAGS}" + "-DCMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}=${ORC_CMAKE_CXX_FLAGS}" + "-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath=${ORC_RPATH}" + "-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-rpath=${ORC_RPATH}" + "-DCMAKE_MODULE_LINKER_FLAGS=-Wl,-rpath=${ORC_RPATH}" + "-DSNAPPY_HOME=${ORC_SNAPPY_ROOT}" + "-DLZ4_HOME=${ORC_LZ4_ROOT}" + "-DZSTD_HOME=${ORC_ZSTD_ROOT}" + "-DZLIB_HOME=${ORC_ZLIB_ROOT}" + "-DPROTOBUF_HOME=${ORC_PROTOBUF_ROOT}" + "-DProtobuf_ROOT=${ORC_PROTOBUF_ROOT}" + -DBUILD_JAVA=OFF + -DBUILD_CPP_TESTS=OFF + -DBUILD_TOOLS=OFF + -DBUILD_CPP_ENABLE_METRICS=ON) + endif() set(PATCH_FILE "${CMAKE_CURRENT_LIST_DIR}/orc.diff") externalproject_add(orc_ep @@ -1070,8 +1109,8 @@ macro(build_arrow) get_target_property(ARROW_ZLIB_INCLUDE_DIR zlib INTERFACE_INCLUDE_DIRECTORIES) get_filename_component(ARROW_ZLIB_ROOT "${ARROW_ZLIB_INCLUDE_DIR}" DIRECTORY) - set(ARROW_CMAKE_CXX_FLAGS "${EP_CXX_FLAGS} -Wno-error") - set(ARROW_CMAKE_C_FLAGS "${EP_C_FLAGS} -Wno-error") + set(ARROW_CMAKE_CXX_FLAGS "${EP_CXX_FLAGS} -Wno-error -Wno-documentation") + set(ARROW_CMAKE_C_FLAGS "${EP_C_FLAGS} -Wno-error -Wno-documentation") string(REPLACE "-Werror" "" ARROW_CMAKE_CXX_FLAGS ${ARROW_CMAKE_CXX_FLAGS}) # Fix for thrift Mutex.h missing #include (GCC 15 strictness) # Use -include to force include cstdint for all C++ files diff --git a/docs/source/building.rst b/docs/source/building.rst index 6416a91d..cd1089b6 100644 --- a/docs/source/building.rst +++ b/docs/source/building.rst @@ -29,8 +29,8 @@ and invoke ``cmake $CMAKE_ARGS ..`` from this directory. Building requires: -* A C++17-enabled compiler. On Linux, gcc 9 and higher should be - sufficient. Windows and MacOS are not supported for now. +* A C++17-enabled compiler. On Linux and macOS(experimental), gcc 9 and higher should be + sufficient. Windows is not supported for now. * At least 2GB of RAM for a minimal build, 8GB for a minimal debug build with tests and 16GB for a full build. @@ -42,6 +42,12 @@ On Ubuntu/Debian you can install the requirements with: build-essential \ cmake +On macOS you can install the requirements with: + +.. code-block:: shell + + brew install cmake + We also provide a docker template to help you get started quickly. See in ``.devcontainer`` folder for more details. @@ -119,10 +125,11 @@ several optional system components which you can opt into building by passing boolean flags to ``cmake``. * ``-DPAIMON_ENABLE_ORC=ON``: Paimon integration with Apache ORC -* ``-DPAIMON_ENABLE_LANCE=ON``: Paimon integration with Lance +* ``-DPAIMON_ENABLE_LANCE=ON``: Paimon integration with Lance(only supported for Linux) * ``-DPAIMON_ENABLE_AVRO=ON``: Apache Avro libraries and Paimon integration * ``-DPAIMON_ENABLE_JINDO=ON``: Support for Alibaba Jindo filesystems -* ``-DPAIMON_ENABLE_LUMINA=ON``: Support for Lumina vector index +* ``-DPAIMON_ENABLE_LUMINA=ON``: Support for Lumina vector index(only supported for Linux) +* ``-DPAIMON_ENABLE_LUCENE=ON``: Support for Lucene index(only supported for Linux) Optional Targets ~~~~~~~~~~~~~~~~ diff --git a/src/paimon/CMakeLists.txt b/src/paimon/CMakeLists.txt index 5916ea3f..852e40a2 100644 --- a/src/paimon/CMakeLists.txt +++ b/src/paimon/CMakeLists.txt @@ -458,18 +458,31 @@ if(PAIMON_BUILD_TESTS) test_utils_static ${GTEST_LINK_TOOLCHAIN}) - add_paimon_test(common_sst_file_format_test - SOURCES - common/compression/block_compression_factory_test.cpp - common/sst/sst_file_io_test.cpp - common/utils/crc32c_test.cpp - STATIC_LINK_LIBS - paimon_shared - test_utils_static - "-Wl,--whole-archive" - paimon_local_file_system_static - "-Wl,--no-whole-archive" - ${GTEST_LINK_TOOLCHAIN}) + set(COMMON_SST_FILE_FORMAT_TEST + common/compression/block_compression_factory_test.cpp + common/sst/sst_file_io_test.cpp common/utils/crc32c_test.cpp) + if(APPLE) + add_paimon_test(common_sst_file_format_test + SOURCES + ${COMMON_SST_FILE_FORMAT_TEST} + STATIC_LINK_LIBS + paimon_shared + test_utils_static + "-Wl,-force_load" + paimon_local_file_system_static + ${GTEST_LINK_TOOLCHAIN}) + else() + add_paimon_test(common_sst_file_format_test + SOURCES + ${COMMON_SST_FILE_FORMAT_TEST} + STATIC_LINK_LIBS + paimon_shared + test_utils_static + "-Wl,--whole-archive" + paimon_local_file_system_static + "-Wl,--no-whole-archive" + ${GTEST_LINK_TOOLCHAIN}) + endif() add_paimon_test(core_test SOURCES @@ -605,20 +618,35 @@ if(PAIMON_BUILD_TESTS) ${TEST_STATIC_LINK_LIBS} ${GTEST_LINK_TOOLCHAIN}) - add_paimon_test(fs_test - SOURCES - common/fs/file_system_test.cpp - common/fs/resolving_file_system_test.cpp - fs/local/local_file_test.cpp - # fs/jindo/jindo_file_system_factory_test.cpp - # fs/jindo/jindo_file_system_test.cpp - STATIC_LINK_LIBS - paimon_shared - "-Wl,--whole-archive" - paimon_local_file_system_static - # paimon_jindo_file_system_static - "-Wl,--no-whole-archive" - test_utils_static - ${GTEST_LINK_TOOLCHAIN}) + set(FS_TEST + common/fs/file_system_test.cpp + common/fs/resolving_file_system_test.cpp + fs/local/local_file_test.cpp + # fs/jindo/jindo_file_system_factory_test.cpp + # fs/jindo/jindo_file_system_test.cpp + ) + if(APPLE) + add_paimon_test(fs_test + SOURCES + ${FS_TEST} + STATIC_LINK_LIBS + paimon_shared + "-Wl,-force_load,$" + # paimon_jindo_file_system_static + test_utils_static + ${GTEST_LINK_TOOLCHAIN}) + else() + add_paimon_test(fs_test + SOURCES + ${FS_TEST} + STATIC_LINK_LIBS + paimon_shared + "-Wl,--whole-archive" + paimon_local_file_system_static + # paimon_jindo_file_system_static + "-Wl,--no-whole-archive" + test_utils_static + ${GTEST_LINK_TOOLCHAIN}) + endif() endif() diff --git a/src/paimon/common/logging/logging.cpp b/src/paimon/common/logging/logging.cpp index 58924367..88a2f9f9 100644 --- a/src/paimon/common/logging/logging.cpp +++ b/src/paimon/common/logging/logging.cpp @@ -83,7 +83,7 @@ std::unique_ptr Logger::GetLogger(const std::string& path) { } std::unique_lock ulock(getRegistryLock()); if (!google::IsGoogleLoggingInitialized()) { - google::InitGoogleLogging(program_invocation_name); + google::InitGoogleLogging("paimon"); } return std::make_unique(); } diff --git a/src/paimon/common/memory/memory_pool.cpp b/src/paimon/common/memory/memory_pool.cpp index a0f35736..dbde680a 100644 --- a/src/paimon/common/memory/memory_pool.cpp +++ b/src/paimon/common/memory/memory_pool.cpp @@ -55,7 +55,7 @@ void* MemoryPoolImpl::Malloc(uint64_t size, uint64_t alignment) { return memptr; } -void* MemoryPoolImpl::Realloc(void* p, size_t old_size, size_t new_size, size_t alignment) { +void* MemoryPoolImpl::Realloc(void* p, size_t old_size, size_t new_size, uint64_t alignment) { if (alignment == 0) { void* memptr = ::realloc(p, new_size); total_allocated_size.fetch_add(new_size - old_size); diff --git a/src/paimon/common/predicate/literal_converter_test.cpp b/src/paimon/common/predicate/literal_converter_test.cpp index 7d6ea27f..35ec6aff 100644 --- a/src/paimon/common/predicate/literal_converter_test.cpp +++ b/src/paimon/common/predicate/literal_converter_test.cpp @@ -137,10 +137,12 @@ TEST_F(LiteralConverterTest, TestIntLiteral) { TEST_F(LiteralConverterTest, TestBigIntLiteral) { auto field_array = arrow::ipc::internal::json::ArrayFromJSON(arrow::int64(), R"([4, 5, null])").ValueOrDie(); - CheckResult(field_array, - std::vector({Literal(4l), Literal(5l), Literal(FieldType::BIGINT)})); - CheckLiteralsFromString(FieldType::BIGINT, {"4", "5"}, - std::vector({Literal(4l), Literal(5l)})); + CheckResult(field_array, std::vector({Literal(static_cast(4)), + Literal(static_cast(5)), + Literal(FieldType::BIGINT)})); + CheckLiteralsFromString( + FieldType::BIGINT, {"4", "5"}, + std::vector({Literal(static_cast(4)), Literal(static_cast(5))})); CheckLiteralFromRow(arrow::int64(), {static_cast(4), static_cast(5), NullType()}, FieldType::BIGINT, @@ -176,11 +178,11 @@ TEST_F(LiteralConverterTest, TestDoubleLiteral) { CheckLiteralsFromString(FieldType::DOUBLE, {"4.05", "5.17"}, std::vector({Literal(4.05), Literal(5.17)})); CheckLiteralFromRow(arrow::float64(), - {4.05, 5.17, static_cast INFINITY, static_cast(-INFINITY), - static_cast NAN, NullType()}, + {4.05, 5.17, static_cast(INFINITY), static_cast(-INFINITY), + static_cast(NAN), NullType()}, FieldType::DOUBLE, - {Literal(4.05), Literal(5.17), Literal(static_cast INFINITY), - Literal(static_cast(-INFINITY)), Literal(static_cast NAN), + {Literal(4.05), Literal(5.17), Literal(static_cast(INFINITY)), + Literal(static_cast(-INFINITY)), Literal(static_cast(NAN)), Literal(FieldType::DOUBLE)}); } diff --git a/src/paimon/common/predicate/predicate_test.cpp b/src/paimon/common/predicate/predicate_test.cpp index a63022f9..dfa94ae5 100644 --- a/src/paimon/common/predicate/predicate_test.cpp +++ b/src/paimon/common/predicate/predicate_test.cpp @@ -125,8 +125,9 @@ class PredicateTest : public ::testing::Test { TEST_F(PredicateTest, TestInvalidFieldIndex) { auto bigint_type = arrow::int64(); - auto predicate_base = PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate_base = + PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); @@ -150,8 +151,9 @@ TEST_F(PredicateTest, TestInvalidFieldIndex) { TEST_F(PredicateTest, TestEqual) { auto bigint_type = arrow::int64(); - auto predicate_base = PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate_base = + PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); auto f0 = @@ -167,14 +169,15 @@ TEST_F(PredicateTest, TestEqual) { ASSERT_EQ(*predicate->Negate(), *PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(5l))); + Literal(static_cast(5)))); ASSERT_FALSE(*predicate->Negate() == *PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(10l))); - ASSERT_FALSE(*predicate->Negate() == *PredicateBuilder::Equal(/*field_index=*/0, - /*field_name=*/"f0", - FieldType::BIGINT, Literal(10l))); + FieldType::BIGINT, Literal(static_cast(10)))); + ASSERT_FALSE(*predicate->Negate() == + *PredicateBuilder::Equal(/*field_index=*/0, + /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(10)))); // with internal row auto arrow_schema = arrow::schema(arrow::FieldVector({arrow::field("f0", bigint_type)})); ASSERT_FALSE(predicate->Test(arrow_schema, CreateBigIntRow({4})).value()); @@ -217,8 +220,9 @@ TEST_F(PredicateTest, TestEqualNull) { TEST_F(PredicateTest, TestNotEqual) { auto bigint_type = arrow::int64(); - auto predicate_base = PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate_base = + PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); auto f0 = @@ -234,8 +238,9 @@ TEST_F(PredicateTest, TestNotEqual) { ASSERT_EQ(is_valid, std::vector({1, 0, 0})); auto predicate_negate = std::dynamic_pointer_cast(predicate->Negate()); - ASSERT_EQ(*predicate_negate, *PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l))); + ASSERT_EQ(*predicate_negate, + *PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5)))); // with internal row auto arrow_schema = arrow::schema(arrow::FieldVector({arrow::field("f0", bigint_type)})); @@ -280,8 +285,9 @@ TEST_F(PredicateTest, TestNotEqualNull) { TEST_F(PredicateTest, TestGreater) { auto bigint_type = arrow::int64(); - auto predicate_base = PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate_base = + PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); auto f0 = @@ -299,7 +305,7 @@ TEST_F(PredicateTest, TestGreater) { ASSERT_EQ(*predicate->Negate(), *PredicateBuilder::LessOrEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l))); + FieldType::BIGINT, Literal(static_cast(5)))); // with internal row auto arrow_schema = arrow::schema(arrow::FieldVector({arrow::field("f0", bigint_type)})); ASSERT_FALSE(predicate->Test(arrow_schema, CreateBigIntRow({4})).value()); @@ -344,7 +350,8 @@ TEST_F(PredicateTest, TestGreaterNull) { TEST_F(PredicateTest, TestGreaterOrEqual) { auto bigint_type = arrow::int64(); auto predicate_base = PredicateBuilder::GreaterOrEqual( - /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, Literal(5l)); + /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); ASSERT_EQ(predicate->GetFunction().ToString(), "GreaterOrEqual"); @@ -363,7 +370,7 @@ TEST_F(PredicateTest, TestGreaterOrEqual) { ASSERT_EQ(*predicate->Negate(), *PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(5l))); + Literal(static_cast(5)))); // with internal row auto arrow_schema = arrow::schema(arrow::FieldVector({arrow::field("f0", bigint_type)})); ASSERT_FALSE(predicate->Test(arrow_schema, CreateBigIntRow({4})).value()); @@ -407,8 +414,9 @@ TEST_F(PredicateTest, TestGreaterOrEqualNull) { TEST_F(PredicateTest, TestLess) { auto bigint_type = arrow::int64(); - auto predicate_base = PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate_base = + PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); auto f0 = @@ -424,9 +432,9 @@ TEST_F(PredicateTest, TestLess) { ASSERT_OK_AND_ASSIGN(auto is_valid, predicate->Test(*struct_array)); ASSERT_EQ(is_valid, std::vector({1, 0, 0, 0})); - ASSERT_EQ(*predicate->Negate(), - *PredicateBuilder::GreaterOrEqual( - /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, Literal(5l))); + ASSERT_EQ(*predicate->Negate(), *PredicateBuilder::GreaterOrEqual( + /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5)))); // with internal row auto arrow_schema = arrow::schema(arrow::FieldVector({arrow::field("f0", bigint_type)})); @@ -469,8 +477,9 @@ TEST_F(PredicateTest, TestLessNull) { TEST_F(PredicateTest, TestLessOrEqual) { auto bigint_type = arrow::int64(); - auto predicate_base = PredicateBuilder::LessOrEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate_base = + PredicateBuilder::LessOrEqual(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); auto f0 = @@ -488,7 +497,7 @@ TEST_F(PredicateTest, TestLessOrEqual) { ASSERT_EQ(*predicate->Negate(), *PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l))); + FieldType::BIGINT, Literal(static_cast(5)))); // with internal row auto arrow_schema = arrow::schema(arrow::FieldVector({arrow::field("f0", bigint_type)})); @@ -590,8 +599,9 @@ TEST_F(PredicateTest, TestIsNotNull) { TEST_F(PredicateTest, TestIn) { auto bigint_type = arrow::int64(); - auto predicate_base = PredicateBuilder::In(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, {Literal(1l), Literal(3l)}); + auto predicate_base = + PredicateBuilder::In(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(3))}); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); auto f0 = @@ -608,8 +618,9 @@ TEST_F(PredicateTest, TestIn) { ASSERT_EQ(is_valid, std::vector({1, 0, 1, 0})); ASSERT_EQ(*predicate->Negate(), - *PredicateBuilder::NotIn(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - {Literal(1l), Literal(3l)})); + *PredicateBuilder::NotIn( + /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(3))})); // with internal row auto arrow_schema = arrow::schema(arrow::FieldVector({arrow::field("f0", bigint_type)})); @@ -627,7 +638,8 @@ TEST_F(PredicateTest, TestInNull) { auto bigint_type = arrow::int64(); auto predicate_base = PredicateBuilder::In( /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - {Literal(1l), Literal(FieldType::BIGINT), Literal(3l)}); + {Literal(static_cast(1)), Literal(FieldType::BIGINT), + Literal(static_cast(3))}); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); auto f0 = @@ -657,8 +669,9 @@ TEST_F(PredicateTest, TestInNull) { TEST_F(PredicateTest, TestNotIn) { auto bigint_type = arrow::int64(); - auto predicate_base = PredicateBuilder::NotIn(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, {Literal(1l), Literal(3l)}); + auto predicate_base = PredicateBuilder::NotIn( + /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(3))}); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); auto f0 = @@ -675,8 +688,9 @@ TEST_F(PredicateTest, TestNotIn) { ASSERT_EQ(is_valid, std::vector({0, 1, 0, 0})); ASSERT_EQ(*predicate->Negate(), - *PredicateBuilder::In(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - {Literal(1l), Literal(3l)})); + *PredicateBuilder::In( + /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(3))})); // with internal row auto arrow_schema = arrow::schema(arrow::FieldVector({arrow::field("f0", bigint_type)})); @@ -697,7 +711,8 @@ TEST_F(PredicateTest, TestNotInNull) { auto bigint_type = arrow::int64(); auto predicate_base = PredicateBuilder::NotIn( /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - {Literal(1l), Literal(FieldType::BIGINT), Literal(3l)}); + {Literal(static_cast(1)), Literal(FieldType::BIGINT), + Literal(static_cast(3))}); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); auto f0 = @@ -732,8 +747,8 @@ TEST_F(PredicateTest, TestLargeIn) { auto bigint_type = arrow::int64(); std::vector literals; literals.reserve(30); - literals.emplace_back(1l); - literals.emplace_back(3l); + literals.emplace_back(static_cast(1)); + literals.emplace_back(static_cast(3)); for (int64_t i = 10; i < 30; i++) { literals.emplace_back(i); } @@ -771,9 +786,9 @@ TEST_F(PredicateTest, TestLargeInNull) { auto bigint_type = arrow::int64(); std::vector literals; literals.reserve(30); - literals.emplace_back(1l); + literals.emplace_back(static_cast(1)); literals.emplace_back(FieldType::BIGINT); - literals.emplace_back(3l); + literals.emplace_back(static_cast(3)); for (int64_t i = 10; i < 30; i++) { literals.emplace_back(i); } @@ -811,8 +826,8 @@ TEST_F(PredicateTest, TestLargeNotIn) { auto bigint_type = arrow::int64(); std::vector literals; literals.reserve(30); - literals.emplace_back(1l); - literals.emplace_back(3l); + literals.emplace_back(static_cast(1)); + literals.emplace_back(static_cast(3)); for (int64_t i = 10; i < 30; i++) { literals.emplace_back(i); } @@ -853,9 +868,9 @@ TEST_F(PredicateTest, TestLargeNotInNull) { auto bigint_type = arrow::int64(); std::vector literals; literals.reserve(30); - literals.emplace_back(1l); + literals.emplace_back(static_cast(1)); literals.emplace_back(FieldType::BIGINT); - literals.emplace_back(3l); + literals.emplace_back(static_cast(3)); for (int64_t i = 10; i < 30; i++) { literals.emplace_back(i); } @@ -896,10 +911,11 @@ TEST_F(PredicateTest, TestAnd) { auto bigint_type = arrow::int64(); ASSERT_OK_AND_ASSIGN( auto predicate_base, - PredicateBuilder::And({PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(3l)), - PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(5l))})); + PredicateBuilder::And( + {PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(3))), + PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(5)))})); auto predicate = std::dynamic_pointer_cast(predicate_base); auto f0 = arrow::ipc::internal::json::ArrayFromJSON(bigint_type, R"([4, 3, 3, null])").ValueOrDie(); @@ -916,10 +932,11 @@ TEST_F(PredicateTest, TestAnd) { ASSERT_OK_AND_ASSIGN( auto negate_predicate, - PredicateBuilder::Or({PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(3l)), - PredicateBuilder::NotEqual(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(5l))})); + PredicateBuilder::Or( + {PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(3))), + PredicateBuilder::NotEqual(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(5)))})); ASSERT_EQ(*predicate->Negate(), *negate_predicate); // with internal row @@ -942,10 +959,11 @@ TEST_F(PredicateTest, TestOr) { auto bigint_type = arrow::int64(); ASSERT_OK_AND_ASSIGN( auto predicate_base, - PredicateBuilder::Or({PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(3l)), - PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(5l))})); + PredicateBuilder::Or( + {PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(3))), + PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(5)))})); auto predicate = std::dynamic_pointer_cast(predicate_base); auto f0 = arrow::ipc::internal::json::ArrayFromJSON(bigint_type, R"([4, 3, 3, null])").ValueOrDie(); @@ -962,10 +980,11 @@ TEST_F(PredicateTest, TestOr) { ASSERT_OK_AND_ASSIGN( auto negate_predicate, - PredicateBuilder::And({PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(3l)), - PredicateBuilder::NotEqual(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(5l))})); + PredicateBuilder::And( + {PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(3))), + PredicateBuilder::NotEqual(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(5)))})); ASSERT_EQ(*predicate->Negate(), *negate_predicate); // with internal row @@ -986,8 +1005,9 @@ TEST_F(PredicateTest, TestOr) { TEST_F(PredicateTest, TestBetween) { auto bigint_type = arrow::int64(); - auto predicate_base = PredicateBuilder::Between(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(3l), Literal(5l)); + auto predicate_base = PredicateBuilder::Between( + /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, Literal(static_cast(3)), + Literal(static_cast(5))); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); auto f0 = arrow::ipc::internal::json::ArrayFromJSON(bigint_type, R"([3, 4, 5, 100, 1, null])") @@ -1002,10 +1022,12 @@ TEST_F(PredicateTest, TestBetween) { ASSERT_OK_AND_ASSIGN(auto is_valid, predicate->Test(*struct_array)); ASSERT_EQ(is_valid, std::vector({1, 1, 1, 0, 0, 0})); - auto less_than = PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(3l)); - auto greater_than = PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto less_than = + PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(3))); + auto greater_than = + PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto or_predicate, PredicateBuilder::Or({less_than, greater_than})); auto predicate_negate = std::dynamic_pointer_cast(predicate->Negate()); @@ -1031,7 +1053,7 @@ TEST_F(PredicateTest, TestBetweenNull) { auto bigint_type = arrow::int64(); auto predicate_base = PredicateBuilder::Between(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(FieldType::BIGINT), Literal(5l)); + Literal(FieldType::BIGINT), Literal(static_cast(5))); auto predicate = std::dynamic_pointer_cast(predicate_base); ASSERT_TRUE(predicate); auto f0 = arrow::ipc::internal::json::ArrayFromJSON(bigint_type, R"([4, null])").ValueOrDie(); @@ -1334,13 +1356,15 @@ TEST_F(PredicateTest, TestCompound) { TEST_F(PredicateTest, TestPredicateToString) { { - auto predicate = PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_EQ(predicate->ToString(), "Equal(f0, 5)"); } { - auto predicate = PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_EQ(predicate->ToString(), "GreaterThan(f0, 5)"); } { @@ -1378,19 +1402,21 @@ TEST_F(PredicateTest, TestPredicateToString) { { ASSERT_OK_AND_ASSIGN( auto predicate, - PredicateBuilder::And({PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(3l)), - PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(5l))})); + PredicateBuilder::And( + {PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(3))), + PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(5)))})); ASSERT_EQ(predicate->ToString(), "And([Equal(f0, 3), Equal(f1, 5)])"); } { ASSERT_OK_AND_ASSIGN( auto predicate, - PredicateBuilder::Or({PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(3l)), - PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(5l))})); + PredicateBuilder::Or( + {PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(3))), + PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(5)))})); ASSERT_EQ(predicate->ToString(), "Or([Equal(f0, 3), Equal(f1, 5)])"); } } diff --git a/src/paimon/common/predicate/predicate_validator_test.cpp b/src/paimon/common/predicate/predicate_validator_test.cpp index 1c3b9327..652d2650 100644 --- a/src/paimon/common/predicate/predicate_validator_test.cpp +++ b/src/paimon/common/predicate/predicate_validator_test.cpp @@ -36,7 +36,7 @@ TEST(PredicateValidatorTest, TestValidateLiterals) { auto predicate, PredicateBuilder::And({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.5))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -65,9 +65,9 @@ TEST(PredicateValidatorTest, TestValidateLiterals) { auto predicate, PredicateBuilder::And({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, - Literal(5l)), + Literal(static_cast(5))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, Literal(FieldType::STRING, str.data(), str.size())), PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::BOOLEAN, @@ -83,7 +83,7 @@ TEST(PredicateValidatorTest, TestValidateLiterals) { auto predicate, PredicateBuilder::And({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.5))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -101,7 +101,7 @@ TEST(PredicateValidatorTest, TestValidateLiterals) { auto predicate, PredicateBuilder::And({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.5))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -133,7 +133,7 @@ TEST(PredicateValidatorTest, TestValidateSchema) { auto predicate, PredicateBuilder::And({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.5))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -194,7 +194,7 @@ TEST(PredicateValidatorTest, TestValidateSchema) { auto predicate, PredicateBuilder::And({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.5))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -222,7 +222,7 @@ TEST(PredicateValidatorTest, TestValidateSchema) { auto predicate, PredicateBuilder::And({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.5))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -273,7 +273,7 @@ TEST(PredicateValidatorTest, TestValidateSchema) { auto predicate, PredicateBuilder::And({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.5))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -299,7 +299,7 @@ TEST(PredicateValidatorTest, TestValidateSchema) { auto predicate, PredicateBuilder::And({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.5))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, diff --git a/src/paimon/common/reader/predicate_batch_reader_test.cpp b/src/paimon/common/reader/predicate_batch_reader_test.cpp index bd757bcc..62ecaa87 100644 --- a/src/paimon/common/reader/predicate_batch_reader_test.cpp +++ b/src/paimon/common/reader/predicate_batch_reader_test.cpp @@ -96,40 +96,45 @@ TEST_F(PredicateBatchReaderTest, TestSimple) { { auto reader = std::make_unique(data_array, data_type_, /*batch_size=*/10); - auto predicate = PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(24l)); + auto predicate = + PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(24))); auto expected_array = std::make_shared(data_array->Slice(0, 24)); CheckResult(std::move(reader), predicate, expected_array); } { auto reader = std::make_unique(data_array, data_type_, /*batch_size=*/10); - auto predicate = PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(1l)); + auto predicate = + PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(1))); auto expected_array = std::make_shared(data_array->Slice(0, 1)); CheckResult(std::move(reader), predicate, expected_array); } { auto reader = std::make_unique(data_array, data_type_, /*batch_size=*/10); - auto predicate = PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(99l)); + auto predicate = + PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(99))); auto expected_array = std::make_shared(data_array->Slice(0, 99)); CheckResult(std::move(reader), predicate, expected_array); } { auto reader = std::make_unique(data_array, data_type_, /*batch_size=*/10); - auto predicate = PredicateBuilder::GreaterThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(0l)); + auto predicate = + PredicateBuilder::GreaterThan(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(0))); auto expected_array = std::make_shared(data_array->Slice(1, 99)); CheckResult(std::move(reader), predicate, expected_array); } { auto reader = std::make_unique(data_array, data_type_, /*batch_size=*/10); - auto predicate = PredicateBuilder::GreaterThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(98l)); + auto predicate = + PredicateBuilder::GreaterThan(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(98))); auto expected_array = std::make_shared(data_array->Slice(99, 1)); CheckResult(std::move(reader), predicate, expected_array); } @@ -148,8 +153,9 @@ TEST_F(PredicateBatchReaderTest, TestVariousBatchSize) { ])") .ValueOrDie(); auto expected_array = std::make_shared(PrepareArray(8)); - auto predicate = PredicateBuilder::GreaterThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(-1l)); + auto predicate = + PredicateBuilder::GreaterThan(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(-1))); for (auto batch_size : {5, 10, 11, 20}) { auto reader = std::make_unique(data_array, data_type_, batch_size); CheckResult(std::move(reader), predicate, expected_array); @@ -174,16 +180,18 @@ TEST_F(PredicateBatchReaderTest, TestFullAndEmptyCase) { { auto reader = std::make_unique(data_array, data_type_, /*batch_size=*/10); - auto predicate = PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(20l)); + auto predicate = + PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(20))); auto expected_array = std::make_shared(data_array); CheckResult(std::move(reader), predicate, expected_array); } { auto reader = std::make_unique(data_array, data_type_, /*batch_size=*/10); - auto predicate = PredicateBuilder::GreaterThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(20l)); + auto predicate = + PredicateBuilder::GreaterThan(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(20))); CheckResult(std::move(reader), predicate, nullptr); } } diff --git a/src/paimon/common/reader/prefetch_file_batch_reader_impl_test.cpp b/src/paimon/common/reader/prefetch_file_batch_reader_impl_test.cpp index 2f6a7c9f..0974fe0f 100644 --- a/src/paimon/common/reader/prefetch_file_batch_reader_impl_test.cpp +++ b/src/paimon/common/reader/prefetch_file_batch_reader_impl_test.cpp @@ -611,13 +611,14 @@ TEST_P(PrefetchFileBatchReaderImplTest, TestPrefetchWithPredicatePushdownWithCom auto data_array = PrepareArray(90); PrepareTestData(file_format, data_array, /*stripe_row_count=*/30, /*row_index_stride=*/30); auto schema = arrow::schema(fields_); - ASSERT_OK_AND_ASSIGN(auto predicate, - PredicateBuilder::Or({ - PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(20l)), - PredicateBuilder::GreaterThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(70l)), - })); + ASSERT_OK_AND_ASSIGN( + auto predicate, + PredicateBuilder::Or({ + PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(20))), + PredicateBuilder::GreaterThan(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(70))), + })); auto reader = PreparePrefetchReader(file_format, schema.get(), predicate, @@ -646,13 +647,14 @@ TEST_P(PrefetchFileBatchReaderImplTest, PrepareTestData(file_format, data_array, /*stripe_row_count=*/30, /*row_index_stride=*/10); auto schema = arrow::schema(fields_); - ASSERT_OK_AND_ASSIGN(auto predicate, - PredicateBuilder::Or({ - PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(20l)), - PredicateBuilder::GreaterThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::BIGINT, Literal(70l)), - })); + ASSERT_OK_AND_ASSIGN( + auto predicate, + PredicateBuilder::Or({ + PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(20))), + PredicateBuilder::GreaterThan(/*field_index=*/1, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(70))), + })); auto reader = PreparePrefetchReader(file_format, schema.get(), predicate, diff --git a/src/paimon/core/table/source/table_read_test.cpp b/src/paimon/core/table/source/table_read_test.cpp index 2b72dfdb..f3d5201b 100644 --- a/src/paimon/core/table/source/table_read_test.cpp +++ b/src/paimon/core/table/source/table_read_test.cpp @@ -46,8 +46,9 @@ TEST(TableReadTest, TestReadWithInvalidContext) { } { // field type and literal type mismatch - auto predicate = PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", - FieldType::DOUBLE, Literal(15l)); + auto predicate = + PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::DOUBLE, + Literal(static_cast(15))); ReadContextBuilder context_builder(path); context_builder.SetPredicate(predicate); ASSERT_OK_AND_ASSIGN(auto read_context, context_builder.Finish()); @@ -57,8 +58,9 @@ TEST(TableReadTest, TestReadWithInvalidContext) { } { // field type in predicate mismatch schema - auto predicate = PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", - FieldType::BIGINT, Literal(15l)); + auto predicate = + PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::BIGINT, + Literal(static_cast(15))); ReadContextBuilder context_builder(path); context_builder.SetPredicate(predicate); ASSERT_OK_AND_ASSIGN(auto read_context, context_builder.Finish()); diff --git a/src/paimon/core/utils/field_mapping_test.cpp b/src/paimon/core/utils/field_mapping_test.cpp index c74083e2..6a9c56a8 100644 --- a/src/paimon/core/utils/field_mapping_test.cpp +++ b/src/paimon/core/utils/field_mapping_test.cpp @@ -449,7 +449,7 @@ TEST_F(FieldMappingTest, TestSchemaEvolutionWithPredicate) { FieldType::INT, Literal(40)); // in can be pushed down auto in = PredicateBuilder::In(/*field_index=*/5, /*field_name=*/"a", FieldType::BIGINT, - {Literal(100l)}); + {Literal(static_cast(100))}); auto not_in = PredicateBuilder::In(/*field_index=*/6, /*field_name=*/"e", FieldType::INT, {Literal(50)}); @@ -551,7 +551,7 @@ TEST_F(FieldMappingTest, TestSchemaEvolutionWithPredicate2) { FieldType::INT, Literal(40)); // in will not be pushed down, as with casting, literal from BIGINT to INT is overflow auto in = PredicateBuilder::In(/*field_index=*/2, /*field_name=*/"a", FieldType::BIGINT, - {Literal(9223372036854775807l)}); + {Literal(static_cast(9223372036854775807))}); auto not_in = PredicateBuilder::In(/*field_index=*/3, /*field_name=*/"e", FieldType::INT, {Literal(50)}); @@ -618,8 +618,9 @@ TEST_F(FieldMappingTest, TestCompoundPredicateWithoutPushDown) { auto equal = PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::INT, Literal(55)); - auto greater_than = PredicateBuilder::GreaterThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(30l)); + auto greater_than = + PredicateBuilder::GreaterThan(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + Literal(static_cast(30))); auto less_than = PredicateBuilder::LessThan(/*field_index=*/3, /*field_name=*/"f3", FieldType::INT, Literal(55)); ASSERT_OK_AND_ASSIGN(auto or_predicate, PredicateBuilder::Or({greater_than, less_than})); diff --git a/src/paimon/format/avro/CMakeLists.txt b/src/paimon/format/avro/CMakeLists.txt index dba1bb04..240067e3 100644 --- a/src/paimon/format/avro/CMakeLists.txt +++ b/src/paimon/format/avro/CMakeLists.txt @@ -48,26 +48,43 @@ if(PAIMON_ENABLE_AVRO) ${PAIMON_VERSION_SCRIPT_FLAGS}) if(PAIMON_BUILD_TESTS) - add_paimon_test(avro_format_test - SOURCES - avro_direct_encoder_decoder_test.cpp - avro_file_batch_reader_test.cpp - avro_file_format_test.cpp - avro_format_writer_test.cpp - avro_input_stream_impl_test.cpp - avro_schema_converter_test.cpp - avro_stats_extractor_test.cpp - avro_writer_builder_test.cpp - EXTRA_INCLUDES - ${AVRO_INCLUDE_DIR} - STATIC_LINK_LIBS - paimon_shared - test_utils_static - "-Wl,--whole-archive" - paimon_local_file_system_static - paimon_avro_file_format_static - "-Wl,--no-whole-archive" - ${GTEST_LINK_TOOLCHAIN}) + set(AVRO_FORMAT_TEST + avro_direct_encoder_decoder_test.cpp + avro_file_batch_reader_test.cpp + avro_file_format_test.cpp + avro_format_writer_test.cpp + avro_input_stream_impl_test.cpp + avro_schema_converter_test.cpp + avro_stats_extractor_test.cpp + avro_writer_builder_test.cpp) + if(APPLE) + add_paimon_test(avro_format_test + SOURCES + ${AVRO_FORMAT_TEST} + EXTRA_INCLUDES + ${AVRO_INCLUDE_DIR} + STATIC_LINK_LIBS + paimon_shared + test_utils_static + "-Wl,-force_load" + paimon_local_file_system_static + paimon_avro_file_format_static + ${GTEST_LINK_TOOLCHAIN}) + else() + add_paimon_test(avro_format_test + SOURCES + ${AVRO_FORMAT_TEST} + EXTRA_INCLUDES + ${AVRO_INCLUDE_DIR} + STATIC_LINK_LIBS + paimon_shared + test_utils_static + "-Wl,--whole-archive" + paimon_local_file_system_static + paimon_avro_file_format_static + "-Wl,--no-whole-archive" + ${GTEST_LINK_TOOLCHAIN}) + endif() endif() diff --git a/src/paimon/format/avro/avro_input_stream_impl.cpp b/src/paimon/format/avro/avro_input_stream_impl.cpp index 30c26528..1fcc558f 100644 --- a/src/paimon/format/avro/avro_input_stream_impl.cpp +++ b/src/paimon/format/avro/avro_input_stream_impl.cpp @@ -68,7 +68,8 @@ bool AvroInputStreamImpl::next(const uint8_t** data, size_t* len) { return false; // eof } auto read_length = - in_->Read(reinterpret_cast(buffer_), std::min(buffer_size_, remaining)); + in_->Read(reinterpret_cast(buffer_), + std::min(static_cast(buffer_size_), static_cast(remaining))); if (!read_length.ok()) { throw ::avro::Exception("Read failed: {}", read_length.status().ToString()); } diff --git a/src/paimon/format/blob/CMakeLists.txt b/src/paimon/format/blob/CMakeLists.txt index 3876c40f..11c33b15 100644 --- a/src/paimon/format/blob/CMakeLists.txt +++ b/src/paimon/format/blob/CMakeLists.txt @@ -33,21 +33,39 @@ add_paimon_lib(paimon_blob_file_format ${PAIMON_VERSION_SCRIPT_FLAGS}) if(PAIMON_BUILD_TESTS) - add_paimon_test(blob_format_test - SOURCES - blob_format_writer_test.cpp - blob_file_batch_reader_test.cpp - blob_stats_extractor_test.cpp - blob_writer_builder_test.cpp - blob_file_format_factory_test.cpp - EXTRA_INCLUDES - ${BLOB_INCLUDE_DIR} - STATIC_LINK_LIBS - paimon_shared - test_utils_static - "-Wl,--whole-archive" - paimon_local_file_system_static - paimon_blob_file_format_static - "-Wl,--no-whole-archive" - ${GTEST_LINK_TOOLCHAIN}) + set(BLOB_FORMAT_TEST + blob_format_writer_test.cpp + blob_file_batch_reader_test.cpp + blob_stats_extractor_test.cpp + blob_writer_builder_test.cpp + blob_file_format_factory_test.cpp) + if(APPLE) + add_paimon_test(blob_format_test + SOURCES + ${BLOB_FORMAT_TEST} + EXTRA_INCLUDES + ${BLOB_INCLUDE_DIR} + STATIC_LINK_LIBS + paimon_shared + test_utils_static + "-Wl,-force_load" + paimon_local_file_system_static + paimon_blob_file_format_static + ${GTEST_LINK_TOOLCHAIN}) + else() + add_paimon_test(blob_format_test + SOURCES + ${BLOB_FORMAT_TEST} + blob_file_format_factory_test.cpp + EXTRA_INCLUDES + ${BLOB_INCLUDE_DIR} + STATIC_LINK_LIBS + paimon_shared + test_utils_static + "-Wl,--whole-archive" + paimon_local_file_system_static + paimon_blob_file_format_static + "-Wl,--no-whole-archive" + ${GTEST_LINK_TOOLCHAIN}) + endif() endif() diff --git a/src/paimon/format/blob/blob_format_writer.cpp b/src/paimon/format/blob/blob_format_writer.cpp index 1493a069..134cc0a8 100644 --- a/src/paimon/format/blob/blob_format_writer.cpp +++ b/src/paimon/format/blob/blob_format_writer.cpp @@ -138,7 +138,8 @@ Status BlobFormatWriter::WriteBlob(std::string_view blob_data) { } PAIMON_ASSIGN_OR_RAISE(uint64_t file_length, in->Length()); uint64_t total_read_length = 0; - uint32_t read_len = std::min(file_length, tmp_buffer_->size()); + uint32_t read_len = + std::min(static_cast(file_length), static_cast(tmp_buffer_->size())); while (read_len > 0) { PAIMON_ASSIGN_OR_RAISE(int32_t actual_read_len, in->Read(tmp_buffer_->data(), read_len)); if (static_cast(actual_read_len) != read_len) { @@ -147,7 +148,8 @@ Status BlobFormatWriter::WriteBlob(std::string_view blob_data) { } PAIMON_RETURN_NOT_OK(WriteWithCrc32(tmp_buffer_->data(), actual_read_len)); total_read_length += actual_read_len; - read_len = std::min(file_length - total_read_length, tmp_buffer_->size()); + read_len = std::min(static_cast(file_length - total_read_length), + static_cast(tmp_buffer_->size())); } // write bin length diff --git a/src/paimon/format/orc/CMakeLists.txt b/src/paimon/format/orc/CMakeLists.txt index 4543fe93..7ae276b4 100644 --- a/src/paimon/format/orc/CMakeLists.txt +++ b/src/paimon/format/orc/CMakeLists.txt @@ -48,27 +48,44 @@ if(PAIMON_ENABLE_ORC) ${PAIMON_VERSION_SCRIPT_FLAGS}) if(PAIMON_BUILD_TESTS) - add_paimon_test(orc_format_test - SOURCES - complex_predicate_test.cpp - predicate_converter_test.cpp - predicate_pushdown_test.cpp - read_range_generator_test.cpp - orc_reader_wrapper_test.cpp - orc_input_output_stream_test.cpp - orc_adapter_test.cpp - orc_stats_extractor_test.cpp - orc_format_writer_test.cpp - orc_file_batch_reader_test.cpp - EXTRA_INCLUDES - ${ORC_INCLUDE_DIR} - STATIC_LINK_LIBS - paimon_shared - test_utils_static - "-Wl,--whole-archive" - paimon_local_file_system_static - paimon_orc_file_format_static - "-Wl,--no-whole-archive" - ${GTEST_LINK_TOOLCHAIN}) + set(ORC_FORMAT_TEST + complex_predicate_test.cpp + predicate_converter_test.cpp + predicate_pushdown_test.cpp + read_range_generator_test.cpp + orc_reader_wrapper_test.cpp + orc_input_output_stream_test.cpp + orc_adapter_test.cpp + orc_stats_extractor_test.cpp + orc_format_writer_test.cpp + orc_file_batch_reader_test.cpp) + if(APPLE) + add_paimon_test(orc_format_test + SOURCES + ${ORC_FORMAT_TEST} + EXTRA_INCLUDES + ${ORC_INCLUDE_DIR} + STATIC_LINK_LIBS + paimon_shared + test_utils_static + "-Wl,-force_load" + paimon_local_file_system_static + paimon_orc_file_format_static + ${GTEST_LINK_TOOLCHAIN}) + else() + add_paimon_test(orc_format_test + SOURCES + ${ORC_FORMAT_TEST} + EXTRA_INCLUDES + ${ORC_INCLUDE_DIR} + STATIC_LINK_LIBS + paimon_shared + test_utils_static + "-Wl,--whole-archive" + paimon_local_file_system_static + paimon_orc_file_format_static + "-Wl,--no-whole-archive" + ${GTEST_LINK_TOOLCHAIN}) + endif() endif() endif() diff --git a/src/paimon/format/orc/predicate_converter_test.cpp b/src/paimon/format/orc/predicate_converter_test.cpp index d3f64933..80492210 100644 --- a/src/paimon/format/orc/predicate_converter_test.cpp +++ b/src/paimon/format/orc/predicate_converter_test.cpp @@ -47,8 +47,9 @@ TEST(PredicateConverterTest, TestSimple) { ASSERT_EQ("leaf-0 = (column(id=1) is null), expr = (not leaf-0)", search_arg->toString()); } { - auto predicate = PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto search_arg, PredicateConverter::Convert(*orc_type, predicate)); ASSERT_EQ("leaf-0 = (column(id=1) = 5), expr = leaf-0", search_arg->toString()); } @@ -68,20 +69,23 @@ TEST(PredicateConverterTest, TestSimple) { ASSERT_EQ("leaf-0 = (column(id=1) is null), expr = leaf-0", search_arg->toString()); } { - auto predicate = PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto search_arg, PredicateConverter::Convert(*orc_type, predicate)); ASSERT_EQ("leaf-0 = (column(id=1) = 5), expr = (not leaf-0)", search_arg->toString()); } { - auto predicate = PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto search_arg, PredicateConverter::Convert(*orc_type, predicate)); ASSERT_EQ("leaf-0 = (column(id=1) <= 5), expr = (not leaf-0)", search_arg->toString()); } { - auto predicate = PredicateBuilder::GreaterOrEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::GreaterOrEqual(/*field_index=*/0, /*field_name=*/"f0", + FieldType::BIGINT, Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto search_arg, PredicateConverter::Convert(*orc_type, predicate)); ASSERT_EQ("leaf-0 = (column(id=1) < 5), expr = (not leaf-0)", search_arg->toString()); } @@ -93,21 +97,24 @@ TEST(PredicateConverterTest, TestSimple) { ASSERT_EQ("leaf-0 = (column(id=5) < 16), expr = (not leaf-0)", search_arg->toString()); } { - auto predicate = PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto search_arg, PredicateConverter::Convert(*orc_type, predicate)); ASSERT_EQ("leaf-0 = (column(id=1) < 5), expr = leaf-0", search_arg->toString()); } { - auto predicate = PredicateBuilder::LessOrEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::LessOrEqual(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto search_arg, PredicateConverter::Convert(*orc_type, predicate)); ASSERT_EQ("leaf-0 = (column(id=1) <= 5), expr = leaf-0", search_arg->toString()); } { - auto predicate = - PredicateBuilder::In(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - {Literal(1l), Literal(3l), Literal(5l)}); + auto predicate = PredicateBuilder::In( + /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(3)), + Literal(static_cast(5))}); ASSERT_OK_AND_ASSIGN(auto search_arg, PredicateConverter::Convert(*orc_type, predicate)); ASSERT_EQ("leaf-0 = (column(id=1) in [1, 3, 5]), expr = leaf-0", search_arg->toString()); } @@ -144,9 +151,10 @@ TEST(PredicateConverterTest, TestSimple) { ASSERT_EQ("expr = YES", search_arg->toString()); } { - auto predicate = - PredicateBuilder::NotIn(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - {Literal(1l), Literal(3l), Literal(5l)}); + auto predicate = PredicateBuilder::NotIn( + /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(3)), + Literal(static_cast(5))}); ASSERT_OK_AND_ASSIGN(auto search_arg, PredicateConverter::Convert(*orc_type, predicate)); ASSERT_EQ("leaf-0 = (column(id=1) in [1, 3, 5]), expr = (not leaf-0)", search_arg->toString()); @@ -186,7 +194,7 @@ TEST(PredicateConverterTest, TestCompound) { auto predicate, PredicateBuilder::And({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -220,7 +228,7 @@ TEST(PredicateConverterTest, TestCompound) { auto predicate, PredicateBuilder::Or({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -238,22 +246,22 @@ TEST(PredicateConverterTest, TestCompound) { search_arg->toString()); } { - auto predicate = - PredicateBuilder::Or( - {PredicateBuilder::And( - {PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", - FieldType::BOOLEAN, Literal(true)), - PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(3l))}) - .value(), - PredicateBuilder::And( - {PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", - FieldType::BOOLEAN, Literal(false)), - PredicateBuilder::LessThan(/*field_index=*/1, /*field_name=*/"f1", - FieldType::FLOAT, - Literal(static_cast(3.1)))}) - .value()}) - .value(); + auto predicate = PredicateBuilder::Or( + {PredicateBuilder::And( + {PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", + FieldType::BOOLEAN, Literal(true)), + PredicateBuilder::LessThan( + /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(3)))}) + .value(), + PredicateBuilder::And( + {PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", + FieldType::BOOLEAN, Literal(false)), + PredicateBuilder::LessThan(/*field_index=*/1, + /*field_name=*/"f1", FieldType::FLOAT, + Literal(static_cast(3.1)))}) + .value()}) + .value(); ASSERT_OK_AND_ASSIGN(auto search_arg, PredicateConverter::Convert(*orc_type, predicate)); ASSERT_EQ( "leaf-0 = (column(id=4) = true), " diff --git a/src/paimon/format/orc/predicate_pushdown_test.cpp b/src/paimon/format/orc/predicate_pushdown_test.cpp index c525fd03..fb5a3a5a 100644 --- a/src/paimon/format/orc/predicate_pushdown_test.cpp +++ b/src/paimon/format/orc/predicate_pushdown_test.cpp @@ -171,49 +171,56 @@ TEST_F(PredicatePushdownTest, TestIntDoubleData) { } { // f2 != 4, has data - auto predicate = PredicateBuilder::NotEqual(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(4l)); + auto predicate = + PredicateBuilder::NotEqual(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + Literal(static_cast(4))); CheckResult(read_schema, predicate, expected_array); } { // f2 == 6, has data - auto predicate = PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)); + auto predicate = + PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + Literal(static_cast(6))); CheckResult(read_schema, predicate, expected_array); } { // f2 == 1, no data - auto predicate = PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(1l)); + auto predicate = + PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + Literal(static_cast(1))); CheckResult(read_schema, predicate, /*expected_array=*/ nullptr); } { // f2 in [1,2,3], no data - auto predicate = - PredicateBuilder::In(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(1l), Literal(2l), Literal(3l)}); + auto predicate = PredicateBuilder::In( + /*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(2)), + Literal(static_cast(3))}); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f2 not in [1,2,3], has data - auto predicate = - PredicateBuilder::NotIn(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(1l), Literal(2l), Literal(3l)}); + auto predicate = PredicateBuilder::NotIn( + /*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(2)), + Literal(static_cast(3))}); CheckResult(read_schema, predicate, expected_array); } { // f2 in [2,3,4], has data - auto predicate = - PredicateBuilder::In(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(2l), Literal(3l), Literal(4l)}); + auto predicate = PredicateBuilder::In( + /*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + {Literal(static_cast(2)), Literal(static_cast(3)), + Literal(static_cast(4))}); CheckResult(read_schema, predicate, expected_array); } { // f2 not in [2,3,4], has data - auto predicate = - PredicateBuilder::NotIn(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(2l), Literal(3l), Literal(4l)}); + auto predicate = PredicateBuilder::NotIn( + /*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + {Literal(static_cast(2)), Literal(static_cast(3)), + Literal(static_cast(4))}); CheckResult(read_schema, predicate, expected_array); } } @@ -360,26 +367,30 @@ TEST_F(PredicatePushdownTest, TestPredicatePushdownWithAllDataNull) { // other predicate, always return IS_NULL (no data) { // f4 in [1,2], no data - auto predicate = PredicateBuilder::In(/*field_index=*/4, /*field_name=*/"f4", - FieldType::BIGINT, {Literal(1l), Literal(2l)}); + auto predicate = PredicateBuilder::In( + /*field_index=*/4, /*field_name=*/"f4", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(2))}); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f4 not in [1,2], no data - auto predicate = PredicateBuilder::NotIn(/*field_index=*/4, /*field_name=*/"f4", - FieldType::BIGINT, {Literal(1l), Literal(2l)}); + auto predicate = PredicateBuilder::NotIn( + /*field_index=*/4, /*field_name=*/"f4", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(2))}); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f4 >= 3, no data - auto predicate = PredicateBuilder::GreaterOrEqual(/*field_index=*/4, /*field_name=*/"f4", - FieldType::BIGINT, Literal(3l)); + auto predicate = + PredicateBuilder::GreaterOrEqual(/*field_index=*/4, /*field_name=*/"f4", + FieldType::BIGINT, Literal(static_cast(3))); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f4 <= 3, no data - auto predicate = PredicateBuilder::LessOrEqual(/*field_index=*/4, /*field_name=*/"f4", - FieldType::BIGINT, Literal(3l)); + auto predicate = + PredicateBuilder::LessOrEqual(/*field_index=*/4, /*field_name=*/"f4", FieldType::BIGINT, + Literal(static_cast(3))); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } } @@ -433,14 +444,16 @@ TEST_F(PredicatePushdownTest, TestPredicatePushdownWithNullLiteral) { // f2 in [1,null,2], no data auto predicate = PredicateBuilder::In( /*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(1l), Literal(FieldType::BIGINT), Literal(2l)}); + {Literal(static_cast(1)), Literal(FieldType::BIGINT), + Literal(static_cast(2))}); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f2 in [1,null,2,4], has data auto predicate = PredicateBuilder::In( /*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(1l), Literal(FieldType::BIGINT), Literal(2l), Literal(4l)}); + {Literal(static_cast(1)), Literal(FieldType::BIGINT), + Literal(static_cast(2)), Literal(static_cast(4))}); CheckResult(read_schema, predicate, expected_array); } } @@ -454,7 +467,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::BOOLEAN, @@ -468,7 +481,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::IsNull(/*field_index=*/3, /*field_name=*/"f3", @@ -482,7 +495,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5", @@ -496,7 +509,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0))), PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5", @@ -510,7 +523,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0)))})); ASSERT_TRUE(predicate); @@ -522,7 +535,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0)))})); ASSERT_TRUE(predicate); @@ -532,10 +545,11 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { // f2 < 2 or f5 is null, will skip this predicate, has data ASSERT_OK_AND_ASSIGN( auto predicate, - PredicateBuilder::Or({PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(2l)), - PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5", - FieldType::BINARY)})); + PredicateBuilder::Or( + {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", + FieldType::BIGINT, Literal(static_cast(2))), + PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5", + FieldType::BINARY)})); ASSERT_TRUE(predicate); CheckResult(read_schema, predicate, expected_array); } @@ -545,7 +559,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(2l)), + FieldType::BIGINT, Literal(static_cast(2))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::BOOLEAN, @@ -559,7 +573,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(2l)), + FieldType::BIGINT, Literal(static_cast(2))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0))), PredicateBuilder::IsNull(/*field_index=*/3, /*field_name=*/"f3", diff --git a/src/paimon/format/parquet/CMakeLists.txt b/src/paimon/format/parquet/CMakeLists.txt index 9ad56c62..7ca4b23a 100644 --- a/src/paimon/format/parquet/CMakeLists.txt +++ b/src/paimon/format/parquet/CMakeLists.txt @@ -45,25 +45,41 @@ add_paimon_lib(paimon_parquet_file_format ${PAIMON_VERSION_SCRIPT_FLAGS}) if(PAIMON_BUILD_TESTS) - add_paimon_test(parquet_format_test - SOURCES - file_reader_wrapper_test.cpp - parquet_timestamp_converter_test.cpp - parquet_field_id_converter_test.cpp - parquet_file_batch_reader_test.cpp - parquet_format_writer_test.cpp - parquet_input_output_stream_test.cpp - parquet_stats_extractor_test.cpp - parquet_writer_builder_test.cpp - predicate_converter_test.cpp - predicate_pushdown_test.cpp - STATIC_LINK_LIBS - paimon_shared - test_utils_static - "-Wl,--whole-archive" - paimon_local_file_system_static - paimon_parquet_file_format_static - "-Wl,--no-whole-archive" - parquet - ${GTEST_LINK_TOOLCHAIN}) + set(PARQUET_FORMAT_TEST + file_reader_wrapper_test.cpp + parquet_timestamp_converter_test.cpp + parquet_field_id_converter_test.cpp + parquet_file_batch_reader_test.cpp + parquet_format_writer_test.cpp + parquet_input_output_stream_test.cpp + parquet_stats_extractor_test.cpp + parquet_writer_builder_test.cpp + predicate_converter_test.cpp + predicate_pushdown_test.cpp) + if(APPLE) + add_paimon_test(parquet_format_test + SOURCES + ${PARQUET_FORMAT_TEST} + STATIC_LINK_LIBS + paimon_shared + test_utils_static + "-Wl,-force_load" + paimon_local_file_system_static + paimon_parquet_file_format_static + parquet + ${GTEST_LINK_TOOLCHAIN}) + else() + add_paimon_test(parquet_format_test + SOURCES + ${PARQUET_FORMAT_TEST} + STATIC_LINK_LIBS + paimon_shared + test_utils_static + "-Wl,--whole-archive" + paimon_local_file_system_static + paimon_parquet_file_format_static + "-Wl,--no-whole-archive" + parquet + ${GTEST_LINK_TOOLCHAIN}) + endif() endif() diff --git a/src/paimon/format/parquet/predicate_converter_test.cpp b/src/paimon/format/parquet/predicate_converter_test.cpp index 6a76585f..7ccad9a8 100644 --- a/src/paimon/format/parquet/predicate_converter_test.cpp +++ b/src/paimon/format/parquet/predicate_converter_test.cpp @@ -47,8 +47,9 @@ TEST(PredicateConverterTest, TestSimple) { ASSERT_EQ("invert(is_null(f0, {nan_is_null=false}))", expression.ToString()); } { - auto predicate = PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(f0 == 5)", expression.ToString()); @@ -68,22 +69,25 @@ TEST(PredicateConverterTest, TestSimple) { ASSERT_EQ("(f6 == 1970-01-11)", expression.ToString()); } { - auto predicate = PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(f0 != 5)", expression.ToString()); } { - auto predicate = PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(f0 > 5)", expression.ToString()); } { - auto predicate = PredicateBuilder::GreaterOrEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::GreaterOrEqual(/*field_index=*/0, /*field_name=*/"f0", + FieldType::BIGINT, Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(f0 >= 5)", expression.ToString()); @@ -97,31 +101,35 @@ TEST(PredicateConverterTest, TestSimple) { ASSERT_EQ("(f4 >= 16)", expression.ToString()); } { - auto predicate = PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(f0 < 5)", expression.ToString()); } { - auto predicate = PredicateBuilder::LessOrEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + auto predicate = + PredicateBuilder::LessOrEqual(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + Literal(static_cast(5))); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(f0 <= 5)", expression.ToString()); } { - auto predicate = - PredicateBuilder::In(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - {Literal(1l), Literal(3l), Literal(5l)}); + auto predicate = PredicateBuilder::In( + /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(3)), + Literal(static_cast(5))}); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(((f0 == 1) or (f0 == 3)) or (f0 == 5))", expression.ToString()); } { - auto predicate = - PredicateBuilder::NotIn(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - {Literal(1l), Literal(3l), Literal(5l)}); + auto predicate = PredicateBuilder::NotIn( + /*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(3)), + Literal(static_cast(5))}); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(((f0 != 1) and (f0 != 3)) and (f0 != 5))", expression.ToString()); @@ -196,7 +204,7 @@ TEST(PredicateConverterTest, TestCompound) { auto predicate, PredicateBuilder::And({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -225,7 +233,7 @@ TEST(PredicateConverterTest, TestCompound) { auto predicate, PredicateBuilder::Or({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + Literal(static_cast(3))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -246,7 +254,8 @@ TEST(PredicateConverterTest, TestCompound) { {PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::BOOLEAN, Literal(true)), PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(3l))}) + FieldType::BIGINT, + Literal(static_cast(3)))}) .value(), PredicateBuilder::And( {PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", diff --git a/src/paimon/format/parquet/predicate_pushdown_test.cpp b/src/paimon/format/parquet/predicate_pushdown_test.cpp index 338e9494..aa803c65 100644 --- a/src/paimon/format/parquet/predicate_pushdown_test.cpp +++ b/src/paimon/format/parquet/predicate_pushdown_test.cpp @@ -179,57 +179,65 @@ TEST_F(PredicatePushdownTest, TestIntDoubleData) { } { // f2 != 4, has data - auto predicate = PredicateBuilder::NotEqual(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(4l)); + auto predicate = + PredicateBuilder::NotEqual(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + Literal(static_cast(4))); CheckResult(read_schema, predicate, expected_array); } { // f2 == 6, has data - auto predicate = PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)); + auto predicate = + PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + Literal(static_cast(6))); CheckResult(read_schema, predicate, expected_array); } { // f2 == 1, no data - auto predicate = PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(1l)); + auto predicate = + PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + Literal(static_cast(1))); CheckResult(read_schema, predicate, /*expected_array=*/ nullptr); } { // f2 in [1,2,3], no data - auto predicate = - PredicateBuilder::In(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(1l), Literal(2l), Literal(3l)}); + auto predicate = PredicateBuilder::In( + /*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(2)), + Literal(static_cast(3))}); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f2 in [1,2,3] but has small predicate node limit, has data - auto predicate = - PredicateBuilder::In(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(1l), Literal(2l), Literal(3l)}); + auto predicate = PredicateBuilder::In( + /*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(2)), + Literal(static_cast(3))}); CheckResult(read_schema, predicate, expected_array, /*predicate_node_count_limit=*/1); } { // f2 not in [1,2,3], has data - auto predicate = - PredicateBuilder::NotIn(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(1l), Literal(2l), Literal(3l)}); + auto predicate = PredicateBuilder::NotIn( + /*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(2)), + Literal(static_cast(3))}); CheckResult(read_schema, predicate, expected_array); } { // f2 in [2,3,4], has data - auto predicate = - PredicateBuilder::In(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(2l), Literal(3l), Literal(4l)}); + auto predicate = PredicateBuilder::In( + /*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + {Literal(static_cast(2)), Literal(static_cast(3)), + Literal(static_cast(4))}); CheckResult(read_schema, predicate, expected_array); } { // f2 not in [2,3,4], has data - auto predicate = - PredicateBuilder::NotIn(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(2l), Literal(3l), Literal(4l)}); + auto predicate = PredicateBuilder::NotIn( + /*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, + {Literal(static_cast(2)), Literal(static_cast(3)), + Literal(static_cast(4))}); CheckResult(read_schema, predicate, expected_array); } } @@ -402,26 +410,30 @@ TEST_F(PredicatePushdownTest, TestPredicatePushdownWithAllDataNull) { // other predicate, always return IS_NULL (no data) { // f4 in [1,2], no data - auto predicate = PredicateBuilder::In(/*field_index=*/4, /*field_name=*/"f4", - FieldType::BIGINT, {Literal(1l), Literal(2l)}); + auto predicate = PredicateBuilder::In( + /*field_index=*/4, /*field_name=*/"f4", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(2))}); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f4 not in [1,2], no data - auto predicate = PredicateBuilder::NotIn(/*field_index=*/4, /*field_name=*/"f4", - FieldType::BIGINT, {Literal(1l), Literal(2l)}); + auto predicate = PredicateBuilder::NotIn( + /*field_index=*/4, /*field_name=*/"f4", FieldType::BIGINT, + {Literal(static_cast(1)), Literal(static_cast(2))}); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f4 >= 3, no data - auto predicate = PredicateBuilder::GreaterOrEqual(/*field_index=*/4, /*field_name=*/"f4", - FieldType::BIGINT, Literal(3l)); + auto predicate = + PredicateBuilder::GreaterOrEqual(/*field_index=*/4, /*field_name=*/"f4", + FieldType::BIGINT, Literal(static_cast(3))); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f4 <= 3, no data - auto predicate = PredicateBuilder::LessOrEqual(/*field_index=*/4, /*field_name=*/"f4", - FieldType::BIGINT, Literal(3l)); + auto predicate = + PredicateBuilder::LessOrEqual(/*field_index=*/4, /*field_name=*/"f4", FieldType::BIGINT, + Literal(static_cast(3))); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } } @@ -436,7 +448,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::BOOLEAN, @@ -450,7 +462,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::IsNull(/*field_index=*/3, /*field_name=*/"f3", @@ -464,7 +476,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5", @@ -478,7 +490,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::Equal(/*field_index=*/5, /*field_name=*/"f5", FieldType::BINARY, @@ -492,7 +504,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0))), PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5", @@ -506,7 +518,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0)))})); ASSERT_TRUE(predicate); @@ -518,7 +530,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, Literal(static_cast(6))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0)))})); ASSERT_TRUE(predicate); @@ -528,10 +540,11 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { // f2 < 2 or f5 is null, no data ASSERT_OK_AND_ASSIGN( auto predicate, - PredicateBuilder::Or({PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(2l)), - PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5", - FieldType::BINARY)})); + PredicateBuilder::Or( + {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", + FieldType::BIGINT, Literal(static_cast(2))), + PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5", + FieldType::BINARY)})); ASSERT_TRUE(predicate); CheckResult(read_schema, predicate, nullptr); } @@ -541,7 +554,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(2l)), + FieldType::BIGINT, Literal(static_cast(2))), PredicateBuilder::Equal(/*field_index=*/5, /*field_name=*/"f5", FieldType::BINARY, Literal(FieldType::BINARY, "zoo", 3))})); ASSERT_TRUE(predicate); @@ -553,7 +566,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(2l)), + FieldType::BIGINT, Literal(static_cast(2))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::BOOLEAN, @@ -567,7 +580,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(2l)), + FieldType::BIGINT, Literal(static_cast(2))), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0))), PredicateBuilder::IsNull(/*field_index=*/3, /*field_name=*/"f3", diff --git a/src/paimon/fs/jindo/CMakeLists.txt b/src/paimon/fs/jindo/CMakeLists.txt index 3bf588bf..4b07d89b 100644 --- a/src/paimon/fs/jindo/CMakeLists.txt +++ b/src/paimon/fs/jindo/CMakeLists.txt @@ -22,8 +22,10 @@ if(PAIMON_ENABLE_JINDO) ${JINDOSDK_INCLUDE_DIR} DEPENDENCIES paimon_shared + jindosdk::c_sdk jindosdk::nextarch STATIC_LINK_LIBS + jindosdk::c_sdk jindosdk::nextarch fmt SHARED_LINK_LIBS diff --git a/src/paimon/global_index/lumina/lumina_global_index_test.cpp b/src/paimon/global_index/lumina/lumina_global_index_test.cpp index a2eb95db..98cee039 100644 --- a/src/paimon/global_index/lumina/lumina_global_index_test.cpp +++ b/src/paimon/global_index/lumina/lumina_global_index_test.cpp @@ -374,14 +374,15 @@ TEST_F(LuminaGlobalIndexTest, TestInvalidInputs) { { ASSERT_OK_AND_ASSIGN(auto reader, CreateGlobalIndexReader(index_root, data_type_, options_, meta)); - ASSERT_NOK_WITH_MSG(reader->VisitVectorSearch(std::make_shared( - "f1", - /*limit=*/2, query_, /*filter=*/nullptr, - PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)), - /*distance_type=*/std::nullopt, - /*options=*/std::map())), - "lumina index not support predicate in VisitVectorSearch"); + ASSERT_NOK_WITH_MSG( + reader->VisitVectorSearch(std::make_shared( + "f1", + /*limit=*/2, query_, /*filter=*/nullptr, + PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f0", + FieldType::BIGINT, Literal(static_cast(5))), + /*distance_type=*/std::nullopt, + /*options=*/std::map())), + "lumina index not support predicate in VisitVectorSearch"); } { ASSERT_OK_AND_ASSIGN(auto reader, diff --git a/src/paimon/symbols.list b/src/paimon/symbols.list new file mode 100644 index 00000000..71700374 --- /dev/null +++ b/src/paimon/symbols.list @@ -0,0 +1,17 @@ +# 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. +*paimon* diff --git a/src/paimon/testing/utils/CMakeLists.txt b/src/paimon/testing/utils/CMakeLists.txt index 32f00bb7..1ce7c771 100644 --- a/src/paimon/testing/utils/CMakeLists.txt +++ b/src/paimon/testing/utils/CMakeLists.txt @@ -26,15 +26,28 @@ if(PAIMON_BUILD_TESTS) paimon_static ${GTEST_LINK_TOOLCHAIN}) - add_paimon_test(test_utils_test - SOURCES - data_generator_test.cpp - STATIC_LINK_LIBS - paimon_shared - "-Wl,--whole-archive" - paimon_local_file_system_shared - "-Wl,--no-whole-archive" - test_utils_static - ${GTEST_LINK_TOOLCHAIN}) + set(TEST_UTILS_TEST data_generator_test.cpp) + if(APPLE) + add_paimon_test(test_utils_test + SOURCES + ${TEST_UTILS_TEST} + STATIC_LINK_LIBS + paimon_shared + "-Wl,-force_load" + paimon_local_file_system_shared + test_utils_static + ${GTEST_LINK_TOOLCHAIN}) + else() + add_paimon_test(test_utils_test + SOURCES + ${TEST_UTILS_TEST} + STATIC_LINK_LIBS + paimon_shared + "-Wl,--whole-archive" + paimon_local_file_system_shared + "-Wl,--no-whole-archive" + test_utils_static + ${GTEST_LINK_TOOLCHAIN}) + endif() endif() diff --git a/test/inte/read_inte_with_index_test.cpp b/test/inte/read_inte_with_index_test.cpp index bd26f187..ea6df7da 100644 --- a/test/inte/read_inte_with_index_test.cpp +++ b/test/inte/read_inte_with_index_test.cpp @@ -1211,8 +1211,9 @@ TEST_P(ReadInteWithIndexTest, TestWithAlterTable) { } { // test equal predicate for f1 - auto predicate = PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f1", - FieldType::BIGINT, Literal(10l)); + auto predicate = + PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(10))); std::shared_ptr expected_array; auto array_status = arrow::ipc::internal::json::ChunkedArrayFromJSON(arrow_data_type, {R"([ [0, 10, "Alice", 11.1, null], @@ -1228,8 +1229,9 @@ TEST_P(ReadInteWithIndexTest, TestWithAlterTable) { } { // test not equal predicate for f1 - auto predicate = PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f1", - FieldType::BIGINT, Literal(10l)); + auto predicate = + PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(10))); std::shared_ptr expected_array; auto array_status = arrow::ipc::internal::json::ChunkedArrayFromJSON(arrow_data_type, {R"([ [0, 20, "Lucy", 15.1, null], @@ -1344,8 +1346,9 @@ TEST_P(ReadInteWithIndexTest, TestWithAlterTable) { } { // test greater than predicate for f1, do not take effective in bitmap index - auto predicate = PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f1", - FieldType::BIGINT, Literal(10l)); + auto predicate = + PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(10))); std::shared_ptr expected_array; auto array_status = arrow::ipc::internal::json::ChunkedArrayFromJSON(arrow_data_type, {R"([ [0, 10, "Alice", 11.1, null], @@ -1367,9 +1370,10 @@ TEST_P(ReadInteWithIndexTest, TestWithAlterTable) { } { // test in predicate - auto predicate = - PredicateBuilder::In(/*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, - {Literal(10l), Literal(30l), Literal(50l)}); + auto predicate = PredicateBuilder::In( + /*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, + {Literal(static_cast(10)), Literal(static_cast(30)), + Literal(static_cast(50))}); std::shared_ptr expected_array; auto array_status = arrow::ipc::internal::json::ChunkedArrayFromJSON(arrow_data_type, {R"([ [0, 10, "Alice", 11.1, null], @@ -1387,9 +1391,10 @@ TEST_P(ReadInteWithIndexTest, TestWithAlterTable) { } { // test not in predicate - auto predicate = - PredicateBuilder::NotIn(/*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, - {Literal(10l), Literal(30l), Literal(50l)}); + auto predicate = PredicateBuilder::NotIn( + /*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, + {Literal(static_cast(10)), Literal(static_cast(30)), + Literal(static_cast(50))}); std::shared_ptr expected_array; auto array_status = arrow::ipc::internal::json::ChunkedArrayFromJSON(arrow_data_type, {R"([ [0, 20, "Lucy", 15.1, null], @@ -1406,8 +1411,9 @@ TEST_P(ReadInteWithIndexTest, TestWithAlterTable) { auto f4_predicate = PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f4", FieldType::STRING, Literal(FieldType::STRING, "Alice", 5)); - auto f1_predicate = PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f1", - FieldType::BIGINT, Literal(30l)); + auto f1_predicate = + PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(30))); ASSERT_OK_AND_ASSIGN(auto predicate, PredicateBuilder::And({f4_predicate, f1_predicate})); std::shared_ptr expected_array; auto array_status = arrow::ipc::internal::json::ChunkedArrayFromJSON(arrow_data_type, {R"([ @@ -1422,8 +1428,9 @@ TEST_P(ReadInteWithIndexTest, TestWithAlterTable) { auto f4_predicate = PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f4", FieldType::STRING, Literal(FieldType::STRING, "Alice", 5)); - auto f1_predicate = PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f1", - FieldType::BIGINT, Literal(30l)); + auto f1_predicate = + PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(30))); ASSERT_OK_AND_ASSIGN(auto predicate, PredicateBuilder::Or({f4_predicate, f1_predicate})); std::shared_ptr expected_array; auto array_status = arrow::ipc::internal::json::ChunkedArrayFromJSON(arrow_data_type, {R"([ @@ -1441,8 +1448,9 @@ TEST_P(ReadInteWithIndexTest, TestWithAlterTable) { auto f4_predicate = PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f4", FieldType::STRING, Literal(FieldType::STRING, "Alice", 5)); - auto f1_predicate = PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f1", - FieldType::BIGINT, Literal(40l)); + auto f1_predicate = + PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(40))); auto f5_predicate = PredicateBuilder::IsNotNull(/*field_index=*/3, /*field_name=*/"f5", FieldType::INT); ASSERT_OK_AND_ASSIGN(auto predicate, @@ -1451,13 +1459,15 @@ TEST_P(ReadInteWithIndexTest, TestWithAlterTable) { } { // test non result - auto predicate = PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f1", - FieldType::BIGINT, Literal(40l)); + auto predicate = + PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(40))); CheckResult(path, {split}, predicate, /*expected_array=*/nullptr); } { - auto predicate = PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f1", - FieldType::BIGINT, Literal(40l)); + auto predicate = + PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(40))); std::shared_ptr expected_array; auto array_status = arrow::ipc::internal::json::ChunkedArrayFromJSON(arrow_data_type, {R"([ [0, 10, "Alice", 11.1, null], diff --git a/test/inte/scan_inte_test.cpp b/test/inte/scan_inte_test.cpp index b2ed08dd..73438ffe 100644 --- a/test/inte/scan_inte_test.cpp +++ b/test/inte/scan_inte_test.cpp @@ -1992,8 +1992,9 @@ TEST_F(ScanInteTest, TestScanAppendWithBitmapAndAlterTable2) { // in stats filter: predicate is trimmed as type for f1 is not consist: int->bigint // in index filter: predicate is removed as type for f1 is converted bigint->int, which is not // safe - auto predicate = PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f1", - FieldType::BIGINT, Literal(100l)); + auto predicate = + PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, + Literal(static_cast(100))); context_builder.SetPredicate(predicate).AddOption(Options::SCAN_SNAPSHOT_ID, "2"); ASSERT_OK_AND_ASSIGN(auto scan_context, context_builder.Finish()); @@ -2067,7 +2068,7 @@ TEST_F(ScanInteTest, TestScanAppendWithBitmapAndAlterTableWithEmptyResult) { // child1 will remove file1 for schema1 auto child1 = PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f1", FieldType::BIGINT, - Literal(100l)); + Literal(static_cast(100))); // child2 will remove file0 for schema 0 auto child2 = PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f4", FieldType::STRING, Literal(FieldType::STRING, "David", 5));