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

thisisnic pushed a commit to branch maint-15.0.0-r
in repository https://gitbox.apache.org/repos/asf/arrow.git

commit 12d9778eb486d9dc5c2b3a62cf2965f8dffef619
Author: Dewey Dunnington <[email protected]>
AuthorDate: Wed Feb 7 10:29:46 2024 -0400

    GH-39933: [R] Fix pointer conversion to Python for latest reticulate 
(#39969)
    
    
    ### Rationale for this change
    
    The integration tests and documentation build is failing
    
    ### What changes are included in this PR?
    
    Instead of relying on how reticulate converts an R external pointer, use a 
Python integer instead. We can't use an R integer (because they're only 32 
bits); we can't use an R double (because the static cast to/from uintptr_t is a 
bit iffy); however, we can use Python to convert a string to Python integer. 
This is probably how I should have written it the first time but it didn't 
occur to me at the time.
    
    ### Are these changes tested?
    
    Yes, covered by existing tests.
    
    ### Are there any user-facing changes?
    
    No
    * Closes: #39933
    
    Lead-authored-by: Dewey Dunnington <[email protected]>
    Co-authored-by: Dewey Dunnington <[email protected]>
    Signed-off-by: Dewey Dunnington <[email protected]>
---
 r/R/python.R | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/r/R/python.R b/r/R/python.R
index 023d914f16..1159806bf7 100644
--- a/r/R/python.R
+++ b/r/R/python.R
@@ -339,15 +339,9 @@ install_pyarrow <- function(envname = NULL, nightly = 
FALSE, ...) {
 }
 
 pyarrow_compatible_pointer <- function(ptr) {
-  pa <- reticulate::import("pyarrow")
-  version_string <- pa$`__version__`
-  # remove trailing .devXXX because it won't work with package_version()
-  pyarrow_version <- package_version(gsub("\\.dev.*?$", "", version_string))
-
-  # pyarrow pointers changed in version 7.0.0
-  if (pyarrow_version >= "7.0.0") {
-    return(ptr)
-  } else {
-    return(external_pointer_addr_double(ptr))
-  }
+  # GH-39933: Workaround because there is no built-in way to send a
+  # 64-bit integer to Python from an R object
+  py <- reticulate::import_builtins(convert = FALSE)
+  addr <- external_pointer_addr_character(ptr)
+  py$int(addr)
 }

Reply via email to