#' télécharge une extension duckdb #' #' Cette fonction télécharge une extension duckdb et l'installe dans le bon répertoire dans une environnement linux #' La liste des extensions est disponible ici : https://duckdb.org/docs/extensions/official_extensions #' #' Les extensions étant liées à une version de duckdb, vous devrez les réinstaller à chaque mise à jour #' #' Vous pouvez voir la liste des extensions officielles existantes et installées en faisant : #' #' con <- dbConnect(duckdb()) #' dbGetQuery(con, "SELECT * FROM duckdb_extensions();") #' #' @param extension_name le nom de l'extension à télécharger #' #' @examples #' dl_duckdb_extension("fts") #' dl_duckdb_extension <- function(extension_name) { duckdb_version <- stringr::str_extract(as.character(packageVersion('duckdb')), "\\d+\\.\\d+\\.\\d+") if (extension_name %in% c('sqlite', 'postgres', 'mysql')) { extension_name <- paste0(extension_name, '_scanner') } if (Sys.info()["sysname"] == "Linux") { url <- glue::glue("http://extensions.duckdb.org/v{duckdb_version}/linux_amd64/{extension_name}.duckdb_extension.gz") dest_file <- fs::path_home(glue::glue("/.local/share/R/duckdb/extensions/v{duckdb_version}/linux_amd64/{extension_name}.duckdb_extension")) } else if (Sys.info()["sysname"] == "Windows") { url <- glue::glue("http://extensions.duckdb.org/v{duckdb_version}/windows_amd64_rtools/{extension_name}.duckdb_extension.gz") dest_file <- fs::path_home(glue::glue("/AppData/Roaming/R/data/R/duckdb/extensions/v{duckdb_version}/windows_amd64_rtools/{extension_name}.duckdb_extension")) } else { stop("Cette fonction ne fonctionne que sur windows et linux") } if (file.exists(dest_file)) { message(glue::glue("extension {extension_name} déjà installée")) return(invisible()) } tmpf <- tempfile() download.file(url, tmpf) dir.create(dirname(dest_file), recursive = TRUE, showWarnings = FALSE) R.utils::gunzip(tmpf, dest_file) message(glue::glue("extension {extension_name} installée dans {dest_file}")) }