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 ca09f1974 fix(r/adbcdrivermanager): support `replace` and 
`create_append` ingest mode in `write_adbc()` (#3476)
ca09f1974 is described below

commit ca09f1974c6d1e03184e1967c2efa32c35c8c16f
Author: eitsupi <[email protected]>
AuthorDate: Thu Sep 25 23:25:47 2025 +0900

    fix(r/adbcdrivermanager): support `replace` and `create_append` ingest mode 
in `write_adbc()` (#3476)
    
    Close #3475
---
 r/adbcdrivermanager/R/helpers.R                       |  9 +++++----
 r/adbcdrivermanager/man/read_adbc.Rd                  |  7 ++++---
 r/adbcsqlite/tests/testthat/test-adbcsqlite-package.R | 19 +++++++++++++++++++
 3 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/r/adbcdrivermanager/R/helpers.R b/r/adbcdrivermanager/R/helpers.R
index d99584806..e9688a749 100644
--- a/r/adbcdrivermanager/R/helpers.R
+++ b/r/adbcdrivermanager/R/helpers.R
@@ -27,8 +27,9 @@
 #' @param tbl A data.frame, [nanoarrow_array][nanoarrow::as_nanoarrow_array],
 #'   or  [nanoarrow_array_stream][nanoarrow::as_nanoarrow_array_stream].
 #' @param target_table A target table name to which `tbl` should be written.
-#' @param mode One of "create", "append", or "default" (error if the schema
-#'   is not compatible or append otherwise).
+#' @param mode One of `"create"`, `"append"`, `"replace"`, `"create_append"` 
(error if the schema
+#'   is not compatible or append otherwise), or `"default"` (use the 
`adbc.ingest.mode`
+#'   argument of [adbc_statement_init()]). The default is `"default"`.
 #' @param query An SQL query
 #' @param bind A data.frame, nanoarrow_array, or nanoarrow_array_stream of
 #'   bind parameters or NULL to skip the bind/prepare step.
@@ -67,7 +68,7 @@ execute_adbc <- function(db_or_con, query, ..., bind = NULL) {
 #' @rdname read_adbc
 #' @export
 write_adbc <- function(tbl, db_or_con, target_table, ...,
-                       mode = c("default", "create", "append"),
+                       mode = c("default", "create", "append", "replace", 
"create_append"),
                        temporary = FALSE) {
   UseMethod("write_adbc", db_or_con)
 }
@@ -111,7 +112,7 @@ execute_adbc.default <- function(db_or_con, query, ..., 
bind = NULL, stream = NU
 
 #' @export
 write_adbc.default <- function(tbl, db_or_con, target_table, ...,
-                               mode = c("default", "create", "append"),
+                               mode = c("default", "create", "append", 
"replace", "create_append"),
                                temporary = FALSE) {
   assert_adbc(db_or_con, c("adbc_database", "adbc_connection"))
   mode <- match.arg(mode)
diff --git a/r/adbcdrivermanager/man/read_adbc.Rd 
b/r/adbcdrivermanager/man/read_adbc.Rd
index 31bb9d930..cd1bbfa8a 100644
--- a/r/adbcdrivermanager/man/read_adbc.Rd
+++ b/r/adbcdrivermanager/man/read_adbc.Rd
@@ -15,7 +15,7 @@ write_adbc(
   db_or_con,
   target_table,
   ...,
-  mode = c("default", "create", "append"),
+  mode = c("default", "create", "append", "replace", "create_append"),
   temporary = FALSE
 )
 }
@@ -36,8 +36,9 @@ or  
\link[nanoarrow:as_nanoarrow_array_stream]{nanoarrow_array_stream}.}
 
 \item{target_table}{A target table name to which \code{tbl} should be written.}
 
-\item{mode}{One of "create", "append", or "default" (error if the schema
-is not compatible or append otherwise).}
+\item{mode}{One of \code{"create"}, \code{"append"}, \code{"replace"}, 
\code{"create_append"} (error if the schema
+is not compatible or append otherwise), or \code{"default"} (use the 
\code{adbc.ingest.mode}
+argument of \code{\link[=adbc_statement_init]{adbc_statement_init()}}). The 
default is \code{"default"}.}
 
 \item{temporary}{Use TRUE to create a table as a temporary table.}
 }
diff --git a/r/adbcsqlite/tests/testthat/test-adbcsqlite-package.R 
b/r/adbcsqlite/tests/testthat/test-adbcsqlite-package.R
index fc61db74f..249a7aef6 100644
--- a/r/adbcsqlite/tests/testthat/test-adbcsqlite-package.R
+++ b/r/adbcsqlite/tests/testthat/test-adbcsqlite-package.R
@@ -125,3 +125,22 @@ test_that("write_adbc() with temporary = TRUE works with 
sqlite databases", {
   adbcdrivermanager::adbc_connection_release(con)
   adbcdrivermanager::adbc_database_release(db)
 })
+
+test_that("write_adbc() supports mode replace/create_append", {
+  skip_if_not(packageVersion("adbcdrivermanager") >= "0.20.0.9000")
+
+  db <- adbc_database_init(adbcsqlite())
+  con <- adbc_connection_init(db)
+
+  df <- data.frame(x = as.double(1:10))
+
+  adbcdrivermanager::write_adbc(mtcars, con, "df")
+  adbcdrivermanager::write_adbc(df, con, "df", mode = "replace")
+
+  stream <- adbcdrivermanager::read_adbc(con, "SELECT * from df")
+  expect_identical(as.data.frame(stream), df)
+
+  adbcdrivermanager::write_adbc(df, con, "df", mode = "create_append")
+  stream <- adbcdrivermanager::read_adbc(con, "SELECT * from df")
+  expect_identical(as.data.frame(stream), rbind(df, df))
+})

Reply via email to