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;
 }

Reply via email to