inst/doc/dittodb.R

## ----include = FALSE----------------------------------------------------------
library(testthat)
library(dittodb)

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

db_mock_paths("dittodb")

## ----setup db, include = FALSE, eval = FALSE----------------------------------
#  # setup the DB used in the rest of the vignette
#  
#  con <- dbConnect(
#    RMariaDB::MariaDB(),
#    dbname = "nycflights",
#    host = "127.0.0.1",
#    username = "travis",
#    password = ""
#  )
#  
#  nycflights13_create_sql(con, schema = "nycflights13")
#  
#  # record interactions
#  
#  start_db_capturing()
#  out <- mean_delays("day")
#  out <- mean_delays("month")
#  stop_db_capturing()

## ----mean_delays--------------------------------------------------------------
library(DBI)

mean_delays <- function(group_col) {
  con <- dbConnect(
    RMariaDB::MariaDB(),
    dbname = "nycflights"
  )
  on.exit(dbDisconnect(con))

  query <- glue::glue(
    "SELECT {group_col}, AVG(arr_delay) as mean_delay from nycflights13.flights ",
    "WHERE arr_delay > 0 GROUP BY {group_col}"
  )

  return(dbGetQuery(con, query))
}

## ----mean_delays_rpostgres, eval = FALSE--------------------------------------
#  library(DBI)
#  
#  mean_delays <- function(group_col) {
#    con <- dbConnect(
#      RPostgres::Postgres(),
#      dbname = "nycflights"
#    )
#    on.exit(dbDisconnect(con))
#  
#    query <- glue::glue(
#      "SELECT {group_col}, AVG(arr_delay) as mean_delay from nycflights13.flights ",
#      "WHERE arr_delay > 0 GROUP BY {group_col}"
#    )
#  
#    return(dbGetQuery(con, query))
#  }

## ----mean_delays_rsqlite, eval = FALSE----------------------------------------
#  library(DBI)
#  
#  mean_delays <- function(group_col) {
#    con <- dbConnect(
#      RSQLite::SQLite(),
#      dbname = "nycflights"
#    )
#    on.exit(dbDisconnect(con))
#  
#    query <- glue::glue(
#      "SELECT {group_col}, AVG(arr_delay) as mean_delay from nycflights13.flights ",
#      "WHERE arr_delay > 0 GROUP BY {group_col}"
#    )
#  
#    return(dbGetQuery(con, query))
#  }

## ----month, eval = FALSE------------------------------------------------------
#  mean_delays("month")

## ----cooking_show, echo = FALSE-----------------------------------------------
with_mock_db(mean_delays("month"))

## ----tests_1, eval = FALSE----------------------------------------------------
#  library(testthat)
#  
#  test_that("mean_delays()", {
#    out <- mean_delays("month")
#    expect_named(out, c("month", "mean_delay"))
#    expect_equal(dim(out), c(12, 2))
#  })

## ----recording, eval = FALSE--------------------------------------------------
#  start_db_capturing()
#  out <- mean_delays("month")
#  stop_db_capturing()

## ----with_mock_1--------------------------------------------------------------
with_mock_db(
  mean_delays("month")
)

## ----tests_2------------------------------------------------------------------
library(testthat)
library(dittodb)

with_mock_db(
  test_that("mean_delays()", {
    out <- mean_delays("month")
    expect_named(out, c("month", "mean_delay"))
    expect_equal(dim(out), c(12, 2))
  })
)

## ----recording_days, eval = FALSE---------------------------------------------
#  start_db_capturing()
#  out <- mean_delays("day")
#  stop_db_capturing()

## ----tests_day_2--------------------------------------------------------------
with_mock_db(
  test_that("mean_delays()", {
    out <- mean_delays("day")
    expect_named(out, c("day", "mean_delay"))
    expect_equal(dim(out), c(31, 2))
  })
)

## ----editing, eval = FALSE----------------------------------------------------
#  # read in the recorded fixture
#  df_fixt <- source("nycflights/SELECT-16d120.R", keep.source = FALSE)$value
#  
#  # filter out anything after february and all days after the 9th of the month
#  df_fixt <- dplyr::filter(df_fixt, month <= 2 & day < 10)
#  
#  # save the fixture for use in tests
#  dput(df_fixt, file = "nycflights/SELECT-16d120.R", control = c("all", "hexNumeric"))

Try the dittodb package in your browser

Any scripts or data that you put into this service are public.

dittodb documentation built on June 22, 2024, 6:52 p.m.