{
  "_id": "69c4fee78bc89d43db5e69ec",
  "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-03-26 09:36:27 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": "036f2459347b2c236bdc34d993762002",
  "_user": "ropensci",
  "_type": "src",
  "_file": "dittodb_0.1.11.9000.tar.gz",
  "_fileid": "a8be090ca507232ca2611022567d6361dc11fed9cbb90753536f049752199d84",
  "_filesize": 332028,
  "_sha256": "a8be090ca507232ca2611022567d6361dc11fed9cbb90753536f049752199d84",
  "_created": "2026-03-26T09:36:27.000Z",
  "_published": "2026-03-26T09:39:51.362Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 68683759369,
      "time": 155,
      "config": "linux-devel-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "6119973261"
    },
    {
      "job": 68683759371,
      "time": 152,
      "config": "linux-release-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "6119972529"
    },
    {
      "job": 68683759364,
      "time": 100,
      "config": "macos-devel-arm64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "6119958112"
    },
    {
      "job": 68683759416,
      "time": 95,
      "config": "macos-release-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "6119957289"
    },
    {
      "job": 68683312832,
      "time": 181,
      "config": "pkgdown",
      "r": "4.5.2",
      "check": "OK",
      "artifact": "6119927960"
    },
    {
      "job": 68683312797,
      "time": 193,
      "config": "source",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "6119931475"
    },
    {
      "job": 68683759363,
      "time": 126,
      "config": "wasm-release",
      "r": "4.5.1",
      "check": "OK",
      "artifact": "6119965254"
    },
    {
      "job": 68683759370,
      "time": 106,
      "config": "windows-devel",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "6119960080"
    },
    {
      "job": 68683759353,
      "time": 118,
      "config": "windows-release",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "6119963316"
    }
  ],
  "_buildurl": "https://github.com/r-universe/ropensci/actions/runs/23587224503",
  "_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",
    "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": 84,
  "_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": 815,
    "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.5.3",
  "_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.361395379109961,
  "_indexed": true,
  "_nocasepkg": "dittodb",
  "_universes": [
    "ropensci",
    "jonkeane"
  ],
  "_binaries": [
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.1.11.9000",
      "date": "2026-03-26T09:38:37.000Z",
      "distro": "noble",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "a5a21d656221c516b83c48e1ae4fcfc560e5d130546427409b5ef0dbf971055b",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/23587224503"
    },
    {
      "r": "4.5.3",
      "os": "linux",
      "version": "0.1.11.9000",
      "date": "2026-03-26T09:38:35.000Z",
      "distro": "noble",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "4f2f0b084db6cf02cb1b1755d101346b86b671f1b2d6a2e709b1e59906ccc50a",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/23587224503"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.1.11.9000",
      "date": "2026-03-26T09:37:56.000Z",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "97641dca7a63bf1e1cf39ac04ea334250070492ab69e46c89f00c74cd4f31962",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/23587224503"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.1.11.9000",
      "date": "2026-03-26T09:37:53.000Z",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "b477fb939ef9945d184792d2dc7e970d6089c71dd7d28f98295ae04ed231488b",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/23587224503"
    },
    {
      "r": "4.5.1",
      "os": "wasm",
      "version": "0.1.11.9000",
      "date": "2026-03-26T09:38:50.000Z",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "f2f863d3ddee1a44d56916f477078bfb8e6514d7ee187d2cf31706e0240f49e9",
      "status": "success",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/23587224503"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "0.1.11.9000",
      "date": "2026-03-26T09:37:37.000Z",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "ef9cc4a77c4f074a871788d1e16eb6e583ba1038d7fe4d5349573eb81718c651",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/23587224503"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.1.11.9000",
      "date": "2026-03-26T09:37:48.000Z",
      "commit": "a9bcdfe0ab5f19b08c649923ae9aa83cb25d48df",
      "fileid": "7847b4ba78d90faf45093b489287545a0a2cfbbf59eb58377563635d9065a0cb",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/ropensci/actions/runs/23587224503"
    }
  ]
}