Nothing
#' Get or set global duckspatial options
#'
#' @param output_type Character string. Controls the default return type for [ddbs_collect].
#' Must be one of:
#' \itemize{
#' \item \code{"sf"} (default): Eagerly collected \code{sf} object (in-memory).
#' \item \code{"tibble"}: Eagerly collected \code{tibble} without geometry.
#' \item \code{"raw"}: Eagerly collected \code{tibble} with geometry as raw WKB bytes.
#' \item \code{"geoarrow"}: Eagerly collected \code{tibble} with geometry as \code{geoarrow_vctr}.
#' }
#' If \code{NULL} (the default), the existing option is not changed.
#' @param mode Character. Controls the return type. Options:
#' \itemize{
#' \item \code{"duckspatial"} (default): Lazy spatial data frame backed by dbplyr/DuckDB
#' \item \code{"sf"}: Eagerly collected sf object (uses memory)
#' }
#' If \code{NULL} (the default), the existing option is not changed.
#' @param duckdb_storage_version Character. The default DuckDB storage compatibility version
#' for newly created database files. See \url{https://duckdb.org/docs/internals/storage}
#' for details.
#'
#' @return Invisibly returns a list containing the currently set options.
#' @export
#'
#' @examples
#' \dontrun{
#' # Set default mode to geoarrow
#' ddbs_options(mode = "geoarrow")
#'
#' # Set default output to tibble
#' ddbs_options(output_type = "tibble")
#'
#' # Check current settings
#' ddbs_options()
#' }
ddbs_options <- function(output_type = NULL, mode = NULL, duckdb_storage_version = NULL) {
# 1. SETTER logic
if (!is.null(output_type)) {
if (!output_type %in% c("sf", "tibble", "raw", "geoarrow")) {
cli::cli_abort(paste0(
"Invalid output_type: {.val {output_type}}. ",
"Must be one of {.val sf}, {.val tibble}, {.val raw}, or {.val geoarrow}."
))
}
options(duckspatial.output_type = output_type)
}
if (!is.null(mode)) {
if (!mode %in% c("duckspatial", "sf")) {
cli::cli_abort(paste0(
"Invalid mode: {.val {mode}}. ",
"Must be one of {.val duckspatial}, or {.val sf}."
))
}
options(duckspatial.mode = mode)
}
if (!is.null(duckdb_storage_version)) {
# Use internal helper to validate
duckdb_storage_version <- match_duckdb_storage_version(duckdb_storage_version)
options(duckspatial.duckdb_storage_version = duckdb_storage_version)
}
# 2. GETTER logic (Always retrieve current state)
op <- list(
duckspatial.output_type = getOption("duckspatial.output_type"),
duckspatial.mode = getOption("duckspatial.mode"),
duckspatial.duckdb_storage_version = getOption("duckspatial.duckdb_storage_version")
)
# If we set a value, return invisibly. If just checking, return visibly.
if (all(is.null(output_type), is.null(mode), is.null(duckdb_storage_version))) {
op
} else {
invisible(op)
}
}
#' Report duckspatial configuration status
#'
#' Displays useful information about the current configuration, including global options
#' and the status of the default DuckDB connection.
#'
#' @return Invisibly returns a list with the current status configuration.
#' @export
#'
#' @examples
#' ddbs_sitrep()
ddbs_sitrep <- function() {
cli::cli_h1("duckspatial Status Report")
# 1. Global Options
cli::cli_h2("Global Options")
out_type <- getOption("duckspatial.output_type", "duckspatial_df (default)")
mode <- getOption("duckspatial.mode", "duckspatial (default)")
storage_ver <- getOption("duckspatial.duckdb_storage_version", "v1.5.0")
cli::cli_ul()
cli::cli_li("Output Type: {.val {out_type}}")
cli::cli_li("Mode: {.val {mode}}")
cli::cli_li("DuckDB Storage Version: {.val {storage_ver}}")
cli::cli_end()
# 2. Connection Status
cli::cli_h2("Default Connection")
conn <- getOption("duckspatial_conn", NULL)
if (is.null(conn)) {
cli::cli_alert_warning("No default connection active (will be created on demand).")
conn_status <- "NULL"
} else {
is_valid <- DBI::dbIsValid(conn)
if (is_valid) {
cli::cli_alert_success("Active DuckDB connection found.")
# Check if memory or file
# Generic way to check might be difficult without specific duckdb info,
# but dbGetInfo might reveal it or simple "Active" is enough.
# duckdb connections don't easily reveal their path via public API usually?
# We can try inspection if needed, but "Active" is good enough.
conn_status <- "Active"
} else {
cli::cli_alert_danger("Connection object exists but is invalid (disconnected).")
conn_status <- "Invalid"
}
}
invisible(list(
output_type = out_type,
connection_status = conn_status
))
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.