This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new b1d1393d1 refactor(c/driver_manager): InternalAdbcUserConfigDir should
return parent path (#4084)
b1d1393d1 is described below
commit b1d1393d1fd92767d19bd184528e9dd701f2e5b2
Author: Roshan Banisetti <[email protected]>
AuthorDate: Sat Mar 14 06:41:58 2026 -0600
refactor(c/driver_manager): InternalAdbcUserConfigDir should return parent
path (#4084)
`InternalAdbcUserConfigDir` unnecessarily appended `"drivers"` to the
path even though it is used for both driver manifests and profiles. Each
call site now appends the appropriate subdirectory (`"drivers"` or
`"profiles"`) directly.
## Changes
- Remove `"drivers"` suffix from `InternalAdbcUserConfigDir` so it
returns the base ADBC config directory on all platforms
- Update driver loading call sites to explicitly append `/ "drivers"`
- Remove the `.parent_path()` workaround in profiles, which now appends
`/ "profiles"` directly
- Update the driver manifest test to use the `drivers` subdirectory
- Apply the same changes to the `go/adbc/drivermgr` mirror
Fixes #4081
---------
Signed-off-by: Roshan1299 <[email protected]>
---
c/driver_manager/adbc_driver_manager.cc | 6 +++---
c/driver_manager/adbc_driver_manager_driver_loading.cc | 11 +++++++++--
c/driver_manager/adbc_driver_manager_profiles.cc | 2 +-
c/driver_manager/adbc_driver_manager_test.cc | 6 +++++-
go/adbc/drivermgr/adbc_driver_manager.cc | 6 +++---
go/adbc/drivermgr/adbc_driver_manager_driver_loading.cc | 11 +++++++++--
go/adbc/drivermgr/adbc_driver_manager_profiles.cc | 2 +-
7 files changed, 31 insertions(+), 13 deletions(-)
diff --git a/c/driver_manager/adbc_driver_manager.cc
b/c/driver_manager/adbc_driver_manager.cc
index 42e904205..5bc76c40c 100644
--- a/c/driver_manager/adbc_driver_manager.cc
+++ b/c/driver_manager/adbc_driver_manager.cc
@@ -304,13 +304,13 @@ ADBC_EXPORT std::filesystem::path
InternalAdbcUserConfigDir() {
std::filesystem::path dir(std::move(wpath));
if (!dir.empty()) {
config_dir = std::filesystem::path(dir);
- config_dir /= "ADBC/Drivers";
+ config_dir /= "ADBC";
}
#elif defined(__APPLE__)
auto dir = std::getenv("HOME");
if (dir) {
config_dir = std::filesystem::path(dir);
- config_dir /= "Library/Application Support/ADBC/Drivers";
+ config_dir /= "Library/Application Support/ADBC";
}
#elif defined(__linux__)
auto dir = std::getenv("XDG_CONFIG_HOME");
@@ -324,7 +324,7 @@ ADBC_EXPORT std::filesystem::path
InternalAdbcUserConfigDir() {
}
if (!config_dir.empty()) {
- config_dir = config_dir / "adbc" / "drivers";
+ config_dir = config_dir / "adbc";
}
#endif // defined(_WIN32)
diff --git a/c/driver_manager/adbc_driver_manager_driver_loading.cc
b/c/driver_manager/adbc_driver_manager_driver_loading.cc
index cfde771e5..632184b58 100644
--- a/c/driver_manager/adbc_driver_manager_driver_loading.cc
+++ b/c/driver_manager/adbc_driver_manager_driver_loading.cc
@@ -270,6 +270,12 @@ SearchPaths GetEnvPaths(const char_type* env_var) {
return paths;
}
+#if defined(_WIN32) || defined(__APPLE__)
+static constexpr const char* kDriversSubdir = "Drivers";
+#else
+static constexpr const char* kDriversSubdir = "drivers";
+#endif
+
SearchPaths GetSearchPaths(const AdbcLoadFlags levels) {
SearchPaths paths;
if (levels & ADBC_LOAD_FLAG_SEARCH_ENV) {
@@ -279,7 +285,7 @@ SearchPaths GetSearchPaths(const AdbcLoadFlags levels) {
if (levels & ADBC_LOAD_FLAG_SEARCH_USER) {
// Check the user configuration directory
- std::filesystem::path user_config_dir = InternalAdbcUserConfigDir();
+ std::filesystem::path user_config_dir = InternalAdbcUserConfigDir() /
kDriversSubdir;
if (!user_config_dir.empty() && std::filesystem::exists(user_config_dir)) {
paths.emplace_back(SearchPathSource::kUser, std::move(user_config_dir));
} else {
@@ -614,7 +620,8 @@ AdbcStatusCode ManagedLibrary::FindDriver(
auto status = SearchPathsForDriver(driver_path, more_search_paths, info,
error);
if (status == ADBC_STATUS_NOT_FOUND) {
if (!(load_options & ADBC_LOAD_FLAG_SEARCH_USER)) {
- std::filesystem::path user_config_dir = InternalAdbcUserConfigDir();
+ std::filesystem::path user_config_dir =
+ InternalAdbcUserConfigDir() / kDriversSubdir;
std::string message = "user config dir ";
message += user_config_dir.string();
message += " (enable ADBC_LOAD_FLAG_SEARCH_USER)";
diff --git a/c/driver_manager/adbc_driver_manager_profiles.cc
b/c/driver_manager/adbc_driver_manager_profiles.cc
index ff390f5fd..aebf7408f 100644
--- a/c/driver_manager/adbc_driver_manager_profiles.cc
+++ b/c/driver_manager/adbc_driver_manager_profiles.cc
@@ -378,7 +378,7 @@ static SearchPaths GetProfileSearchPaths(const char*
additional_search_path_list
const char* profiles_dir = "profiles";
#endif // defined(_WIN32)
- auto user_dir = InternalAdbcUserConfigDir().parent_path() / profiles_dir;
+ auto user_dir = InternalAdbcUserConfigDir() / profiles_dir;
search_paths.emplace_back(SearchPathSource::kUser, user_dir);
return search_paths;
}
diff --git a/c/driver_manager/adbc_driver_manager_test.cc
b/c/driver_manager/adbc_driver_manager_test.cc
index f917d9543..378065dd2 100644
--- a/c/driver_manager/adbc_driver_manager_test.cc
+++ b/c/driver_manager/adbc_driver_manager_test.cc
@@ -1226,7 +1226,11 @@ TEST_F(DriverManifest, LoadUserLevelManifest) {
ADBC_LOAD_FLAG_DEFAULT, nullptr, &driver,
&error),
Not(IsOkStatus(&error)));
- auto user_config_dir = InternalAdbcUserConfigDir();
+#if defined(_WIN32) || defined(__APPLE__)
+ auto user_config_dir = InternalAdbcUserConfigDir() / "Drivers";
+#else
+ auto user_config_dir = InternalAdbcUserConfigDir() / "drivers";
+#endif
bool created = false;
if (!std::filesystem::exists(user_config_dir)) {
ASSERT_TRUE(std::filesystem::create_directories(user_config_dir));
diff --git a/go/adbc/drivermgr/adbc_driver_manager.cc
b/go/adbc/drivermgr/adbc_driver_manager.cc
index 42e904205..5bc76c40c 100644
--- a/go/adbc/drivermgr/adbc_driver_manager.cc
+++ b/go/adbc/drivermgr/adbc_driver_manager.cc
@@ -304,13 +304,13 @@ ADBC_EXPORT std::filesystem::path
InternalAdbcUserConfigDir() {
std::filesystem::path dir(std::move(wpath));
if (!dir.empty()) {
config_dir = std::filesystem::path(dir);
- config_dir /= "ADBC/Drivers";
+ config_dir /= "ADBC";
}
#elif defined(__APPLE__)
auto dir = std::getenv("HOME");
if (dir) {
config_dir = std::filesystem::path(dir);
- config_dir /= "Library/Application Support/ADBC/Drivers";
+ config_dir /= "Library/Application Support/ADBC";
}
#elif defined(__linux__)
auto dir = std::getenv("XDG_CONFIG_HOME");
@@ -324,7 +324,7 @@ ADBC_EXPORT std::filesystem::path
InternalAdbcUserConfigDir() {
}
if (!config_dir.empty()) {
- config_dir = config_dir / "adbc" / "drivers";
+ config_dir = config_dir / "adbc";
}
#endif // defined(_WIN32)
diff --git a/go/adbc/drivermgr/adbc_driver_manager_driver_loading.cc
b/go/adbc/drivermgr/adbc_driver_manager_driver_loading.cc
index cfde771e5..632184b58 100644
--- a/go/adbc/drivermgr/adbc_driver_manager_driver_loading.cc
+++ b/go/adbc/drivermgr/adbc_driver_manager_driver_loading.cc
@@ -270,6 +270,12 @@ SearchPaths GetEnvPaths(const char_type* env_var) {
return paths;
}
+#if defined(_WIN32) || defined(__APPLE__)
+static constexpr const char* kDriversSubdir = "Drivers";
+#else
+static constexpr const char* kDriversSubdir = "drivers";
+#endif
+
SearchPaths GetSearchPaths(const AdbcLoadFlags levels) {
SearchPaths paths;
if (levels & ADBC_LOAD_FLAG_SEARCH_ENV) {
@@ -279,7 +285,7 @@ SearchPaths GetSearchPaths(const AdbcLoadFlags levels) {
if (levels & ADBC_LOAD_FLAG_SEARCH_USER) {
// Check the user configuration directory
- std::filesystem::path user_config_dir = InternalAdbcUserConfigDir();
+ std::filesystem::path user_config_dir = InternalAdbcUserConfigDir() /
kDriversSubdir;
if (!user_config_dir.empty() && std::filesystem::exists(user_config_dir)) {
paths.emplace_back(SearchPathSource::kUser, std::move(user_config_dir));
} else {
@@ -614,7 +620,8 @@ AdbcStatusCode ManagedLibrary::FindDriver(
auto status = SearchPathsForDriver(driver_path, more_search_paths, info,
error);
if (status == ADBC_STATUS_NOT_FOUND) {
if (!(load_options & ADBC_LOAD_FLAG_SEARCH_USER)) {
- std::filesystem::path user_config_dir = InternalAdbcUserConfigDir();
+ std::filesystem::path user_config_dir =
+ InternalAdbcUserConfigDir() / kDriversSubdir;
std::string message = "user config dir ";
message += user_config_dir.string();
message += " (enable ADBC_LOAD_FLAG_SEARCH_USER)";
diff --git a/go/adbc/drivermgr/adbc_driver_manager_profiles.cc
b/go/adbc/drivermgr/adbc_driver_manager_profiles.cc
index ff390f5fd..aebf7408f 100644
--- a/go/adbc/drivermgr/adbc_driver_manager_profiles.cc
+++ b/go/adbc/drivermgr/adbc_driver_manager_profiles.cc
@@ -378,7 +378,7 @@ static SearchPaths GetProfileSearchPaths(const char*
additional_search_path_list
const char* profiles_dir = "profiles";
#endif // defined(_WIN32)
- auto user_dir = InternalAdbcUserConfigDir().parent_path() / profiles_dir;
+ auto user_dir = InternalAdbcUserConfigDir() / profiles_dir;
search_paths.emplace_back(SearchPathSource::kUser, user_dir);
return search_paths;
}