This is an automated email from the ASF dual-hosted git repository.

paleolimbot 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 f0c30697 fix(r/adbcdrivermanager): Use ADBC_VERSION_1_1_0 to 
initialize drivers internally (#1163)
f0c30697 is described below

commit f0c30697731a8a982bc709d116f516d7b5cd99a4
Author: Dewey Dunnington <[email protected]>
AuthorDate: Thu Oct 5 09:45:11 2023 -0300

    fix(r/adbcdrivermanager): Use ADBC_VERSION_1_1_0 to initialize drivers 
internally (#1163)
    
    The existing code should have worked (and probably still did), but I'd
    like to eliminate any complexity arising from managing multiple driver
    versions for the purposes of eliminating potential causes of #1161.
---
 r/adbcdrivermanager/src/driver_log.c    |  2 +-
 r/adbcdrivermanager/src/driver_monkey.c |  2 +-
 r/adbcdrivermanager/src/driver_void.c   |  2 +-
 r/adbcdrivermanager/src/radbc.cc        | 25 +++++++++++++++++--------
 4 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/r/adbcdrivermanager/src/driver_log.c 
b/r/adbcdrivermanager/src/driver_log.c
index 2565aad8..2800df15 100644
--- a/r/adbcdrivermanager/src/driver_log.c
+++ b/r/adbcdrivermanager/src/driver_log.c
@@ -287,7 +287,7 @@ static AdbcStatusCode LogStatementSetSqlQuery(struct 
AdbcStatement* statement,
 
 static AdbcStatusCode LogDriverInitFunc(int version, void* raw_driver,
                                         struct AdbcError* error) {
-  if (version != ADBC_VERSION_1_0_0) return ADBC_STATUS_NOT_IMPLEMENTED;
+  if (version != ADBC_VERSION_1_1_0) return ADBC_STATUS_NOT_IMPLEMENTED;
   struct AdbcDriver* driver = (struct AdbcDriver*)raw_driver;
   memset(driver, 0, sizeof(struct AdbcDriver));
 
diff --git a/r/adbcdrivermanager/src/driver_monkey.c 
b/r/adbcdrivermanager/src/driver_monkey.c
index 1eb88a51..6ce09f2c 100644
--- a/r/adbcdrivermanager/src/driver_monkey.c
+++ b/r/adbcdrivermanager/src/driver_monkey.c
@@ -286,7 +286,7 @@ static AdbcStatusCode MonkeyStatementSetSqlQuery(struct 
AdbcStatement* statement
 
 static AdbcStatusCode MonkeyDriverInitFunc(int version, void* raw_driver,
                                            struct AdbcError* error) {
-  if (version != ADBC_VERSION_1_0_0) return ADBC_STATUS_NOT_IMPLEMENTED;
+  if (version != ADBC_VERSION_1_1_0) return ADBC_STATUS_NOT_IMPLEMENTED;
   struct AdbcDriver* driver = (struct AdbcDriver*)raw_driver;
   memset(driver, 0, sizeof(struct AdbcDriver));
 
diff --git a/r/adbcdrivermanager/src/driver_void.c 
b/r/adbcdrivermanager/src/driver_void.c
index a17ae8a3..3902b714 100644
--- a/r/adbcdrivermanager/src/driver_void.c
+++ b/r/adbcdrivermanager/src/driver_void.c
@@ -260,7 +260,7 @@ static AdbcStatusCode VoidStatementSetSqlQuery(struct 
AdbcStatement* statement,
 
 static AdbcStatusCode VoidDriverInitFunc(int version, void* raw_driver,
                                          struct AdbcError* error) {
-  if (version != ADBC_VERSION_1_0_0) return ADBC_STATUS_NOT_IMPLEMENTED;
+  if (version != ADBC_VERSION_1_1_0) return ADBC_STATUS_NOT_IMPLEMENTED;
   struct AdbcDriver* driver = (struct AdbcDriver*)raw_driver;
   memset(driver, 0, sizeof(struct AdbcDriver));
 
diff --git a/r/adbcdrivermanager/src/radbc.cc b/r/adbcdrivermanager/src/radbc.cc
index 725da7f2..f5afdd9d 100644
--- a/r/adbcdrivermanager/src/radbc.cc
+++ b/r/adbcdrivermanager/src/radbc.cc
@@ -86,11 +86,15 @@ extern "C" SEXP RAdbcLoadDriver(SEXP driver_name_sexp, SEXP 
entrypoint_sexp) {
   SEXP driver_xptr = PROTECT(adbc_allocate_xptr<AdbcDriver>());
   auto driver = adbc_from_xptr<AdbcDriver>(driver_xptr);
 
-  AdbcError error;
-  memset(&error, 0, sizeof(AdbcError));
   int status =
-      AdbcLoadDriver(driver_name, entrypoint, ADBC_VERSION_1_0_0, driver, 
&error);
-  adbc_error_stop(status, &error, "RAdbcLoadDriver()");
+      AdbcLoadDriver(driver_name, entrypoint, ADBC_VERSION_1_1_0, driver, 
nullptr);
+  if (status == ADBC_STATUS_NOT_IMPLEMENTED) {
+    status = AdbcLoadDriver(driver_name, entrypoint, ADBC_VERSION_1_0_0, 
driver, nullptr);
+  }
+
+  if (status != ADBC_STATUS_OK) {
+    Rf_error("Failed to initialize driver");
+  }
 
   UNPROTECT(1);
   return driver_xptr;
@@ -107,11 +111,16 @@ extern "C" SEXP RAdbcLoadDriverFromInitFunc(SEXP 
driver_init_func_xptr) {
   R_RegisterCFinalizer(driver_xptr, &finalize_driver_xptr);
   auto driver = adbc_from_xptr<AdbcDriver>(driver_xptr);
 
-  AdbcError error;
-  memset(&error, 0, sizeof(AdbcError));
   int status =
-      AdbcLoadDriverFromInitFunc(driver_init_func, ADBC_VERSION_1_0_0, driver, 
&error);
-  adbc_error_stop(status, &error, "RAdbcLoadDriverFromInitFunc()");
+      AdbcLoadDriverFromInitFunc(driver_init_func, ADBC_VERSION_1_1_0, driver, 
nullptr);
+  if (status == ADBC_STATUS_NOT_IMPLEMENTED) {
+    status =
+        AdbcLoadDriverFromInitFunc(driver_init_func, ADBC_VERSION_1_0_0, 
driver, nullptr);
+  }
+
+  if (status != ADBC_STATUS_OK) {
+    Rf_error("Failed to initialize driver");
+  }
 
   UNPROTECT(1);
   return driver_xptr;

Reply via email to