diff --git a/.gitignore b/.gitignore index b1ede18f04..1d8c19b94e 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ MANIFEST compile_commands.json build.ninja .clangd +.cache # Generated Visual Studio files *.vcxproj diff --git a/c/driver/sqlite/CMakeLists.txt b/c/driver/sqlite/CMakeLists.txt index 941329c2f0..3cfdd32bbf 100644 --- a/c/driver/sqlite/CMakeLists.txt +++ b/c/driver/sqlite/CMakeLists.txt @@ -25,6 +25,17 @@ else() set(SQLite3_INCLUDE_DIRS) endif() +# Check for sqlite3_load_extension() in sqlite3.h +if(EXISTS "${SQLite3_INCLUDE_DIRS}/sqlite3.h") + file(READ "${SQLite3_INCLUDE_DIRS}/sqlite3.h" ADBC_SQLITE_H_CONTENT) + string(FIND "${ADBC_SQLITE_H_CONTENT}" "sqlite3_load_extension" + ADBC_SQLITE_WITH_LOAD_EXTENSION) +endif() + +if(NOT ADBC_SQLITE_WITH_LOAD_EXTENSION) + set(ADBC_SQLITE_COMPILE_DEFINES "-DADBC_SQLITE_WITH_NO_LOAD_EXTENSION") +endif() + add_arrow_lib(adbc_driver_sqlite SOURCES sqlite.cc @@ -50,7 +61,8 @@ add_arrow_lib(adbc_driver_sqlite ${LIBPQ_STATIC_LIBRARIES}) foreach(LIB_TARGET ${ADBC_LIBRARIES}) - target_compile_definitions(${LIB_TARGET} PRIVATE ADBC_EXPORTING) + target_compile_definitions(${LIB_TARGET} PRIVATE ADBC_EXPORTING + ${ADBC_SQLITE_COMPILE_DEFINES}) target_include_directories(${LIB_TARGET} SYSTEM PRIVATE ${REPOSITORY_ROOT} ${REPOSITORY_ROOT}/c/ @@ -82,6 +94,8 @@ if(ADBC_BUILD_TESTS) adbc_validation nanoarrow ${TEST_LINK_LIBS}) + target_compile_definitions(adbc-driver-sqlite-test + PRIVATE ${ADBC_SQLITE_COMPILE_DEFINES}) target_compile_features(adbc-driver-sqlite-test PRIVATE cxx_std_17) target_include_directories(adbc-driver-sqlite-test SYSTEM PRIVATE ${REPOSITORY_ROOT} diff --git a/c/driver/sqlite/sqlite_test.cc b/c/driver/sqlite/sqlite_test.cc index 72fe0d1501..bfb432b153 100644 --- a/c/driver/sqlite/sqlite_test.cc +++ b/c/driver/sqlite/sqlite_test.cc @@ -183,6 +183,10 @@ class SqliteConnectionTest : public ::testing::Test, ADBCV_TEST_CONNECTION(SqliteConnectionTest) TEST_F(SqliteConnectionTest, ExtensionLoading) { +#if defined(ADBC_SQLITE_WITH_NO_LOAD_EXTENSION) + GTEST_SKIP() << "Linking to SQLite without extension loading"; +#endif + ASSERT_THAT(AdbcConnectionNew(&connection, &error), adbc_validation::IsOkStatus(&error));