{
  "_id": "6a13f9c6acfb0bcc41d34ce2",
  "Package": "dittodb",
  "Title": "A Test Environment for Database Requests",
  "Version": "0.1.11.9000",
  "Authors@R": "c(\nperson(given = \"Jonathan\",\nfamily = \"Keane\",\nrole = c(\"aut\", \"cre\"),\nemail = \"jkeane@gmail.com\",\ncomment = c(ORCID = \"0000-0001-7087-9776\")),\nperson(given = \"Mauricio\",\nfamily = \"Vargas\",\nrole = \"aut\",\nemail = \"mvargas@dcc.uchile.cl\",\ncomment = c(ORCID = \"0000-0003-1017-7574\")),\nperson(given = \"Helen\",\nfamily = \"Miller\",\nrole = \"rev\",\ncomment = \"reviewed the package for rOpenSci, see https://github.com/ropensci/software-review/issues/366\"),\nperson(given = \"Etienne\",\nfamily = \"Racine\",\nrole = \"rev\",\ncomment = \"reviewed the package for rOpenSci, see https://github.com/ropensci/software-review/issues/366\")\n)",
  "URL": "https://dittodb.jonkeane.com/, https://github.com/ropensci/dittodb",
  "BugReports": "https://github.com/ropensci/dittodb/issues",
  "Description": "Testing and documenting code that communicates with remote\ndatabases can be painful. Although the interaction with R is\nusually relatively simple (e.g. data(frames) passed to and from\na database), because they rely on a separate service and the\ndata there, testing them can be difficult to set up,\nunsustainable in a continuous integration environment, or\nimpossible without replicating an entire production cluster.\nThis package addresses that by allowing you to make recordings\nfrom your database interactions and then play them back while\ntesting (or in other contexts) all without needing to spin up\nor have access to the database your code would typically\nconnect to.",
  "License": "Apache License (>= 2.0)",
  "Encoding": "UTF-8",
  "RoxygenNote": "7.3.3",
  "Roxygen": "list(markdown = TRUE)",
  "Language": "en-US",
  "VignetteBuilder": "knitr",
  "Config/testthat/edition": "3",
  "Collate": "'capture-requests.R' 'connection.R' 'dbExistsTable.R'\n'dbListTables-Fields.R' 'driver-specific-connections.R'\n'dbQueries-Results.R' 'dbMisc.R' 'mock-paths.R' 'dittodb-env.R'\n'expect-sql.R' 'mock-db.R' 'nycflights13-sql.R' 'paths.R'\n'quote.R' 'redact.R' 'serialize-bit64.R' 'transactions.R'\n'use-dittodb.R' 'utils.R' 'vctrs_s3_register.R'",
  "RdMacros": "lifecycle",
  "Repository": "https://ropensci.r-universe.dev",
  "Date/Publication": "2026-02-24 17:05:39 UTC",
  "RemoteUrl": "https://github.com/ropensci/dittodb",
  "RemoteRef": "main",
  "RemoteSha": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-05-25 07:22:07 UTC",
    "User": "root"
  },
  "Author": "Jonathan Keane [aut, cre] (ORCID:\n<https://orcid.org/0000-0001-7087-9776>),\nMauricio Vargas [aut] (ORCID: <https://orcid.org/0000-0003-1017-7574>),\nHelen Miller [rev] (reviewed the package for rOpenSci, see\nhttps://github.com/ropensci/software-review/issues/366),\nEtienne Racine [rev] (reviewed the package for rOpenSci, see\nhttps://github.com/ropensci/software-review/issues/366)",
  "Maintainer": "Jonathan Keane <jkeane@gmail.com>",
  "MD5sum": "a11ca62803a1cc709d5666ef284a1786",
  "_user": "ropensci",
  "_type": "src",
  "_file": "dittodb_0.1.11.9000.tar.gz",
  "_fileid": "9dc34f44667d2675ea19bb8d84123ca24fb6b0e1fdb224af74bcf7c40c2c7c6f",
  "_filesize": 333661,
  "_sha256": "9dc34f44667d2675ea19bb8d84123ca24fb6b0e1fdb224af74bcf7c40c2c7c6f",
  "_created": "2026-05-25T07:22:07.000Z",
  "_published": "2026-05-25T07:27:02.241Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 77672900073,
      "time": 176,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7193626627"
    },
    {
      "job": 77672900070,
      "time": 162,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7193623390"
    },
    {
      "job": 77672900053,
      "time": 104,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7193609231"
    },
    {
      "job": 77672900037,
      "time": 96,
      "config": "macos-release-arm64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7193607113"
    },
    {
      "job": 77672535743,
      "time": 165,
      "config": "pkgdown",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7193578471"
    },
    {
      "job": 77672535760,
      "time": 189,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7193584160"
    },
    {
      "job": 77672900036,
      "time": 120,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7193612832"
    },
    {
      "job": 77672900086,
      "time": 117,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7193612393"
    },
    {
      "job": 77672900092,
      "time": 126,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7193614485"
    },
    {
      "job": 77672900104,
      "time": 258,
      "config": "windows-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7193647198"
    }
  ],
  "_buildurl": "https://github.com/r-universe/ropensci/actions/runs/26388543755",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_upstream": "https://github.com/ropensci/dittodb",
  "_commit": {
    "id": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
    "author": "GitHub Actions <actions@github.com>",
    "committer": "GitHub Actions <actions@github.com>",
    "message": "Re-build codemeta.json\n",
    "time": 1771952739
  },
  "_maintainer": {
    "name": "Jonathan Keane",
    "email": "jkeane@gmail.com",
    "login": "jonkeane",
    "mastodon": "@jonkeane@mastodon.social",
    "description": "Engineering at Posit\n\nFormerly: Ursa Computing, Voltron Data, Socure, and Data science fellow with the Data Science for Social Good Summer Fellowship",
    "uuid": 700357,
    "orcid": "0000-0001-7087-9776"
  },
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 3.3.0",
      "role": "Depends"
    },
    {
      "package": "DBI",
      "role": "Depends"
    },
    {
      "package": "digest",
      "role": "Imports"
    },
    {
      "package": "glue",
      "role": "Imports"
    },
    {
      "package": "methods",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "role": "Imports"
    },
    {
      "package": "utils",
      "role": "Imports"
    },
    {
      "package": "lifecycle",
      "role": "Imports"
    },
    {
      "package": "bit64",
      "role": "Suggests"
    },
    {
      "package": "callr",
      "role": "Suggests"
    },
    {
      "package": "covr",
      "role": "Suggests"
    },
    {
      "package": "dplyr",
      "role": "Suggests"
    },
    {
      "package": "dbplyr",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "nycflights13",
      "role": "Suggests"
    },
    {
      "package": "odbc",
      "role": "Suggests"
    },
    {
      "package": "RMariaDB",
      "role": "Suggests"
    },
    {
      "package": "RPostgres",
      "role": "Suggests"
    },
    {
      "package": "RPostgreSQL",
      "role": "Suggests"
    },
    {
      "package": "RSQLite",
      "role": "Suggests"
    },
    {
      "package": "spelling",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    }
  ],
  "_owner": "ropensci",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2025-33",
      "n": 6
    },
    {
      "week": "2025-34",
      "n": 4
    },
    {
      "week": "2026-02",
      "n": 6
    },
    {
      "week": "2026-09",
      "n": 6
    }
  ],
  "_tags": [
    {
      "name": "v0.1.9",
      "date": "2025-08-21"
    },
    {
      "name": "v0.1.10",
      "date": "2026-01-11"
    },
    {
      "name": "v0.1.11",
      "date": "2026-02-24"
    }
  ],
  "_stars": 85,
  "_contributors": [
    {
      "user": "jonkeane",
      "count": 355,
      "uuid": 700357
    },
    {
      "user": "maelle",
      "count": 4,
      "uuid": 8360597
    },
    {
      "user": "krlmlr",
      "count": 2,
      "uuid": 1741643
    },
    {
      "user": "sandstumpen",
      "count": 1,
      "uuid": 87754757
    },
    {
      "user": "etiennebr",
      "count": 1,
      "uuid": 393576
    },
    {
      "user": "hadley",
      "count": 1,
      "uuid": 4196
    },
    {
      "user": "koderkow",
      "count": 1,
      "uuid": 23486577
    },
    {
      "user": "cocinerox",
      "count": 1,
      "uuid": 846006
    },
    {
      "user": "majazaloznik",
      "count": 1,
      "uuid": 7770285
    }
  ],
  "_userbio": {
    "uuid": 1200269,
    "type": "organization",
    "name": "rOpenSci",
    "description": "Tools and R Packages for Open Science"
  },
  "_downloads": {
    "count": 549,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/dittodb"
  },
  "_devurl": "https://github.com/ropensci/dittodb",
  "_pkgdown": "https://dittodb.jonkeane.com/",
  "_searchresults": 57,
  "_metadata": {
    "review": {
      "id": 366,
      "status": "reviewed",
      "version": "0.0.0.9000",
      "organization": "rOpenSci Software Review",
      "url": "https://github.com/ropensci/software-review/issues/366"
    },
    "ropensci_category": "databases"
  },
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/dittodb.html",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "manual.pdf"
  ],
  "_homeurl": "https://github.com/ropensci/dittodb",
  "_realowner": "ropensci",
  "_cranurl": true,
  "_releases": [
    {
      "version": "0.1.0",
      "date": "2020-07-24"
    },
    {
      "version": "0.1.1",
      "date": "2020-07-29"
    },
    {
      "version": "0.1.2",
      "date": "2020-10-08"
    },
    {
      "version": "0.1.3",
      "date": "2020-10-10"
    },
    {
      "version": "0.1.4",
      "date": "2022-06-17"
    },
    {
      "version": "0.1.5",
      "date": "2023-04-13"
    },
    {
      "version": "0.1.6",
      "date": "2023-04-17"
    },
    {
      "version": "0.1.7",
      "date": "2023-08-13"
    },
    {
      "version": "0.1.8",
      "date": "2024-04-09"
    },
    {
      "version": "0.1.9",
      "date": "2025-08-18"
    },
    {
      "version": "0.1.10",
      "date": "2026-01-11"
    },
    {
      "version": "0.1.11",
      "date": "2026-02-24"
    }
  ],
  "_exports": [
    ".db_mock_paths",
    ".dittodb_env",
    "capture_db_requests",
    "check_db_path",
    "check_for_pkg",
    "clean_statement",
    "db_mock_paths",
    "db_path_sanitize",
    "dbBegin",
    "dbClearResult",
    "dbColumnInfo",
    "dbCommit",
    "dbDisconnect",
    "dbExistsTable",
    "dbFetch",
    "dbGetInfo",
    "dbGetQuery",
    "dbGetRowsAffected",
    "dbHasCompleted",
    "dbListFields",
    "dbListTables",
    "dbMockConnect",
    "dbQuoteIdentifier",
    "dbQuoteString",
    "dbRemoveTable",
    "dbRollback",
    "dbSendQuery",
    "dbSendStatement",
    "dbWriteTable",
    "dittodb_debug_level",
    "expect_sql",
    "fetch",
    "get_dbname",
    "get_redactor",
    "get_type",
    "hash",
    "hash_db_object",
    "make_path",
    "nycflights_sqlite",
    "nycflights13_create_sql",
    "nycflights13_create_sqlite",
    "redact_columns",
    "sanitize_table_id",
    "serialize_bit64",
    "set_dittodb_debug_level",
    "start_db_capturing",
    "start_mock_db",
    "stop_db_capturing",
    "stop_mock_db",
    "use_dittodb",
    "with_mock_db",
    "with_mock_path"
  ],
  "_help": [
    {
      "page": "capture_requests",
      "title": "Capture and record database transactions and save them as mocks",
      "topics": [
        "capture_db_requests",
        "capture_requests",
        "start_db_capturing",
        "stop_db_capturing"
      ]
    },
    {
      "page": "expect_sql",
      "title": "Detect if a specific SQL statement is sent",
      "topics": [
        "expect_sql"
      ]
    },
    {
      "page": "mock-db-methods",
      "title": "Methods for interacting with DB mocks instead of an actual database",
      "topics": [
        "dbBegin,DBIMockConnection-method",
        "dbClearResult,DBIMockResult-method",
        "dbColumnInfo,DBIMockResult-method",
        "dbCommit,DBIMockConnection-method",
        "dbDisconnect,DBIMockConnection-method",
        "dbExistsTable,DBIMockConnection,character-method",
        "dbExistsTable,DBIMockConnection,Id-method",
        "dbFetch,DBIMockResult-method",
        "dbGetInfo,DBIMockConnection-method",
        "dbGetInfo,DBIMockResult-method",
        "dbGetQuery,DBIMockRPostgreSQLConnection,character-method",
        "dbGetRowsAffected,DBIMockResult-method",
        "dbHasCompleted,DBIMockResult-method",
        "DBIMockConnection-class",
        "DBIMockResult-class",
        "dbListFields,DBIMockConnection,ANY-method",
        "dbListFields,DBIMockConnection,character-method",
        "dbListFields,DBIMockConnection,Id-method",
        "dbListTables,DBIMockConnection-method",
        "dbMockConnect",
        "dbQuoteIdentifier,DBIMockRPostgresConnection,character-method",
        "dbQuoteIdentifier,DBIMockRPostgresConnection,SQL-method",
        "dbQuoteString,DBIMockMariaDBConnection,character-method",
        "dbQuoteString,DBIMockMariaDBConnection,SQL-method",
        "dbQuoteString,DBIMockRPostgresConnection,character-method",
        "dbQuoteString,DBIMockRPostgresConnection,SQL-method",
        "dbRemoveTable,DBIMockConnection,character-method",
        "dbRollback,DBIMockConnection-method",
        "dbSendQuery,DBIMockConnection,character-method",
        "dbSendQuery,DBIMockConnection,SQL-method",
        "dbSendStatement,DBIMockConnection,character-method",
        "dbWriteTable,DBIMockConnection,character,data.frame-method",
        "fetch,DBIMockResult,ANY-method",
        "fetch,DBIMockResult,missing-method",
        "fetch,DBIMockResult-method",
        "mock-db-methods"
      ]
    },
    {
      "page": "mockdb",
      "title": "Run DBI queries against a mocked database",
      "topics": [
        "mockdb",
        "start_mock_db",
        "stop_mock_db",
        "with_mock_db"
      ]
    },
    {
      "page": "nycflights_sqlite",
      "title": "An SQLite connection to a subset of nycflights13",
      "topics": [
        "nycflights_sqlite"
      ]
    },
    {
      "page": "nycflights13_create_sql",
      "title": "Create a standardised database for testing",
      "topics": [
        "nycflights13_create_sql"
      ]
    },
    {
      "page": "nycflights13_create_sqlite",
      "title": "Create an in-memory SQLite database for testing",
      "topics": [
        "nycflights13_create_sqlite"
      ]
    },
    {
      "page": "redact_columns",
      "title": "Redact columns from a dataframe with the default redactors",
      "topics": [
        "redact_columns"
      ]
    },
    {
      "page": "set_dittodb_debug_level",
      "title": "Set 'dittodb''s debug level",
      "topics": [
        "set_dittodb_debug_level"
      ]
    },
    {
      "page": "use_dittodb",
      "title": "Use 'dittodb' in your tests",
      "topics": [
        "use_dittodb"
      ]
    },
    {
      "page": "with_mock_path",
      "title": "Run the DBI queries in an alternate mock directory",
      "topics": [
        "with_mock_path"
      ]
    }
  ],
  "_readme": "https://github.com/ropensci/dittodb/raw/main/README.md",
  "_rundeps": [
    "cli",
    "DBI",
    "digest",
    "glue",
    "lifecycle",
    "rlang"
  ],
  "_vignettes": [
    {
      "source": "developing-dittodb.Rmd",
      "filename": "developing-dittodb.html",
      "title": "Developing dittodb",
      "author": "Jonathan Keane",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Setting up databases",
        "What we test",
        "How to setup test databases locally",
        "☠️ What not to run ☠️",
        "Some of the tricky bits that dittodb uses",
        "Recording",
        "Using a mocked database"
      ],
      "created": "2020-05-03 23:24:37",
      "modified": "2026-01-11 05:00:54",
      "commits": 7
    },
    {
      "source": "dittodb.Rmd",
      "filename": "dittodb.html",
      "title": "Getting Started with dittodb",
      "author": "Jonathan Keane",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Our function mean_delays()",
        "",
        "RMariaDB",
        "RPostgres",
        "RSQLite",
        "",
        "Recording fixtures",
        "with_mock_db()",
        "Getting setup to use dittodb",
        "Things to be careful about",
        "When to call dbConnect()",
        "Query size",
        "Advanced uses",
        "Specify a new path",
        "Redacting",
        "You, too, can write a fixture!"
      ],
      "created": "2020-04-24 02:22:35",
      "modified": "2025-08-17 13:58:57",
      "commits": 14
    },
    {
      "source": "nycflights.Rmd",
      "filename": "nycflights.html",
      "title": "nycflights13 data",
      "author": "Mauricio Vargas and Jonathan Keane",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Exploring",
        "{nycflights13} test database",
        "Adding {nycflights13} data to a database"
      ],
      "created": "2020-01-14 02:06:07",
      "modified": "2024-04-09 02:56:41",
      "commits": 9
    }
  ],
  "_score": 8.366535018762372,
  "_indexed": true,
  "_nocasepkg": "dittodb",
  "_universes": [
    "ropensci",
    "jonkeane"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.1.11.9000",
      "date": "2026-05-25T07:24:32.000Z",
      "distro": "noble",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "7a6b6d05d11072c46fd7b1173096316b4565ce8a84d94108c787a8c80de96ffa",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/26388543755"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.1.11.9000",
      "date": "2026-05-25T07:24:21.000Z",
      "distro": "noble",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "09b15380c91c48b79a3a4ca11893fb547382b9ddc8ac9a3476c709508010dab9",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/26388543755"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.1.11.9000",
      "date": "2026-05-25T07:23:37.000Z",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "18ded5fe43a59736926b781659417712da879df86455fcc45aa004c3dab057d0",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/26388543755"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.1.11.9000",
      "date": "2026-05-25T07:23:29.000Z",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "6b5831338f0496268ac65ed9f6f3f693e222656944173ea0caa8706eb601f75d",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/26388543755"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.1.11.9000",
      "date": "2026-05-25T07:24:21.000Z",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "407ef5ee00bf82d29538b3325cbbc656730126bf15cb514fe9626c45fa6fba9b",
      "status": "success",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/26388543755"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.1.11.9000",
      "date": "2026-05-25T07:23:26.000Z",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "8a3075dce7e7aea4f56f2ffdaf5613f76abdec526b04402b0a354b4cedf969e2",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/26388543755"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.1.11.9000",
      "date": "2026-05-25T07:23:34.000Z",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "da8ce316632b1cf10e8d512b65ca130ce34a634dbdb99f68a007ef6ed80a9a44",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/26388543755"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "0.1.11.9000",
      "date": "2026-05-25T07:25:44.000Z",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "782243b155b1c8a3cb128ec0e11a80f526a56ccd45ddf8070cafbe56b828ac58",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/26388543755"
    }
  ]
}