## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(
    collapse = TRUE,
    comment = "#>",
    eval = TRUE,
    warning = FALSE,
    message = FALSE
)

## ----installation, eval=FALSE-------------------------------------------------
# if (!requireNamespace("BiocManager", quietly = TRUE)) {
#     install.packages("BiocManager")
# }
# BiocManager::install("dbSequence")

## ----quick-start--------------------------------------------------------------
library(dbSequence)

bed_file <- system.file("extdata", "example.bed", package = "dbSequence")

# Import a BED file
db_seq <- read_bed(bed_file)

# Data stays in DuckDB - this is a lazy reference
db_seq

## ----biocio-pattern-----------------------------------------------------------
library(BiocIO)
library(rtracklayer)

bed_file <- system.file("extdata", "example.bed", package = "dbSequence")
db_file <- tempfile(fileext = ".duckdb")

# Specify destination database
db_seq <- import(
    BEDFile(bed_file),
    dest = DuckDBFile(db_file),
    table_name = "fragments"
)

## ----lazy-demo----------------------------------------------------------------
# This does NOT load data
db_seq <- read_bed(bed_file)

# Still no data in memory - just adds a filter condition
region <- GenomicRanges::GRanges("chr1:100-500")
filtered <- filter_by_overlaps(db_seq, region)

# Data only loads when you explicitly collect
result <- as_granges(filtered) # NOW data enters R

## ----multiple-tables----------------------------------------------------------
db <- DuckDBFile(tempfile(fileext = ".duckdb"))
gff_file <- system.file("extdata", "example.gff3", package = "dbSequence")

# Import different files to same database
peaks <- import(BEDFile(bed_file), dest = db, table_name = "peaks")
genes <- import(GFFFile(gff_file), dest = db, table_name = "genes")

## ----connections--------------------------------------------------------------
# Access the underlying connection
con <- dbProject::conn(db_seq)

# For manual control, create your own connection
con <- DBI::dbConnect(duckdb::duckdb(), tempfile(fileext = ".duckdb"))
# ... do work ...
DBI::dbDisconnect(con, shutdown = TRUE)

## ----sessionInfo--------------------------------------------------------------
sessionInfo()

