--- title: "Data Sources" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Data Sources} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE ) ``` `querychat` supports several different data sources, including: 1. Data frames 2. DBI database connections (e.g., SQLite, PostgreSQL, MySQL, DuckDB) 3. Custom `DataSource` interfaces The sections below describe how to use each type of data source with `querychat`. ## Data frames You can use any data frame as a data source in `querychat`. Simply pass it to `querychat()`: ```{r} library(querychat) library(palmerpenguins) qc <- querychat(mtcars) qc$app() # Launch the app ``` Behind the scenes, `querychat` creates an in-memory DuckDB database and registers your data frame as a table for SQL query execution. ## Database connections You can also connect `querychat` directly to a table in any database supported by [DBI](https://dbi.r-dbi.org/). This includes popular databases like SQLite, DuckDB, PostgreSQL, MySQL, and many more. Assuming you have a database set up and accessible, you can create a DBI connection and pass it to `querychat()`. Below are some examples for common databases. ### DuckDB ```{r} library(DBI) library(duckdb) library(querychat) # Connect to a DuckDB database file con <- dbConnect(duckdb::duckdb(), dbdir = "my_database.duckdb") qc <- querychat(con, "my_table") qc$app() # Launch the app # Don't forget to disconnect when done # dbDisconnect(con) ``` ### SQLite ```{r} library(DBI) library(RSQLite) library(querychat) # Connect to a SQLite database file con <- dbConnect(RSQLite::SQLite(), "my_database.db") qc <- querychat(con, "my_table") qc$app() # Launch the app # Don't forget to disconnect when done # dbDisconnect(con) ``` ### PostgreSQL ```{r} library(DBI) library(RPostgres) library(querychat) # Connect to PostgreSQL con <- dbConnect( RPostgres::Postgres(), host = "localhost", port = 5432, dbname = "mydatabase", user = "myuser", password = "mypassword" ) qc <- querychat(con, "my_table") qc$app() # Launch the app # Don't forget to disconnect when done # dbDisconnect(con) ``` ### MySQL ```{r} library(DBI) library(RMariaDB) library(querychat) # Connect to MySQL con <- dbConnect( RMariaDB::MariaDB(), host = "localhost", port = 3306, dbname = "mydatabase", user = "myuser", password = "mypassword" ) qc <- querychat(con, "my_table") qc$app() # Launch the app # Don't forget to disconnect when done # dbDisconnect(con) ``` ## Creating a database from a data frame If you don't have a database set up, you can easily create a local DuckDB database from a data frame: ```{r} library(DBI) library(duckdb) con <- dbConnect(duckdb::duckdb(), dbdir = "my_database.duckdb") # Write a data frame to the database dbWriteTable(con, "penguins", penguins) # Or from CSV duckdb::duckdb_read_csv(con, "my_table", "path/to/your/file.csv") ``` Then you can connect to this database using the DuckDB example above. ## Custom sources If you have a custom data source that doesn't fit into the above categories, you can implement the `DataSource` interface. See the [DataSource reference](../reference/DataSource.html) for more details on implementing this interface.