A DataSource implementation that wraps a data frame using DuckDB or SQLite for SQL query execution.
Details
This class creates an in-memory database connection and registers the provided data frame as a table. All SQL queries are executed against this database table. See DBISource for the full description of available methods.
By default, DataFrameSource uses the first available engine from duckdb
(checked first) or RSQLite. You can explicitly set the engine parameter to
choose between "duckdb" or "sqlite", or set the global option
querychat.DataFrameSource.engine to choose the default engine for all
DataFrameSource instances. At least one of these packages must be installed.
Super classes
DataSource -> DBISource -> DataFrameSource
Methods
DataFrameSource$new()
Create a new DataFrameSource
Usage
DataFrameSource$new(
df,
table_name,
engine = getOption("querychat.DataFrameSource.engine", NULL)
)Arguments
dfA data frame.
table_nameName to use for the table in SQL queries. Must be a valid table name (start with letter, contain only letters, numbers, and underscores)
engineDatabase engine to use: "duckdb" or "sqlite". Set the global option
querychat.DataFrameSource.engineto specify the default engine for all instances. If NULL (default), uses the first available engine from duckdb or RSQLite (in that order).
DataFrameSource$register_into()
Register this data frame in a shared DuckDB connection.
Internal hook for joining a shared DuckDBExecutor. The caller owns
con and locks it down once all tables are registered.
Examples
# Create a data frame source (uses first available: duckdb or sqlite)
df_source <- DataFrameSource$new(mtcars, "mtcars")
#> duckdb keeps downloaded extensions and secrets in a temporary directory:
#> ℹ /tmp/RtmpZdCyHx/duckdb
#> This is removed when the R session ends.
#> • Extensions are re-downloaded each session.
#> • Secrets are lost.
#> ℹ Run duckdb(shared_home = TRUE) (or create ~/.duckdb) to keep them (suitable for most users).
#> ℹ Run duckdb(shared_home = FALSE) to accept the temporary directory (and silence this message).
#> ℹ See ?duckdb_storage for details and alternatives.
# Get database type
df_source$get_db_type() # Returns "DuckDB" or "SQLite"
#> [1] "DuckDB"
# Execute a query
result <- df_source$execute_query("SELECT * FROM mtcars WHERE mpg > 25")
# Explicitly choose an engine
df_sqlite <- DataFrameSource$new(mtcars, "mtcars", engine = "sqlite")
# Clean up when done
df_source$cleanup()
df_sqlite$cleanup()
