From ba78c508d2cc1a55ae044c02389be50ca43da8f8 Mon Sep 17 00:00:00 2001 From: "aviator-app[bot]" Date: Wed, 26 Jun 2024 13:50:49 +0000 Subject: [PATCH] Built site for DBI@1.2.3.9001: dfd7b59 --- dev/CODE_OF_CONDUCT.html | 24 ++- dev/CONTRIBUTING.html | 24 ++- dev/ISSUE_TEMPLATE.html | 25 ++- dev/LICENSE.html | 25 ++- dev/articles/DBI-1.html | 44 +++-- dev/articles/DBI-advanced.html | 36 +++- dev/articles/DBI-arrow.html | 36 +++- dev/articles/DBI-history.html | 38 +++- dev/articles/DBI-proposal.html | 41 ++++- dev/articles/DBI.html | 37 +++- dev/articles/backend.html | 36 +++- dev/articles/index.html | 23 +++ dev/articles/spec.html | 36 +++- dev/authors.html | 26 ++- dev/deps/bootstrap-5.3.1/bootstrap.min.css | 2 +- dev/index.html | 24 +++ dev/news/index.html | 22 ++- dev/pkgdown.yml | 5 +- dev/reference/ANSI.html | 25 ++- dev/reference/DBI-package.html | 34 +++- dev/reference/DBIConnection-class.html | 31 +++- dev/reference/DBIConnector-class.html | 25 ++- dev/reference/DBIDriver-class.html | 25 ++- dev/reference/DBIObject-class.html | 27 ++- dev/reference/DBIResult-class.html | 27 ++- dev/reference/DBIResultArrow-class.html | 27 ++- dev/reference/Id.html | 38 +++- dev/reference/SQL.html | 39 ++++- dev/reference/dbAppendTable.html | 53 +++++- dev/reference/dbAppendTableArrow.html | 49 +++++- dev/reference/dbBind.html | 58 ++++++- dev/reference/dbCallProc.html | 32 +++- dev/reference/dbCanConnect.html | 38 +++- dev/reference/dbClearResult.html | 50 +++++- dev/reference/dbColumnInfo.html | 54 +++++- dev/reference/dbConnect.html | 44 ++++- dev/reference/dbCreateTable.html | 55 +++++- dev/reference/dbCreateTableArrow.html | 53 +++++- dev/reference/dbDataType.html | 49 +++++- dev/reference/dbDisconnect.html | 41 ++++- dev/reference/dbDriver.html | 36 +++- dev/reference/dbExecute.html | 56 +++++- dev/reference/dbExistsTable.html | 46 ++++- dev/reference/dbFetch.html | 52 +++++- dev/reference/dbFetchArrow.html | 47 ++++- dev/reference/dbFetchArrowChunk.html | 47 ++++- dev/reference/dbGetConnectArgs.html | 36 +++- dev/reference/dbGetDBIVersion.html | 25 ++- dev/reference/dbGetException.html | 34 +++- dev/reference/dbGetInfo.html | 50 +++++- dev/reference/dbGetQuery.html | 56 +++++- dev/reference/dbGetQueryArrow.html | 52 +++++- dev/reference/dbGetRowCount.html | 41 ++++- dev/reference/dbGetRowsAffected.html | 44 ++++- dev/reference/dbGetStatement.html | 41 ++++- dev/reference/dbHasCompleted.html | 48 +++++- dev/reference/dbIsReadOnly.html | 36 +++- dev/reference/dbIsValid.html | 38 +++- dev/reference/dbListConnections.html | 34 +++- dev/reference/dbListFields.html | 57 +++++- dev/reference/dbListObjects.html | 48 +++++- dev/reference/dbListResults.html | 34 +++- dev/reference/dbListTables.html | 43 ++++- dev/reference/dbQuoteIdentifier.html | 53 +++++- dev/reference/dbQuoteLiteral.html | 53 +++++- dev/reference/dbQuoteString.html | 53 +++++- dev/reference/dbReadTable.html | 52 +++++- dev/reference/dbReadTableArrow.html | 47 ++++- dev/reference/dbRemoveTable.html | 49 +++++- dev/reference/dbSendQuery.html | 59 ++++++- dev/reference/dbSendQueryArrow.html | 59 ++++++- dev/reference/dbSendStatement.html | 61 ++++++- dev/reference/dbSetDataMappings.html | 34 +++- dev/reference/dbUnquoteIdentifier.html | 51 +++++- dev/reference/dbWithTransaction.html | 46 ++++- dev/reference/dbWriteTable.html | 51 +++++- dev/reference/dbWriteTableArrow.html | 51 +++++- dev/reference/dot-SQL92Keywords.html | 25 ++- dev/reference/hidden_aliases.html | 32 +++- dev/reference/index.html | 192 +++++++++++++++++++++ dev/reference/make.db.names.html | 48 +++++- dev/reference/rownames.html | 32 +++- dev/reference/sqlAppendTable.html | 46 ++++- dev/reference/sqlCreateTable.html | 44 ++++- dev/reference/sqlData.html | 40 ++++- dev/reference/sqlInterpolate.html | 46 ++++- dev/reference/sqlParseVariables.html | 42 ++++- dev/reference/transactions.html | 44 ++++- dev/search.json | 2 +- dev/security.html | 24 ++- 90 files changed, 3442 insertions(+), 273 deletions(-) diff --git a/dev/CODE_OF_CONDUCT.html b/dev/CODE_OF_CONDUCT.html index 4874be13..39b06175 100644 --- a/dev/CODE_OF_CONDUCT.html +++ b/dev/CODE_OF_CONDUCT.html @@ -1,12 +1,19 @@ Contributor Code of Conduct • DBI Skip to contents + +
+
+

As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.

We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion.

Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.

@@ -31,13 +43,23 @@

Contributor Code of Conduct

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.

This Code of Conduct is adapted from the Contributor Covenant (https://www.contributor-covenant.org), version 1.0.0, available at https://contributor-covenant.org/version/1/0/0/.

+
+ +
+ + + + + diff --git a/dev/CONTRIBUTING.html b/dev/CONTRIBUTING.html index 4e3d8958..c717f99f 100644 --- a/dev/CONTRIBUTING.html +++ b/dev/CONTRIBUTING.html @@ -1,12 +1,19 @@ Contributing to DBI • DBI Skip to contents + +
+
+

This outlines how to propose a change to DBI.

Fixing typos

@@ -48,14 +60,24 @@

Code of ConductPlease note that the DBI project is released with a Contributor Code of Conduct. By contributing to this project you agree to abide by its terms.

+
+ +
+ + + + + diff --git a/dev/ISSUE_TEMPLATE.html b/dev/ISSUE_TEMPLATE.html index 125b8762..4b77d94f 100644 --- a/dev/ISSUE_TEMPLATE.html +++ b/dev/ISSUE_TEMPLATE.html @@ -1,12 +1,19 @@ NA • DBI Skip to contents + +
+ +

Please briefly describe your problem and what output you expect. If you have a question, please don’t use this form. Instead, ask on https://stackoverflow.com/ or https://community.rstudio.com/.

Please include a minimal reproducible example (AKA a reprex). If you’ve never heard of a reprex before, start by reading https://www.tidyverse.org/help/#reprex.

IMPORTANT: If your code requires accessing a specific database (with e.g. odbc, RSQLite, RJDBC), the issue you are experiencing is likely not a problem with the DBI package. Please file an issue with the appropriate DBI backend instead.


Brief description of the problem

 # insert reprex here
+ +
+ +
+ + + + + diff --git a/dev/LICENSE.html b/dev/LICENSE.html index 98e62323..5dfb52c5 100644 --- a/dev/LICENSE.html +++ b/dev/LICENSE.html @@ -1,12 +1,19 @@ NA • DBI Skip to contents + +
+ +

GNU LESSER GENERAL PUBLIC LICENSE

Version 2.1, February 1999

@@ -151,14 +163,25 @@

How to Apply These Terms Ty Coon, President of Vice

That’s all there is to it!

+ +
+ + + + + + + diff --git a/dev/articles/DBI-1.html b/dev/articles/DBI-1.html index f1194b04..3f43cef9 100644 --- a/dev/articles/DBI-1.html +++ b/dev/articles/DBI-1.html @@ -11,23 +11,28 @@ - - Skip to contents + +
+
-

This document describes a common interface between the S -language (in its R and S-Plus implementations) and database management -systems (DBMS). The interface defines a small set of classes and methods -similar in spirit to Perl’s DBI, Java’s JDBC, Python’s DB-API, and -Microsoft’s ODBC.

+ + + +

This document describes a common interface between the S language (in +its R and S-Plus implementations) and database management systems +(DBMS). The interface defines a small set of classes and methods similar +in spirit to Perl’s DBI, Java’s JDBC, Python’s DB-API, and Microsoft’s +ODBC.

Version

@@ -843,13 +857,23 @@

Resources

+ + +
+ + + + + diff --git a/dev/articles/DBI-advanced.html b/dev/articles/DBI-advanced.html index ab1397f8..d678920e 100644 --- a/dev/articles/DBI-advanced.html +++ b/dev/articles/DBI-advanced.html @@ -11,23 +11,28 @@ - - Skip to contents + +
+
-
+ + + +

Who this tutorial is for

This tutorial is for you if you need to use a richer set of SQL @@ -539,13 +553,23 @@

Conclusion

+ + +
+ + + + + diff --git a/dev/articles/DBI-arrow.html b/dev/articles/DBI-arrow.html index 4fc21877..27f70a97 100644 --- a/dev/articles/DBI-arrow.html +++ b/dev/articles/DBI-arrow.html @@ -11,23 +11,28 @@ - - Skip to contents + +
+
-
+ + + +

Who this tutorial is for

This tutorial is for you if you want to leverage Apache Arrow for accessing and @@ -298,13 +312,23 @@

Conclusion

+ + +
+ + + + + diff --git a/dev/articles/DBI-history.html b/dev/articles/DBI-history.html index a5fc9f5d..51465907 100644 --- a/dev/articles/DBI-history.html +++ b/dev/articles/DBI-history.html @@ -11,23 +11,28 @@ - - Skip to contents + +
+
-

The following history of DBI was contributed by David James, -the driving force behind the development of DBI, and many of the -packages that implement it.

+ + + +

The following history of DBI was contributed by David James, the +driving force behind the development of DBI, and many of the packages +that implement it.

The idea/work of interfacing S (originally S3 and S4) to RDBMS goes back to the mid- and late 1990’s in Bell Labs. The first toy interface I did was to implement John Chamber’s early concept of “Data Management in @@ -126,13 +140,23 @@

David Python’s DBAPI is the cleanest and most relevant for the S language.

+ + +
+ + + + + diff --git a/dev/articles/DBI-proposal.html b/dev/articles/DBI-proposal.html index 428520cd..50dcba9d 100644 --- a/dev/articles/DBI-proposal.html +++ b/dev/articles/DBI-proposal.html @@ -11,23 +11,28 @@ - - Skip to contents + +
+
-

For too long S and similar data analysis environments have -lacked good interfaces to relational database systems (RDBMS). For the -last twenty years or so these RDBMS have evolved into highly optimized + + + +

For too long S and similar data analysis environments have lacked +good interfaces to relational database systems (RDBMS). For the last +twenty years or so these RDBMS have evolved into highly optimized client-server systems for data storage and manipulation, and currently they serve as repositories for most of the business, industrial, and research “raw” data that analysts work with. Other analysis packages, @@ -867,13 +880,23 @@

The S Version 4 Definitions

+ + +
+ + + + + diff --git a/dev/articles/DBI.html b/dev/articles/DBI.html index 194cca57..05a1d8a1 100644 --- a/dev/articles/DBI.html +++ b/dev/articles/DBI.html @@ -11,21 +11,26 @@ - - Skip to contents + +
+
-
+ + + +

Who this tutorial is for

This tutorial is for you if you want to access or manipulate data in @@ -300,13 +313,23 @@

Further Reading

+ + +
+ + + + + diff --git a/dev/articles/backend.html b/dev/articles/backend.html index 701ed921..9ffff4e9 100644 --- a/dev/articles/backend.html +++ b/dev/articles/backend.html @@ -11,23 +11,28 @@ - - Skip to contents + +
+
-

The goal of this document is to help you implement a new -backend for DBI.

+ + + +

The goal of this document is to help you implement a new backend for +DBI.

If you are writing a package that connects a database to R, I highly recommend that you make it DBI compatible because it makes your life easier by spelling out exactly what you need to do. The consistent @@ -344,13 +358,23 @@

Full DBI compliance

+ + +
+ + + + + diff --git a/dev/articles/index.html b/dev/articles/index.html index 742d47c0..2c2f69ad 100644 --- a/dev/articles/index.html +++ b/dev/articles/index.html @@ -1,12 +1,19 @@ Articles • DBI Skip to contents + +
+

Tutorials

+
Introduction to DBI
Advanced DBI Usage
@@ -37,12 +49,14 @@

Tutorials

Specification

+
DBI specification
+ +
+ + + + + diff --git a/dev/articles/spec.html b/dev/articles/spec.html index 732eaf00..6c4e3ec9 100644 --- a/dev/articles/spec.html +++ b/dev/articles/spec.html @@ -11,23 +11,28 @@ - - Skip to contents + +
+
-
+ + +

Abstract

The DBI package defines the generic DataBase Interface for R. The connection to individual DBMS is provided by other packages @@ -64,7 +77,8 @@

Kirill definitions of the DBItest package. Any extensions or updates to the tests will be reflected in this document.

-
+ +

DBI: R Database Interface

DBI defines an interface for communication between R and relational @@ -3692,13 +3706,23 @@

Examples

+ + +
+ + + + + diff --git a/dev/authors.html b/dev/authors.html index dca3eb96..25277cd3 100644 --- a/dev/authors.html +++ b/dev/authors.html @@ -1,12 +1,19 @@ Authors and Citation • DBI Skip to contents + +
+

Authors

+
  • R Special Interest Group on Databases (R-SIG-DB). Author.

    @@ -41,9 +53,11 @@

    Authors

+

Citation

-

Source: DESCRIPTION

+

Source: DESCRIPTION

+

R Special Interest Group on Databases (R-SIG-DB), Wickham H, Müller K (2024). DBI: R Database Interface. R package version 1.2.3.9001, https://github.com/r-dbi/DBI, https://dbi.r-dbi.org. @@ -56,14 +70,24 @@

Citation

url = {https://dbi.r-dbi.org}, }
+
+ +
+ + + + + diff --git a/dev/deps/bootstrap-5.3.1/bootstrap.min.css b/dev/deps/bootstrap-5.3.1/bootstrap.min.css index f05f0a25..04f46b49 100644 --- a/dev/deps/bootstrap-5.3.1/bootstrap.min.css +++ b/dev/deps/bootstrap-5.3.1/bootstrap.min.css @@ -2,4 +2,4 @@ * Bootstrap v5.3.1 (https://getbootstrap.com/) * Copyright 2011-2023 The Bootstrap Authors * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root,[data-bs-theme="light"]{--bs-blue: #2c3e50;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #e83e8c;--bs-red: #e74c3c;--bs-orange: #fd7e14;--bs-yellow: #f39c12;--bs-green: #18bc9c;--bs-teal: #20c997;--bs-cyan: #3498db;--bs-black: #000;--bs-white: #fff;--bs-gray: #95a5a6;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #ecf0f1;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #b4bcc2;--bs-gray-600: #95a5a6;--bs-gray-700: #7b8a8b;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #95a5a6;--bs-primary: #2c3e50;--bs-secondary: #95a5a6;--bs-success: #fff;--bs-info: #3498db;--bs-warning: #f39c12;--bs-danger: #F8C9C4;--bs-light: #ecf0f1;--bs-dark: #7b8a8b;--bs-default-rgb: 149,165,166;--bs-primary-rgb: 44,62,80;--bs-secondary-rgb: 149,165,166;--bs-success-rgb: 255,255,255;--bs-info-rgb: 52,152,219;--bs-warning-rgb: 243,156,18;--bs-danger-rgb: 248,201,196;--bs-light-rgb: 236,240,241;--bs-dark-rgb: 123,138,139;--bs-primary-text-emphasis: #121920;--bs-secondary-text-emphasis: #3c4242;--bs-success-text-emphasis: #666;--bs-info-text-emphasis: #153d58;--bs-warning-text-emphasis: #613e07;--bs-danger-text-emphasis: #63504e;--bs-light-text-emphasis: #7b8a8b;--bs-dark-text-emphasis: #7b8a8b;--bs-primary-bg-subtle: #d5d8dc;--bs-secondary-bg-subtle: #eaeded;--bs-success-bg-subtle: #fff;--bs-info-bg-subtle: #d6eaf8;--bs-warning-bg-subtle: #fdebd0;--bs-danger-bg-subtle: #fef4f3;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #abb2b9;--bs-secondary-border-subtle: #d5dbdb;--bs-success-border-subtle: #fff;--bs-info-border-subtle: #aed6f1;--bs-warning-border-subtle: #fad7a0;--bs-danger-border-subtle: #fce9e7;--bs-light-border-subtle: #ecf0f1;--bs-dark-border-subtle: #b4bcc2;--bs-white-rgb: 255,255,255;--bs-black-rgb: 0,0,0;--bs-font-sans-serif: Lato, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255,255,255,0.15), rgba(255,255,255,0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-color-rgb: 33,37,41;--bs-body-bg: #fff;--bs-body-bg-rgb: 255,255,255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0,0,0;--bs-secondary-color: rgba(33,37,41,0.75);--bs-secondary-color-rgb: 33,37,41;--bs-secondary-bg: #ecf0f1;--bs-secondary-bg-rgb: 236,240,241;--bs-tertiary-color: rgba(33,37,41,0.5);--bs-tertiary-color-rgb: 33,37,41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248,249,250;--bs-heading-color: inherit;--bs-link-color: #116074;--bs-link-color-rgb: 17,96,116;--bs-link-decoration: underline;--bs-link-hover-color: #116074;--bs-link-hover-color-rgb: 17,96,116;--bs-link-hover-decoration: underline dotted;--bs-code-color: RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));--bs-highlight-bg: #fdebd0;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0,0,0,0.175);--bs-border-radius: .375rem;--bs-border-radius-sm: .25rem;--bs-border-radius-lg: .5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0,0,0,0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0,0,0,0.075);--bs-focus-ring-width: .25rem;--bs-focus-ring-opacity: .25;--bs-focus-ring-color: rgba(44,62,80,0.25);--bs-form-valid-color: #fff;--bs-form-valid-border-color: #fff;--bs-form-invalid-color: #F8C9C4;--bs-form-invalid-border-color: #F8C9C4}[data-bs-theme="dark"]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222,226,230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33,37,41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255,255,255;--bs-secondary-color: rgba(222,226,230,0.75);--bs-secondary-color-rgb: 222,226,230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52,58,64;--bs-tertiary-color: rgba(222,226,230,0.5);--bs-tertiary-color-rgb: 222,226,230;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43,48,53;--bs-primary-text-emphasis: #808b96;--bs-secondary-text-emphasis: #bfc9ca;--bs-success-text-emphasis: #fff;--bs-info-text-emphasis: #85c1e9;--bs-warning-text-emphasis: #f8c471;--bs-danger-text-emphasis: #fbdfdc;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #090c10;--bs-secondary-bg-subtle: #1e2121;--bs-success-bg-subtle: #333;--bs-info-bg-subtle: #0a1e2c;--bs-warning-bg-subtle: #311f04;--bs-danger-bg-subtle: #322827;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #1a2530;--bs-secondary-border-subtle: #596364;--bs-success-border-subtle: #999;--bs-info-border-subtle: #1f5b83;--bs-warning-border-subtle: #925e0b;--bs-danger-border-subtle: #957976;--bs-light-border-subtle: #7b8a8b;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #808b96;--bs-link-hover-color: #99a2ab;--bs-link-color-rgb: 128,139,150;--bs-link-hover-color-rgb: 153,162,171;--bs-code-color: RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));--bs-border-color: #7b8a8b;--bs-border-color-translucent: rgba(255,255,255,0.15);--bs-form-valid-color: #74d7c4;--bs-form-valid-border-color: #74d7c4;--bs-form-invalid-color: #f1948a;--bs-form-invalid-border-color: #f1948a}*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.425rem + 2.1vw)}@media (min-width: 1200px){h1,.h1{font-size:3rem}}h2,.h2{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h2,.h2{font-size:2.5rem}}h3,.h3{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h3,.h3{font-size:2rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #ecf0f1}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb);text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em;color:RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));background-color:RGBA(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.04);padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6);border-radius:.375rem}pre code{background-color:transparent;font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);background-color:RGBA(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.04);border-radius:.375rem;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not([type="week"]):not([type="time"])::-webkit-calendar-picker-indicator{display:none !important}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#95a5a6}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;-webkit-flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media (min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media (min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media (min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media (min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media (min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.col{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.66667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333%}.offset-xxl-5{margin-left:41.66667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333%}.offset-xxl-8{margin-left:66.66667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333%}.offset-xxl-11{margin-left:91.66667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-body-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: rgba(0,0,0,0);--bs-table-striped-color: var(--bs-body-color);--bs-table-striped-bg: rgba(0,0,0,0.05);--bs-table-active-color: var(--bs-body-color);--bs-table-active-bg: rgba(0,0,0,0.1);--bs-table-hover-color: var(--bs-body-color);--bs-table-hover-bg: rgba(0,0,0,0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #fff;--bs-table-bg: #2c3e50;--bs-table-border-color: #415162;--bs-table-striped-bg: #374859;--bs-table-striped-color: #fff;--bs-table-active-bg: #415162;--bs-table-active-color: #fff;--bs-table-hover-bg: #3c4c5d;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #fff;--bs-table-bg: #95a5a6;--bs-table-border-color: #a0aeaf;--bs-table-striped-bg: #9aaaaa;--bs-table-striped-color: #fff;--bs-table-active-bg: #a0aeaf;--bs-table-active-color: #fff;--bs-table-hover-bg: #9dacad;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #fff;--bs-table-border-color: #e6e6e6;--bs-table-striped-bg: #f2f2f2;--bs-table-striped-color: #000;--bs-table-active-bg: #e6e6e6;--bs-table-active-color: #000;--bs-table-hover-bg: #ececec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #fff;--bs-table-bg: #3498db;--bs-table-border-color: #48a2df;--bs-table-striped-bg: #3e9ddd;--bs-table-striped-color: #fff;--bs-table-active-bg: #48a2df;--bs-table-active-color: #fff;--bs-table-hover-bg: #43a0de;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #fff;--bs-table-bg: #f39c12;--bs-table-border-color: #f4a62a;--bs-table-striped-bg: #f4a11e;--bs-table-striped-color: #fff;--bs-table-active-bg: #f4a62a;--bs-table-active-color: #000;--bs-table-hover-bg: #f4a324;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8c9c4;--bs-table-border-color: #dfb5b0;--bs-table-striped-bg: #ecbfba;--bs-table-striped-color: #000;--bs-table-active-bg: #dfb5b0;--bs-table-active-color: #000;--bs-table-hover-bg: #e5bab5;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #ecf0f1;--bs-table-border-color: #d4d8d9;--bs-table-striped-bg: #e0e4e5;--bs-table-striped-color: #000;--bs-table-active-bg: #d4d8d9;--bs-table-active-color: #000;--bs-table-hover-bg: #dadedf;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #7b8a8b;--bs-table-border-color: #889697;--bs-table-striped-bg: #829091;--bs-table-striped-color: #fff;--bs-table-active-bg: #889697;--bs-table-active-color: #fff;--bs-table-hover-bg: #859394;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type="file"]{overflow:hidden}.form-control[type="file"]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#969fa8;outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,0.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#969fa8;outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,0.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme="dark"] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: var(--bs-body-bg);width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);print-color-adjust:exact}.form-check-input[type="checkbox"],.shiny-input-container .checkbox input[type="checkbox"],.shiny-input-container .checkbox-inline input[type="checkbox"],.shiny-input-container .radio input[type="checkbox"],.shiny-input-container .radio-inline input[type="checkbox"]{border-radius:.25em}.form-check-input[type="radio"],.shiny-input-container .checkbox input[type="radio"],.shiny-input-container .checkbox-inline input[type="radio"],.shiny-input-container .radio input[type="radio"],.shiny-input-container .radio-inline input[type="radio"]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#969fa8;outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,0.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#2c3e50;border-color:#2c3e50}.form-check-input:checked[type="checkbox"],.shiny-input-container .checkbox input:checked[type="checkbox"],.shiny-input-container .checkbox-inline input:checked[type="checkbox"],.shiny-input-container .radio input:checked[type="checkbox"],.shiny-input-container .radio-inline input:checked[type="checkbox"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type="radio"],.shiny-input-container .checkbox input:checked[type="radio"],.shiny-input-container .checkbox-inline input:checked[type="radio"],.shiny-input-container .radio input:checked[type="radio"],.shiny-input-container .radio-inline input:checked[type="radio"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox-inline input[type="checkbox"]:indeterminate,.shiny-input-container .radio input[type="checkbox"]:indeterminate,.shiny-input-container .radio-inline input[type="checkbox"]:indeterminate{background-color:#2c3e50;border-color:#2c3e50;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280,0,0,0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23969fa8'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme="dark"] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255,255,255,0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(44,62,80,0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(44,62,80,0.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2c3e50;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#c0c5cb}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2c3e50;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#c0c5cb}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity 0.1s ease-in-out,transform 0.1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), .65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), .65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#95a5a6}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n + 3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n + 4),.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23F8C9C4'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23F8C9C4' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23F8C9C4'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23F8C9C4' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #fff;--bs-btn-bg: #95a5a6;--bs-btn-border-color: #95a5a6;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #7f8c8d;--bs-btn-hover-border-color: #778485;--bs-btn-focus-shadow-rgb: 165,179,179;--bs-btn-active-color: #fff;--bs-btn-active-bg: #778485;--bs-btn-active-border-color: #707c7d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #95a5a6;--bs-btn-disabled-border-color: #95a5a6}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #2c3e50;--bs-btn-border-color: #2c3e50;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #253544;--bs-btn-hover-border-color: #233240;--bs-btn-focus-shadow-rgb: 76,91,106;--bs-btn-active-color: #fff;--bs-btn-active-bg: #233240;--bs-btn-active-border-color: #212f3c;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #2c3e50;--bs-btn-disabled-border-color: #2c3e50}.btn-secondary,.btn-default:not(.btn-primary):not(.btn-info):not(.btn-success):not(.btn-warning):not(.btn-danger):not(.btn-dark):not(.btn-light):not([class*='btn-outline-']){--bs-btn-color: #fff;--bs-btn-bg: #95a5a6;--bs-btn-border-color: #95a5a6;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #7f8c8d;--bs-btn-hover-border-color: #778485;--bs-btn-focus-shadow-rgb: 165,179,179;--bs-btn-active-color: #fff;--bs-btn-active-bg: #778485;--bs-btn-active-border-color: #707c7d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #95a5a6;--bs-btn-disabled-border-color: #95a5a6}.btn-success{--bs-btn-color: #000;--bs-btn-bg: #fff;--bs-btn-border-color: #fff;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #fff;--bs-btn-hover-border-color: #fff;--bs-btn-focus-shadow-rgb: 217,217,217;--bs-btn-active-color: #000;--bs-btn-active-bg: #fff;--bs-btn-active-border-color: #fff;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #fff;--bs-btn-disabled-border-color: #fff}.btn-info{--bs-btn-color: #fff;--bs-btn-bg: #3498db;--bs-btn-border-color: #3498db;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2c81ba;--bs-btn-hover-border-color: #2a7aaf;--bs-btn-focus-shadow-rgb: 82,167,224;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2a7aaf;--bs-btn-active-border-color: #2772a4;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #3498db;--bs-btn-disabled-border-color: #3498db}.btn-warning{--bs-btn-color: #fff;--bs-btn-bg: #f39c12;--bs-btn-border-color: #f39c12;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #cf850f;--bs-btn-hover-border-color: #c27d0e;--bs-btn-focus-shadow-rgb: 245,171,54;--bs-btn-active-color: #fff;--bs-btn-active-bg: #c27d0e;--bs-btn-active-border-color: #b6750e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #f39c12;--bs-btn-disabled-border-color: #f39c12}.btn-danger{--bs-btn-color: #000;--bs-btn-bg: #F8C9C4;--bs-btn-border-color: #F8C9C4;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f9d1cd;--bs-btn-hover-border-color: #f9ceca;--bs-btn-focus-shadow-rgb: 211,171,167;--bs-btn-active-color: #000;--bs-btn-active-bg: #f9d4d0;--bs-btn-active-border-color: #f9ceca;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #F8C9C4;--bs-btn-disabled-border-color: #F8C9C4}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #ecf0f1;--bs-btn-border-color: #ecf0f1;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #c9cccd;--bs-btn-hover-border-color: #bdc0c1;--bs-btn-focus-shadow-rgb: 201,204,205;--bs-btn-active-color: #000;--bs-btn-active-bg: #bdc0c1;--bs-btn-active-border-color: #b1b4b5;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ecf0f1;--bs-btn-disabled-border-color: #ecf0f1}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #7b8a8b;--bs-btn-border-color: #7b8a8b;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #8f9c9c;--bs-btn-hover-border-color: #889697;--bs-btn-focus-shadow-rgb: 143,156,156;--bs-btn-active-color: #fff;--bs-btn-active-bg: #95a1a2;--bs-btn-active-border-color: #889697;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #7b8a8b;--bs-btn-disabled-border-color: #7b8a8b}.btn-outline-default{--bs-btn-color: #95a5a6;--bs-btn-border-color: #95a5a6;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #95a5a6;--bs-btn-hover-border-color: #95a5a6;--bs-btn-focus-shadow-rgb: 149,165,166;--bs-btn-active-color: #fff;--bs-btn-active-bg: #95a5a6;--bs-btn-active-border-color: #95a5a6;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #95a5a6;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #95a5a6;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #2c3e50;--bs-btn-border-color: #2c3e50;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2c3e50;--bs-btn-hover-border-color: #2c3e50;--bs-btn-focus-shadow-rgb: 44,62,80;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2c3e50;--bs-btn-active-border-color: #2c3e50;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #2c3e50;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #2c3e50;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #95a5a6;--bs-btn-border-color: #95a5a6;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #95a5a6;--bs-btn-hover-border-color: #95a5a6;--bs-btn-focus-shadow-rgb: 149,165,166;--bs-btn-active-color: #fff;--bs-btn-active-bg: #95a5a6;--bs-btn-active-border-color: #95a5a6;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #95a5a6;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #95a5a6;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #fff;--bs-btn-border-color: #fff;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #fff;--bs-btn-hover-border-color: #fff;--bs-btn-focus-shadow-rgb: 255,255,255;--bs-btn-active-color: #000;--bs-btn-active-bg: #fff;--bs-btn-active-border-color: #fff;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #fff;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #3498db;--bs-btn-border-color: #3498db;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #3498db;--bs-btn-hover-border-color: #3498db;--bs-btn-focus-shadow-rgb: 52,152,219;--bs-btn-active-color: #fff;--bs-btn-active-bg: #3498db;--bs-btn-active-border-color: #3498db;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #3498db;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #3498db;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #f39c12;--bs-btn-border-color: #f39c12;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #f39c12;--bs-btn-hover-border-color: #f39c12;--bs-btn-focus-shadow-rgb: 243,156,18;--bs-btn-active-color: #fff;--bs-btn-active-bg: #f39c12;--bs-btn-active-border-color: #f39c12;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #f39c12;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f39c12;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #F8C9C4;--bs-btn-border-color: #F8C9C4;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #F8C9C4;--bs-btn-hover-border-color: #F8C9C4;--bs-btn-focus-shadow-rgb: 248,201,196;--bs-btn-active-color: #000;--bs-btn-active-bg: #F8C9C4;--bs-btn-active-border-color: #F8C9C4;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #F8C9C4;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #F8C9C4;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #ecf0f1;--bs-btn-border-color: #ecf0f1;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ecf0f1;--bs-btn-hover-border-color: #ecf0f1;--bs-btn-focus-shadow-rgb: 236,240,241;--bs-btn-active-color: #000;--bs-btn-active-bg: #ecf0f1;--bs-btn-active-border-color: #ecf0f1;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #ecf0f1;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ecf0f1;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #7b8a8b;--bs-btn-border-color: #7b8a8b;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #7b8a8b;--bs-btn-hover-border-color: #7b8a8b;--bs-btn-focus-shadow-rgb: 123,138,139;--bs-btn-active-color: #fff;--bs-btn-active-bg: #7b8a8b;--bs-btn-active-border-color: #7b8a8b;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #7b8a8b;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #7b8a8b;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #95a5a6;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 53,120,137;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:hover,.btn-link:focus-visible{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: .5rem;--bs-dropdown-spacer: .125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: var(--bs-body-color);--bs-dropdown-bg: var(--bs-body-bg);--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: var(--bs-border-radius);--bs-dropdown-border-width: var(--bs-border-width);--bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: .5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-dropdown-link-color: #7b8a8b;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-link-hover-bg: #2c3e50;--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2c3e50;--bs-dropdown-link-disabled-color: var(--bs-tertiary-color);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: .25rem;--bs-dropdown-header-color: #95a5a6;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: .5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255,255,255,0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2c3e50;--bs-dropdown-link-disabled-color: #b4bcc2;--bs-dropdown-header-color: #b4bcc2}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n + 3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 2rem;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: #95a5a6;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background:none;border:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,0.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: var(--bs-border-width);--bs-nav-tabs-border-color: #ecf0f1;--bs-nav-tabs-border-radius: var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) #ecf0f1;--bs-nav-tabs-link-active-color: var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg: var(--bs-body-bg);--bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: var(--bs-border-radius);--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #2c3e50}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: .125rem;--bs-nav-underline-link-active-color: var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 1rem;--bs-navbar-color: #fff;--bs-navbar-hover-color: #fff;--bs-navbar-disabled-color: rgba(255,255,255,0.3);--bs-navbar-active-color: #fff;--bs-navbar-brand-padding-y: .3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-nav-link-padding-x: .5rem;--bs-navbar-toggler-padding-y: .25rem;--bs-navbar-toggler-padding-x: .75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(255,255,255,0.15);--bs-navbar-toggler-border-radius: var(--bs-border-radius);--bs-navbar-toggler-focus-width: .25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme="dark"]{--bs-navbar-color: #fff;--bs-navbar-hover-color: #2c3e50;--bs-navbar-disabled-color: rgba(0,0,0,0.25);--bs-navbar-active-color: #2c3e50;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(0,0,0,0.1);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280,0,0,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme="dark"] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280,0,0,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: var(--bs-body-color);--bs-accordion-bg: var(--bs-body-bg);--bs-accordion-transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: var(--bs-border-width);--bs-accordion-border-radius: var(--bs-border-radius);--bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: var(--bs-body-color);--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23121920'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #969fa8;--bs-accordion-btn-focus-box-shadow: 0 0 0 .25rem rgba(44,62,80,0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: var(--bs-primary-text-emphasis);--bs-accordion-active-bg: var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme="dark"] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23808b96'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23808b96'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: .75rem;--bs-breadcrumb-padding-y: .375rem;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: .25rem;--bs-breadcrumb-divider-color: var(--bs-secondary-color);--bs-breadcrumb-item-padding-x: .5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: .75rem;--bs-pagination-padding-y: .375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: #fff;--bs-pagination-bg: #fff;--bs-pagination-border-width: 0;--bs-pagination-border-color: rgba(0,0,0,0);--bs-pagination-border-radius: var(--bs-border-radius);--bs-pagination-hover-color: #fff;--bs-pagination-hover-bg: #d9d9d9;--bs-pagination-hover-border-color: rgba(0,0,0,0);--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: var(--bs-secondary-bg);--bs-pagination-focus-box-shadow: 0 0 0 .25rem rgba(44,62,80,0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #d9d9d9;--bs-pagination-active-border-color: rgba(0,0,0,0);--bs-pagination-disabled-color: #ecf0f1;--bs-pagination-disabled-bg: #fff;--bs-pagination-disabled-border-color: rgba(0,0,0,0);display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(0 * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: .75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: .5rem;--bs-pagination-padding-y: .25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: .65em;--bs-badge-padding-y: .35em;--bs-badge-font-size:.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius: var(--bs-border-radius);--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:.75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #2c3e50;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: var(--bs-body-color);--bs-list-group-bg: var(--bs-body-bg);--bs-list-group-border-color: var(--bs-border-color);--bs-list-group-border-width: var(--bs-border-width);--bs-list-group-border-radius: var(--bs-border-radius);--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: .5rem;--bs-list-group-action-color: var(--bs-secondary-color);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: #ecf0f1;--bs-list-group-action-active-color: var(--bs-body-color);--bs-list-group-action-active-bg: var(--bs-secondary-bg);--bs-list-group-disabled-color: var(--bs-secondary-color);--bs-list-group-disabled-bg: #ecf0f1;--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #2c3e50;--bs-list-group-active-border-color: #2c3e50;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #fff;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: .4;--bs-btn-close-hover-opacity: 1;--bs-btn-close-focus-shadow: 0 0 0 .25rem rgba(44,62,80,0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: .25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme="dark"] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: .75rem;--bs-toast-padding-y: .5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width: var(--bs-border-width);--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: var(--bs-border-radius);--bs-toast-box-shadow: var(--bs-box-shadow);--bs-toast-header-color: var(--bs-secondary-color);--bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color: var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: .5rem;--bs-modal-color: ;--bs-modal-bg: var(--bs-body-bg);--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: var(--bs-border-width);--bs-modal-border-radius: var(--bs-border-radius-lg);--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: var(--bs-border-width);--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: .5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: .5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media (min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media (min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: .5rem;--bs-tooltip-padding-y: .25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.875rem;--bs-tooltip-color: var(--bs-body-bg);--bs-tooltip-bg: var(--bs-emphasis-color);--bs-tooltip-border-radius: var(--bs-border-radius);--bs-tooltip-opacity: .9;--bs-tooltip-arrow-width: .8rem;--bs-tooltip-arrow-height: .4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:.875rem;--bs-popover-bg: var(--bs-body-bg);--bs-popover-border-width: var(--bs-border-width);--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: var(--bs-border-radius-lg);--bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: .5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: var(--bs-secondary-bg);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: var(--bs-body-color);--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: .5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme="dark"] .carousel .carousel-control-prev-icon,[data-bs-theme="dark"] .carousel .carousel-control-next-icon,[data-bs-theme="dark"].carousel .carousel-control-prev-icon,[data-bs-theme="dark"].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme="dark"] .carousel .carousel-indicators [data-bs-target],[data-bs-theme="dark"].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme="dark"] .carousel .carousel-caption,[data-bs-theme="dark"].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: var(--bs-body-color);--bs-offcanvas-bg: var(--bs-body-bg);--bs-offcanvas-border-width: var(--bs-border-width);--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-offcanvas-transition: transform .3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media (max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 575.98px) and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 767.98px) and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 991.98px) and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media (max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media (min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#fff !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#000 !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#fff !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#fff !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#000 !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(119,132,133, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(119,132,133, var(--bs-link-underline-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(35,50,64, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(35,50,64, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(119,132,133, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(119,132,133, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(255,255,255, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255,255,255, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(42,122,175, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42,122,175, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(194,125,14, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(194,125,14, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(249,212,208, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249,212,208, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(240,243,244, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(240,243,244, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(98,110,111, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(98,110,111, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:0.2s ease-in-out transform}@media (prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio: calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio: calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: .1}.border-opacity-25{--bs-border-opacity: .25}.border-opacity-50{--bs-border-opacity: .5}.border-opacity-75{--bs-border-opacity: .75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.425rem + 2.1vw) !important}.fs-2{font-size:calc(1.375rem + 1.5vw) !important}.fs-3{font-size:calc(1.325rem + .9vw) !important}.fs-4{font-size:calc(1.275rem + .3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,0.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,0.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: .25}.text-opacity-50{--bs-text-opacity: .5}.text-opacity-75{--bs-text-opacity: .75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: .1}.link-opacity-10-hover:hover{--bs-link-opacity: .1}.link-opacity-25{--bs-link-opacity: .25}.link-opacity-25-hover:hover{--bs-link-opacity: .25}.link-opacity-50{--bs-link-opacity: .5}.link-opacity-50-hover:hover{--bs-link-opacity: .5}.link-opacity-75{--bs-link-opacity: .75}.link-opacity-75-hover:hover{--bs-link-opacity: .75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: .1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: .1}.link-underline-opacity-25{--bs-link-underline-opacity: .25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: .25}.link-underline-opacity-50{--bs-link-underline-opacity: .5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: .5}.link-underline-opacity-75{--bs-link-underline-opacity: .75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: .75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: .1}.bg-opacity-25{--bs-bg-opacity: .25}.bg-opacity-50{--bs-bg-opacity: .5}.bg-opacity-75{--bs-bg-opacity: .75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media (min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#fff}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#000}.bg-info{color:#fff}.bg-warning{color:#fff}.bg-danger{color:#000}.bg-light{color:#000}.bg-dark{color:#fff}@media (min-width: 1200px){.fs-1{font-size:3rem !important}.fs-2{font-size:2.5rem !important}.fs-3{font-size:2rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}.table th[align=left]{text-align:left}.table th[align=right]{text-align:right}.table th[align=center]{text-align:center}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre,.bslib-gap-spacing>.shiny-html-output>.bslib-mb-spacing,.bslib-gap-spacing>.shiny-html-output>.form-group,.bslib-gap-spacing>.shiny-html-output>p,.bslib-gap-spacing>.shiny-html-output>pre,.bslib-gap-spacing>.shiny-panel-conditional>.bslib-mb-spacing,.bslib-gap-spacing>.shiny-panel-conditional>.form-group,.bslib-gap-spacing>.shiny-panel-conditional>p,.bslib-gap-spacing>.shiny-panel-conditional>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.bg-blue{--bslib-color-bg: #2c3e50;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2c3e50;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #6f42c1;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #6f42c1;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #e74c3c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #e74c3c;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #fd7e14;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #fd7e14;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #f39c12;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #f39c12;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #18bc9c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #18bc9c;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #3498db;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #3498db;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #95a5a6}.bg-default{--bslib-color-bg: #95a5a6;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2c3e50}.bg-primary{--bslib-color-bg: #2c3e50;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #95a5a6}.bg-secondary{--bslib-color-bg: #95a5a6;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #fff}.bg-success{--bslib-color-bg: #fff;--bslib-color-fg: #000}.text-info{--bslib-color-fg: #3498db}.bg-info{--bslib-color-bg: #3498db;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #f39c12}.bg-warning{--bslib-color-bg: #f39c12;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #F8C9C4}.bg-danger{--bslib-color-bg: #F8C9C4;--bslib-color-fg: #000}.text-light{--bslib-color-fg: #ecf0f1}.bg-light{--bslib-color-bg: #ecf0f1;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #7b8a8b}.bg-dark{--bslib-color-bg: #7b8a8b;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #432c91;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #432c91;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: #47407d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #47407d;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: #773e68;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #773e68;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: #774448;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #774448;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: #805838;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #805838;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #7c6437;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #7c6437;color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: #24706e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #24706e;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: #27766c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #27766c;color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #2f6288;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #2f6288;color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4f22b1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #4f22b1;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: #6a24de;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #6a24de;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: #9a22c9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #9a22c9;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: #9a28a9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #9a28a9;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: #a23c99;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a23c99;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #9e4898;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #9e4898;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: #4755d0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #4755d0;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #5246e9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #5246e9;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: #544094;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #544094;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #6b2ed5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #6b2ed5;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: #9f40ac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #9f40ac;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: #9f468c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #9f468c;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: #a85a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a85a7c;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a4667b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #a4667b;color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: #4c73b2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #4c73b2;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4f78b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4f78b0;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #5764cb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #5764cb;color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: #9d3e74;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #9d3e74;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #b42cb5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #b42cb5;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b840a1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b840a1;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: #e8446c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #e8446c;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: #f0585c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #f0585c;color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #ec645b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #ec645b;color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: #957092;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #957092;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: #987690;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #987690;color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #a062ac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #a062ac;color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: #9c4644;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #9c4644;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #b33485;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #b33485;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b74871;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b74871;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: #e7465c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #e7465c;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: #f0602c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #f0602c;color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #ec6c2b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #ec6c2b;color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: #947962;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #947962;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: #977e60;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #977e60;color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #9f6a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #9f6a7c;color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a9642c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #a9642c;color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #c1526d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c1526d;color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: #c46659;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c46659;color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: #f56444;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #f56444;color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: #f46a24;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #f46a24;color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #f98a13;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #f98a13;color:#fff}.bg-gradient-orange-green{--bslib-color-fg: #fff;--bslib-color-bg: #a1974a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #a1974a;color:#fff}.bg-gradient-orange-teal{--bslib-color-fg: #fff;--bslib-color-bg: #a59c48;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a59c48;color:#fff}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #ad8864;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #ad8864;color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a3762b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #a3762b;color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #bb646c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #bb646c;color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: #be7858;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #be7858;color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: #ef7643;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #ef7643;color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: #ee7c23;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #ee7c23;color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #fff;--bslib-color-bg: #f79013;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #f79013;color:#fff}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: #9ba949;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #9ba949;color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: #9fae47;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #9fae47;color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #a79a62;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #a79a62;color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: #208a7e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #208a7e;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #3777be;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3777be;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3b8bab;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3b8bab;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: #6b8a96;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #6b8a96;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: #6b8f76;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #6b8f76;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #fff;--bslib-color-bg: #74a366;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #74a366;color:#fff}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #70af65;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #70af65;color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #fff;--bslib-color-bg: #1bc19a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1bc19a;color:#fff}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #23aeb5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #23aeb5;color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: #25917b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #25917b;color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: #4093a8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4093a8;color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: #709193;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #709193;color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: #709773;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #709773;color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #fff;--bslib-color-bg: #78ab63;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #78ab63;color:#fff}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #74b762;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #74b762;color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #fff;--bslib-color-bg: #1dc499;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #1dc499;color:#fff}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #28b5b2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #28b5b2;color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: #3174a3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #3174a3;color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #4862e4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #4862e4;color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: #4c76d1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4c76d1;color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: #7c74bb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #7c74bb;color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: #7c7a9b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #7c7a9b;color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: #848e8b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #848e8b;color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #809a8b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #809a8b;color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: #29a6c2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #29a6c2;color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: #2cacc0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #2cacc0;color:#fff}.bg-primary .navbar-nav .show>.nav-link,.bg-primary .navbar-nav .nav-link.active,.bg-primary .navbar-nav .nav-link:hover,.bg-primary .navbar-nav .nav-link:focus{color:#fff !important}.nav-tabs .nav-link.active,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-link.active:hover,.nav-tabs .nav-item.open .nav-link,.nav-tabs .nav-item.open .nav-link:focus,.nav-tabs .nav-item.open .nav-link:hover{color:#2c3e50}.pagination a:hover{text-decoration:none}.badge.bg-light{color:#7b8a8b}.alert{color:#fff;border:none}.alert a,.alert .alert-link{color:#fff;text-decoration:underline}.alert-default{background-color:#95a5a6}.alert-primary{background-color:#2c3e50}.alert-secondary{background-color:#95a5a6}.alert-success{background-color:#fff}.alert-info{background-color:#3498db}.alert-warning{background-color:#f39c12}.alert-danger{background-color:#F8C9C4}.alert-light{background-color:#ecf0f1}.alert-dark{background-color:#7b8a8b}.alert-light,.alert-light a,.alert-light .alert-link{color:#212529}.modal .btn-close,.toast .btn-close,.offcanvas .btn-close{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e")}.row>main{max-width:50rem;overflow-wrap:break-word;hyphens:auto}@media (min-width: 1200px) and (max-width: 1399.98px){.container .row{justify-content:space-evenly}}@media (min-width: 1400px){body{font-size:18px}.col-md-3{margin-left:5rem}}.navbar{background:RGBA(var(--bs-body-color-rgb), 0.1);background:color-mix(in oklab, color-mix(in oklab, var(--bs-body-bg) 95%, var(--bs-primary)) 95%, var(--bs-body-color));line-height:initial}.nav-item .nav-link{border-radius:.375rem}.nav-item.active .nav-link{background:RGBA(var(--bs-body-color-rgb), 0.1)}.nav-item .nav-link:hover{background:RGBA(var(--bs-primary-rgb), 0.1)}.navbar>.container{align-items:baseline;-webkit-align-items:baseline}input[type="search"]{width:12rem}[aria-labelledby=dropdown-lightswitch] span.fa{opacity:0.5}@media (max-width: 991.98px){.algolia-autocomplete,input[type="search"],#navbar .dropdown-menu{width:100%}#navbar .dropdown-item{white-space:normal}input[type="search"]{margin:0.25rem 0}}.headroom{will-change:transform;transition:transform 400ms ease}.headroom--pinned{transform:translateY(0%)}.headroom--unpinned{transform:translateY(-100%)}.row>main,.row>aside{margin-top:56px}html,body{scroll-padding:56px}@media (min-width: 576px){#toc{position:sticky;top:56px;max-height:calc(100vh - 56px - 1rem);overflow-y:auto}}aside h2,aside .h2{margin-top:1.5rem;font-size:1.25rem}aside .roles{color:RGBA(var(--bs-body-color-rgb), 0.8)}aside .list-unstyled li{margin-bottom:0.5rem}aside .dev-status .list-unstyled li{margin-bottom:0.1rem}@media (max-width: 767.98px){.row>aside{margin:0.5rem;width:calc(100vw - 1rem);background-color:RGBA(var(--bs-body-color-rgb), 0.1);border-color:var(--bs-border-color);border-radius:.375rem}.row>aside h2:first-child,.row>aside .h2:first-child{margin-top:1rem}}body{position:relative}#toc>.nav{margin-bottom:1rem}#toc>.nav a.nav-link{color:inherit;padding:0.25rem 0.5rem;margin-bottom:2px;border-radius:.375rem}#toc>.nav a.nav-link:hover,#toc>.nav a.nav-link:focus{background-color:RGBA(var(--bs-primary-rgb), 0.1)}#toc>.nav a.nav-link.active{background-color:RGBA(var(--bs-body-color-rgb), 0.1)}#toc>.nav .nav a.nav-link{margin-left:0.5rem}#toc>.nav .nav{display:none !important}#toc>.nav a.active+.nav{display:flex !important}footer{margin:1rem 0 1rem 0;padding-top:1rem;font-size:.875em;border-top:1px solid #dee2e6;background:rgba(0,0,0,0);color:RGBA(var(--bs-body-color-rgb), 0.8);display:flex;column-gap:1rem}@media (max-width: 575.98px){footer{flex-direction:column}}@media (min-width: 576px){footer .pkgdown-footer-right{text-align:right}}footer div{flex:1 1 auto}html,body{height:100%}body>.container{min-height:100%;display:flex;flex-direction:column}body>.container .row{flex:1 0 auto}main img{max-width:100%;height:auto}main table{display:block;overflow:auto}body{font-display:fallback}.page-header{border-bottom:1px solid var(--bs-border-color);padding-bottom:0.5rem;margin-bottom:0.5rem;margin-top:1.5rem}dl{margin-bottom:0}dd{padding-left:1.5rem;margin-bottom:0.25rem}h2,.h2{font-size:1.75rem;margin-top:1.5rem}h3,.h3{font-size:1.25rem;margin-top:1rem;font-weight:bold}h4,.h4{font-size:1.1rem;font-weight:bold}h5,.h5{font-size:1rem;font-weight:bold}summary{margin-bottom:0.5rem}details{margin-bottom:1rem}.html-widget{margin-bottom:1rem}a.anchor{display:none;margin-left:2px;vertical-align:top;width:Min(0.9em, 20px);height:Min(0.9em, 20px);background-image:url(../../link.svg);background-repeat:no-repeat;background-size:Min(0.9em, 20px) Min(0.9em, 20px);background-position:center center}h2:hover .anchor,.h2:hover .anchor,h2:target .anchor,.h2:target .anchor,h3:hover .anchor,.h3:hover .anchor,h3:target .anchor,.h3:target .anchor,h4:hover .anchor,.h4:hover .anchor,h4:target .anchor,.h4:target .anchor,h5:hover .anchor,.h5:hover .anchor,h5:target .anchor,.h5:target .anchor,h6:hover .anchor,.h6:hover .anchor,h6:target .anchor,.h6:target .anchor,dt:hover .anchor,dt:target .anchor{display:inline-block}dt:target,dt:target+dd{border-left:0.25rem solid var(--bs-primary);margin-left:-0.75rem}dt:target{padding-left:0.5rem}dt:target+dd{padding-left:2rem}.orcid{color:#A6CE39;margin-right:4px}.fab{font-family:"Font Awesome 5 Brands" !important}img.logo{float:right;width:100px;margin-left:30px}.template-home img.logo{width:120px}@media (max-width: 575.98px){img.logo{width:80px}}@media (min-width: 576px){.page-header{min-height:88px}.template-home .page-header{min-height:104px}}.line-block{margin-bottom:1rem}.template-reference-index dt{font-weight:normal}.template-reference-index code{word-wrap:normal}.icon{float:right}.icon img{width:40px}a[href='#main']{position:absolute;margin:4px;padding:0.75rem;background-color:var(--bs-body-bg);text-decoration:none;z-index:2000}.lifecycle{color:var(--bs-secondary-color);background-color:var(--bs-secondary-bg);border-radius:5px}.lifecycle-stable{background-color:#108001;color:var(--bs-white)}.lifecycle-superseded{background-color:#074080;color:var(--bs-white)}.lifecycle-experimental,.lifecycle-deprecated{background-color:#fd8008;color:var(--bs-black)}a.footnote-ref{cursor:pointer}.popover{width:Min(100vw, 32rem);font-size:0.9rem;box-shadow:4px 4px 8px RGBA(var(--bs-body-color-rgb), 0.3)}.popover-body{padding:0.75rem}.popover-body p:last-child{margin-bottom:0}.tab-content{padding:1rem}.tabset-pills .tab-content{border:solid 1px #e5e5e5}.tab-content{display:flex}.tab-content>.tab-pane{display:block;visibility:hidden;margin-right:-100%;width:100%}.tab-content>.active{visibility:visible}div.csl-entry{clear:both}.hanging-indent div.csl-entry{margin-left:2em;text-indent:-2em}div.csl-left-margin{min-width:2em;float:left}div.csl-right-inline{margin-left:2em;padding-left:1em}div.csl-indent{margin-left:2em}pre,pre code{word-wrap:normal}[data-bs-theme="dark"] pre{background-color:RGBA(var(--bs-body-color-rgb), 0.1);border-color:var(--bs-border-color)}code{overflow-wrap:break-word}.hasCopyButton{position:relative}.btn-copy-ex{position:absolute;right:5px;top:5px;visibility:hidden}.hasCopyButton:hover button.btn-copy-ex{visibility:visible}pre{padding:0.75rem}pre div.gt-table{white-space:normal;margin-top:1rem}@media (max-width: 575.98px){div>div>pre{margin-left:calc(var(--bs-gutter-x) * -.5);margin-right:calc(var(--bs-gutter-x) * -.5);border-radius:0;padding-left:1rem;padding-right:1rem}.btn-copy-ex{right:calc(var(--bs-gutter-x) * -.5 + 5px)}}code a:any-link{color:inherit;text-decoration-color:RGBA(var(--bs-body-color-rgb), 0.6)}pre code{padding:0;background:transparent}pre code .error,pre code .warning{font-weight:bolder}pre .img img,pre .r-plt img{margin:5px 0;background-color:#fff}[data-bs-theme="dark"] pre img{opacity:0.66;transition:opacity 250ms ease-in-out}[data-bs-theme="dark"] pre img:hover,[data-bs-theme="dark"] pre img:focus,[data-bs-theme="dark"] pre img:active{opacity:1}@media print{code a:link:after,code a:visited:after{content:""}}a.sourceLine:hover{text-decoration:none}mark,.mark{background:linear-gradient(-100deg, RGBA(var(--bs-info-rgb), 0.2), RGBA(var(--bs-info-rgb), 0.7) 95%, RGBA(var(--bs-info-rgb), 0.1))}.algolia-autocomplete .aa-dropdown-menu{margin-top:0.5rem;padding:0.5rem 0.25rem;width:MAX(100%, 20rem);max-height:50vh;overflow-y:auto;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:.375rem}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;font-size:1rem;padding:0.5rem 0.25rem;line-height:1.3}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:hover{background-color:var(--bs-tertiary-bg);color:var(--bs-body-color)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-details{text-decoration:underline;display:inline}pre{background-color:#f1f3f5}pre code{color:#003B4F}pre code span.al{color:#AD0000}pre code span.an{color:#5E5E5E}pre code span.at{color:#657422}pre code span.bn{color:#AD0000}pre code span.cf{color:#003B4F}pre code span.ch{color:#20794D}pre code span.cn{color:#8f5902}pre code span.co{color:#5E5E5E}pre code span.cv{color:#5E5E5E;font-style:italic}pre code span.do{color:#5E5E5E;font-style:italic}pre code span.dt{color:#AD0000}pre code span.dv{color:#AD0000}pre code span.er{color:#AD0000}pre code span.fl{color:#AD0000}pre code span.fu{color:#4758AB}pre code span.im{color:#00769E}pre code span.in{color:#5E5E5E}pre code span.kw{color:#003B4F}pre code span.op{color:#5E5E5E}pre code span.ot{color:#003B4F}pre code span.pp{color:#AD0000}pre code span.sc{color:#5E5E5E}pre code span.ss{color:#20794D}pre code span.st{color:#20794D}pre code span.va{color:#111111}pre code span.vs{color:#20794D}pre code span.wa{color:#5E5E5E;font-style:italic} + */:root,[data-bs-theme="light"]{--bs-blue: #2c3e50;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #e83e8c;--bs-red: #e74c3c;--bs-orange: #fd7e14;--bs-yellow: #f39c12;--bs-green: #18bc9c;--bs-teal: #20c997;--bs-cyan: #3498db;--bs-black: #000;--bs-white: #fff;--bs-gray: #95a5a6;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #ecf0f1;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #b4bcc2;--bs-gray-600: #95a5a6;--bs-gray-700: #7b8a8b;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #95a5a6;--bs-primary: #2c3e50;--bs-secondary: #95a5a6;--bs-success: #fff;--bs-info: #3498db;--bs-warning: #f39c12;--bs-danger: #F8C9C4;--bs-light: #ecf0f1;--bs-dark: #7b8a8b;--bs-default-rgb: 149,165,166;--bs-primary-rgb: 44,62,80;--bs-secondary-rgb: 149,165,166;--bs-success-rgb: 255,255,255;--bs-info-rgb: 52,152,219;--bs-warning-rgb: 243,156,18;--bs-danger-rgb: 248,201,196;--bs-light-rgb: 236,240,241;--bs-dark-rgb: 123,138,139;--bs-primary-text-emphasis: #121920;--bs-secondary-text-emphasis: #3c4242;--bs-success-text-emphasis: #666;--bs-info-text-emphasis: #153d58;--bs-warning-text-emphasis: #613e07;--bs-danger-text-emphasis: #63504e;--bs-light-text-emphasis: #7b8a8b;--bs-dark-text-emphasis: #7b8a8b;--bs-primary-bg-subtle: #d5d8dc;--bs-secondary-bg-subtle: #eaeded;--bs-success-bg-subtle: #fff;--bs-info-bg-subtle: #d6eaf8;--bs-warning-bg-subtle: #fdebd0;--bs-danger-bg-subtle: #fef4f3;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #abb2b9;--bs-secondary-border-subtle: #d5dbdb;--bs-success-border-subtle: #fff;--bs-info-border-subtle: #aed6f1;--bs-warning-border-subtle: #fad7a0;--bs-danger-border-subtle: #fce9e7;--bs-light-border-subtle: #ecf0f1;--bs-dark-border-subtle: #b4bcc2;--bs-white-rgb: 255,255,255;--bs-black-rgb: 0,0,0;--bs-font-sans-serif: Lato, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255,255,255,0.15), rgba(255,255,255,0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-color-rgb: 33,37,41;--bs-body-bg: #fff;--bs-body-bg-rgb: 255,255,255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0,0,0;--bs-secondary-color: rgba(33,37,41,0.75);--bs-secondary-color-rgb: 33,37,41;--bs-secondary-bg: #ecf0f1;--bs-secondary-bg-rgb: 236,240,241;--bs-tertiary-color: rgba(33,37,41,0.5);--bs-tertiary-color-rgb: 33,37,41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248,249,250;--bs-heading-color: inherit;--bs-link-color: #116074;--bs-link-color-rgb: 17,96,116;--bs-link-decoration: underline;--bs-link-hover-color: #116074;--bs-link-hover-color-rgb: 17,96,116;--bs-link-hover-decoration: underline dotted;--bs-code-color: RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));--bs-highlight-bg: #fdebd0;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0,0,0,0.175);--bs-border-radius: .375rem;--bs-border-radius-sm: .25rem;--bs-border-radius-lg: .5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0,0,0,0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0,0,0,0.075);--bs-focus-ring-width: .25rem;--bs-focus-ring-opacity: .25;--bs-focus-ring-color: rgba(44,62,80,0.25);--bs-form-valid-color: #fff;--bs-form-valid-border-color: #fff;--bs-form-invalid-color: #F8C9C4;--bs-form-invalid-border-color: #F8C9C4}[data-bs-theme="dark"]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222,226,230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33,37,41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255,255,255;--bs-secondary-color: rgba(222,226,230,0.75);--bs-secondary-color-rgb: 222,226,230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52,58,64;--bs-tertiary-color: rgba(222,226,230,0.5);--bs-tertiary-color-rgb: 222,226,230;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43,48,53;--bs-primary-text-emphasis: #808b96;--bs-secondary-text-emphasis: #bfc9ca;--bs-success-text-emphasis: #fff;--bs-info-text-emphasis: #85c1e9;--bs-warning-text-emphasis: #f8c471;--bs-danger-text-emphasis: #fbdfdc;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #090c10;--bs-secondary-bg-subtle: #1e2121;--bs-success-bg-subtle: #333;--bs-info-bg-subtle: #0a1e2c;--bs-warning-bg-subtle: #311f04;--bs-danger-bg-subtle: #322827;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #1a2530;--bs-secondary-border-subtle: #596364;--bs-success-border-subtle: #999;--bs-info-border-subtle: #1f5b83;--bs-warning-border-subtle: #925e0b;--bs-danger-border-subtle: #957976;--bs-light-border-subtle: #7b8a8b;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #808b96;--bs-link-hover-color: #99a2ab;--bs-link-color-rgb: 128,139,150;--bs-link-hover-color-rgb: 153,162,171;--bs-code-color: RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));--bs-border-color: #7b8a8b;--bs-border-color-translucent: rgba(255,255,255,0.15);--bs-form-valid-color: #74d7c4;--bs-form-valid-border-color: #74d7c4;--bs-form-invalid-color: #f1948a;--bs-form-invalid-border-color: #f1948a}*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.425rem + 2.1vw)}@media (min-width: 1200px){h1,.h1{font-size:3rem}}h2,.h2{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h2,.h2{font-size:2.5rem}}h3,.h3{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h3,.h3{font-size:2rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #ecf0f1}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb);text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em;color:RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));background-color:RGBA(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.04);padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6);border-radius:.375rem}pre code{background-color:transparent;font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);background-color:RGBA(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.04);border-radius:.375rem;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not([type="week"]):not([type="time"])::-webkit-calendar-picker-indicator{display:none !important}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#95a5a6}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;-webkit-flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media (min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media (min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media (min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media (min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media (min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.col{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.66667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333%}.offset-xxl-5{margin-left:41.66667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333%}.offset-xxl-8{margin-left:66.66667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333%}.offset-xxl-11{margin-left:91.66667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-body-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: rgba(0,0,0,0);--bs-table-striped-color: var(--bs-body-color);--bs-table-striped-bg: rgba(0,0,0,0.05);--bs-table-active-color: var(--bs-body-color);--bs-table-active-bg: rgba(0,0,0,0.1);--bs-table-hover-color: var(--bs-body-color);--bs-table-hover-bg: rgba(0,0,0,0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #fff;--bs-table-bg: #2c3e50;--bs-table-border-color: #415162;--bs-table-striped-bg: #374859;--bs-table-striped-color: #fff;--bs-table-active-bg: #415162;--bs-table-active-color: #fff;--bs-table-hover-bg: #3c4c5d;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #fff;--bs-table-bg: #95a5a6;--bs-table-border-color: #a0aeaf;--bs-table-striped-bg: #9aaaaa;--bs-table-striped-color: #fff;--bs-table-active-bg: #a0aeaf;--bs-table-active-color: #fff;--bs-table-hover-bg: #9dacad;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #fff;--bs-table-border-color: #e6e6e6;--bs-table-striped-bg: #f2f2f2;--bs-table-striped-color: #000;--bs-table-active-bg: #e6e6e6;--bs-table-active-color: #000;--bs-table-hover-bg: #ececec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #fff;--bs-table-bg: #3498db;--bs-table-border-color: #48a2df;--bs-table-striped-bg: #3e9ddd;--bs-table-striped-color: #fff;--bs-table-active-bg: #48a2df;--bs-table-active-color: #fff;--bs-table-hover-bg: #43a0de;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #fff;--bs-table-bg: #f39c12;--bs-table-border-color: #f4a62a;--bs-table-striped-bg: #f4a11e;--bs-table-striped-color: #fff;--bs-table-active-bg: #f4a62a;--bs-table-active-color: #000;--bs-table-hover-bg: #f4a324;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8c9c4;--bs-table-border-color: #dfb5b0;--bs-table-striped-bg: #ecbfba;--bs-table-striped-color: #000;--bs-table-active-bg: #dfb5b0;--bs-table-active-color: #000;--bs-table-hover-bg: #e5bab5;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #ecf0f1;--bs-table-border-color: #d4d8d9;--bs-table-striped-bg: #e0e4e5;--bs-table-striped-color: #000;--bs-table-active-bg: #d4d8d9;--bs-table-active-color: #000;--bs-table-hover-bg: #dadedf;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #7b8a8b;--bs-table-border-color: #889697;--bs-table-striped-bg: #829091;--bs-table-striped-color: #fff;--bs-table-active-bg: #889697;--bs-table-active-color: #fff;--bs-table-hover-bg: #859394;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type="file"]{overflow:hidden}.form-control[type="file"]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#969fa8;outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,0.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#969fa8;outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,0.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme="dark"] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: var(--bs-body-bg);width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);print-color-adjust:exact}.form-check-input[type="checkbox"],.shiny-input-container .checkbox input[type="checkbox"],.shiny-input-container .checkbox-inline input[type="checkbox"],.shiny-input-container .radio input[type="checkbox"],.shiny-input-container .radio-inline input[type="checkbox"]{border-radius:.25em}.form-check-input[type="radio"],.shiny-input-container .checkbox input[type="radio"],.shiny-input-container .checkbox-inline input[type="radio"],.shiny-input-container .radio input[type="radio"],.shiny-input-container .radio-inline input[type="radio"]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#969fa8;outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,0.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#2c3e50;border-color:#2c3e50}.form-check-input:checked[type="checkbox"],.shiny-input-container .checkbox input:checked[type="checkbox"],.shiny-input-container .checkbox-inline input:checked[type="checkbox"],.shiny-input-container .radio input:checked[type="checkbox"],.shiny-input-container .radio-inline input:checked[type="checkbox"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type="radio"],.shiny-input-container .checkbox input:checked[type="radio"],.shiny-input-container .checkbox-inline input:checked[type="radio"],.shiny-input-container .radio input:checked[type="radio"],.shiny-input-container .radio-inline input:checked[type="radio"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox-inline input[type="checkbox"]:indeterminate,.shiny-input-container .radio input[type="checkbox"]:indeterminate,.shiny-input-container .radio-inline input[type="checkbox"]:indeterminate{background-color:#2c3e50;border-color:#2c3e50;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280,0,0,0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23969fa8'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme="dark"] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255,255,255,0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(44,62,80,0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(44,62,80,0.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2c3e50;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#c0c5cb}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2c3e50;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#c0c5cb}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity 0.1s ease-in-out,transform 0.1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), .65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), .65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#95a5a6}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n + 3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n + 4),.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23F8C9C4'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23F8C9C4' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23F8C9C4'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23F8C9C4' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #fff;--bs-btn-bg: #95a5a6;--bs-btn-border-color: #95a5a6;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #7f8c8d;--bs-btn-hover-border-color: #778485;--bs-btn-focus-shadow-rgb: 165,179,179;--bs-btn-active-color: #fff;--bs-btn-active-bg: #778485;--bs-btn-active-border-color: #707c7d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #95a5a6;--bs-btn-disabled-border-color: #95a5a6}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #2c3e50;--bs-btn-border-color: #2c3e50;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #253544;--bs-btn-hover-border-color: #233240;--bs-btn-focus-shadow-rgb: 76,91,106;--bs-btn-active-color: #fff;--bs-btn-active-bg: #233240;--bs-btn-active-border-color: #212f3c;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #2c3e50;--bs-btn-disabled-border-color: #2c3e50}.btn-secondary,.btn-default:not(.btn-primary):not(.btn-info):not(.btn-success):not(.btn-warning):not(.btn-danger):not(.btn-dark):not(.btn-light):not([class*='btn-outline-']){--bs-btn-color: #fff;--bs-btn-bg: #95a5a6;--bs-btn-border-color: #95a5a6;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #7f8c8d;--bs-btn-hover-border-color: #778485;--bs-btn-focus-shadow-rgb: 165,179,179;--bs-btn-active-color: #fff;--bs-btn-active-bg: #778485;--bs-btn-active-border-color: #707c7d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #95a5a6;--bs-btn-disabled-border-color: #95a5a6}.btn-success{--bs-btn-color: #000;--bs-btn-bg: #fff;--bs-btn-border-color: #fff;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #fff;--bs-btn-hover-border-color: #fff;--bs-btn-focus-shadow-rgb: 217,217,217;--bs-btn-active-color: #000;--bs-btn-active-bg: #fff;--bs-btn-active-border-color: #fff;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #fff;--bs-btn-disabled-border-color: #fff}.btn-info{--bs-btn-color: #fff;--bs-btn-bg: #3498db;--bs-btn-border-color: #3498db;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2c81ba;--bs-btn-hover-border-color: #2a7aaf;--bs-btn-focus-shadow-rgb: 82,167,224;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2a7aaf;--bs-btn-active-border-color: #2772a4;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #3498db;--bs-btn-disabled-border-color: #3498db}.btn-warning{--bs-btn-color: #fff;--bs-btn-bg: #f39c12;--bs-btn-border-color: #f39c12;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #cf850f;--bs-btn-hover-border-color: #c27d0e;--bs-btn-focus-shadow-rgb: 245,171,54;--bs-btn-active-color: #fff;--bs-btn-active-bg: #c27d0e;--bs-btn-active-border-color: #b6750e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #f39c12;--bs-btn-disabled-border-color: #f39c12}.btn-danger{--bs-btn-color: #000;--bs-btn-bg: #F8C9C4;--bs-btn-border-color: #F8C9C4;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f9d1cd;--bs-btn-hover-border-color: #f9ceca;--bs-btn-focus-shadow-rgb: 211,171,167;--bs-btn-active-color: #000;--bs-btn-active-bg: #f9d4d0;--bs-btn-active-border-color: #f9ceca;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #F8C9C4;--bs-btn-disabled-border-color: #F8C9C4}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #ecf0f1;--bs-btn-border-color: #ecf0f1;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #c9cccd;--bs-btn-hover-border-color: #bdc0c1;--bs-btn-focus-shadow-rgb: 201,204,205;--bs-btn-active-color: #000;--bs-btn-active-bg: #bdc0c1;--bs-btn-active-border-color: #b1b4b5;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ecf0f1;--bs-btn-disabled-border-color: #ecf0f1}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #7b8a8b;--bs-btn-border-color: #7b8a8b;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #8f9c9c;--bs-btn-hover-border-color: #889697;--bs-btn-focus-shadow-rgb: 143,156,156;--bs-btn-active-color: #fff;--bs-btn-active-bg: #95a1a2;--bs-btn-active-border-color: #889697;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #7b8a8b;--bs-btn-disabled-border-color: #7b8a8b}.btn-outline-default{--bs-btn-color: #95a5a6;--bs-btn-border-color: #95a5a6;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #95a5a6;--bs-btn-hover-border-color: #95a5a6;--bs-btn-focus-shadow-rgb: 149,165,166;--bs-btn-active-color: #fff;--bs-btn-active-bg: #95a5a6;--bs-btn-active-border-color: #95a5a6;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #95a5a6;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #95a5a6;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #2c3e50;--bs-btn-border-color: #2c3e50;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2c3e50;--bs-btn-hover-border-color: #2c3e50;--bs-btn-focus-shadow-rgb: 44,62,80;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2c3e50;--bs-btn-active-border-color: #2c3e50;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #2c3e50;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #2c3e50;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #95a5a6;--bs-btn-border-color: #95a5a6;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #95a5a6;--bs-btn-hover-border-color: #95a5a6;--bs-btn-focus-shadow-rgb: 149,165,166;--bs-btn-active-color: #fff;--bs-btn-active-bg: #95a5a6;--bs-btn-active-border-color: #95a5a6;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #95a5a6;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #95a5a6;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #fff;--bs-btn-border-color: #fff;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #fff;--bs-btn-hover-border-color: #fff;--bs-btn-focus-shadow-rgb: 255,255,255;--bs-btn-active-color: #000;--bs-btn-active-bg: #fff;--bs-btn-active-border-color: #fff;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #fff;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #3498db;--bs-btn-border-color: #3498db;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #3498db;--bs-btn-hover-border-color: #3498db;--bs-btn-focus-shadow-rgb: 52,152,219;--bs-btn-active-color: #fff;--bs-btn-active-bg: #3498db;--bs-btn-active-border-color: #3498db;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #3498db;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #3498db;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #f39c12;--bs-btn-border-color: #f39c12;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #f39c12;--bs-btn-hover-border-color: #f39c12;--bs-btn-focus-shadow-rgb: 243,156,18;--bs-btn-active-color: #fff;--bs-btn-active-bg: #f39c12;--bs-btn-active-border-color: #f39c12;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #f39c12;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f39c12;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #F8C9C4;--bs-btn-border-color: #F8C9C4;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #F8C9C4;--bs-btn-hover-border-color: #F8C9C4;--bs-btn-focus-shadow-rgb: 248,201,196;--bs-btn-active-color: #000;--bs-btn-active-bg: #F8C9C4;--bs-btn-active-border-color: #F8C9C4;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #F8C9C4;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #F8C9C4;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #ecf0f1;--bs-btn-border-color: #ecf0f1;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ecf0f1;--bs-btn-hover-border-color: #ecf0f1;--bs-btn-focus-shadow-rgb: 236,240,241;--bs-btn-active-color: #000;--bs-btn-active-bg: #ecf0f1;--bs-btn-active-border-color: #ecf0f1;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #ecf0f1;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ecf0f1;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #7b8a8b;--bs-btn-border-color: #7b8a8b;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #7b8a8b;--bs-btn-hover-border-color: #7b8a8b;--bs-btn-focus-shadow-rgb: 123,138,139;--bs-btn-active-color: #fff;--bs-btn-active-bg: #7b8a8b;--bs-btn-active-border-color: #7b8a8b;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #7b8a8b;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #7b8a8b;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #95a5a6;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 53,120,137;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:hover,.btn-link:focus-visible{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: .5rem;--bs-dropdown-spacer: .125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: var(--bs-body-color);--bs-dropdown-bg: var(--bs-body-bg);--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: var(--bs-border-radius);--bs-dropdown-border-width: var(--bs-border-width);--bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: .5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-dropdown-link-color: #7b8a8b;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-link-hover-bg: #2c3e50;--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2c3e50;--bs-dropdown-link-disabled-color: var(--bs-tertiary-color);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: .25rem;--bs-dropdown-header-color: #95a5a6;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: .5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255,255,255,0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2c3e50;--bs-dropdown-link-disabled-color: #b4bcc2;--bs-dropdown-header-color: #b4bcc2}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n + 3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 2rem;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: #95a5a6;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background:none;border:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,0.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: var(--bs-border-width);--bs-nav-tabs-border-color: #ecf0f1;--bs-nav-tabs-border-radius: var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) #ecf0f1;--bs-nav-tabs-link-active-color: var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg: var(--bs-body-bg);--bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: var(--bs-border-radius);--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #2c3e50}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: .125rem;--bs-nav-underline-link-active-color: var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 1rem;--bs-navbar-color: #fff;--bs-navbar-hover-color: #fff;--bs-navbar-disabled-color: rgba(255,255,255,0.3);--bs-navbar-active-color: #fff;--bs-navbar-brand-padding-y: .3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-nav-link-padding-x: .5rem;--bs-navbar-toggler-padding-y: .25rem;--bs-navbar-toggler-padding-x: .75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(255,255,255,0.15);--bs-navbar-toggler-border-radius: var(--bs-border-radius);--bs-navbar-toggler-focus-width: .25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme="dark"]{--bs-navbar-color: #fff;--bs-navbar-hover-color: #2c3e50;--bs-navbar-disabled-color: rgba(0,0,0,0.25);--bs-navbar-active-color: #2c3e50;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(0,0,0,0.1);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280,0,0,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme="dark"] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280,0,0,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: var(--bs-body-color);--bs-accordion-bg: var(--bs-body-bg);--bs-accordion-transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: var(--bs-border-width);--bs-accordion-border-radius: var(--bs-border-radius);--bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: var(--bs-body-color);--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23121920'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #969fa8;--bs-accordion-btn-focus-box-shadow: 0 0 0 .25rem rgba(44,62,80,0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: var(--bs-primary-text-emphasis);--bs-accordion-active-bg: var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme="dark"] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23808b96'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23808b96'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: .75rem;--bs-breadcrumb-padding-y: .375rem;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: .25rem;--bs-breadcrumb-divider-color: var(--bs-secondary-color);--bs-breadcrumb-item-padding-x: .5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: .75rem;--bs-pagination-padding-y: .375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: #fff;--bs-pagination-bg: #fff;--bs-pagination-border-width: 0;--bs-pagination-border-color: rgba(0,0,0,0);--bs-pagination-border-radius: var(--bs-border-radius);--bs-pagination-hover-color: #fff;--bs-pagination-hover-bg: #d9d9d9;--bs-pagination-hover-border-color: rgba(0,0,0,0);--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: var(--bs-secondary-bg);--bs-pagination-focus-box-shadow: 0 0 0 .25rem rgba(44,62,80,0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #d9d9d9;--bs-pagination-active-border-color: rgba(0,0,0,0);--bs-pagination-disabled-color: #ecf0f1;--bs-pagination-disabled-bg: #fff;--bs-pagination-disabled-border-color: rgba(0,0,0,0);display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(0 * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: .75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: .5rem;--bs-pagination-padding-y: .25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: .65em;--bs-badge-padding-y: .35em;--bs-badge-font-size:.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius: var(--bs-border-radius);--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:.75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #2c3e50;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: var(--bs-body-color);--bs-list-group-bg: var(--bs-body-bg);--bs-list-group-border-color: var(--bs-border-color);--bs-list-group-border-width: var(--bs-border-width);--bs-list-group-border-radius: var(--bs-border-radius);--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: .5rem;--bs-list-group-action-color: var(--bs-secondary-color);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: #ecf0f1;--bs-list-group-action-active-color: var(--bs-body-color);--bs-list-group-action-active-bg: var(--bs-secondary-bg);--bs-list-group-disabled-color: var(--bs-secondary-color);--bs-list-group-disabled-bg: #ecf0f1;--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #2c3e50;--bs-list-group-active-border-color: #2c3e50;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #fff;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: .4;--bs-btn-close-hover-opacity: 1;--bs-btn-close-focus-shadow: 0 0 0 .25rem rgba(44,62,80,0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: .25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme="dark"] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: .75rem;--bs-toast-padding-y: .5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width: var(--bs-border-width);--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: var(--bs-border-radius);--bs-toast-box-shadow: var(--bs-box-shadow);--bs-toast-header-color: var(--bs-secondary-color);--bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color: var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: .5rem;--bs-modal-color: ;--bs-modal-bg: var(--bs-body-bg);--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: var(--bs-border-width);--bs-modal-border-radius: var(--bs-border-radius-lg);--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: var(--bs-border-width);--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: .5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: .5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media (min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media (min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: .5rem;--bs-tooltip-padding-y: .25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.875rem;--bs-tooltip-color: var(--bs-body-bg);--bs-tooltip-bg: var(--bs-emphasis-color);--bs-tooltip-border-radius: var(--bs-border-radius);--bs-tooltip-opacity: .9;--bs-tooltip-arrow-width: .8rem;--bs-tooltip-arrow-height: .4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:.875rem;--bs-popover-bg: var(--bs-body-bg);--bs-popover-border-width: var(--bs-border-width);--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: var(--bs-border-radius-lg);--bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: .5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: var(--bs-secondary-bg);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: var(--bs-body-color);--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: .5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme="dark"] .carousel .carousel-control-prev-icon,[data-bs-theme="dark"] .carousel .carousel-control-next-icon,[data-bs-theme="dark"].carousel .carousel-control-prev-icon,[data-bs-theme="dark"].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme="dark"] .carousel .carousel-indicators [data-bs-target],[data-bs-theme="dark"].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme="dark"] .carousel .carousel-caption,[data-bs-theme="dark"].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: var(--bs-body-color);--bs-offcanvas-bg: var(--bs-body-bg);--bs-offcanvas-border-width: var(--bs-border-width);--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-offcanvas-transition: transform .3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media (max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 575.98px) and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 767.98px) and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 991.98px) and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media (max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media (min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#fff !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#000 !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#fff !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#fff !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#000 !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(119,132,133, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(119,132,133, var(--bs-link-underline-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(35,50,64, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(35,50,64, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(119,132,133, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(119,132,133, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(255,255,255, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255,255,255, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(42,122,175, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42,122,175, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(194,125,14, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(194,125,14, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(249,212,208, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249,212,208, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(240,243,244, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(240,243,244, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(98,110,111, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(98,110,111, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:0.2s ease-in-out transform}@media (prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio: calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio: calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: .1}.border-opacity-25{--bs-border-opacity: .25}.border-opacity-50{--bs-border-opacity: .5}.border-opacity-75{--bs-border-opacity: .75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.425rem + 2.1vw) !important}.fs-2{font-size:calc(1.375rem + 1.5vw) !important}.fs-3{font-size:calc(1.325rem + .9vw) !important}.fs-4{font-size:calc(1.275rem + .3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,0.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,0.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: .25}.text-opacity-50{--bs-text-opacity: .5}.text-opacity-75{--bs-text-opacity: .75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: .1}.link-opacity-10-hover:hover{--bs-link-opacity: .1}.link-opacity-25{--bs-link-opacity: .25}.link-opacity-25-hover:hover{--bs-link-opacity: .25}.link-opacity-50{--bs-link-opacity: .5}.link-opacity-50-hover:hover{--bs-link-opacity: .5}.link-opacity-75{--bs-link-opacity: .75}.link-opacity-75-hover:hover{--bs-link-opacity: .75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: .1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: .1}.link-underline-opacity-25{--bs-link-underline-opacity: .25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: .25}.link-underline-opacity-50{--bs-link-underline-opacity: .5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: .5}.link-underline-opacity-75{--bs-link-underline-opacity: .75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: .75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: .1}.bg-opacity-25{--bs-bg-opacity: .25}.bg-opacity-50{--bs-bg-opacity: .5}.bg-opacity-75{--bs-bg-opacity: .75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media (min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#fff}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#000}.bg-info{color:#fff}.bg-warning{color:#fff}.bg-danger{color:#000}.bg-light{color:#000}.bg-dark{color:#fff}@media (min-width: 1200px){.fs-1{font-size:3rem !important}.fs-2{font-size:2.5rem !important}.fs-3{font-size:2rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}.table th[align=left]{text-align:left}.table th[align=right]{text-align:right}.table th[align=center]{text-align:center}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre,.bslib-gap-spacing>.shiny-html-output>.bslib-mb-spacing,.bslib-gap-spacing>.shiny-html-output>.form-group,.bslib-gap-spacing>.shiny-html-output>p,.bslib-gap-spacing>.shiny-html-output>pre,.bslib-gap-spacing>.shiny-panel-conditional>.bslib-mb-spacing,.bslib-gap-spacing>.shiny-panel-conditional>.form-group,.bslib-gap-spacing>.shiny-panel-conditional>p,.bslib-gap-spacing>.shiny-panel-conditional>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.bg-blue{--bslib-color-bg: #2c3e50;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2c3e50;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #6f42c1;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #6f42c1;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #e74c3c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #e74c3c;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #fd7e14;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #fd7e14;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #f39c12;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #f39c12;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #18bc9c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #18bc9c;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #3498db;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #3498db;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #95a5a6}.bg-default{--bslib-color-bg: #95a5a6;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2c3e50}.bg-primary{--bslib-color-bg: #2c3e50;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #95a5a6}.bg-secondary{--bslib-color-bg: #95a5a6;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #fff}.bg-success{--bslib-color-bg: #fff;--bslib-color-fg: #000}.text-info{--bslib-color-fg: #3498db}.bg-info{--bslib-color-bg: #3498db;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #f39c12}.bg-warning{--bslib-color-bg: #f39c12;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #F8C9C4}.bg-danger{--bslib-color-bg: #F8C9C4;--bslib-color-fg: #000}.text-light{--bslib-color-fg: #ecf0f1}.bg-light{--bslib-color-bg: #ecf0f1;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #7b8a8b}.bg-dark{--bslib-color-bg: #7b8a8b;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #432c91;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #432c91;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: #47407d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #47407d;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: #773e68;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #773e68;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: #774448;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #774448;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: #805838;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #805838;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #7c6437;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #7c6437;color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: #24706e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #24706e;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: #27766c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #27766c;color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #2f6288;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2c3e50 var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #2f6288;color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4f22b1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #4f22b1;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: #6a24de;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #6a24de;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: #9a22c9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #9a22c9;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: #9a28a9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #9a28a9;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: #a23c99;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a23c99;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #9e4898;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #9e4898;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: #4755d0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #4755d0;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #5246e9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #5246e9;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: #544094;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #544094;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #6b2ed5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #6b2ed5;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: #9f40ac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #9f40ac;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: #9f468c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #9f468c;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: #a85a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a85a7c;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a4667b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #a4667b;color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: #4c73b2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #4c73b2;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4f78b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4f78b0;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #5764cb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #5764cb;color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: #9d3e74;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #9d3e74;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #b42cb5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #b42cb5;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b840a1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b840a1;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: #e8446c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #e8446c;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: #f0585c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #f0585c;color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #ec645b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #ec645b;color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: #957092;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #957092;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: #987690;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #987690;color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #a062ac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #a062ac;color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: #9c4644;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #9c4644;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #b33485;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #b33485;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b74871;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b74871;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: #e7465c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #e7465c;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: #f0602c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #f0602c;color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #ec6c2b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #ec6c2b;color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: #947962;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #947962;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: #977e60;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #977e60;color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #9f6a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e74c3c var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #9f6a7c;color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a9642c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #a9642c;color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #c1526d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c1526d;color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: #c46659;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c46659;color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: #f56444;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #f56444;color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: #f46a24;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #f46a24;color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #f98a13;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #f98a13;color:#fff}.bg-gradient-orange-green{--bslib-color-fg: #fff;--bslib-color-bg: #a1974a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #a1974a;color:#fff}.bg-gradient-orange-teal{--bslib-color-fg: #fff;--bslib-color-bg: #a59c48;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a59c48;color:#fff}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #ad8864;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #ad8864;color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a3762b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #a3762b;color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #bb646c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #bb646c;color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: #be7858;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #be7858;color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: #ef7643;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #ef7643;color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: #ee7c23;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #ee7c23;color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #fff;--bslib-color-bg: #f79013;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #f79013;color:#fff}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: #9ba949;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #9ba949;color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: #9fae47;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #9fae47;color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #a79a62;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f39c12 var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #a79a62;color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: #208a7e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #208a7e;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #3777be;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3777be;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3b8bab;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3b8bab;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: #6b8a96;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #6b8a96;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: #6b8f76;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #6b8f76;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #fff;--bslib-color-bg: #74a366;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #74a366;color:#fff}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #70af65;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #70af65;color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #fff;--bslib-color-bg: #1bc19a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1bc19a;color:#fff}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #23aeb5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #18bc9c var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #23aeb5;color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: #25917b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #25917b;color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: #4093a8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4093a8;color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: #709193;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #709193;color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: #709773;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #709773;color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #fff;--bslib-color-bg: #78ab63;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #78ab63;color:#fff}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #74b762;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #74b762;color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #fff;--bslib-color-bg: #1dc499;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #1dc499;color:#fff}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #28b5b2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3498db var(--bg-gradient-end, 180%)) #28b5b2;color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: #3174a3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #2c3e50 var(--bg-gradient-end, 180%)) #3174a3;color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #4862e4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #4862e4;color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: #4c76d1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4c76d1;color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: #7c74bb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #7c74bb;color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: #7c7a9b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #e74c3c var(--bg-gradient-end, 180%)) #7c7a9b;color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: #848e8b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #848e8b;color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #809a8b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #f39c12 var(--bg-gradient-end, 180%)) #809a8b;color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: #29a6c2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #18bc9c var(--bg-gradient-end, 180%)) #29a6c2;color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: #2cacc0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3498db var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #2cacc0;color:#fff}.bg-primary .navbar-nav .show>.nav-link,.bg-primary .navbar-nav .nav-link.active,.bg-primary .navbar-nav .nav-link:hover,.bg-primary .navbar-nav .nav-link:focus{color:#fff !important}.nav-tabs .nav-link.active,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-link.active:hover,.nav-tabs .nav-item.open .nav-link,.nav-tabs .nav-item.open .nav-link:focus,.nav-tabs .nav-item.open .nav-link:hover{color:#2c3e50}.pagination a:hover{text-decoration:none}.badge.bg-light{color:#7b8a8b}.alert{color:#fff;border:none}.alert a,.alert .alert-link{color:#fff;text-decoration:underline}.alert-default{background-color:#95a5a6}.alert-primary{background-color:#2c3e50}.alert-secondary{background-color:#95a5a6}.alert-success{background-color:#fff}.alert-info{background-color:#3498db}.alert-warning{background-color:#f39c12}.alert-danger{background-color:#F8C9C4}.alert-light{background-color:#ecf0f1}.alert-dark{background-color:#7b8a8b}.alert-light,.alert-light a,.alert-light .alert-link{color:#212529}.modal .btn-close,.toast .btn-close,.offcanvas .btn-close{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e")}.row>main{max-width:50rem;overflow-wrap:break-word;hyphens:auto}@media (min-width: 1200px) and (max-width: 1399.98px){.container .row{justify-content:space-evenly}}@media (min-width: 1400px){body{font-size:18px}.col-md-3{margin-left:5rem}}.navbar{background:RGBA(var(--bs-body-color-rgb), 0.1);background:color-mix(in oklab, color-mix(in oklab, var(--bs-body-bg) 95%, var(--bs-primary)) 95%, var(--bs-body-color));line-height:initial}.nav-item .nav-link{border-radius:.375rem}.nav-item.active .nav-link{background:RGBA(var(--bs-body-color-rgb), 0.1)}.nav-item .nav-link:hover{background:RGBA(var(--bs-primary-rgb), 0.1)}.navbar>.container{align-items:baseline;-webkit-align-items:baseline}input[type="search"]{width:12rem}[aria-labelledby=dropdown-lightswitch] span.fa{opacity:0.5}@media (max-width: 991.98px){.algolia-autocomplete,input[type="search"],#navbar .dropdown-menu{width:100%}#navbar .dropdown-item{white-space:normal}input[type="search"]{margin:0.25rem 0}}.headroom{will-change:transform;transition:transform 400ms ease}.headroom--pinned{transform:translateY(0%)}.headroom--unpinned{transform:translateY(-100%)}.row>main,.row>aside{margin-top:56px}html,body{scroll-padding:56px}@media (min-width: 576px){#toc{position:sticky;top:56px;max-height:calc(100vh - 56px - 1rem);overflow-y:auto}}aside h2,aside .h2{margin-top:1.5rem;font-size:1.25rem}aside .roles{color:RGBA(var(--bs-body-color-rgb), 0.8)}aside .list-unstyled li{margin-bottom:0.5rem}aside .dev-status .list-unstyled li{margin-bottom:0.1rem}@media (max-width: 767.98px){.row>aside{margin:0.5rem;width:calc(100vw - 1rem);background-color:RGBA(var(--bs-body-color-rgb), 0.1);border-color:var(--bs-border-color);border-radius:.375rem}.row>aside h2:first-child,.row>aside .h2:first-child{margin-top:1rem}}body{position:relative}#toc>.nav{margin-bottom:1rem}#toc>.nav a.nav-link{color:inherit;padding:0.25rem 0.5rem;margin-bottom:2px;border-radius:.375rem}#toc>.nav a.nav-link:hover,#toc>.nav a.nav-link:focus{background-color:RGBA(var(--bs-primary-rgb), 0.1)}#toc>.nav a.nav-link.active{background-color:RGBA(var(--bs-body-color-rgb), 0.1)}#toc>.nav .nav a.nav-link{margin-left:0.5rem}#toc>.nav .nav{display:none !important}#toc>.nav a.active+.nav{display:flex !important}footer{margin:1rem 0 1rem 0;padding-top:1rem;font-size:.875em;border-top:1px solid #dee2e6;background:rgba(0,0,0,0);color:RGBA(var(--bs-body-color-rgb), 0.8);display:flex;column-gap:1rem}@media (max-width: 575.98px){footer{flex-direction:column}}@media (min-width: 576px){footer .pkgdown-footer-right{text-align:right}}footer div{flex:1 1 auto}html,body{height:100%}body>.container{min-height:100%;display:flex;flex-direction:column}body>.container .row{flex:1 0 auto}main img{max-width:100%;height:auto}main table{display:block;overflow:auto}body{font-display:fallback}.page-header{border-bottom:1px solid var(--bs-border-color);padding-bottom:0.5rem;margin-bottom:0.5rem;margin-top:1.5rem}dl{margin-bottom:0}dd{padding-left:1.5rem;margin-bottom:0.25rem}h2,.h2{font-size:1.75rem;margin-top:1.5rem}h3,.h3{font-size:1.25rem;margin-top:1rem;font-weight:bold}h4,.h4{font-size:1.1rem;font-weight:bold}h5,.h5{font-size:1rem;font-weight:bold}summary{margin-bottom:0.5rem}details{margin-bottom:1rem}.html-widget{margin-bottom:1rem}a.anchor{display:none;margin-left:2px;vertical-align:top;width:Min(0.9em, 20px);height:Min(0.9em, 20px);background-image:url(../../link.svg);background-repeat:no-repeat;background-size:Min(0.9em, 20px) Min(0.9em, 20px);background-position:center center}h2:hover .anchor,.h2:hover .anchor,h2:target .anchor,.h2:target .anchor,h3:hover .anchor,.h3:hover .anchor,h3:target .anchor,.h3:target .anchor,h4:hover .anchor,.h4:hover .anchor,h4:target .anchor,.h4:target .anchor,h5:hover .anchor,.h5:hover .anchor,h5:target .anchor,.h5:target .anchor,h6:hover .anchor,.h6:hover .anchor,h6:target .anchor,.h6:target .anchor,dt:hover .anchor,dt:target .anchor{display:inline-block}dt:target,dt:target+dd{border-left:0.25rem solid var(--bs-primary);margin-left:-0.75rem}dt:target{padding-left:0.5rem}dt:target+dd{padding-left:2rem}.orcid{color:#A6CE39;margin-right:4px}.fab{font-family:"Font Awesome 5 Brands" !important}img.logo{float:right;width:100px;margin-left:30px}.template-home img.logo{width:120px}@media (max-width: 575.98px){img.logo{width:80px}}@media (min-width: 576px){.page-header{min-height:88px}.template-home .page-header{min-height:104px}}.line-block{margin-bottom:1rem}.template-reference-index dt{font-weight:normal}.template-reference-index code{word-wrap:normal}.icon{float:right}.icon img{width:40px}a[href='#main']{position:absolute;margin:4px;padding:0.75rem;background-color:var(--bs-body-bg);text-decoration:none;z-index:2000}.lifecycle{color:var(--bs-secondary-color);background-color:var(--bs-secondary-bg);border-radius:5px}.lifecycle-stable{background-color:#108001;color:var(--bs-white)}.lifecycle-superseded{background-color:#074080;color:var(--bs-white)}.lifecycle-experimental,.lifecycle-deprecated{background-color:#fd8008;color:var(--bs-black)}a.footnote-ref{cursor:pointer}.popover{width:Min(100vw, 32rem);font-size:0.9rem;box-shadow:4px 4px 8px RGBA(var(--bs-body-color-rgb), 0.3)}.popover-body{padding:0.75rem}.popover-body p:last-child{margin-bottom:0}.tab-content{padding:1rem}.tabset-pills .tab-content{border:solid 1px #e5e5e5}.tab-content{display:flex}.tab-content>.tab-pane{display:block;visibility:hidden;margin-right:-100%;width:100%}.tab-content>.active{visibility:visible}div.csl-entry{clear:both}.hanging-indent div.csl-entry{margin-left:2em;text-indent:-2em}div.csl-left-margin{min-width:2em;float:left}div.csl-right-inline{margin-left:2em;padding-left:1em}div.csl-indent{margin-left:2em}pre,pre code{word-wrap:normal}[data-bs-theme="dark"] pre,[data-bs-theme="dark"] code{background-color:RGBA(var(--bs-body-color-rgb), 0.1)}[data-bs-theme="dark"] pre code{background:transparent}code{overflow-wrap:break-word}.hasCopyButton{position:relative}.btn-copy-ex{position:absolute;right:5px;top:5px;visibility:hidden}.hasCopyButton:hover button.btn-copy-ex{visibility:visible}pre{padding:0.75rem}pre div.gt-table{white-space:normal;margin-top:1rem}@media (max-width: 575.98px){div>div>pre{margin-left:calc(var(--bs-gutter-x) * -.5);margin-right:calc(var(--bs-gutter-x) * -.5);border-radius:0;padding-left:1rem;padding-right:1rem}.btn-copy-ex{right:calc(var(--bs-gutter-x) * -.5 + 5px)}}code a:any-link{color:inherit;text-decoration-color:RGBA(var(--bs-body-color-rgb), 0.6)}pre code{padding:0;background:transparent}pre code .error,pre code .warning{font-weight:bolder}pre .img img,pre .r-plt img{margin:5px 0;background-color:#fff}[data-bs-theme="dark"] pre img{opacity:0.66;transition:opacity 250ms ease-in-out}[data-bs-theme="dark"] pre img:hover,[data-bs-theme="dark"] pre img:focus,[data-bs-theme="dark"] pre img:active{opacity:1}@media print{code a:link:after,code a:visited:after{content:""}}a.sourceLine:hover{text-decoration:none}mark,.mark{background:linear-gradient(-100deg, RGBA(var(--bs-info-rgb), 0.2), RGBA(var(--bs-info-rgb), 0.7) 95%, RGBA(var(--bs-info-rgb), 0.1))}.algolia-autocomplete .aa-dropdown-menu{margin-top:0.5rem;padding:0.5rem 0.25rem;width:MAX(100%, 20rem);max-height:50vh;overflow-y:auto;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:.375rem}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;font-size:1rem;padding:0.5rem 0.25rem;line-height:1.3}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:hover{background-color:var(--bs-tertiary-bg);color:var(--bs-body-color)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-details{text-decoration:underline;display:inline}span.smallcaps{font-variant:small-caps}ul.task-list{list-style:none}ul.task-list li input[type="checkbox"]{width:0.8em;margin:0 0.8em 0.2em -1em;vertical-align:middle}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:0.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:0.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:0.5em}figure>figcaption.quarto-float-caption-top{margin-top:0.5em}:root{--mermaid-bg-color: transparent;--mermaid-edge-color: var(--bs-secondary);--mermaid-fg-color: var(--bs-body-color);--mermaid-fg-color--lighter: RGBA(var(--bs-body-color-rgb), 0.9);--mermaid-fg-color--lightest: RGBA(var(--bs-body-color-rgb), 0.8);--mermaid-font-family: var(--bs-body-font-family);--mermaid-label-bg-color: var(--bs-primary);--mermaid-label-fg-color: var(--bs-body-color);--mermaid-node-bg-color: RGBA(var(--bs-primary-rgb), 0.1);--mermaid-node-fg-color: var(--bs-primary)}pre{background-color:#f1f3f5}pre code{color:#003B4F}pre code span.al{color:#AD0000}pre code span.an{color:#5E5E5E}pre code span.at{color:#657422}pre code span.bn{color:#AD0000}pre code span.cf{color:#003B4F}pre code span.ch{color:#20794D}pre code span.cn{color:#8f5902}pre code span.co{color:#5E5E5E}pre code span.cv{color:#5E5E5E;font-style:italic}pre code span.do{color:#5E5E5E;font-style:italic}pre code span.dt{color:#AD0000}pre code span.dv{color:#AD0000}pre code span.er{color:#AD0000}pre code span.fl{color:#AD0000}pre code span.fu{color:#4758AB}pre code span.im{color:#00769E}pre code span.in{color:#5E5E5E}pre code span.kw{color:#003B4F}pre code span.op{color:#5E5E5E}pre code span.ot{color:#003B4F}pre code span.pp{color:#AD0000}pre code span.sc{color:#5E5E5E}pre code span.ss{color:#20794D}pre code span.st{color:#20794D}pre code span.va{color:#111111}pre code span.vs{color:#20794D}pre code span.wa{color:#5E5E5E;font-style:italic} diff --git a/dev/index.html b/dev/index.html index e9771754..9330e3c8 100644 --- a/dev/index.html +++ b/dev/index.html @@ -17,12 +17,19 @@ Skip to contents + +
@@ -187,6 +196,7 @@

Links

  • DBI project website
  • +

    License

      @@ -194,6 +204,7 @@

      License

    • LGPL (>= 2.1)
    +

    Community

    +

    Citation

    +

    Developers

      @@ -218,6 +231,7 @@

      Developers

    • R Consortium
      Funder
    +

    Dev status

      @@ -228,15 +242,25 @@

      Dev status

    • CII Best Practices
    +
    + +
    + + + + + diff --git a/dev/news/index.html b/dev/news/index.html index b8c6de11..63c9e154 100644 --- a/dev/news/index.html +++ b/dev/news/index.html @@ -1,12 +1,19 @@ Changelog • DBI Skip to contents + +
    +

    DBI 1.2.3.9001 (2024-06-02)

    • Merge branch ‘cran-1.2.3’.
    • @@ -475,12 +486,21 @@

      Version 0.1-2

    + +
    + + + + + diff --git a/dev/pkgdown.yml b/dev/pkgdown.yml index b79f50ee..20f5677b 100644 --- a/dev/pkgdown.yml +++ b/dev/pkgdown.yml @@ -1,6 +1,6 @@ pandoc: 3.1.11 pkgdown: 2.0.9.9000 -pkgdown_sha: 0ba8cb6c68c098a0d1d780052758da5ac9f83e3a +pkgdown_sha: 34ee692e4ce10c8abfb863cc782da771838558f7 articles: backend: backend.html DBI-1: DBI-1.html @@ -10,8 +10,7 @@ articles: DBI-proposal: DBI-proposal.html DBI: DBI.html spec: spec.html -last_built: 2024-06-02T20:40Z +last_built: 2024-06-26T13:49Z urls: reference: https://dbi.r-dbi.org/reference article: https://dbi.r-dbi.org/articles - diff --git a/dev/reference/ANSI.html b/dev/reference/ANSI.html index 59482aeb..78c914b8 100644 --- a/dev/reference/ANSI.html +++ b/dev/reference/ANSI.html @@ -1,12 +1,19 @@ A dummy DBI connector that simulates ANSI-SQL compliance — ANSI • DBI Skip to contents + +
    +

    A dummy DBI connector that simulates ANSI-SQL compliance

    +

    Usage

    ANSI()
    + +

    Examples

    ANSI()
    @@ -39,12 +53,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/DBI-package.html b/dev/reference/DBI-package.html index 9ea7322d..0a2518a2 100644 --- a/dev/reference/DBI-package.html +++ b/dev/reference/DBI-package.html @@ -7,12 +7,19 @@ All classes in this package are virtual and need to be extended by the various R/DBMS implementations (so-called DBI backends)."> Skip to contents + +
    +

    DBI defines an interface for communication between R and relational database management systems. All classes in this package are virtual and need to be extended by the various R/DBMS implementations (so-called DBI backends).

    + +

    Definition

    + + +

    A DBI backend is an R package which imports the DBI and methods @@ -48,6 +64,9 @@

    Definition

    DBI classes and methods

    + + +

    A backend defines three classes, which are subclasses of DBIDriver, @@ -62,6 +81,9 @@

    DBI classes and methods

    Construction of the DBIDriver object

    + + +

    The backend must support creation of an instance of its DBIDriver subclass with a constructor function. By default, its name is the package name without the leading ‘R’ @@ -86,6 +108,7 @@

    Author<
  • Hadley Wickham

  • Other contributors:

    • R Consortium [funder]

    +

    Examples

    RSQLite::SQLite()
    @@ -94,12 +117,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/DBIConnection-class.html b/dev/reference/DBIConnection-class.html index 2c478359..2d11cac9 100644 --- a/dev/reference/DBIConnection-class.html +++ b/dev/reference/DBIConnection-class.html @@ -5,12 +5,19 @@ access to dynamic queries, result sets, DBMS session management (transactions), etc."> Skip to contents + +
    +

    This virtual class encapsulates the connection to a DBMS, and it provides access to dynamic queries, result sets, DBMS session management (transactions), etc.

    + +

    Implementation note

    + +

    Individual drivers are free to implement single or multiple simultaneous connections.

    @@ -76,6 +91,7 @@

    See alsodbWriteTable(), dbWriteTableArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -84,21 +100,30 @@ 

    Examples#> Path: :memory: #> Extensions: TRUE dbDisconnect(con) -if (FALSE) { +if (FALSE) { # \dontrun{ con <- dbConnect(RPostgreSQL::PostgreSQL(), "username", "password") con dbDisconnect(con) -} +} # }

    + +
    + + + + + diff --git a/dev/reference/DBIConnector-class.html b/dev/reference/DBIConnector-class.html index ecac2a2f..e96e7a3c 100644 --- a/dev/reference/DBIConnector-class.html +++ b/dev/reference/DBIConnector-class.html @@ -11,12 +11,19 @@ with a call to dbConnect(), passing only that object without additional arguments."> Skip to contents + +
    +

    Wraps objects of the DBIDriver class to include connection options. The purpose of this class is to store both the driver @@ -42,6 +53,8 @@

    DBIConnector class

    with a call to dbConnect(), passing only that object without additional arguments.

    + +

    Details

    To prevent leakage of passwords and other credentials, @@ -64,6 +77,7 @@

    See alsodbGetConnectArgs(), dbIsReadOnly()

    +

    Examples

    # Create a connector:
    @@ -94,12 +108,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/DBIDriver-class.html b/dev/reference/DBIDriver-class.html index 881df60e..4b143e34 100644 --- a/dev/reference/DBIDriver-class.html +++ b/dev/reference/DBIDriver-class.html @@ -9,12 +9,19 @@ instance RPostgres, RMariaDB, etc. implement these operations in a DBMS-specific manner."> Skip to contents + +
    +

    Base class for all DBMS drivers (e.g., RSQLite, MySQL, PostgreSQL). The virtual class DBIDriver defines the operations for creating @@ -39,6 +50,8 @@

    DBIDriver class

    instance RPostgres, RMariaDB, etc. implement these operations in a DBMS-specific manner.

    + +

    See also

    Other DBI classes: @@ -57,13 +70,23 @@

    See alsodbIsValid(), dbListConnections()

    +
    + +
    + + + + + diff --git a/dev/reference/DBIObject-class.html b/dev/reference/DBIObject-class.html index 4d715b66..64f37d4a 100644 --- a/dev/reference/DBIObject-class.html +++ b/dev/reference/DBIObject-class.html @@ -3,12 +3,19 @@ is a virtual Class: No objects may be created from it."> Skip to contents + +
    +

    Base class for all other DBI classes (e.g., drivers, connections). This is a virtual Class: No objects may be created from it.

    + +

    Details

    More generally, the DBI defines a very small set of classes and generics that @@ -42,6 +55,8 @@

    Details

    Implementation notes

    + +

    An implementation MUST provide methods for the following generics:

    It MAY also provide methods for:

    @@ -59,6 +74,7 @@

    See alsoDBIResult-class, DBIResultArrow-class

    +

    Examples

    drv <- RSQLite::SQLite()
    @@ -78,12 +94,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/DBIResult-class.html b/dev/reference/DBIResult-class.html index f669d8de..2a2e67a5 100644 --- a/dev/reference/DBIResult-class.html +++ b/dev/reference/DBIResult-class.html @@ -9,12 +9,19 @@ affected by the operation, how many rows have been fetched (if statement is a query), whether there are more rows to fetch, etc."> Skip to contents + +
    +

    This virtual class describes the result and state of execution of a DBMS statement (any statement, query or non-query). The result set @@ -39,8 +50,12 @@

    DBIResult class

    affected by the operation, how many rows have been fetched (if statement is a query), whether there are more rows to fetch, etc.

    + +

    Implementation notes

    + +

    Individual drivers are free to allow single or multiple active results per connection.

    The default show method displays a summary of the query using other @@ -69,14 +84,24 @@

    See alsodbQuoteLiteral(), dbQuoteString()

    +
    + +
    + + + + + diff --git a/dev/reference/DBIResultArrow-class.html b/dev/reference/DBIResultArrow-class.html index cd95a817..0fde36f3 100644 --- a/dev/reference/DBIResultArrow-class.html +++ b/dev/reference/DBIResultArrow-class.html @@ -7,12 +7,19 @@ a DBMS statement (any statement, query or non-query) for returning data as an Arrow object."> Skip to contents + +
    +

    [Experimental]

    This virtual class describes the result and state of execution of a DBMS statement (any statement, query or non-query) for returning data as an Arrow object.

    + +

    Implementation notes

    + +

    Individual drivers are free to allow single or multiple active results per connection.

    The default show method displays a summary of the query using other @@ -59,14 +74,24 @@

    See alsodbHasCompleted(), dbIsValid()

    +
    + +
    + + + + + diff --git a/dev/reference/Id.html b/dev/reference/Id.html index 44b74d5f..1b6d5ce7 100644 --- a/dev/reference/Id.html +++ b/dev/reference/Id.html @@ -9,6 +9,8 @@ dbWriteTable() dbExistsTable() dbRemoveTable() + + Objects of this class are also returned from dbListObjects()."> Skip to contents + +
    +

    Objects of class Id have a single slot name, which is a character vector. The dbQuoteIdentifier() method converts Id objects to strings. @@ -56,17 +71,23 @@

    Refer to a table nested in a hierarchy (e.g. within a schema)

  • dbRemoveTable()

  • Objects of this class are also returned from dbListObjects().

    +

    Usage

    Id(...)
    +

    Arguments

    -
    ...
    + + +
    ...

    Components of the hierarchy, e.g. cluster, catalog, schema, or table, depending on the database backend. For more on these concepts, see https://stackoverflow.com/questions/7022755/

    +
    +

    Examples

    # Identifies a table in a specific schema:
    @@ -81,19 +102,28 @@ 

    Examples#> <SQL> "nycflights13"."flights" # Write a table in a specific schema: -if (FALSE) { +if (FALSE) { # \dontrun{ dbWriteTable(con, Id("myschema", "mytable"), data.frame(a = 1)) -} +} # }

    + +
    + + + + + diff --git a/dev/reference/SQL.html b/dev/reference/SQL.html index e2cbdadc..140de105 100644 --- a/dev/reference/SQL.html +++ b/dev/reference/SQL.html @@ -17,12 +17,19 @@ anymore, to prevent double escaping. The SQL class has associated the SQL() constructor function."> Skip to contents + +
    +

    This set of classes and generics make it possible to flexibly deal with SQL escaping needs. By default, any user supplied input to a query should be @@ -51,25 +62,37 @@

    SQL quoting

    anymore, to prevent double escaping. The SQL class has associated the SQL() constructor function.

    +

    Usage

    SQL(x, ..., names = NULL)
    +

    Arguments

    -
    x
    + + +
    x

    A character vector to label as being escaped SQL.

    + +
    ...

    Other arguments passed on to methods. Not otherwise used.

    + +
    names

    Names for the returned object, must have the same length as x.

    +

    Value

    -

    An object of class SQL.

    +

    An object of class SQL.

    Implementation notes

    + + +

    DBI provides default generics for SQL-92 compatible quoting. If the database uses a different convention, you will need to provide your own methods. Note that because of the way that S4 dispatch finds methods and because @@ -78,6 +101,7 @@

    Implementation notes

    Examples

    dbQuoteIdentifier(ANSI(), "SELECT")
    @@ -102,12 +126,21 @@ 

    Examples

    + +

    + + + + + diff --git a/dev/reference/dbAppendTable.html b/dev/reference/dbAppendTable.html index 6caa3212..fdb7c05c 100644 --- a/dev/reference/dbAppendTable.html +++ b/dev/reference/dbAppendTable.html @@ -4,6 +4,7 @@ The default implementation calls sqlAppendTableTemplate() and then dbExecute() with the param argument. Use dbAppendTableArrow() to append data from an Arrow stream. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. adbi::dbAppendTable("AdbiConnection", "ANY", "ANY") bigrquery::dbAppendTable("BigQueryConnection", "AsIs", "data.frame") @@ -17,11 +18,13 @@ RPostgres::dbAppendTable("PqConnection", "ANY", "ANY") RPresto::dbAppendTable("PrestoConnection", "ANY", "data.frame") RSQLite::dbAppendTable("SQLiteConnection", "ANY", "ANY") + '> Skip to contents + +
    +

    The dbAppendTable() method assumes that the table has been created beforehand, e.g. with dbCreateTable(). @@ -81,15 +96,21 @@

    Methods in other packages

    RSQLite::dbAppendTable("SQLiteConnection", "ANY", "ANY")

    +

    Usage

    dbAppendTable(conn, name, value, ..., row.names = NULL)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    name

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -98,16 +119,23 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    value

    A data.frame (or coercible to data.frame).

    + +
    ...

    Other parameters passed on to methods.

    + +
    row.names

    Must be NULL.

    +

    Value

    -

    dbAppendTable() returns a +

    dbAppendTable() returns a scalar numeric.

    @@ -124,6 +152,9 @@

    Details

    Failure modes

    + + +

    If the table does not exist, or the new data in values is not a data frame or has different column names, an error is raised; the remote table remains unchanged.

    @@ -137,6 +168,7 @@

    Failure modesFailure modes

    Specification

    + + +

    SQL keywords can be used freely in table names, column names, and data. Quotes, commas, spaces, and other special characters such as newlines and tabs, can also be used in the data, @@ -188,6 +223,7 @@

    SpecificationSpecificationSee alsodbWriteTable(), dbWriteTableArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -395,12 +433,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbAppendTableArrow.html b/dev/reference/dbAppendTableArrow.html index 078eccaf..bdbc20a8 100644 --- a/dev/reference/dbAppendTableArrow.html +++ b/dev/reference/dbAppendTableArrow.html @@ -5,24 +5,35 @@ The default implementation calls dbAppendTable() for each chunk of the stream. Use dbAppendTable() to append data from a data.frame. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. pool::dbAppendTableArrow("Pool") + '> Skip to contents + +
    +

    [Experimental]

    The dbAppendTableArrow() method assumes that the table has been created @@ -51,15 +66,21 @@

    Insert rows into a table from an Arrow stream

    Methods in other packages

    This documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages.

    +

    Usage

    dbAppendTableArrow(conn, name, value, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    name

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -68,19 +89,27 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    value

    An object coercible with nanoarrow::as_nanoarrow_array_stream().

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbAppendTableArrow() returns a +

    dbAppendTableArrow() returns a scalar numeric.

    Failure modes

    + + +

    If the table does not exist, or the new data in values is not a data frame or has different column names, an error is raised; the remote table remains unchanged.

    @@ -92,6 +121,9 @@

    Failure modes

    Specification

    + + +

    SQL keywords can be used freely in table names, column names, and data. Quotes, commas, spaces, and other special characters such as newlines and tabs, can also be used in the data, @@ -132,6 +164,7 @@

    SpecificationSee alsodbWriteTable(), dbWriteTableArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -191,12 +225,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbBind.html b/dev/reference/dbBind.html index b71f4551..40522143 100644 --- a/dev/reference/dbBind.html +++ b/dev/reference/dbBind.html @@ -9,9 +9,11 @@ The values are passed to dbBind() as lists or data frames, and to dbBindArrow() as a stream created by nanoarrow::as_nanoarrow_array_stream(). + dbBindArrow() is experimental, as are the other *Arrow functions. dbSendQuery() is compatible with dbBindArrow(), and dbSendQueryArrow() is compatible with dbBind(). + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. adbi::dbBind("AdbiResult") adbi::dbBind("AdbiResultArrow") @@ -22,6 +24,7 @@ RPostgres::dbBind("PqResult") RSQLite::dbBind("SQLiteResult") sparklyr::dbBind("DBISparkResult") + '> Skip to contents + +
    +

    For parametrized or prepared statements, the dbSendQuery(), dbSendQueryArrow(), and dbSendStatement() functions @@ -97,27 +114,36 @@

    Methods in other packages

    sparklyr::dbBind("DBISparkResult")

    +

    Usage

    dbBind(res, params, ...)
     
     dbBindArrow(res, params, ...)
    +

    Arguments

    -
    res
    + + +
    res

    An object inheriting from DBIResult.

    + +
    params

    For dbBind(), a list of values, named or unnamed, or a data frame, with one element/column per query parameter. For dbBindArrow(), values as a nanoarrow stream, with one column per query parameter.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbBind() returns the result set, +

    dbBind() returns the result set, invisibly, for queries issued by dbSendQuery() or dbSendQueryArrow() and also for data manipulation statements issued by @@ -145,6 +171,9 @@

    Details

    The data retrieval flow

    + + +

    This section gives a complete overview over the flow for the execution of queries that return tabular data as data frames.

    Most of this flow, except repeated calling of dbBind() or dbBindArrow(), @@ -177,6 +206,9 @@

    The data retrieval flow

    The data retrieval flow for Arrow streams

    + + +

    This section gives a complete overview over the flow for the execution of queries that return tabular data as an Arrow stream.

    Most of this flow, except repeated calling of dbBindArrow() or dbBind(), @@ -199,6 +231,9 @@

    The data retrieval flow for A

    The command execution flow

    + + +

    This section gives a complete overview over the flow for the execution of SQL statements that have side effects such as stored procedures, inserting or deleting data, @@ -224,8 +259,12 @@

    The command execution flow

    Failure modes

    + + +

    Calling dbBind() for a query without parameters raises an error.

    +

    Binding too many or not enough values, or parameters with wrong names @@ -245,6 +284,9 @@

    Failure modes

    Specification

    + + +

    DBI clients execute parametrized statements as follows:

    1. Call dbSendQuery(), dbSendQueryArrow() or dbSendStatement() with a query or statement that contains placeholders, store the returned DBIResult object in a variable. @@ -347,6 +389,7 @@

      See alsodbGetRowsAffected(), dbSendStatement()

    +

    Examples

    # Data frame flow:
    @@ -428,12 +471,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbCallProc.html b/dev/reference/dbCallProc.html index 7e998659..cfe03e69 100644 --- a/dev/reference/dbCallProc.html +++ b/dev/reference/dbCallProc.html @@ -1,12 +1,19 @@ Call an SQL stored procedure — dbCallProc • DBI Skip to contents + +
    +

    Deprecated since 2014

    +

    Usage

    dbCallProc(conn, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    ...

    Other parameters passed on to methods.

    +

    Details

    @@ -45,14 +63,24 @@

    Details
  • dbGetQuery if a result set is returned

  • dbExecute for data manipulation and other cases where no result set is returned

  • +
    + +
    + + + + + diff --git a/dev/reference/dbCanConnect.html b/dev/reference/dbCanConnect.html index 7301a889..c9c0fedd 100644 --- a/dev/reference/dbCanConnect.html +++ b/dev/reference/dbCanConnect.html @@ -3,22 +3,33 @@ a connection object. The default implementation opens a connection and disconnects on success, but individual backends might implement a lighter-weight check. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. AzureKusto::dbCanConnect("AzureKustoDriver") + '> Skip to contents + +
    +

    Like dbConnect(), but only checks validity without actually returning a connection object. The default implementation opens a connection @@ -45,24 +60,31 @@

    Check if a connection to a DBMS can be established

    Methods in other packages

    This documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages.

    +

    Usage

    dbCanConnect(drv, ...)
    +

    Arguments

    -
    drv
    + + +
    drv

    an object that inherits from DBIDriver, or an existing DBIConnection object (in order to clone an existing connection).

    + +
    ...

    authentication arguments needed by the DBMS instance; these typically include user, password, host, port, dbname, etc. For details see the appropriate DBIDriver.

    +

    Value

    -

    A scalar logical. If FALSE, the "reason" attribute indicates +

    A scalar logical. If FALSE, the "reason" attribute indicates a reason for failure.

    @@ -77,6 +99,7 @@

    See alsodbIsValid(), dbListConnections()

    +

    Examples

    # SQLite only needs a path to the database. (Here, ":memory:" is a special
    @@ -88,12 +111,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbClearResult.html b/dev/reference/dbClearResult.html index 2a00e4fe..8667965f 100644 --- a/dev/reference/dbClearResult.html +++ b/dev/reference/dbClearResult.html @@ -2,6 +2,7 @@ Clear a result set — dbClearResult • DBI Skip to contents + +
    +

    Frees all resources (local and remote) associated with a result set. This step is mandatory for all objects obtained by calling @@ -96,26 +111,36 @@

    Methods in other packages

    sparklyr::dbClearResult("DBISparkResult")

    +

    Usage

    dbClearResult(res, ...)
    +

    Arguments

    -
    res
    + + +
    res

    An object inheriting from DBIResult.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbClearResult() returns TRUE, invisibly, for result sets obtained from +

    dbClearResult() returns TRUE, invisibly, for result sets obtained from dbSendQuery(), dbSendStatement(), or dbSendQueryArrow(),

    The data retrieval flow

    + + +

    This section gives a complete overview over the flow for the execution of queries that return tabular data as data frames.

    Most of this flow, except repeated calling of dbBind() or dbBindArrow(), @@ -148,6 +173,9 @@

    The data retrieval flow

    The command execution flow

    + + +

    This section gives a complete overview over the flow for the execution of SQL statements that have side effects such as stored procedures, inserting or deleting data, @@ -173,6 +201,9 @@

    The command execution flow

    Failure modes

    + + +

    An attempt to close an already closed result set issues a warning for dbSendQuery(), dbSendStatement(), @@ -180,6 +211,9 @@

    Failure modes

    Specification

    + + +

    dbClearResult() frees all resources associated with retrieving the result of a query or update operation. The DBI backend can expect a call to dbClearResult() for each @@ -224,6 +258,7 @@

    See alsodbGetRowsAffected(), dbSendStatement()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -239,12 +274,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbColumnInfo.html b/dev/reference/dbColumnInfo.html index 5a65f571..eacd545e 100644 --- a/dev/reference/dbColumnInfo.html +++ b/dev/reference/dbColumnInfo.html @@ -3,6 +3,7 @@ should have as many rows as there are output fields in the result set, and each column in the data.frame describes an aspect of the result set field (field name, type, etc.) + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. adbi::dbColumnInfo("AdbiResult") adbi::dbColumnInfo("AdbiResultArrow") @@ -22,10 +23,12 @@ RPostgreSQL::dbColumnInfo("PostgreSQLResult") RSQLite::dbColumnInfo("SQLiteResult") sparklyr::dbColumnInfo("DBISparkResult") + '> Skip to contents + +
    +

    Produces a data.frame that describes the output of a query. The data.frame should have as many rows as there are output fields in the result set, and @@ -96,31 +111,41 @@

    Methods in other packages

    sparklyr::dbColumnInfo("DBISparkResult")

    +

    Usage

    dbColumnInfo(res, ...)
    +

    Arguments

    -
    res
    + + +
    res

    An object inheriting from DBIResult.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbColumnInfo()

    -

    returns a data frame +

    dbColumnInfo() +returns a data frame with at least two columns "name" and "type" (in that order) (and optional columns that start with a dot). The "name" and "type" columns contain the names and types of the R columns of the data frame that is returned from dbFetch(). The "type" column is of type character and only for information. -Do not compute on the "type" column, instead use dbFetch(res, n = 0)

    -

    to create a zero-row data frame initialized with the correct data types.

    +Do not compute on the "type" column, instead use dbFetch(res, n = 0) +to create a zero-row data frame initialized with the correct data types.

    The data retrieval flow

    + + +

    This section gives a complete overview over the flow for the execution of queries that return tabular data as data frames.

    Most of this flow, except repeated calling of dbBind() or dbBindArrow(), @@ -153,10 +178,17 @@

    The data retrieval flow

    Failure modes

    + + +

    An attempt to query columns for a closed result set raises an error.

    Specification

    + + + +

    A column named row_names is treated like any other column.

    The column names are always consistent with the data returned by dbFetch().

    @@ -181,6 +213,7 @@

    See alsodbQuoteLiteral(), dbQuoteString()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -200,12 +233,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbConnect.html b/dev/reference/dbConnect.html index 58026aff..7958bfee 100644 --- a/dev/reference/dbConnect.html +++ b/dev/reference/dbConnect.html @@ -6,6 +6,7 @@ The authentication mechanism is left unspecified, so check the documentation of individual drivers for details. Use dbCanConnect() to check if a connection can be established. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. adbi::dbConnect("AdbiDriver") AzureKusto::dbConnect("AzureKustoDriver") @@ -16,6 +17,7 @@ lazysf::dbConnect("SFSQLDriver") odbc::dbConnect("DatabricksOdbcDriver") odbc::dbConnect("OdbcDriver") +odbc::dbConnect("Snowflake") RAthena::dbConnect("AthenaDriver") RH2::dbConnect("H2Driver") RJDBC::dbConnect("JDBCDriver") @@ -31,6 +33,7 @@ RSQLite::dbConnect("SQLiteConnection") RSQLite::dbConnect("SQLiteDriver") sergeant::dbConnect("DrillDriver") + '> Skip to contents + +
    +

    Connect to a DBMS going through the appropriate authentication procedure. Some implementations may allow you to have multiple connections open, so you @@ -106,6 +123,7 @@

    Methods in other packages

    lazysf::dbConnect("SFSQLDriver")

  • odbc::dbConnect("DatabricksOdbcDriver")

  • odbc::dbConnect("OdbcDriver")

  • +
  • odbc::dbConnect("Snowflake")

  • RAthena::dbConnect("AthenaDriver")

  • RH2::dbConnect("H2Driver")

  • RJDBC::dbConnect("JDBCDriver")

  • @@ -123,30 +141,40 @@

    Methods in other packages

    sergeant::dbConnect("DrillDriver")

    +

    Usage

    dbConnect(drv, ...)
    +

    Arguments

    -
    drv
    + + +
    drv

    an object that inherits from DBIDriver, or an existing DBIConnection object (in order to clone an existing connection).

    + +
    ...

    authentication arguments needed by the DBMS instance; these typically include user, password, host, port, dbname, etc. For details see the appropriate DBIDriver.

    +

    Value

    -

    dbConnect() returns an S4 object that inherits from DBIConnection. +

    dbConnect() returns an S4 object that inherits from DBIConnection. This object is used to communicate with the database engine.

    A format() method is defined for the connection object. It returns a string that consists of a single line of text.

    Specification

    + + +

    DBI recommends using the following argument names for authentication parameters, with NULL default:

    +

    Examples

    # SQLite only needs a path to the database. (Here, ":memory:" is a special
    @@ -208,12 +237,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbCreateTable.html b/dev/reference/dbCreateTable.html index 5617dc7b..0d235ea2 100644 --- a/dev/reference/dbCreateTable.html +++ b/dev/reference/dbCreateTable.html @@ -2,29 +2,40 @@ Create a table in the database — dbCreateTable • DBI Skip to contents + +
    +

    The default dbCreateTable() method calls sqlCreateTable() and dbExecute(). @@ -54,15 +69,21 @@

    Methods in other packages

    RPresto::dbCreateTable("PrestoConnection")

    +

    Usage

    dbCreateTable(conn, name, fields, ..., row.names = NULL, temporary = FALSE)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    name

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -71,6 +92,8 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    fields

    Either a character vector or a data frame.

    A named character vector: Names are column names, values are types. @@ -78,16 +101,23 @@

    ArgumentsdbDataType().

    + +
    ...

    Other parameters passed on to methods.

    + +
    row.names

    Must be NULL.

    + +
    temporary

    If TRUE, will generate a temporary table.

    +

    Value

    -

    dbCreateTable() returns TRUE, invisibly.

    +

    dbCreateTable() returns TRUE, invisibly.

    Details

    @@ -102,6 +132,9 @@

    Details

    Failure modes

    + + +

    If the table exists, an error is raised; the remote table remains unchanged.

    An error is raised when calling this method for a closed or invalid connection. @@ -118,6 +151,9 @@

    Failure modes

    Additional arguments

    + + +

    The following arguments are not part of the dbCreateTable() generic (to improve compatibility across backends) but are part of the DBI specification:

    • temporary (default: FALSE)

    • @@ -126,6 +162,9 @@

      Additional arguments

      Specification

      + + +

      The name argument is processed as follows, to support databases that allow non-syntactic names for their objects:

      • If an unquoted table name as string: dbCreateTable() will do the quoting, perhaps by calling dbQuoteIdentifier(conn, x = name)

      • @@ -181,6 +220,7 @@

        See alsodbWriteTable(), dbWriteTableArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -193,12 +233,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbCreateTableArrow.html b/dev/reference/dbCreateTableArrow.html index 7c6ea51a..a8c8c952 100644 --- a/dev/reference/dbCreateTableArrow.html +++ b/dev/reference/dbCreateTableArrow.html @@ -7,8 +7,10 @@ also implement this generic. Use dbCreateTable() to create a table from the column types as defined in a data frame. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. pool::dbCreateTableArrow("Pool") + '> Skip to contents + +
    +

    [Experimental]

    The default dbCreateTableArrow() method determines the R data types @@ -57,15 +72,21 @@

    Create a table in the database based on an Arrow object

    Methods in other packages

    This documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages.

    +

    Usage

    dbCreateTableArrow(conn, name, value, ..., temporary = FALSE)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    name

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -74,20 +95,30 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    value

    An object for which a schema can be determined via nanoarrow::infer_nanoarrow_schema().

    + +
    ...

    Other parameters passed on to methods.

    + +
    temporary

    If TRUE, will generate a temporary table.

    +

    Value

    -

    dbCreateTableArrow() returns TRUE, invisibly.

    +

    dbCreateTableArrow() returns TRUE, invisibly.

    Failure modes

    + + +

    If the table exists, an error is raised; the remote table remains unchanged.

    An error is raised when calling this method for a closed or invalid connection. @@ -104,6 +135,9 @@

    Failure modes

    Additional arguments

    + + +

    The following arguments are not part of the dbCreateTableArrow() generic (to improve compatibility across backends) but are part of the DBI specification:

    • temporary (default: FALSE)

    • @@ -112,6 +146,9 @@

      Additional arguments

      Specification

      + + +

      The name argument is processed as follows, to support databases that allow non-syntactic names for their objects:

      • If an unquoted table name as string: dbCreateTableArrow() will do the quoting, perhaps by calling dbQuoteIdentifier(conn, x = name)

      • @@ -163,6 +200,7 @@

        See alsodbWriteTable(), dbWriteTableArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -176,12 +214,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbDataType.html b/dev/reference/dbDataType.html index 5975ceae..0d8c78a0 100644 --- a/dev/reference/dbDataType.html +++ b/dev/reference/dbDataType.html @@ -6,6 +6,7 @@ point for driver implementations. DBI also provides an implementation for data.frame which will return a character vector giving the type for each column in the dataframe. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. adbi::dbDataType("AdbiConnection", "ANY") adbi::dbDataType("AdbiDriver", "ANY") @@ -40,6 +41,7 @@ sf::dbDataType("DBIObject", "sf") sf::dbDataType("PostgreSQLConnection", "sf") sparklyr::dbDataType("spark_connection", "ANY") + '> Skip to contents + +
    +

    Returns an SQL string that describes the SQL data type to be used for an object. @@ -150,23 +165,32 @@

    Methods in other packages

    sparklyr::dbDataType("spark_connection", "ANY")

    +

    Usage

    dbDataType(dbObj, obj, ...)
    +

    Arguments

    -
    dbObj
    + + +
    dbObj

    A object inheriting from DBIDriver or DBIConnection

    + +
    obj

    An R object whose SQL type we want to determine.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbDataType() returns the SQL type that corresponds to the obj argument +

    dbDataType() returns the SQL type that corresponds to the obj argument as a non-empty character string. For data frames, a character vector with one element per column @@ -184,11 +208,17 @@

    Details

    Failure modes

    + + +

    An error is raised for invalid values for the obj argument such as a NULL value.

    Specification

    + + +

    The backend can override the dbDataType() generic for its driver class.

    This generic expects an arbitrary object as second argument. @@ -211,6 +241,9 @@

    Specificationfactor and ordered is the same as for character. The behavior for other object types is not specified.

    + + +

    All data types returned by dbDataType() are usable in an SQL statement of the form "CREATE TABLE test (a ...)".

    @@ -261,6 +294,7 @@

    See alsodbGetConnectArgs(), dbIsReadOnly()

    +

    Examples

    dbDataType(ANSI(), 1:5)
    @@ -316,12 +350,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbDisconnect.html b/dev/reference/dbDisconnect.html index d39e277e..9b747147 100644 --- a/dev/reference/dbDisconnect.html +++ b/dev/reference/dbDisconnect.html @@ -1,6 +1,7 @@ Disconnect (close) a connection — dbDisconnect • DBI Skip to contents + +
    +

    This closes the connection, discards all pending work, and frees resources (e.g., memory, sockets).

    @@ -96,24 +111,34 @@

    Methods in other packages

    sparklyr::dbDisconnect("spark_connection")

    +

    Usage

    dbDisconnect(conn, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbDisconnect() returns TRUE, invisibly.

    +

    dbDisconnect() returns TRUE, invisibly.

    Failure modes

    + + +

    A warning is issued on garbage collection when a connection has been released without calling dbDisconnect(), but this cannot be tested automatically. @@ -153,6 +178,7 @@

    See alsodbWriteTable(), dbWriteTableArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -161,12 +187,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbDriver.html b/dev/reference/dbDriver.html index 091a2383..bc257057 100644 --- a/dev/reference/dbDriver.html +++ b/dev/reference/dbDriver.html @@ -17,12 +17,19 @@ to, you should call the function directly. dbUnloadDriver() is not implemented for modern backends."> Skip to contents + +
    +

    These methods are deprecated, please consult the documentation of the individual backends for the construction of driver instances.

    @@ -51,25 +62,34 @@

    Load and unload database drivers

    to, you should call the function directly.

    dbUnloadDriver() is not implemented for modern backends.

    +

    Usage

    dbDriver(drvName, ...)
     
     dbUnloadDriver(drv, ...)
    +

    Arguments

    -
    drvName
    + + +
    drvName

    character name of the driver to instantiate.

    + +
    ...

    any other arguments are passed to the driver drvName.

    + +
    drv

    an object that inherits from DBIDriver as created by dbDriver.

    +

    Value

    -

    In the case of dbDriver, an driver object whose class extends +

    In the case of dbDriver, an driver object whose class extends DBIDriver. This object may be used to create connections to the actual DBMS engine.

    In the case of dbUnloadDriver, a logical indicating whether the @@ -103,6 +123,7 @@

    See alsodbIsValid(), dbListConnections()

    +

    Examples

    # Create a RSQLite driver with a string
    @@ -117,12 +138,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbExecute.html b/dev/reference/dbExecute.html index 34debced..233247a8 100644 --- a/dev/reference/dbExecute.html +++ b/dev/reference/dbExecute.html @@ -6,6 +6,7 @@ the result is always freed by dbClearResult(). For passing query parameters, see dbBind(), in particular the "The command execution flow" section. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. AzureKusto::dbExecute("AzureKustoConnection", "character") bigrquery::dbExecute("BigQueryConnection", "character") @@ -15,6 +16,7 @@ pool::dbExecute("Pool", "ANY") RAthena::dbExecute("AthenaConnection", "character") sparklyr::dbExecute("spark_connection", "ANY") + '> Skip to contents + +
    +

    Executes a statement and returns the number of rows affected. dbExecute() comes with a default implementation @@ -75,23 +90,32 @@

    Methods in other packages

    sparklyr::dbExecute("spark_connection", "ANY")

    +

    Usage

    dbExecute(conn, statement, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    statement

    a character string containing SQL.

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbExecute() always returns a +

    dbExecute() always returns a scalar numeric that specifies the number of rows affected @@ -107,11 +131,16 @@

    Details

    Implementation notes

    + +

    Subclasses should override this method only if they provide some sort of performance optimization.

    Failure modes

    + + +

    An error is raised when issuing a statement over a closed or invalid connection, if the syntax of the statement is invalid, @@ -119,6 +148,9 @@

    Failure modes

    Additional arguments

    + + +

    The following arguments are not part of the dbExecute() generic (to improve compatibility across backends) but are part of the DBI specification:

    • params (default: NULL)

    • @@ -128,10 +160,18 @@

      Additional arguments

      Specification

      + + + +

      The param argument allows passing query parameters, see dbBind() for details.

    Specification for the immediate argument

    + + + +

    The immediate argument supports distinguishing between "direct" and "prepared" APIs offered by many database drivers. Passing immediate = TRUE leads to immediate execution of the @@ -195,6 +235,7 @@

    See alsodbGetRowsAffected(), dbSendStatement()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -244,12 +285,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbExistsTable.html b/dev/reference/dbExistsTable.html index 71d35840..576c8e2c 100644 --- a/dev/reference/dbExistsTable.html +++ b/dev/reference/dbExistsTable.html @@ -1,5 +1,6 @@ Does a table exist? — dbExistsTable • DBI Skip to contents + +
    +

    Returns if a table given by name exists in the database.

    @@ -123,15 +138,21 @@

    Methods in other packages

    sparklyr::dbExistsTable("spark_connection", "character")

    +

    Usage

    dbExistsTable(conn, name, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    name

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -140,17 +161,23 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbExistsTable() returns a logical scalar, TRUE if the table or view +

    dbExistsTable() returns a logical scalar, TRUE if the table or view specified by the name argument exists, FALSE otherwise.

    This includes temporary tables if supported by the database.

    Failure modes

    + + +

    An error is raised when calling this method for a closed or invalid connection. An error is also raised @@ -159,6 +186,9 @@

    Failure modes

    Specification

    + + +

    The name argument is processed as follows, to support databases that allow non-syntactic names for their objects:

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -213,12 +244,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbFetch.html b/dev/reference/dbFetch.html index 142ceedb..960ea2bf 100644 --- a/dev/reference/dbFetch.html +++ b/dev/reference/dbFetch.html @@ -1,6 +1,7 @@ Fetch records from a previously executed query — dbFetch • DBI Skip to contents + +
    +

    Fetch the next n elements (rows) from the result set and return them as a data.frame.

    @@ -93,28 +108,37 @@

    Methods in other packages

    sparklyr::dbFetch("DBISparkResult", "ANY")

    +

    Usage

    dbFetch(res, n = -1, ...)
     
     fetch(res, n = -1, ...)
    +

    Arguments

    -
    res
    + + +
    res

    An object inheriting from DBIResult, created by dbSendQuery().

    + +
    n

    maximum number of records to retrieve per fetch. Use n = -1 or n = Inf to retrieve all pending records. Some implementations may recognize other special values.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbFetch() always returns a data.frame with +

    dbFetch() always returns a data.frame with as many rows as records were fetched and as many columns as fields in the result set, even if the result is a single value @@ -132,6 +156,9 @@

    Details

    The data retrieval flow

    + + +

    This section gives a complete overview over the flow for the execution of queries that return tabular data as data frames.

    Most of this flow, except repeated calling of dbBind() or dbBindArrow(), @@ -164,6 +191,9 @@

    The data retrieval flow

    Failure modes

    + + +

    An attempt to fetch from a closed result set raises an error. If the n argument is not an atomic whole number greater or equal to -1 or Inf, an error is raised, @@ -174,6 +204,9 @@

    Failure modes

    Specification

    + + +

    Fetching multi-row queries with one or more columns by default returns the entire result. Multi-row queries can also be fetched progressively @@ -191,6 +224,9 @@

    Specificationinteger (or coercible to an integer) for integer values between -2^31 and 2^31 - 1, with NA for SQL NULL values

  • numeric for numbers with a fractional component, @@ -255,6 +291,7 @@

    See alsodbSendQuery(), dbSendQueryArrow()

  • +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -295,12 +332,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbFetchArrow.html b/dev/reference/dbFetchArrow.html index ca70152e..9d7dffd2 100644 --- a/dev/reference/dbFetchArrow.html +++ b/dev/reference/dbFetchArrow.html @@ -2,21 +2,32 @@ Fetch records from a previously executed query as an Arrow object — dbFetchArrow • DBI Skip to contents + +
    +

    [Experimental]

    Fetch the result set and return it as an Arrow object. @@ -42,21 +57,28 @@

    Fetch records from a previously executed query as an Arrow object

    Methods in other packages

    This documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages.

    +

    Usage

    dbFetchArrow(res, ...)
    +

    Arguments

    -
    res
    + + +
    res

    An object inheriting from DBIResultArrow, created by dbSendQueryArrow().

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbFetchArrow() always returns an object coercible to a data.frame with +

    dbFetchArrow() always returns an object coercible to a data.frame with as many rows as records were fetched and as many columns as fields in the result set, even if the result is a single value @@ -65,6 +87,9 @@

    Value

    The data retrieval flow for Arrow streams

    + + +

    This section gives a complete overview over the flow for the execution of queries that return tabular data as an Arrow stream.

    Most of this flow, except repeated calling of dbBindArrow() or dbBind(), @@ -87,10 +112,16 @@

    The data retrieval flow for A

    Failure modes

    + + +

    An attempt to fetch from a closed result set raises an error.

    Specification

    + + +

    Fetching multi-row queries with one or more columns by default returns the entire result. The object returned by dbFetchArrow() can also be passed to @@ -121,6 +152,7 @@

    See alsodbSendQuery(), dbSendQueryArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -149,12 +181,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbFetchArrowChunk.html b/dev/reference/dbFetchArrowChunk.html index 90e2b6c1..d1fb390f 100644 --- a/dev/reference/dbFetchArrowChunk.html +++ b/dev/reference/dbFetchArrowChunk.html @@ -3,22 +3,33 @@ Fetch the next chunk of the result set and return it as an Arrow object. The chunk size is implementation-specific. Use dbFetchArrow() to fetch all results. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. adbi::dbFetchArrowChunk("AdbiResultArrow") + '> Skip to contents + +
    +

    [Experimental]

    Fetch the next chunk of the result set and return it as an Arrow object. @@ -45,21 +60,28 @@

    Fetch the next batch of records from a previously executed query as an Arrow

    Methods in other packages

    This documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages.

    +

    Usage

    dbFetchArrowChunk(res, ...)
    +

    Arguments

    -
    res
    + + +
    res

    An object inheriting from DBIResultArrow, created by dbSendQueryArrow().

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbFetchArrowChunk() always returns an object coercible to a data.frame with +

    dbFetchArrowChunk() always returns an object coercible to a data.frame with as many rows as records were fetched and as many columns as fields in the result set, even if the result is a single value @@ -68,6 +90,9 @@

    Value

    The data retrieval flow for Arrow streams

    + + +

    This section gives a complete overview over the flow for the execution of queries that return tabular data as an Arrow stream.

    Most of this flow, except repeated calling of dbBindArrow() or dbBind(), @@ -90,10 +115,16 @@

    The data retrieval flow for A

    Failure modes

    + + +

    An attempt to fetch from a closed result set raises an error.

    Specification

    + + +

    Fetching multi-row queries with one or more columns returns the next chunk. The size of the chunk is implementation-specific. @@ -123,6 +154,7 @@

    See alsodbSendQuery(), dbSendQueryArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -158,12 +190,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbGetConnectArgs.html b/dev/reference/dbGetConnectArgs.html index ddb3a93c..286b04f2 100644 --- a/dev/reference/dbGetConnectArgs.html +++ b/dev/reference/dbGetConnectArgs.html @@ -9,12 +9,19 @@ and usually does not need to be called directly. "> Skip to contents + +
    +

    Returns the arguments stored in a DBIConnector object for inspection, optionally evaluating them. @@ -39,19 +50,28 @@

    Get connection arguments

    and usually does not need to be called directly.

    +

    Usage

    dbGetConnectArgs(drv, eval = TRUE, ...)
    +

    Arguments

    -
    drv
    + + +
    drv

    A object inheriting from DBIConnector.

    + +
    eval

    Set to FALSE to return the functions that generate the argument instead of evaluating them.

    + +
    ...

    Other arguments passed on to methods. Not otherwise used.

    +

    See also

    @@ -61,6 +81,7 @@

    See alsodbDataType(), dbIsReadOnly()

    +
    + +
    + + + + + diff --git a/dev/reference/dbGetDBIVersion.html b/dev/reference/dbGetDBIVersion.html index 63ce1dc4..e3b0861a 100644 --- a/dev/reference/dbGetDBIVersion.html +++ b/dev/reference/dbGetDBIVersion.html @@ -1,12 +1,19 @@ Determine the current version of the package. — dbGetDBIVersion • DBI Skip to contents + +
    +

    Determine the current version of the package.

    +

    Usage

    dbGetDBIVersion()
    + +
    + +
    + + + + + diff --git a/dev/reference/dbGetException.html b/dev/reference/dbGetException.html index 3d78cf32..b93d9452 100644 --- a/dev/reference/dbGetException.html +++ b/dev/reference/dbGetException.html @@ -3,12 +3,19 @@ warnings."> Skip to contents + +
    +

    DEPRECATED. Backends should use R's condition system to signal errors and warnings.

    +

    Usage

    dbGetException(conn, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    a list with elements errorNum (an integer error number) and +

    a list with elements errorNum (an integer error number) and errorMsg (a character string) describing the last error in the connection conn.

    @@ -80,14 +98,24 @@

    See alsodbWriteTable(), dbWriteTableArrow()

    +
    + +
    + + + + + diff --git a/dev/reference/dbGetInfo.html b/dev/reference/dbGetInfo.html index bc0aa1f6..94bb8b78 100644 --- a/dev/reference/dbGetInfo.html +++ b/dev/reference/dbGetInfo.html @@ -1,6 +1,7 @@ Get DBMS metadata — dbGetInfo • DBI Skip to contents + +
    +

    Retrieves information on objects of class DBIDriver, DBIConnection or DBIResult.

    @@ -150,27 +165,34 @@

    Methods in other packages

    sparklyr::dbGetInfo("spark_connection")

    +

    Usage

    dbGetInfo(dbObj, ...)
    +

    Arguments

    -
    dbObj
    + + +
    dbObj

    An object inheriting from DBIObject, i.e. DBIDriver, DBIConnection, or a DBIResult

    + +
    ...

    Other arguments to methods.

    +

    Value

    -

    For objects of class DBIDriver, dbGetInfo()

    -

    returns a named list +

    For objects of class DBIDriver, dbGetInfo() +returns a named list that contains at least the following components:

    • driver.version: the package version of the DBI backend,

    • client.version: the version of the DBMS client library.

    • -

    For objects of class DBIConnection, dbGetInfo()

    -

    returns a named list +

    For objects of class DBIConnection, dbGetInfo() +returns a named list that contains at least the following components:

    • db.version: version of the database server,

    • dbname: database name,

    • username: username to connect to the database,

    • @@ -178,8 +200,8 @@

      Value

      port: port on the database server. It must not contain a password component. Components that are not applicable should be set to NA.

      -

    For objects of class DBIResult, dbGetInfo()

    -

    returns a named list +

    For objects of class DBIResult, dbGetInfo() +returns a named list that contains at least the following components:

    Implementation notes

    + +

    The default implementation for DBIResult objects constructs such a list from the return values of the corresponding methods, dbGetStatement(), dbGetRowCount(), @@ -252,6 +276,7 @@

    See alsodbQuoteLiteral(), dbQuoteString()

    +

    Examples

    dbGetInfo(RSQLite::SQLite())
    @@ -265,12 +290,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbGetQuery.html b/dev/reference/dbGetQuery.html index 8841665c..25212ef2 100644 --- a/dev/reference/dbGetQuery.html +++ b/dev/reference/dbGetQuery.html @@ -7,6 +7,7 @@ For retrieving chunked/paged results or for passing query parameters, see dbSendQuery(), in particular the "The data retrieval flow" section. For retrieving results as an Arrow object, see dbGetQueryArrow(). + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. AzureKusto::dbGetQuery("AzureKustoConnection", "character") DatabaseConnector::dbGetQuery("DatabaseConnectorConnection", "character") @@ -20,6 +21,7 @@ RPostgreSQL::dbGetQuery("PostgreSQLConnection", "character") RPresto::dbGetQuery("PrestoConnection", "character") sparklyr::dbGetQuery("spark_connection", "ANY") + '> Skip to contents + +
    +

    Returns the result of a query as a data frame. dbGetQuery() comes with a default implementation @@ -90,23 +105,32 @@

    Methods in other packages

    sparklyr::dbGetQuery("spark_connection", "ANY")

    +

    Usage

    dbGetQuery(conn, statement, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    statement

    a character string containing SQL.

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbGetQuery() always returns a data.frame, with +

    dbGetQuery() always returns a data.frame, with as many rows as records were fetched and as many columns as fields in the result set, even if the result is a single value @@ -128,11 +152,16 @@

    Details

    Implementation notes

    + +

    Subclasses should override this method only if they provide some sort of performance optimization.

    Failure modes

    + + +

    An error is raised when issuing a query over a closed or invalid connection, if the syntax of the query is invalid, @@ -143,6 +172,9 @@

    Failure modes

    Additional arguments

    + + +

    The following arguments are not part of the dbGetQuery() generic (to improve compatibility across backends) but are part of the DBI specification:

    • n (default: -1)

    • @@ -153,6 +185,10 @@

      Additional arguments

      Specification

      + + + +

      A column named row_names is treated like any other column.

      The n argument specifies the number of rows to be fetched. If omitted, fetching multi-row queries with one @@ -169,6 +205,10 @@

      Specification

      Specification for the immediate argument

      + + + +

      The immediate argument supports distinguishing between "direct" and "prepared" APIs offered by many database drivers. Passing immediate = TRUE leads to immediate execution of the @@ -237,6 +277,7 @@

      See alsodbSendQuery(), dbSendQueryArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -309,12 +350,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbGetQueryArrow.html b/dev/reference/dbGetQueryArrow.html index 469ca728..4fd43f33 100644 --- a/dev/reference/dbGetQueryArrow.html +++ b/dev/reference/dbGetQueryArrow.html @@ -9,8 +9,10 @@ see dbSendQueryArrow(), in particular the "The data retrieval flow for Arrow streams" section. For retrieving results as a data frame, see dbGetQuery(). + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. pool::dbGetQueryArrow("Pool") + '> Skip to contents + +
    +

    [Experimental]

    Returns the result of a query as an Arrow object. @@ -63,23 +78,32 @@

    Retrieve results from a query as an Arrow object

    Methods in other packages

    This documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages.

    +

    Usage

    dbGetQueryArrow(conn, statement, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    statement

    a character string containing SQL.

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbGetQueryArrow() always returns an object coercible to a data.frame, with +

    dbGetQueryArrow() always returns an object coercible to a data.frame, with as many rows as records were fetched and as many columns as fields in the result set, even if the result is a single value @@ -101,11 +125,16 @@

    Details

    Implementation notes

    + +

    Subclasses should override this method only if they provide some sort of performance optimization.

    Failure modes

    + + +

    An error is raised when issuing a query over a closed or invalid connection, if the syntax of the query is invalid, @@ -118,6 +147,9 @@

    Failure modes

    Additional arguments

    + + +

    The following arguments are not part of the dbGetQueryArrow() generic (to improve compatibility across backends) but are part of the DBI specification:

    • params (default: NULL)

    • @@ -128,6 +160,10 @@

      Additional arguments

      Specification for the immediate argument

      + + + +

      The immediate argument supports distinguishing between "direct" and "prepared" APIs offered by many database drivers. Passing immediate = TRUE leads to immediate execution of the @@ -196,6 +232,7 @@

      See alsodbSendQuery(), dbSendQueryArrow()

    +

    Examples

    # Retrieve data as arrow table
    @@ -213,12 +250,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbGetRowCount.html b/dev/reference/dbGetRowCount.html index 9ad72c09..2a16168f 100644 --- a/dev/reference/dbGetRowCount.html +++ b/dev/reference/dbGetRowCount.html @@ -1,6 +1,7 @@ The number of rows fetched so far — dbGetRowCount • DBI Skip to contents + +
    +

    Returns the total number of rows actually fetched with calls to dbFetch() for this result set.

    @@ -78,20 +93,27 @@

    Methods in other packages

    sparklyr::dbGetRowCount("DBISparkResult")

    +

    Usage

    dbGetRowCount(res, ...)
    +

    Arguments

    -
    res
    + + +
    res

    An object inheriting from DBIResult.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbGetRowCount() returns a scalar number (integer or numeric), +

    dbGetRowCount() returns a scalar number (integer or numeric), the number of rows fetched so far. After calling dbSendQuery(), the row count is initially zero. @@ -110,6 +132,9 @@

    Value

    Failure modes

    + + +

    Attempting to get the row count for a result set cleared with dbClearResult() gives an error.

    @@ -130,6 +155,7 @@

    See alsodbQuoteLiteral(), dbQuoteString()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -154,12 +180,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbGetRowsAffected.html b/dev/reference/dbGetRowsAffected.html index 01cd4e39..48867873 100644 --- a/dev/reference/dbGetRowsAffected.html +++ b/dev/reference/dbGetRowsAffected.html @@ -1,6 +1,7 @@ The number of rows affected — dbGetRowsAffected • DBI Skip to contents + +
    +

    This method returns the number of rows that were added, deleted, or updated by a data manipulation statement.

    @@ -81,20 +96,27 @@

    Methods in other packages

    sparklyr::dbGetRowsAffected("DBISparkResult")

    +

    Usage

    dbGetRowsAffected(res, ...)
    +

    Arguments

    -
    res
    + + +
    res

    An object inheriting from DBIResult.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbGetRowsAffected() returns a scalar number (integer or numeric), +

    dbGetRowsAffected() returns a scalar number (integer or numeric), the number of rows affected by a data manipulation statement issued with dbSendStatement(). The value is available directly after the call @@ -107,6 +129,9 @@

    Value

    The command execution flow

    + + +

    This section gives a complete overview over the flow for the execution of SQL statements that have side effects such as stored procedures, inserting or deleting data, @@ -132,6 +157,9 @@

    The command execution flow

    Failure modes

    + + +

    Attempting to get the rows affected for a result set cleared with dbClearResult() gives an error.

    @@ -157,6 +185,7 @@

    See alsodbExecute(), dbSendStatement()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -174,12 +203,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbGetStatement.html b/dev/reference/dbGetStatement.html index 11ade778..af737679 100644 --- a/dev/reference/dbGetStatement.html +++ b/dev/reference/dbGetStatement.html @@ -1,6 +1,7 @@ Get the statement associated with a result set — dbGetStatement • DBI Skip to contents + +
    +

    Returns the statement that was passed to dbSendQuery() or dbSendStatement().

    @@ -84,25 +99,35 @@

    Methods in other packages

    sparklyr::dbGetStatement("DBISparkResult")

    +

    Usage

    dbGetStatement(res, ...)
    +

    Arguments

    -
    res
    + + +
    res

    An object inheriting from DBIResult.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbGetStatement() returns a string, the query used in +

    dbGetStatement() returns a string, the query used in either dbSendQuery() or dbSendStatement().

    Failure modes

    + + +

    Attempting to query the statement for a result set cleared with dbClearResult() gives an error.

    @@ -123,6 +148,7 @@

    See alsodbQuoteLiteral(), dbQuoteString()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -138,12 +164,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbHasCompleted.html b/dev/reference/dbHasCompleted.html index 161e826b..b73eaeaf 100644 --- a/dev/reference/dbHasCompleted.html +++ b/dev/reference/dbHasCompleted.html @@ -2,6 +2,7 @@ Completion status — dbHasCompleted • DBI Skip to contents + +
    +

    This method returns if the operation has completed. A SELECT query is completed if all rows have been fetched. @@ -96,20 +111,27 @@

    Methods in other packages

    sparklyr::dbHasCompleted("DBISparkResult")

    +

    Usage

    dbHasCompleted(res, ...)
    +

    Arguments

    -
    res
    + + +
    res

    An object inheriting from DBIResult.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbHasCompleted() returns a logical scalar. +

    dbHasCompleted() returns a logical scalar. For a query initiated by dbSendQuery() with non-empty result set, dbHasCompleted() returns FALSE initially and TRUE after calling dbFetch() without limit. @@ -118,6 +140,9 @@

    Value

    The data retrieval flow

    + + +

    This section gives a complete overview over the flow for the execution of queries that return tabular data as data frames.

    Most of this flow, except repeated calling of dbBind() or dbBindArrow(), @@ -150,16 +175,23 @@

    The data retrieval flow

    Failure modes

    + + +

    Attempting to query completion status for a result set cleared with dbClearResult() gives an error.

    Specification

    + + +

    The completion status for a query is only guaranteed to be set to FALSE after attempting to fetch past the end of the entire result. Therefore, for a query with an empty result set, the initial return value is unspecified, but the result value is TRUE after trying to fetch only one row.

    +

    Similarly, for a query with a result set of length n, the return value is unspecified after fetching n rows, but the result value is TRUE after trying to fetch only one more @@ -199,6 +231,7 @@

    See alsodbSendQuery(), dbSendQueryArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -221,12 +254,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbIsReadOnly.html b/dev/reference/dbIsReadOnly.html index 3968fe9a..928b4b74 100644 --- a/dev/reference/dbIsReadOnly.html +++ b/dev/reference/dbIsReadOnly.html @@ -1,18 +1,29 @@ Is this DBMS object read only? — dbIsReadOnly • DBI Skip to contents + +
    +

    This generic tests whether a database object is read only.

    Methods in other packages

    This documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages.

    +

    Usage

    dbIsReadOnly(dbObj, ...)
    +

    Arguments

    -
    dbObj
    + + +
    dbObj

    An object inheriting from DBIObject, i.e. DBIDriver, DBIConnection, or a DBIResult

    + +
    ...

    Other arguments to methods.

    +

    See also

    @@ -109,6 +131,7 @@

    See alsodbDataType(), dbGetConnectArgs()

    +

    Examples

    dbIsReadOnly(ANSI())
    @@ -117,12 +140,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbIsValid.html b/dev/reference/dbIsValid.html index 8c5aca39..542a3104 100644 --- a/dev/reference/dbIsValid.html +++ b/dev/reference/dbIsValid.html @@ -1,6 +1,7 @@ Is this DBMS object still valid? — dbIsValid • DBI Skip to contents + +
    +

    This generic tests whether a database object is still valid (i.e. it hasn't been disconnected or cleared).

    @@ -147,22 +162,29 @@

    Methods in other packages

    sparklyr::dbIsValid("spark_connection")

    +

    Usage

    dbIsValid(dbObj, ...)
    +

    Arguments

    -
    dbObj
    + + +
    dbObj

    An object inheriting from DBIObject, i.e. DBIDriver, DBIConnection, or a DBIResult

    + +
    ...

    Other arguments to methods.

    +

    Value

    -

    dbIsValid() returns a logical scalar, +

    dbIsValid() returns a logical scalar, TRUE if the object specified by dbObj is valid, FALSE otherwise. A DBIConnection object is initially valid, @@ -241,6 +263,7 @@

    See alsodbFetchArrowChunk(), dbHasCompleted()

    +

    Examples

    dbIsValid(RSQLite::SQLite())
    @@ -265,12 +288,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbListConnections.html b/dev/reference/dbListConnections.html index 9260ba58..6d714292 100644 --- a/dev/reference/dbListConnections.html +++ b/dev/reference/dbListConnections.html @@ -3,12 +3,19 @@ Keep track of the connections you opened if you require a list."> Skip to contents + +
    +

    DEPRECATED, drivers are no longer required to implement this method. Keep track of the connections you opened if you require a list.

    +

    Usage

    dbListConnections(drv, ...)
    +

    Arguments

    -
    drv
    + + +
    drv

    A object inheriting from DBIDriver

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    a list

    +

    a list

    See also

    @@ -57,14 +75,24 @@

    See alsodbIsReadOnly(), dbIsValid()

    +
    + +
    + + + + + diff --git a/dev/reference/dbListFields.html b/dev/reference/dbListFields.html index 0271666b..b1eb2fa7 100644 --- a/dev/reference/dbListFields.html +++ b/dev/reference/dbListFields.html @@ -1,5 +1,6 @@ List field names of a remote table — dbListFields • DBI Skip to contents + +
    + +

    Usage

    dbListFields(conn, name, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    name

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -140,13 +167,16 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbListFields()

    -

    returns a character vector +

    dbListFields() +returns a character vector that enumerates all fields in the table in the correct order. This also works for temporary tables if supported by the database. @@ -154,6 +184,9 @@

    Value

    Failure modes

    + + +

    If the table does not exist, an error is raised. Invalid types for the name argument (e.g., character of length not equal to one, @@ -164,6 +197,10 @@

    Failure modes

    Specification

    + + + +

    The name argument can be

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -217,12 +255,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbListObjects.html b/dev/reference/dbListObjects.html index 79a3e144..4b235d56 100644 --- a/dev/reference/dbListObjects.html +++ b/dev/reference/dbListObjects.html @@ -8,10 +8,12 @@ This allows exploration of all database objects available to the current user, including those that can only be accessed by giving the full namespace. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. pool::dbListObjects("Pool") RMariaDB::dbListObjects("MariaDBConnection") RPostgres::dbListObjects("PqConnection") + '> Skip to contents + +
    +

    Returns the names of remote objects accessible through this connection as a data frame. @@ -66,26 +81,35 @@

    Methods in other packages

    RPostgres::dbListObjects("PqConnection")

    +

    Usage

    dbListObjects(conn, prefix = NULL, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    prefix

    A fully qualified path in the database's namespace, or NULL. This argument will be processed with dbUnquoteIdentifier(). If given the method will return all objects accessible through this prefix.

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbListObjects()

    -

    returns a data frame +

    dbListObjects() +returns a data frame with columns table and is_prefix (in that order), optionally with other columns with a dot (.) prefix. @@ -105,11 +129,17 @@

    Value

    Failure modes

    + + +

    An error is raised when calling this method for a closed or invalid connection.

    Specification

    + + +

    The prefix column indicates if the table value refers to a table or a prefix. For a call with the default prefix = NULL, the table @@ -158,6 +188,7 @@

    See alsodbWriteTable(), dbWriteTableArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -175,12 +206,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbListResults.html b/dev/reference/dbListResults.html index 000528e8..f176e49b 100644 --- a/dev/reference/dbListResults.html +++ b/dev/reference/dbListResults.html @@ -5,12 +5,19 @@ you need to keep track of the result sets you open if you need this functionality."> Skip to contents + +
    +

    DEPRECATED. DBI currenty supports only one open result set per connection, you need to keep track of the result sets you open if you need this functionality.

    +

    Usage

    dbListResults(conn, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    a list. If no results are active, an empty list. If only +

    a list. If no results are active, an empty list. If only a single result is active, a list with one element.

    @@ -82,14 +100,24 @@

    See alsodbWriteTable(), dbWriteTableArrow()

    +
    + +
    + + + + + diff --git a/dev/reference/dbListTables.html b/dev/reference/dbListTables.html index 8bf4535a..07e12e7a 100644 --- a/dev/reference/dbListTables.html +++ b/dev/reference/dbListTables.html @@ -3,6 +3,7 @@ connection. This should include views and temporary objects, but not all database backends (in particular RMariaDB and RMySQL) support this. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. adbi::dbListTables("AdbiConnection") AzureKusto::dbListTables("AzureKustoConnection") @@ -23,10 +24,12 @@ RPresto::dbListTables("PrestoConnection") RSQLite::dbListTables("SQLiteConnection") sparklyr::dbListTables("spark_connection") + '> Skip to contents + +
    +

    Returns the unquoted names of remote tables accessible through this connection. @@ -99,22 +114,29 @@

    Methods in other packages

    sparklyr::dbListTables("spark_connection")

    +

    Usage

    dbListTables(conn, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbListTables()

    -

    returns a character vector +

    dbListTables() +returns a character vector that enumerates all tables and views in the database. @@ -127,6 +149,9 @@

    Value

    Failure modes

    + + +

    An error is raised when calling this method for a closed or invalid connection.

    @@ -162,6 +187,7 @@

    See alsodbWriteTable(), dbWriteTableArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -177,12 +203,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbQuoteIdentifier.html b/dev/reference/dbQuoteIdentifier.html index 44d4c700..817ef5fd 100644 --- a/dev/reference/dbQuoteIdentifier.html +++ b/dev/reference/dbQuoteIdentifier.html @@ -3,6 +3,7 @@ use in a query as a column or table name, to make sure that you generate valid SQL and protect against SQL injection attacks. The inverse operation is dbUnquoteIdentifier(). + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. adbi::dbQuoteIdentifier("AdbiConnection", "character") bigrquery::dbQuoteIdentifier("BigQueryConnection", "character") @@ -29,10 +30,12 @@ RSQLite::dbQuoteIdentifier("SQLiteConnection", "character") RSQLite::dbQuoteIdentifier("SQLiteConnection", "SQL") sparklyr::dbQuoteIdentifier("spark_connection", "character") + '> Skip to contents + +
    +

    Call this method to generate a string that is suitable for use in a query as a column or table name, to make sure that you @@ -117,40 +132,56 @@

    Methods in other packages

    sparklyr::dbQuoteIdentifier("spark_connection", "character")

    +

    Usage

    dbQuoteIdentifier(conn, x, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    x

    A character vector, SQL or Id object to quote as identifier.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbQuoteIdentifier() returns an object that can be coerced to character, +

    dbQuoteIdentifier() returns an object that can be coerced to character, of the same length as the input. For an empty character vector this function returns a length-0 object. The names of the input argument are preserved in the output. -When passing the returned object again to dbQuoteIdentifier()

    -

    as x

    -

    argument, it is returned unchanged. +When passing the returned object again to dbQuoteIdentifier() +as x +argument, it is returned unchanged. Passing objects of class SQL should also return them unchanged. (For backends it may be most convenient to return SQL objects to achieve this behavior, but this is not required.)

    Failure modes

    + + + +

    An error is raised if the input contains NA, but not for an empty string.

    Specification

    + + +

    Calling dbGetQuery() for a query of the format SELECT 1 AS ... returns a data frame with the identifier, unquoted, as column name. Quoted identifiers can be used as table and column names in SQL queries, @@ -203,6 +234,7 @@

    See alsodbWriteTable(), dbWriteTableArrow()

    +

    Examples

    # Quoting ensures that arbitrary input is safe for use in a query
    @@ -231,12 +263,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbQuoteLiteral.html b/dev/reference/dbQuoteLiteral.html index 1a74d10e..0628a72d 100644 --- a/dev/reference/dbQuoteLiteral.html +++ b/dev/reference/dbQuoteLiteral.html @@ -2,6 +2,7 @@ Quote literal values — dbQuoteLiteral • DBI Skip to contents + +
    +

    Call these methods to generate a string that is suitable for use in a query as a literal value of the correct type, to make sure that you @@ -63,23 +78,32 @@

    Methods in other packages

    sparklyr::dbQuoteLiteral("spark_connection", "ANY")

    +

    Usage

    dbQuoteLiteral(conn, x, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    x

    A vector to quote as string.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbQuoteLiteral() returns an object that can be coerced to character, +

    dbQuoteLiteral() returns an object that can be coerced to character, of the same length as the input. For an empty integer, @@ -90,20 +114,27 @@

    Value

    -

    When passing the returned object again to dbQuoteLiteral()

    -

    as x

    -

    argument, it is returned unchanged. +

    When passing the returned object again to dbQuoteLiteral() +as x +argument, it is returned unchanged. Passing objects of class SQL should also return them unchanged. (For backends it may be most convenient to return SQL objects to achieve this behavior, but this is not required.)

    Failure modes

    + + + +

    Passing a list for the x argument raises an error.

    Specification

    + + +

    The returned expression can be used in a SELECT ... query, and the value of dbGetQuery(paste0("SELECT ", dbQuoteLiteral(x)))[[1]] @@ -136,6 +167,7 @@

    See alsodbIsValid(), dbQuoteString()

    +

    Examples

    # Quoting ensures that arbitrary input is safe for use in a query
    @@ -175,12 +207,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbQuoteString.html b/dev/reference/dbQuoteString.html index 122afb32..d81a6447 100644 --- a/dev/reference/dbQuoteString.html +++ b/dev/reference/dbQuoteString.html @@ -2,6 +2,7 @@ Quote literal strings — dbQuoteString • DBI Skip to contents + +
    +

    Call this method to generate a string that is suitable for use in a query as a string literal, to make sure that you @@ -99,34 +114,47 @@

    Methods in other packages

    sparklyr::dbQuoteString("spark_connection", "character")

    +

    Usage

    dbQuoteString(conn, x, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    x

    A character vector to quote as string.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbQuoteString() returns an object that can be coerced to character, +

    dbQuoteString() returns an object that can be coerced to character, of the same length as the input. For an empty character vector this function returns a length-0 object.

    -

    When passing the returned object again to dbQuoteString()

    -

    as x

    -

    argument, it is returned unchanged. +

    When passing the returned object again to dbQuoteString() +as x +argument, it is returned unchanged. Passing objects of class SQL should also return them unchanged. (For backends it may be most convenient to return SQL objects to achieve this behavior, but this is not required.)

    Failure modes

    + + + +

    Passing a numeric, integer, logical, @@ -136,6 +164,9 @@

    Failure modes

    Specification

    + + +

    The returned expression can be used in a SELECT ... query, and for any scalar character x the value of dbGetQuery(paste0("SELECT ", dbQuoteString(x)))[[1]] @@ -173,6 +204,7 @@

    See alsodbIsValid(), dbQuoteLiteral()

    +

    Examples

    # Quoting ensures that arbitrary input is safe for use in a query
    @@ -199,12 +231,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbReadTable.html b/dev/reference/dbReadTable.html index ad1a5f00..27c1fd2e 100644 --- a/dev/reference/dbReadTable.html +++ b/dev/reference/dbReadTable.html @@ -3,6 +3,7 @@ a column to row names and converting the column names to valid R identifiers. Use dbReadTableArrow() instead to obtain an Arrow object. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. AzureKusto::dbReadTable("AzureKustoConnection", "character") bigrquery::dbReadTable("BigQueryConnection", "AsIs") @@ -24,10 +25,12 @@ RPresto::dbReadTable("PrestoConnection", "SQL") RSQLite::dbReadTable("SQLiteConnection", "character") sparklyr::dbReadTable("spark_connection", "character") + '> Skip to contents + +
    +

    Reads a database table to a data frame, optionally converting a column to row names and converting the column names to valid @@ -102,15 +117,21 @@

    Methods in other packages

    sparklyr::dbReadTable("spark_connection", "character")

    +

    Usage

    dbReadTable(conn, name, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    name

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -119,12 +140,15 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbReadTable() returns a data frame that contains the complete data +

    dbReadTable() returns a data frame that contains the complete data from the remote table, effectively the result of calling dbGetQuery() with SELECT * FROM <name>.

    An empty table is returned as a data frame with zero rows.

    @@ -149,9 +173,15 @@

    Details

    Failure modes

    + + +

    An error is raised if the table does not exist.

    +

    An error is raised if row.names is TRUE and no "row_names" column exists,

    +

    An error is raised if row.names is set to a string and no corresponding column exists.

    +

    An error is raised when calling this method for a closed or invalid connection. An error is raised @@ -165,6 +195,9 @@

    Failure modes

    Additional arguments

    + + +

    The following arguments are not part of the dbReadTable() generic (to improve compatibility across backends) but are part of the DBI specification:

    • row.names (default: FALSE)

    • @@ -174,6 +207,9 @@

      Additional arguments

      Specification

      + + +

      The name argument is processed as follows, to support databases that allow non-syntactic names for their objects:

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -235,12 +272,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbReadTableArrow.html b/dev/reference/dbReadTableArrow.html index c796dd47..5fc724d7 100644 --- a/dev/reference/dbReadTableArrow.html +++ b/dev/reference/dbReadTableArrow.html @@ -2,21 +2,32 @@ Read database tables as Arrow objects — dbReadTableArrow • DBI Skip to contents + +
    +

    [Experimental]

    Reads a database table as an Arrow object. @@ -42,15 +57,21 @@

    Read database tables as Arrow objects

    Methods in other packages

    This documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages.

    +

    Usage

    dbReadTableArrow(conn, name, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    name

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -59,12 +80,15 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbReadTableArrow() returns an Arrow object that contains the complete data +

    dbReadTableArrow() returns an Arrow object that contains the complete data from the remote table, effectively the result of calling dbGetQueryArrow() with SELECT * FROM <name>.

    An empty table is returned as an Arrow object with zero rows.

    @@ -77,7 +101,11 @@

    Details

    Failure modes

    + + +

    An error is raised if the table does not exist.

    +

    An error is raised when calling this method for a closed or invalid connection. An error is raised @@ -86,6 +114,9 @@

    Failure modes

    Specification

    + + +

    The name argument is processed as follows, to support databases that allow non-syntactic names for their objects:

    +

    Examples

    # Read data as Arrow table
    @@ -141,12 +173,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbRemoveTable.html b/dev/reference/dbRemoveTable.html index 67ca5557..aac22a4f 100644 --- a/dev/reference/dbRemoveTable.html +++ b/dev/reference/dbRemoveTable.html @@ -1,6 +1,7 @@ Remove a table from the database — dbRemoveTable • DBI Skip to contents + +
    +

    Remove a remote table (e.g., created by dbWriteTable()) from the database.

    @@ -96,15 +111,21 @@

    Methods in other packages

    sparklyr::dbRemoveTable("spark_connection", "character")

    +

    Usage

    dbRemoveTable(conn, name, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    name

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -113,15 +134,21 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbRemoveTable() returns TRUE, invisibly.

    +

    dbRemoveTable() returns TRUE, invisibly.

    Failure modes

    + + +

    If the table does not exist, an error is raised. An attempt to remove a view with this function may result in an error.

    An error is raised when calling this method for a closed @@ -132,6 +159,9 @@

    Failure modes

    Additional arguments

    + + +

    The following arguments are not part of the dbRemoveTable() generic (to improve compatibility across backends) but are part of the DBI specification:

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -207,12 +241,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbSendQuery.html b/dev/reference/dbSendQuery.html index da807030..f546a82e 100644 --- a/dev/reference/dbSendQuery.html +++ b/dev/reference/dbSendQuery.html @@ -7,6 +7,7 @@ For interactive use, you should almost always prefer dbGetQuery(). Use dbSendQueryArrow() or dbGetQueryArrow() instead to retrieve the results as an Arrow object. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. adbi::dbSendQuery("AdbiConnection", "character") AzureKusto::dbSendQuery("AzureKustoConnection", "ANY") @@ -30,6 +31,7 @@ RSQLite::dbSendQuery("SQLiteConnection", "character") sergeant::dbSendQuery("DrillConnection", "ANY") sparklyr::dbSendQuery("spark_connection", "ANY") + '> Skip to contents + +
    +

    The dbSendQuery() method only submits and synchronously executes the SQL query to the database engine. It does not extract any @@ -120,23 +135,32 @@

    Methods in other packages

    sparklyr::dbSendQuery("spark_connection", "ANY")

    +

    Usage

    dbSendQuery(conn, statement, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    statement

    a character string containing SQL.

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbSendQuery() returns +

    dbSendQuery() returns an S4 object that inherits from DBIResult. The result set can be used with dbFetch() to extract records. Once you have finished using a result, make sure to clear it @@ -157,6 +181,9 @@

    Details

    The data retrieval flow

    + + +

    This section gives a complete overview over the flow for the execution of queries that return tabular data as data frames.

    Most of this flow, except repeated calling of dbBind() or dbBindArrow(), @@ -189,15 +216,24 @@

    The data retrieval flow

    Failure modes

    + + +

    An error is raised when issuing a query over a closed or invalid connection, or if the query is not a non-NA string. An error is also raised if the syntax of the query is invalid and all query parameters are given (by passing the params argument) or the immediate argument is set to TRUE.

    + + +

    Additional arguments

    + + +

    The following arguments are not part of the dbSendQuery() generic (to improve compatibility across backends) but are part of the DBI specification:

    • params (default: NULL)

    • @@ -207,6 +243,9 @@

      Additional arguments

      Specification

      + + +

      No warnings occur under normal conditions. When done, the DBIResult object must be cleared with a call to dbClearResult(). @@ -221,6 +260,10 @@

      Specification

      Specification for the immediate argument

      + + + +

      The immediate argument supports distinguishing between "direct" and "prepared" APIs offered by many database drivers. Passing immediate = TRUE leads to immediate execution of the @@ -289,6 +332,7 @@

      See alsodbHasCompleted(), dbSendQueryArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -367,12 +411,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbSendQueryArrow.html b/dev/reference/dbSendQueryArrow.html index 68a4ff09..f84cf2eb 100644 --- a/dev/reference/dbSendQueryArrow.html +++ b/dev/reference/dbSendQueryArrow.html @@ -9,9 +9,11 @@ For interactive use, you should almost always prefer dbGetQueryArrow(). Use dbSendQuery() or dbGetQuery() instead to retrieve the results as a data frame. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. adbi::dbSendQueryArrow("AdbiConnection") pool::dbSendQueryArrow("Pool") + '> Skip to contents + +
    +

    [Experimental]

    The dbSendQueryArrow() method only submits and synchronously executes the @@ -66,23 +81,32 @@

    Methods in other packages

    pool::dbSendQueryArrow("Pool")

    +

    Usage

    dbSendQueryArrow(conn, statement, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    statement

    a character string containing SQL.

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbSendQueryArrow() returns +

    dbSendQueryArrow() returns an S4 object that inherits from DBIResultArrow. The result set can be used with dbFetchArrow() to extract records. Once you have finished using a result, make sure to clear it @@ -97,6 +121,9 @@

    Details

    The data retrieval flow for Arrow streams

    + + +

    This section gives a complete overview over the flow for the execution of queries that return tabular data as an Arrow stream.

    Most of this flow, except repeated calling of dbBindArrow() or dbBind(), @@ -119,15 +146,24 @@

    The data retrieval flow for A

    Failure modes

    + + +

    An error is raised when issuing a query over a closed or invalid connection, or if the query is not a non-NA string. An error is also raised if the syntax of the query is invalid and all query parameters are given (by passing the params argument) or the immediate argument is set to TRUE.

    + + +

    Additional arguments

    + + +

    The following arguments are not part of the dbSendQueryArrow() generic (to improve compatibility across backends) but are part of the DBI specification:

    • params (default: NULL)

    • @@ -137,6 +173,9 @@

      Additional arguments

      Specification

      + + +

      No warnings occur under normal conditions. When done, the DBIResult object must be cleared with a call to dbClearResult(). @@ -151,6 +190,10 @@

      Specification

      Specification for the immediate argument

      + + + +

      The immediate argument supports distinguishing between "direct" and "prepared" APIs offered by many database drivers. Passing immediate = TRUE leads to immediate execution of the @@ -219,6 +262,7 @@

      See alsodbHasCompleted(), dbSendQuery()

    +

    Examples

    # Retrieve data as arrow table
    @@ -238,12 +282,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbSendStatement.html b/dev/reference/dbSendStatement.html index 6e3726f8..bd5f2d64 100644 --- a/dev/reference/dbSendStatement.html +++ b/dev/reference/dbSendStatement.html @@ -6,6 +6,7 @@ returned result object. You must also call dbClearResult() after that. For interactive use, you should almost always prefer dbExecute(). + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. adbi::dbSendStatement("AdbiConnection", "character") AzureKusto::dbSendStatement("AzureKustoConnection", "character") @@ -16,6 +17,7 @@ RAthena::dbSendStatement("AthenaConnection", "character") RMariaDB::dbSendStatement("MariaDBConnection", "character") sparklyr::dbSendStatement("spark_connection", "ANY") + '> Skip to contents + +
    +

    The dbSendStatement() method only submits and synchronously executes the SQL data manipulation statement (e.g., UPDATE, DELETE, @@ -78,23 +93,32 @@

    Methods in other packages

    sparklyr::dbSendStatement("spark_connection", "ANY")

    +

    Usage

    dbSendStatement(conn, statement, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    statement

    a character string containing SQL.

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbSendStatement() returns +

    dbSendStatement() returns an S4 object that inherits from DBIResult. The result set can be used with dbGetRowsAffected() to determine the number of rows affected by the query. @@ -109,6 +133,9 @@

    Details

    The command execution flow

    + + +

    This section gives a complete overview over the flow for the execution of SQL statements that have side effects such as stored procedures, inserting or deleting data, @@ -134,15 +161,24 @@

    The command execution flow

    Failure modes

    + + +

    An error is raised when issuing a statement over a closed or invalid connection, or if the statement is not a non-NA string. An error is also raised if the syntax of the query is invalid and all query parameters are given (by passing the params argument) or the immediate argument is set to TRUE.

    + + +

    Additional arguments

    + + +

    The following arguments are not part of the dbSendStatement() generic (to improve compatibility across backends) but are part of the DBI specification:

    • params (default: NULL)

    • @@ -152,6 +188,9 @@

      Additional arguments

      Specification

      + + +

      No warnings occur under normal conditions. When done, the DBIResult object must be cleared with a call to dbClearResult(). @@ -162,10 +201,16 @@

      SpecificationdbClearResult().

      + +

      The param argument allows passing query parameters, see dbBind() for details.

    Specification for the immediate argument

    + + + +

    The immediate argument supports distinguishing between "direct" and "prepared" APIs offered by many database drivers. Passing immediate = TRUE leads to immediate execution of the @@ -229,6 +274,7 @@

    See alsodbExecute(), dbGetRowsAffected()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -287,12 +333,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbSetDataMappings.html b/dev/reference/dbSetDataMappings.html index 4345817d..b62d9340 100644 --- a/dev/reference/dbSetDataMappings.html +++ b/dev/reference/dbSetDataMappings.html @@ -1,12 +1,19 @@ Set data mappings between an DBMS and R. — dbSetDataMappings • DBI Skip to contents + +
    +

    This generic is deprecated since no working implementation was ever produced.

    +

    Usage

    dbSetDataMappings(res, flds, ...)
    +

    Arguments

    -
    res
    + + +
    res

    An object inheriting from DBIResult.

    + +
    flds

    a field description object as returned by dbColumnInfo.

    + +
    ...

    Other arguments passed on to methods.

    +
    +
    + +
    + + + + + diff --git a/dev/reference/dbUnquoteIdentifier.html b/dev/reference/dbUnquoteIdentifier.html index 2dd8c6b3..e0d47791 100644 --- a/dev/reference/dbUnquoteIdentifier.html +++ b/dev/reference/dbUnquoteIdentifier.html @@ -1,6 +1,7 @@ Unquote identifiers — dbUnquoteIdentifier • DBI Skip to contents + +
    +

    Call this method to convert a SQL object created by dbQuoteIdentifier() back to a list of Id objects.

    @@ -54,29 +69,38 @@

    Methods in other packages

    RSQLite::dbUnquoteIdentifier("SQLiteConnection", "SQL")

    +

    Usage

    dbUnquoteIdentifier(conn, x, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    x

    An SQL or Id object.

    + +
    ...

    Other arguments passed on to methods.

    +

    Value

    -

    dbUnquoteIdentifier() returns a list of objects +

    dbUnquoteIdentifier() returns a list of objects of the same length as the input. For an empty vector, this function returns a length-0 object. The names of the input argument are preserved in the output. If x is a value returned by dbUnquoteIdentifier(), -calling dbUnquoteIdentifier(..., dbQuoteIdentifier(..., x))

    -

    returns list(x). +calling dbUnquoteIdentifier(..., dbQuoteIdentifier(..., x)) +returns list(x). If x is an object of class Id, calling dbUnquoteIdentifier(..., x) returns list(x). (For backends it may be most convenient to return Id objects @@ -85,11 +109,18 @@

    Value

    Failure modes

    + + + +

    An error is raised if a character vectors with a missing value is passed as the x argument.

    Specification

    + + +

    For any character vector of length one, quoting (with dbQuoteIdentifier()) then unquoting then quoting the first element is identical to just quoting. This is also true for strings that @@ -138,6 +169,7 @@

    See alsodbWriteTable(), dbWriteTableArrow()

    +

    Examples

    # Unquoting allows to understand the structure of a
    @@ -179,12 +211,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbWithTransaction.html b/dev/reference/dbWithTransaction.html index bfe55178..83f8f32a 100644 --- a/dev/reference/dbWithTransaction.html +++ b/dev/reference/dbWithTransaction.html @@ -10,8 +10,10 @@ dbRollback() – that is all taken care of. The special function dbBreak() allows an early exit with rollback, it can be called only inside dbWithTransaction(). + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. pool::dbWithTransaction("Pool") + "> Skip to contents + +
    +

    Given that transactions are implemented, this function allows you to pass in code that is run in a transaction. @@ -66,25 +81,34 @@

    Self-contained SQL transactions

    Methods in other packages

    This documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages.

    +

    Usage

    dbWithTransaction(conn, code, ...)
     
     dbBreak()
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    code

    An arbitrary block of R code.

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbWithTransaction() returns the value of the executed code.

    +

    dbWithTransaction() returns the value of the executed code.

    Details

    @@ -93,6 +117,9 @@

    Details

    Failure modes

    + + +

    Failure to initiate the transaction (e.g., if the connection is closed or invalid @@ -101,6 +128,9 @@

    Failure modes

    Specification

    + + +

    dbWithTransaction() initiates a transaction with dbBegin(), executes the code given in the code argument, and commits the transaction with dbCommit(). @@ -112,6 +142,7 @@

    Specification

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -168,12 +199,21 @@ 

    Examples

    + +

    + + + + + diff --git a/dev/reference/dbWriteTable.html b/dev/reference/dbWriteTable.html index 8f7b295f..e332d203 100644 --- a/dev/reference/dbWriteTable.html +++ b/dev/reference/dbWriteTable.html @@ -1,6 +1,7 @@ Copy data frames to database tables — dbWriteTable • DBI Skip to contents + +
    +

    Writes, overwrites or appends a data frame to a database table, optionally converting row names to a column and specifying SQL data types for fields.

    @@ -135,15 +150,21 @@

    Methods in other packages

    sparklyr::dbWriteTable("spark_connection", "ANY", "ANY")

    +

    Usage

    dbWriteTable(conn, name, value, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    name

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -152,14 +173,19 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    value

    A data.frame (or coercible to data.frame).

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbWriteTable() returns TRUE, invisibly.

    +

    dbWriteTable() returns TRUE, invisibly.

    Details

    @@ -176,6 +202,9 @@

    Details

    Failure modes

    + + +

    If the table exists, and both append and overwrite arguments are unset, or append = TRUE and the data frame with the new data has different column names, @@ -198,6 +227,9 @@

    Failure modes

    Additional arguments

    + + +

    The following arguments are not part of the dbWriteTable() generic (to improve compatibility across backends) but are part of the DBI specification:

    • row.names (default: FALSE)

    • @@ -210,6 +242,9 @@

      Additional arguments

      Specification

      + + +

      The name argument is processed as follows, to support databases that allow non-syntactic names for their objects:

      • If an unquoted table name as string: dbWriteTable() will do the quoting, perhaps by calling dbQuoteIdentifier(conn, x = name)

      • @@ -319,6 +354,7 @@

        See alsodbUnquoteIdentifier(), dbWriteTableArrow()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -378,12 +414,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dbWriteTableArrow.html b/dev/reference/dbWriteTableArrow.html index c55f39b4..2218fd43 100644 --- a/dev/reference/dbWriteTableArrow.html +++ b/dev/reference/dbWriteTableArrow.html @@ -1,20 +1,31 @@ Copy Arrow objects to database tables — dbWriteTableArrow • DBI Skip to contents + +
    +

    [Experimental]

    Writes, overwrites or appends an Arrow object to a database table.

    @@ -39,15 +54,21 @@

    Copy Arrow objects to database tables

    Methods in other packages

    This documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages.

    +

    Usage

    dbWriteTableArrow(conn, name, value, ...)
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    name

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -56,15 +77,20 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    value

    An nanoarray stream, or an object coercible to a nanoarray stream with nanoarrow::as_nanoarrow_array_stream().

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbWriteTableArrow() returns TRUE, invisibly.

    +

    dbWriteTableArrow() returns TRUE, invisibly.

    Details

    @@ -78,6 +104,9 @@

    Details

    Failure modes

    + + +

    If the table exists, and both append and overwrite arguments are unset, or append = TRUE and the data frame with the new data has different column names, @@ -98,6 +127,9 @@

    Failure modes

    Additional arguments

    + + +

    The following arguments are not part of the dbWriteTableArrow() generic (to improve compatibility across backends) but are part of the DBI specification:

    • overwrite (default: FALSE)

    • @@ -108,6 +140,9 @@

      Additional arguments

      Specification

      + + +

      The name argument is processed as follows, to support databases that allow non-syntactic names for their objects:

      • If an unquoted table name as string: dbWriteTableArrow() will do the quoting, perhaps by calling dbQuoteIdentifier(conn, x = name)

      • @@ -200,6 +235,7 @@

        See alsodbUnquoteIdentifier(), dbWriteTable()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -218,12 +254,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/dot-SQL92Keywords.html b/dev/reference/dot-SQL92Keywords.html index d2efe313..27d9005b 100644 --- a/dev/reference/dot-SQL92Keywords.html +++ b/dev/reference/dot-SQL92Keywords.html @@ -1,12 +1,19 @@ Keywords according to the SQL-92 standard — .SQL92Keywords • DBI Skip to contents + +
    +

    A character vector of SQL-92 keywords, uppercase.

    +

    Usage

    .SQL92Keywords
    +

    Format

    An object of class character of length 220.

    +

    Examples

    "SELECT" %in% .SQL92Keywords
    @@ -43,12 +57,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/hidden_aliases.html b/dev/reference/hidden_aliases.html index b5295759..5f8c4d2c 100644 --- a/dev/reference/hidden_aliases.html +++ b/dev/reference/hidden_aliases.html @@ -1,12 +1,19 @@ Internal page for hidden aliases — hidden_aliases • DBI Skip to contents + +
    +

    For S4 methods that require a documentation entry but only clutter the index.

    +

    Usage

    # S4 method for class 'DBIObject'
    @@ -254,21 +266,37 @@ 

    Usage # S4 method for class 'DBIConnection' sqlParseVariables(conn, sql, ...)

    +

    Arguments

    -
    n
    + + +
    n

    Number of rows to fetch, default -1

    + +
    object

    Table object to print

    +
    +
    + +
    + + + + + diff --git a/dev/reference/index.html b/dev/reference/index.html index d0df0e4a..ab881c24 100644 --- a/dev/reference/index.html +++ b/dev/reference/index.html @@ -1,12 +1,19 @@ Package index • DBI Skip to contents + +
    +

    Connecting and disconnecting

    +

    Connecting to and disconnecting from databases.

    + +
    + + + +
    + dbConnect() +
    Create a connection to a DBMS
    + dbDisconnect() +
    Disconnect (close) a connection
    + dbCanConnect() +
    Check if a connection to a DBMS can be established
    + dbGetInfo() +
    Get DBMS metadata
    + dbIsValid() +
    Is this DBMS object still valid?
    + dbIsReadOnly() +
    Is this DBMS object read only?
    + DBIConnector-class +
    DBIConnector class
    + dbGetConnectArgs() +
    Get connection arguments

    Tables

    +

    Reading and writing entire tables.

    + +
    + + + +
    + dbReadTable() +
    Read database tables as data frames
    + dbWriteTable() +
    Copy data frames to database tables
    + dbCreateTable() +
    Create a table in the database
    + dbAppendTable() +
    Insert rows into a table
    + dbRemoveTable() +
    Remove a table from the database
    + dbListTables() +
    List remote tables
    + dbListFields() +
    List field names of a remote table
    + dbExistsTable() +
    Does a table exist?
    + dbListObjects() +
    List remote objects
    + sqlRownamesToColumn() sqlColumnToRownames() +
    Convert row names back and forth between columns

    Queries and statements

    +

    Communicate with the DBMS.

    + +
    + + + +
    + dbGetQuery() +
    Retrieve results from a query
    + dbExecute() +
    Change database state

    Results

    +

    More control for sending queries and executing statements.

    + +
    + + + +
    + dbSendQuery() +
    Execute a query on a given database connection
    + dbSendStatement() +
    Execute a data manipulation statement on a given database connection
    + dbBind() dbBindArrow() experimental
    Bind values to a parameterized/prepared statement
    + dbFetch() fetch() +
    Fetch records from a previously executed query
    + dbGetRowCount() +
    The number of rows fetched so far
    + dbGetRowsAffected() +
    The number of rows affected
    + dbGetStatement() +
    Get the statement associated with a result set
    + dbHasCompleted() +
    Completion status
    + dbColumnInfo() +
    Information about result types
    + dbClearResult() +
    Clear a result set

    Transactions

    +

    Ensuring multiple statements are executed together, or not at all.

    + +
    + + + +
    + dbBegin() dbCommit() dbRollback() +
    Begin/commit/rollback SQL transactions
    + dbWithTransaction() dbBreak() +
    Self-contained SQL transactions

    SQL

    +

    Tools for creating and parsing SQL queries.

    + +
    + + + +
    + SQL() +
    SQL quoting
    + dbDataType() +
    Determine the SQL data type of an object
    + dbQuoteIdentifier() +
    Quote identifiers
    + dbQuoteLiteral() +
    Quote literal values
    + dbQuoteString() +
    Quote literal strings
    + sqlCreateTable() +
    Compose query to create a simple table
    + sqlAppendTable() sqlAppendTableTemplate() +
    Compose query to insert rows into a table
    + sqlData() +
    Convert a data frame into form suitable for upload to an SQL database
    + dbUnquoteIdentifier() +
    Unquote identifiers
    + sqlInterpolate() +
    Safely interpolate values into an SQL string

    Arrow

    +

    Experimental lifecycle

    Returning and sending data in the Arrow format.

    + +
    + + + +
    + dbReadTableArrow() experimental
    Read database tables as Arrow objects
    + dbWriteTableArrow() experimental
    Copy Arrow objects to database tables
    + dbCreateTableArrow() experimental
    Create a table in the database based on an Arrow object
    + dbAppendTableArrow() experimental
    Insert rows into a table from an Arrow stream
    + dbGetQueryArrow() experimental
    Retrieve results from a query as an Arrow object
    + dbSendQueryArrow() experimental
    Execute a query on a given database connection for retrieval via Arrow
    + dbBind() dbBindArrow() experimental
    Bind values to a parameterized/prepared statement
    + dbFetchArrow() experimental
    Fetch records from a previously executed query as an Arrow object
    + dbFetchArrowChunk() experimental
    Fetch the next batch of records from a previously executed query as an Arrow object

    Classes

    +

    S4 classes defined by DBI.

    + +
    + + + +
    + DBI DBI-package +
    DBI: R Database Interface
    + DBIObject-class +
    DBIObject class
    + DBIDriver-class +
    DBIDriver class
    + DBIConnection-class +
    DBIConnection class
    + DBIResult-class +
    DBIResult class
    + DBIResultArrow-class DBIResultArrowDefault-class experimental
    DBIResultArrow class
    + DBIConnector-class +
    DBIConnector class
    + Id() +
    Refer to a table nested in a hierarchy (e.g. within a schema)

    Data

    +

    S4 classes defined by DBI.

    + +
    + + + +
    + .SQL92Keywords +
    Keywords according to the SQL-92 standard
    + +
    + + + + + diff --git a/dev/reference/make.db.names.html b/dev/reference/make.db.names.html index 3768bbf1..a84d9ee7 100644 --- a/dev/reference/make.db.names.html +++ b/dev/reference/make.db.names.html @@ -3,12 +3,19 @@ (or possibly dbQuoteString()) instead."> Skip to contents + +
    +

    These methods are DEPRECATED. Please use dbQuoteIdentifier() (or possibly dbQuoteString()) instead.

    +

    Usage

    make.db.names.default(
    @@ -62,36 +74,54 @@ 

    Usage ... )

    +

    Arguments

    -
    snames
    + + +
    snames

    a character vector of R identifiers (symbols) from which we need to make SQL identifiers.

    + +
    keywords

    a character vector with SQL keywords, by default it's .SQL92Keywords defined by the DBI.

    + +
    unique

    logical describing whether the resulting set of SQL names should be unique. Its default is TRUE. Following the SQL 92 standard, uniqueness of SQL identifiers is determined regardless of whether letters are upper or lower case.

    + +
    allow.keywords

    logical describing whether SQL keywords should be allowed in the resulting set of SQL names. Its default is TRUE

    + +
    name

    a character vector with database identifier candidates we need to determine whether they are legal SQL identifiers or not.

    + +
    case

    a character string specifying whether to make the comparison as lower case, upper case, or any of the two. it defaults to any.

    + +
    dbObj

    any DBI object (e.g., DBIDriver).

    + +
    ...

    any other argument are passed to the driver implementation.

    +

    Value

    -

    make.db.names returns a character vector of legal SQL +

    make.db.names returns a character vector of legal SQL identifiers corresponding to its snames argument.

    SQLKeywords returns a character vector of all known keywords for the database-engine associated with dbObj.

    @@ -111,6 +141,8 @@

    Details

    Bugs

    + +

    The current mapping is not guaranteed to be fully reversible: some SQL identifiers that get mapped into R identifiers with make.names and then back to SQL with make.db.names() will not be equal to the @@ -124,14 +156,24 @@

    References

    +

    + +
    + + + + + diff --git a/dev/reference/rownames.html b/dev/reference/rownames.html index f60c7dff..33b38d49 100644 --- a/dev/reference/rownames.html +++ b/dev/reference/rownames.html @@ -11,12 +11,19 @@ will have those automatically set as row names. These methods are mostly useful for backend implementers.'> Skip to contents + +
    +

    These functions provide a reasonably automatic way of preserving the row names of data frame during back-and-forth translation to an SQL table. @@ -42,16 +53,22 @@

    Convert row names back and forth between columns

    will have those automatically set as row names. These methods are mostly useful for backend implementers.

    +

    Usage

    sqlRownamesToColumn(df, row.names = NA)
     
     sqlColumnToRownames(df, row.names = NA)
    +

    Arguments

    -
    df
    + + +
    df

    A data frame

    + +
    row.names

    Either TRUE, FALSE, NA or a string.

    If TRUE, always translate row names to a column called "row_names". @@ -60,7 +77,9 @@

    Arguments

    Examples

    # If have row names
    @@ -118,12 +137,21 @@ 

    Examples

    + +

    + + + + + diff --git a/dev/reference/sqlAppendTable.html b/dev/reference/sqlAppendTable.html index 02cff6a3..83e8ebaf 100644 --- a/dev/reference/sqlAppendTable.html +++ b/dev/reference/sqlAppendTable.html @@ -4,23 +4,34 @@ a template suitable for use with dbBind(). The default methods are ANSI SQL 99 compliant. These methods are mostly useful for backend implementers. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. pool::sqlAppendTable("Pool") + '> Skip to contents + +
    +

    sqlAppendTable() generates a single SQL string that inserts a data frame into an existing table. sqlAppendTableTemplate() generates @@ -48,6 +63,7 @@

    Compose query to insert rows into a table

    Methods in other packages

    This documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages.

    +

    Usage

    sqlAppendTable(con, table, values, row.names = NA, ...)
    @@ -62,10 +78,15 @@ 

    Usage pattern = "" )

    +

    Arguments

    -
    con
    + + +
    con

    A database connection.

    + +
    table

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -74,9 +95,13 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    values

    A data frame. Factors will be converted to character vectors. Character vectors will be escaped with dbQuoteString().

    + +
    row.names

    Either TRUE, FALSE, NA or a string.

    If TRUE, always translate row names to a column called "row_names". @@ -85,21 +110,29 @@

    Arguments...

    Other arguments used by individual methods.

    + +
    prefix

    Parameter prefix to use for placeholders.

    + +
    pattern

    Parameter pattern to use for placeholders:

    • "": no pattern

    • "1": position

    • anything else: field name

    +

    Details

    The row.names argument must be passed explicitly in order to avoid a compatibility warning. The default will be changed in a later release.

    +

    Examples

    sqlAppendTable(ANSI(), "iris", head(iris))
    @@ -157,12 +190,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/sqlCreateTable.html b/dev/reference/sqlCreateTable.html index e14cf54a..30f32f0f 100644 --- a/dev/reference/sqlCreateTable.html +++ b/dev/reference/sqlCreateTable.html @@ -2,6 +2,7 @@ Compose query to create a simple table — sqlCreateTable • DBI Skip to contents + +
    +

    Exposes an interface to simple CREATE TABLE commands. The default method is ANSI SQL 99 compliant. @@ -66,14 +81,20 @@

    Methods in other packages

    RPresto::sqlCreateTable("PrestoConnection")

    +

    Usage

    sqlCreateTable(con, table, fields, row.names = NA, temporary = FALSE, ...)
    +

    Arguments

    -
    con
    + + +
    con

    A database connection.

    + +
    table

    The table name, passed on to dbQuoteIdentifier(). Options are:

    • a character string with the unquoted DBMS table name, e.g. "table_name",

    • @@ -82,6 +103,8 @@

      ArgumentsSQL() with the quoted and fully qualified table name given verbatim, e.g. SQL('"my_schema"."table_name"')

    + +
    fields

    Either a character vector or a data frame.

    A named character vector: Names are column names, values are types. @@ -89,6 +112,8 @@

    ArgumentsdbDataType().

    + +
    row.names

    Either TRUE, FALSE, NA or a string.

    If TRUE, always translate row names to a column called "row_names". @@ -97,16 +122,22 @@

    Argumentstemporary

    If TRUE, will generate a temporary table.

    + +
    ...

    Other arguments used by individual methods.

    +

    Details

    The row.names argument must be passed explicitly in order to avoid a compatibility warning. The default will be changed in a later release.

    +

    Examples

    sqlCreateTable(ANSI(), "my-table", c(a = "integer", b = "text"))
    @@ -152,12 +183,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/sqlData.html b/dev/reference/sqlData.html index 134dfe87..3b3ac273 100644 --- a/dev/reference/sqlData.html +++ b/dev/reference/sqlData.html @@ -4,6 +4,7 @@ method depending on whether the main upload device is through a single SQL string or multiple parameterized queries. This method is mostly useful for backend implementers. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. odbc::sqlData("OdbcConnection") pool::sqlData("Pool") @@ -11,11 +12,13 @@ RMariaDB::sqlData("MariaDBConnection") RPostgres::sqlData("PqConnection") RSQLite::sqlData("SQLiteConnection") + '> Skip to contents + +
    +

    This is a generic method that coerces R objects into vectors suitable for upload to the database. The output will vary a little from method to @@ -63,16 +78,24 @@

    Methods in other packages

    RSQLite::sqlData("SQLiteConnection")

    +

    Usage

    sqlData(con, value, row.names = NA, ...)
    +

    Arguments

    -
    con
    + + +
    con

    A database connection.

    + +
    value

    A data frame

    + +
    row.names

    Either TRUE, FALSE, NA or a string.

    If TRUE, always translate row names to a column called "row_names". @@ -81,8 +104,11 @@

    Arguments...

    Other arguments used by individual methods.

    +

    Details

    @@ -91,6 +117,7 @@

    Details

    Converts all columns to strings with dbQuoteLiteral()

  • Replaces NA with NULL

  • +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -117,12 +144,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/sqlInterpolate.html b/dev/reference/sqlInterpolate.html index b6addec2..cc447d08 100644 --- a/dev/reference/sqlInterpolate.html +++ b/dev/reference/sqlInterpolate.html @@ -7,12 +7,16 @@ ?: each occurrence of a standalone ? is replaced with a value ?name1, ?name2, ...: values are given as named arguments or a named list, the names are used to match the values + + Mixing ? and ?name syntaxes is an error. The number and names of values supplied must correspond to the placeholders used in the query. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. pool::sqlInterpolate("Pool") sparklyr::sqlInterpolate("spark_connection") + '> Skip to contents + +
    +

    Accepts a query string with placeholders for values, and returns a string with the values embedded. @@ -68,20 +87,28 @@

    Methods in other packages

    sparklyr::sqlInterpolate("spark_connection")

    +

    Usage

    sqlInterpolate(conn, sql, ..., .dots = list())
    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    sql

    A SQL string containing variables to interpolate. Variables must start with a question mark and can be any valid R identifier, i.e. it must start with a letter or ., and be followed by a letter, digit, . or _.

    + +
    ..., .dots

    Values (for ...) or a list (for .dots) to interpolate into a string. @@ -89,19 +116,23 @@

    ArgumentsdbQuoteLiteral() prior to interpolation to protect against SQL injection attacks. Arguments created by SQL() or dbQuoteIdentifier() remain unchanged.

    +

    Value

    -

    The sql query with the values from ... and .dots safely +

    The sql query with the values from ... and .dots safely embedded.

    Backend authors

    + +

    If you are implementing an SQL backend with non-ANSI quoting rules, you'll need to implement a method for sqlParseVariables(). Failure to do so does not expose you to SQL injection attacks, but will (rarely) result in errors matching supplied and interpolated variables.

    +

    Examples

    sql <- "SELECT * FROM X WHERE name = ?name"
    @@ -147,12 +178,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/sqlParseVariables.html b/dev/reference/sqlParseVariables.html index 25cca5e9..d572d953 100644 --- a/dev/reference/sqlParseVariables.html +++ b/dev/reference/sqlParseVariables.html @@ -7,12 +7,19 @@ calls sqlParseVariablesImpl with the appropriate quote and comment specifications."> Skip to contents + +
    +

    If you're implementing a backend that uses non-ANSI quoting or commenting rules, you'll need to implement a method for sqlParseVariables that calls sqlParseVariablesImpl with the appropriate quote and comment specifications.

    +

    Usage

    sqlCommentSpec(start, end, endRequired)
    @@ -46,27 +58,44 @@ 

    Usage sqlParseVariables(conn, sql, ...)

    +

    Arguments

    -
    start, end
    + + +
    start, end

    Start and end characters for quotes and comments

    + +
    endRequired

    Is the ending character of a comment required?

    + +
    escape

    What character can be used to escape quoting characters? Defaults to "", i.e. nothing.

    + +
    doubleEscape

    Can quoting characters be escaped by doubling them? Defaults to TRUE.

    + +
    sql

    SQL to parse (a character string)

    + +
    quotes

    A list of QuoteSpec calls defining the quoting specification.

    + +
    comments

    A list of CommentSpec calls defining the commenting specification.

    +
    +

    Examples

    # Use [] for quoting and no comments
    @@ -96,12 +125,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/reference/transactions.html b/dev/reference/transactions.html index 63438fa8..d2684698 100644 --- a/dev/reference/transactions.html +++ b/dev/reference/transactions.html @@ -5,6 +5,7 @@ In any case, the DBMS guarantees that either all or none of the statements have a permanent effect. This helps ensuring consistency of write operations to multiple tables. + Methods in other packagesThis documentation page describes the generics. Refer to the documentation pages linked below for the documentation for the methods that are implemented in various backend packages. adbi::dbBegin("AdbiConnection") adbi::dbCommit("AdbiConnection") @@ -48,12 +49,14 @@ sparklyr::dbBegin("spark_connection") sparklyr::dbCommit("spark_connection") sparklyr::dbRollback("spark_connection") + '> Skip to contents + +
    +

    A transaction encapsulates several SQL statements in an atomic unit. It is initiated with dbBegin() and either made persistent with dbCommit() @@ -174,6 +189,7 @@

    Methods in other packages

    sparklyr::dbRollback("spark_connection")

    +

    Usage

    dbBegin(conn, ...)
    @@ -182,17 +198,23 @@ 

    Usage dbRollback(conn, ...)

    +

    Arguments

    -
    conn
    + + +
    conn

    A DBIConnection object, as returned by dbConnect().

    + +
    ...

    Other parameters passed on to methods.

    +

    Value

    -

    dbBegin(), dbCommit() and dbRollback() return TRUE, invisibly.

    +

    dbBegin(), dbCommit() and dbRollback() return TRUE, invisibly.

    Details

    @@ -202,6 +224,9 @@

    Details

    Failure modes

    + + +

    The implementations are expected to raise an error in case of failure, but this is not tested. In any way, all generics throw an error with a closed @@ -215,6 +240,9 @@

    Failure modes

    Specification

    + + +

    Actual support for transactions may vary between backends. A transaction is initiated by a call to dbBegin() and committed by a call to dbCommit(). @@ -246,6 +274,7 @@

    SpecificationSee also

    Self-contained transactions: dbWithTransaction()

    +

    Examples

    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    @@ -294,12 +323,21 @@ 

    Examples

    + +
    + + + + + diff --git a/dev/search.json b/dev/search.json index 9fc6b55a..44d1ab11 100644 --- a/dev/search.json +++ b/dev/search.json @@ -1 +1 @@ -[{"path":"https://dbi.r-dbi.org/dev/CODE_OF_CONDUCT.html","id":null,"dir":"","previous_headings":"","what":"Contributor Code of Conduct","title":"Contributor Code of Conduct","text":"contributors maintainers project, pledge respect people contribute reporting issues, posting feature requests, updating documentation, submitting pull requests patches, activities. committed making participation project harassment-free experience everyone, regardless level experience, gender, gender identity expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion. Examples unacceptable behavior participants include use sexual language imagery, derogatory comments personal attacks, trolling, public private harassment, insults, unprofessional conduct. Project maintainers right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct. Project maintainers follow Code Conduct may removed project team. Instances abusive, harassing, otherwise unacceptable behavior may reported opening issue contacting one project maintainers. Code Conduct adapted Contributor Covenant (https://www.contributor-covenant.org), version 1.0.0, available https://contributor-covenant.org/version/1/0/0/.","code":""},{"path":"https://dbi.r-dbi.org/dev/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to DBI","title":"Contributing to DBI","text":"outlines propose change DBI.","code":""},{"path":"https://dbi.r-dbi.org/dev/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to DBI","text":"Small typos grammatical errors documentation may edited directly using GitHub web interface, long changes made source file. YES: edit roxygen comment .R file R/. : edit .Rd file man/.","code":""},{"path":"https://dbi.r-dbi.org/dev/CONTRIBUTING.html","id":"prerequisites","dir":"","previous_headings":"","what":"Prerequisites","title":"Contributing to DBI","text":"make substantial pull request, always file issue make sure someone team agrees ’s problem. ’ve found bug, create associated issue illustrate bug minimal reprex.","code":""},{"path":"https://dbi.r-dbi.org/dev/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"","what":"Pull request process","title":"Contributing to DBI","text":"recommend create Git branch pull request (PR). Look Travis AppVeyor build status making changes. README contain badges continuous integration services used package. use roxygen2, Markdown syntax, documentation. use testthat. Contributions test cases included easier accept. Please update NEWS.md.","code":""},{"path":"https://dbi.r-dbi.org/dev/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to DBI","text":"Please note DBI project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"https://dbi.r-dbi.org/dev/LICENSE.html","id":"gnu-lesser-general-public-license","dir":"","previous_headings":"","what":"GNU LESSER GENERAL PUBLIC LICENSE","title":"NA","text":"Version 2.1, February 1999","code":"Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.]"},{"path":"https://dbi.r-dbi.org/dev/LICENSE.html","id":"preamble","dir":"","previous_headings":"","what":"Preamble","title":"NA","text":"licenses software designed take away freedom share change . contrast, GNU General Public Licenses intended guarantee freedom share change free software–make sure software free users. license, Lesser General Public License, applies specially designated software packages–typically libraries–Free Software Foundation authors decide use . can use , suggest first think carefully whether license ordinary General Public License better strategy use particular case, based explanations . speak free software, referring freedom use, price. General Public Licenses designed make sure freedom distribute copies free software (charge service wish); receive source code can get want ; can change software use pieces new free programs; informed can things. protect rights, need make restrictions forbid distributors deny rights ask surrender rights. restrictions translate certain responsibilities distribute copies library modify . example, distribute copies library, whether gratis fee, must give recipients rights gave . must make sure , , receive can get source code. link code library, must provide complete object files recipients, can relink library making changes library recompiling . must show terms know rights. protect rights two-step method: (1) copyright library, (2) offer license, gives legal permission copy, distribute /modify library. protect distributor, want make clear warranty free library. Also, library modified someone else passed , recipients know original version, original author’s reputation affected problems might introduced others. Finally, software patents pose constant threat existence free program. wish make sure company effectively restrict users free program obtaining restrictive license patent holder. Therefore, insist patent license obtained version library must consistent full freedom use specified license. GNU software, including libraries, covered ordinary GNU General Public License. license, GNU Lesser General Public License, applies certain designated libraries, quite different ordinary General Public License. use license certain libraries order permit linking libraries non-free programs. program linked library, whether statically using shared library, combination two legally speaking combined work, derivative original library. ordinary General Public License therefore permits linking entire combination fits criteria freedom. Lesser General Public License permits lax criteria linking code library. call license “Lesser” General Public License Less protect user’s freedom ordinary General Public License. also provides free software developers Less advantage competing non-free programs. disadvantages reason use ordinary General Public License many libraries. However, Lesser license provides advantages certain special circumstances. example, rare occasions, may special need encourage widest possible use certain library, becomes de-facto standard. achieve , non-free programs must allowed use library. frequent case free library job widely used non-free libraries. case, little gain limiting free library free software , use Lesser General Public License. cases, permission use particular library non-free programs enables greater number people use large body free software. example, permission use GNU C Library non-free programs enables many people use whole GNU operating system, well variant, GNU/Linux operating system. Although Lesser General Public License Less protective users’ freedom, ensure user program linked Library freedom wherewithal run program using modified version Library. precise terms conditions copying, distribution modification follow. Pay close attention difference “work based library” “work uses library”. former contains code derived library, whereas latter must combined library order run.","code":""},{"path":"https://dbi.r-dbi.org/dev/LICENSE.html","id":"terms-and-conditions-for-copying-distribution-and-modification","dir":"","previous_headings":"","what":"TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION","title":"NA","text":"0. License Agreement applies software library program contains notice placed copyright holder authorized party saying may distributed terms Lesser General Public License (also called “License”). licensee addressed “”. “library” means collection software functions /data prepared conveniently linked application programs (use functions data) form executables. “Library”, , refers software library work distributed terms. “work based Library” means either Library derivative work copyright law: say, work containing Library portion , either verbatim modifications /translated straightforwardly another language. (Hereinafter, translation included without limitation term “modification”.) “Source code” work means preferred form work making modifications . library, complete source code means source code modules contains, plus associated interface definition files, plus scripts used control compilation installation library. Activities copying, distribution modification covered License; outside scope. act running program using Library restricted, output program covered contents constitute work based Library (independent use Library tool writing ). Whether true depends Library program uses Library . 1. may copy distribute verbatim copies Library’s complete source code receive , medium, provided conspicuously appropriately publish copy appropriate copyright notice disclaimer warranty; keep intact notices refer License absence warranty; distribute copy License along Library. may charge fee physical act transferring copy, may option offer warranty protection exchange fee. 2. may modify copy copies Library portion , thus forming work based Library, copy distribute modifications work terms Section 1 , provided also meet conditions: ) modified work must software library. b) must cause files modified carry prominent notices stating changed files date change. c) must cause whole work licensed charge third parties terms License. d) facility modified Library refers function table data supplied application program uses facility, argument passed facility invoked, must make good faith effort ensure , event application supply function table, facility still operates, performs whatever part purpose remains meaningful. (example, function library compute square roots purpose entirely well-defined independent application. Therefore, Subsection 2d requires application-supplied function table used function must optional: application supply , square root function must still compute square roots.) requirements apply modified work whole. identifiable sections work derived Library, can reasonably considered independent separate works , License, terms, apply sections distribute separate works. distribute sections part whole work based Library, distribution whole must terms License, whose permissions licensees extend entire whole, thus every part regardless wrote . Thus, intent section claim rights contest rights work written entirely ; rather, intent exercise right control distribution derivative collective works based Library. addition, mere aggregation another work based Library Library (work based Library) volume storage distribution medium bring work scope License. 3. may opt apply terms ordinary GNU General Public License instead License given copy Library. , must alter notices refer License, refer ordinary GNU General Public License, version 2, instead License. (newer version version 2 ordinary GNU General Public License appeared, can specify version instead wish.) make change notices. change made given copy, irreversible copy, ordinary GNU General Public License applies subsequent copies derivative works made copy. option useful wish copy part code Library program library. 4. may copy distribute Library (portion derivative , Section 2) object code executable form terms Sections 1 2 provided accompany complete corresponding machine-readable source code, must distributed terms Sections 1 2 medium customarily used software interchange. distribution object code made offering access copy designated place, offering equivalent access copy source code place satisfies requirement distribute source code, even though third parties compelled copy source along object code. 5. program contains derivative portion Library, designed work Library compiled linked , called “work uses Library”. work, isolation, derivative work Library, therefore falls outside scope License. However, linking “work uses Library” Library creates executable derivative Library (contains portions Library), rather “work uses library”. executable therefore covered License. Section 6 states terms distribution executables. “work uses Library” uses material header file part Library, object code work may derivative work Library even though source code . Whether true especially significant work can linked without Library, work library. threshold true precisely defined law. object file uses numerical parameters, data structure layouts accessors, small macros small inline functions (ten lines less length), use object file unrestricted, regardless whether legally derivative work. (Executables containing object code plus portions Library still fall Section 6.) Otherwise, work derivative Library, may distribute object code work terms Section 6. executables containing work also fall Section 6, whether linked directly Library . 6. exception Sections , may also combine link “work uses Library” Library produce work containing portions Library, distribute work terms choice, provided terms permit modification work customer’s use reverse engineering debugging modifications. must give prominent notice copy work Library used Library use covered License. must supply copy License. work execution displays copyright notices, must include copyright notice Library among , well reference directing user copy License. Also, must one things: ) Accompany work complete corresponding machine-readable source code Library including whatever changes used work (must distributed Sections 1 2 ); , work executable linked Library, complete machine-readable “work uses Library”, object code /source code, user can modify Library relink produce modified executable containing modified Library. (understood user changes contents definitions files Library necessarily able recompile application use modified definitions.) b) Use suitable shared library mechanism linking Library. suitable mechanism one (1) uses run time copy library already present user’s computer system, rather copying library functions executable, (2) operate properly modified version library, user installs one, long modified version interface-compatible version work made . c) Accompany work written offer, valid least three years, give user materials specified Subsection 6a, , charge cost performing distribution. d) distribution work made offering access copy designated place, offer equivalent access copy specified materials place. e) Verify user already received copy materials already sent user copy. executable, required form “work uses Library” must include data utility programs needed reproducing executable . However, special exception, materials distributed need include anything normally distributed (either source binary form) major components (compiler, kernel, ) operating system executable runs, unless component accompanies executable. may happen requirement contradicts license restrictions proprietary libraries normally accompany operating system. contradiction means use Library together executable distribute. 7. may place library facilities work based Library side--side single library together library facilities covered License, distribute combined library, provided separate distribution work based Library library facilities otherwise permitted, provided two things: ) Accompany combined library copy work based Library, uncombined library facilities. must distributed terms Sections . b) Give prominent notice combined library fact part work based Library, explaining find accompanying uncombined form work. 8. may copy, modify, sublicense, link , distribute Library except expressly provided License. attempt otherwise copy, modify, sublicense, link , distribute Library void, automatically terminate rights License. However, parties received copies, rights, License licenses terminated long parties remain full compliance. 9. required accept License, since signed . However, nothing else grants permission modify distribute Library derivative works. actions prohibited law accept License. Therefore, modifying distributing Library (work based Library), indicate acceptance License , terms conditions copying, distributing modifying Library works based . 10. time redistribute Library (work based Library), recipient automatically receives license original licensor copy, distribute, link modify Library subject terms conditions. may impose restrictions recipients’ exercise rights granted herein. responsible enforcing compliance third parties License. 11. , consequence court judgment allegation patent infringement reason (limited patent issues), conditions imposed (whether court order, agreement otherwise) contradict conditions License, excuse conditions License. distribute satisfy simultaneously obligations License pertinent obligations, consequence may distribute Library . example, patent license permit royalty-free redistribution Library receive copies directly indirectly , way satisfy License refrain entirely distribution Library. portion section held invalid unenforceable particular circumstance, balance section intended apply, section whole intended apply circumstances. purpose section induce infringe patents property right claims contest validity claims; section sole purpose protecting integrity free software distribution system implemented public license practices. Many people made generous contributions wide range software distributed system reliance consistent application system; author/donor decide willing distribute software system licensee impose choice. section intended make thoroughly clear believed consequence rest License. 12. distribution /use Library restricted certain countries either patents copyrighted interfaces, original copyright holder places Library License may add explicit geographical distribution limitation excluding countries, distribution permitted among countries thus excluded. case, License incorporates limitation written body License. 13. Free Software Foundation may publish revised /new versions Lesser General Public License time time. new versions similar spirit present version, may differ detail address new problems concerns. version given distinguishing version number. Library specifies version number License applies “later version”, option following terms conditions either version later version published Free Software Foundation. Library specify license version number, may choose version ever published Free Software Foundation. 14. wish incorporate parts Library free programs whose distribution conditions incompatible , write author ask permission. software copyrighted Free Software Foundation, write Free Software Foundation; sometimes make exceptions . decision guided two goals preserving free status derivatives free software promoting sharing reuse software generally. WARRANTY 15. LIBRARY LICENSED FREE CHARGE, WARRANTY LIBRARY, EXTENT PERMITTED APPLICABLE LAW. EXCEPT OTHERWISE STATED WRITING COPYRIGHT HOLDERS /PARTIES PROVIDE LIBRARY “” WITHOUT WARRANTY KIND, EITHER EXPRESSED IMPLIED, INCLUDING, LIMITED , IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE. ENTIRE RISK QUALITY PERFORMANCE LIBRARY . LIBRARY PROVE DEFECTIVE, ASSUME COST NECESSARY SERVICING, REPAIR CORRECTION. 16. EVENT UNLESS REQUIRED APPLICABLE LAW AGREED WRITING COPYRIGHT HOLDER, PARTY MAY MODIFY /REDISTRIBUTE LIBRARY PERMITTED , LIABLE DAMAGES, INCLUDING GENERAL, SPECIAL, INCIDENTAL CONSEQUENTIAL DAMAGES ARISING USE INABILITY USE LIBRARY (INCLUDING LIMITED LOSS DATA DATA RENDERED INACCURATE LOSSES SUSTAINED THIRD PARTIES FAILURE LIBRARY OPERATE SOFTWARE), EVEN HOLDER PARTY ADVISED POSSIBILITY DAMAGES.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/LICENSE.html","id":"how-to-apply-these-terms-to-your-new-libraries","dir":"","previous_headings":"","what":"How to Apply These Terms to Your New Libraries","title":"NA","text":"develop new library, want greatest possible use public, recommend making free software everyone can redistribute change. can permitting redistribution terms (, alternatively, terms ordinary General Public License). apply terms, attach following notices library. safest attach start source file effectively convey exclusion warranty; file least “copyright” line pointer full notice found. Also add information contact electronic paper mail. also get employer (work programmer) school, , sign “copyright disclaimer” library, necessary. sample; alter names: ’s !","code":"one line to give the library's name and an idea of what it does. Copyright (C) year name of author This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. signature of Ty Coon, 1 April 1990 Ty Coon, President of Vice"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:version","dir":"Articles","previous_headings":"","what":"Version","title":"A Common Database Interface (DBI)","text":"document describes version 0.1-6 database interface API (application programming interface).","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:intro","dir":"Articles","previous_headings":"","what":"Introduction","title":"A Common Database Interface (DBI)","text":"database interface (DBI) separates connectivity DBMS “front-end” “back-end”. Applications use exposed “front-end” API. facilities communicate specific DBMS (Oracle, PostgreSQL, etc.) provided “device drivers” get invoked automatically S language evaluator. following example illustrates DBI capabilities: (first 2 expressions DBMS-specific – others independent database engine ). Individual DBI drivers need implement features list (indicate optional). Furthermore, drivers may extend core DBI facilities, suggest extensions clearly indicated documented. following elements DBI: set classes methods (Section [sec:DBIClasses]) defines operations possible defined, e.g.: connect/disconnect DBMS create execute statements DBMS extract results/output statements error/exception handling information (meta-data) database objects transaction management (optional) things left explicitly unspecified, e.g., authentication even query language, although hard avoid references SQL relational database management systems (RDBMS). Drivers Drivers collection functions implement functionality defined context specific DBMS, e.g., mSQL, Informix. Data type mappings (Section [sec:data-mappings].) Mappings conversions DBMS data types R/S objects. drivers implement “basic” primitives (see ), may chose add user-defined conversion function handle generic objects (e.g., factors, ordered factors, time series, arrays, images). Utilities (Section [sec:utilities].) facilities help details mapping identifiers S DBMS (e.g., _ illegal R/S names, . used constructing compound SQL identifiers), etc.","code":"## Choose the proper DBMS driver and connect to the server drv <- dbDriver(\"ODBC\") con <- dbConnect(drv, \"dsn\", \"usr\", \"pwd\") ## The interface can work at a higher level importing tables ## as data.frames and exporting data.frames as DBMS tables. dbListTables(con) dbListFields(con, \"quakes\") if(dbExistsTable(con, \"new_results\")) dbRemoveTable(con, \"new_results\") dbWriteTable(con, \"new_results\", new.output) ## The interface allows lower-level interface to the DBMS res <- dbSendQuery(con, paste( \"SELECT g.id, g.mirror, g.diam, e.voltage\", \"FROM geom_table as g, elec_measures as e\", \"WHERE g.id = e.id and g.mirrortype = 'inside'\", \"ORDER BY g.diam\")) out <- NULL while(!dbHasCompleted(res)){ chunk <- fetch(res, n = 10000) out <- c(out, doit(chunk)) } ## Free up resources dbClearResult(res) dbDisconnect(con) dbUnloadDriver(drv)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:DBIClasses","dir":"Articles","previous_headings":"","what":"DBI Classes and Methods","title":"A Common Database Interface (DBI)","text":"following main DBI classes. need extended individual database back-ends (Sybase, Oracle, etc.) Individual drivers need provide methods generic functions listed (methods optional indicated). Note: Although R releases prior 1.4 formal concept classes, use syntax S Version 4 classes methods (available R releases 1.4 later library methods) convey precisely DBI class hierarchy, methods, intended behavior. DBI classes DBIObject, DBIDriver, DBIConnection DBIResult. virtual classes. Drivers define new classes extend , e.g., PgSQLDriver, PgSQLConnection, . DBIObject: Virtual class1 groups DBI classes. DBIDriver: Virtual class groups DBMS drivers. DBMS driver extends class. Typically generator functions instantiate actual driver objects, e.g., PgSQL, HDF5, BerkeleyDB. DBIConnection: Virtual class encapsulates connections DBMS. DBIResult: Virtual class describes result DBMS query statement. [Q: distinguish simple result DBMS statements e.g., delete DBMS queries (.e., generate data).] methods format, print, show, dbGetInfo, summary defined (implemented DBI package) DBIObject base class, thus available implementations; individual drivers, however, free override see fit. format(x, ...): produces concise character representation (label) DBIObject x. print(x, ...)/show(x): prints one-line identification object x. summary(object, ...): produces concise description object. default method DBIObject simply invokes dbGetInfo(dbObj) prints name-value pairs one per line. Individual implementations may tailor appropriately. dbGetInfo(dbObj, ...): extracts information (meta-data) relevant DBIObject dbObj. may return list key/value pairs, individual meta-data supplied call, NULL requested meta-data available. Hint: Driver implementations may choose allow argument specify individual meta-data, e.g., dbGetInfo(drv, = max.connections). next sub-sections describe detail classes methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:DBIObject","dir":"Articles","previous_headings":"DBI Classes and Methods","what":"Class DBIObject","title":"A Common Database Interface (DBI)","text":"class simply groups DBI classes, thus extend .","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:DBIDriver","dir":"Articles","previous_headings":"DBI Classes and Methods","what":"Class DBIDriver","title":"A Common Database Interface (DBI)","text":"class identifies database management system. needs extended individual back-ends (Oracle, PostgreSQL, etc.) DBI provides generator dbDriver(driverName) simply invokes function driverName, turn instantiates corresponding driver object. DBIDriver class defines following methods: driverName: [meth:driverName] initializes driver code. name driverName refers actual generator function DBMS, e.g., RPgSQL, RODBC, HDF5. driver instance object used dbConnect (see page ) opening one possibly connections one DBMS. dbListConnections(drv, ...): list current connections handled drv driver. May NULL open connections. Drivers support multiple connections may return one open connection. dbGetInfo(dbObj, ...): returns list name-value pairs information driver. Hint: Useful entries include name: driver name (e.g., RODBC, RPgSQL); driver.version: version driver; DBI.version: version DBI driver implements, e.g., 0.1-2; client.version: client DBMS libraries (e.g., version libpq library case RPgSQL); max.connections: maximum number simultaneous connections; plus relevant information implementation, instance, driver handles upper/lower case identifiers. dbUnloadDriver(driverName) (optional): frees resources (local remote) used driver. Returns logical indicate succeeded .","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:DBIConnection","dir":"Articles","previous_headings":"DBI Classes and Methods","what":"Class DBIConnection","title":"A Common Database Interface (DBI)","text":"virtual class encapsulates connection DBMS, provides access dynamic queries, result sets, DBMS session management (transactions), etc. Note: Individual drivers free implement single multiple simultaneous connections. methods defined DBIConnection class include: dbConnect(drv, ...): [meth:dbConnect] creates opens connection database implemented driver drv (see Section [sec:DBIDriver]). driver define arguments required, e.g., dbname dsn database name, user, password. returns object extends DBIConnection driver-specific manner (e.g., MySQL implementation create object class MySQLConnection extends DBIConnection). dbDisconnect(conn, ...): closes connection, discards pending work, frees resources (e.g., memory, sockets). Returns logical indicating whether succeeded . dbSendQuery(conn, statement, ...): submits one statement DBMS. returns DBIResult object. object needed fetching data case statement generates output (see fetch page ), may used querying state operation; see dbGetInfo meta-data methods page . dbGetQuery(conn, statement, ...): submit, execute, extract output one operation. resulting object may data.frame statement generates output. Otherwise return value logical indicating whether query succeeded . dbGetException(conn, ...): returns list elements errNum errMsg status last DBMS statement sent given connection (information may also provided dbGetInfo meta-data function conn object. Hint: ANSI SQL-92 defines status code status message return members list. dbGetInfo(dbObj, ...): returns list name-value pairs describing state connection; may return one meta-data, actual driver method allows specify individual pieces meta-data (e.g., maximum number open results/cursors). Hint: Useful entries include dbname: name database use; db.version: DBMS server version (e.g., “Oracle 8.1.7 Solaris”; host: host database server resides; user: user name; password: password (safe?); plus arguments related connection (e.g., thread id, socket TCP connection type). dbListResults(conn, ...): list DBIResult objects currently active connection conn. May NULL result set active conn. Drivers implement one result set per connection return one object (need wrap list). Note: following convenience methods simplify import/export (mainly) data.frames. first five methods implement core methods needed attach remote DBMS S search path. (details, see Chambers (1991, 1998).) Hint: relational DBMS methods may easily implemented using core DBI methods dbConnect, dbSendQuery, fetch, due SQL reflectance (.e., one easily gets meta-data querying appropriate tables RDBMS). dbListTables(conn, ...): returns character vector (possibly zero-length) object (table) names available conn connection. dbReadTable(conn, name, ...): imports data stored remotely table name connection conn. Use field row.names row.names attribute output data.frame. Returns data.frame. [Q: spell row.names created? E.g., use field (unique values) row.names? Also, dbReadTable reproduce data.frame exported dbWriteTable?] dbWriteTable(conn, name, value, ...): write object value (perhaps coercing data.frame) remote object name connection conn. Returns logical indicating whether operation succeeded . dbExistsTable(conn, name, ...): remote object name exist conn? Returns logical. dbRemoveTable(conn, name, ...): removes remote object name connection conn. Returns logical indicating whether operation succeeded . dbListFields(conn, name, ...): returns character vector listing field names remote table name connection conn (see dbColumnInfo() extracting data type table). Note: following methods deal transactions stored procedures. functions optional. dbCommit(conn, ...)(optional): commits pending transaction connection returns TRUE FALSE depending whether operation succeeded . dbRollback(conn, ...)(optional): undoes current transaction connection returns TRUE FALSE depending whether operation succeeded . dbCallProc(conn, storedProc, ...)(optional): invokes stored procedure DBMS returns DBIResult object. [Stored procedures part ANSI SQL-92 standard vary substantially one RDBMS another.] Deprecated since 2014: recommended way calling stored procedure now dbGetQuery result set returned dbExecute data manipulation cases return result set.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:DBIResult","dir":"Articles","previous_headings":"DBI Classes and Methods","what":"Class DBIResult","title":"A Common Database Interface (DBI)","text":"virtual class describes result state execution DBMS statement (statement, query non-query). result set res keeps track whether statement produces output R/S, many rows affected operation, many rows fetched (statement query), whether rows fetch, etc. Note: Individual drivers free allow single multiple active results per connection. [Q: distinguish results return data return data?] class DBIResult defines following methods: fetch(res, n, ...): [meth:fetch] fetches next n elements (rows) result set res return data.frame. value n=-1 interpreted “return elements/rows”. dbClearResult(res, ...): flushes pending data frees resources (local remote) used object res sides connection. Returns logical indicating success . dbGetInfo(dbObj, ...): returns name-value list state result set. Hint: Useful entries include statement: character string representation statement executed; rows.affected: number affected records (changed, deleted, inserted, extracted); row.count: number rows fetched far; .completed: statement (query) finished? .select: logical describing whether statement generates output; plus relevant driver-specific meta-data. dbColumnInfo(res, ...): produces data.frame describes output query. data.frame many rows output fields result set, column data.frame describe aspect result set field (field name, type, etc.) Hint: data.frame columns include field.name: DBMS field label; field.type: DBMS field type (implementation-specific); data.type: corresponding R/S data type, e.g., integer; precision/scale: (ODBC terminology), display width number decimal digits, respectively; nullable: whether corresponding field may contain (DBMS) NULL values; plus driver-specific information. dbSetDataMappings(flds, ...)(optional): defines conversion internal DBMS data types R/S classes. expect default mappings (see Section [sec:data-mappings]) far common ones, users need control may specify class generator individual fields result set. [topic needs discussion.] Note: following convenience methods extract information result object (may implemented invoking dbGetInfo appropriate arguments). dbGetStatement(res, ...)(optional): returns DBMS statement (character string) associated result res. dbGetRowsAffected(res, ...)(optional): returns number rows affected executed statement (number records deleted, modified, extracted, etc.) dbHasCompleted(res, ...)(optional): returns logical indicates whether operation completed (e.g., records fetched?). dbGetRowCount(res, ...)(optional): returns number rows fetched far.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:data-mappings","dir":"Articles","previous_headings":"","what":"Data Type Mappings","title":"A Common Database Interface (DBI)","text":"data types supported databases different data types R S, mapping “primitive” types straightforward: many fixed varying length character types mapped R/S character. Fixed-precision (non-IEEE) numbers mapped either doubles (numeric) long (integer). Notice many DBMS follow -called IEEE arithmetic, potential problems /overflows loss precision, given R/S primitive types much identify situations warn application (?). default dates date-time objects mapped character using appropriate TO_CHAR function DBMS (take care locale information). RDBMS support type CURRENCY MONEY mapped numeric (potential round errors). Large objects (character, binary, file, etc.) also need mapped. User-defined functions may specified actual conversion (done inter-systems packages 2). Specifying user-defined conversion functions still needs defined.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:utilities","dir":"Articles","previous_headings":"","what":"Utilities","title":"A Common Database Interface (DBI)","text":"core DBI implementation make available drivers common basic utilities. instance: dbGetDBIVersion: returns version currently attached DBI string. dbDataType(dbObj, obj, ...): returns string (approximately) appropriate data type R/S object obj. DBI can implement following ANSI-92 standard, individual drivers may want/need extend make use DBMS-specific types. make.db.names(dbObj, snames, ...): maps R/S names (identifiers) SQL identifiers replacing illegal characters (.) legal SQL _. SQLKeywords(dbObj, ...): returns character vector SQL keywords (reserved words). default method returns list .SQL92Keywords, drivers update vector DBMS-specific additional reserved words. isSQLKeyword(dbObj, name, ...): element character vector name determine whether SQL keyword, reported generic function SQLKeywords. Returns logical vector parallel input object name.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:open-issues","dir":"Articles","previous_headings":"","what":"Open Issues and Limitations","title":"A Common Database Interface (DBI)","text":"number issues limitations current DBI conscientiously address interest simplicity. list important ones. Non-SQL: realistic attempt encompass non-relational databases, like HDF5, Berkeley DB, etc.? Security: allowing users specify passwords R/S scripts may unacceptable applications. need consider alternatives users store authentication files (perhaps similar ODBC’s odbc.ini) stringent permissions. Exceptions: exception mechanism bit simple, provide information problems stem DBMS interface . instance, /overflow loss precision move numeric data DBMS limited primitives R/S. Asynchronous communication: DBMS support synchronous asynchronous communications, allowing applications submit query proceed database server process query. application notified (may need poll server) query completed. large computations, useful, DBI need specify interrupt server (necessary) plus details. Also, DBMS require applications use threads implement asynchronous communication, something neither R S-Plus currently addresses. SQL scripts: DBI defines execute one SQL statement time, forcing users split SQL scripts individual statements. need mechanism users can submit SQL scripts possibly generate multiple result sets; case may need introduce new methods loop multiple results (similar Python’s nextResultSet). BLOBS/CLOBS: large objects (character binary) present challenges R S-Plus. becoming common store images, sounds, data types binary objects DBMS, can principle quite large. SQL-92 ANSI standard allows 2 gigabytes objects. need carefully plan deal binary objects. Transactions: transaction management fully described. Additional methods: need additional methods? (e.g., dbListDatabases(conn), dbListTableIndices(conn, name), list available drivers?) Bind variables: interface heavily biased towards queries, opposed general purpose database development. particular made attempt define “bind variables”; mechanism contents R/S objects implicitly moved database SQL execution. instance, following embedded SQL statement take vector sampleEmployee iterate elements get result. Perhaps DBI point future implement feature.","code":"/* SQL */ SELECT * from emp_table where emp_id = :sampleEmployee"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:resources","dir":"Articles","previous_headings":"","what":"Resources","title":"A Common Database Interface (DBI)","text":"idea common interface databases successfully implemented various environments, instance: Java’s Database Connectivity (JDBC) (www.javasoft.com). C Open Database Connectivity (ODBC) (www.unixodbc.org). Python’s Database Application Programming Interface (www.python.org). Perl’s Database Interface (dbi.perl.org).","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"who-this-tutorial-is-for","dir":"Articles","previous_headings":"","what":"Who this tutorial is for","title":"Advanced DBI Usage","text":"tutorial need use richer set SQL features data manipulation queries, parameterized queries queries performed using SQL’s transaction features. See vignette(\"DBI\", package = \"DBI\") basic tutorial covering connecting DBMS executing simple queries.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"how-to-run-more-complex-queries-using-dbi","dir":"Articles","previous_headings":"","what":"How to run more complex queries using DBI","title":"Advanced DBI Usage","text":"dbGetQuery() works calling number functions behind scenes. need control can manually build query, retrieve results selected rate, release resources involved calling functions. functions : dbSendQuery() sends SQL query DBMS returns result object. query limited SELECT statements. want send statements, INSERT, UPDATE, DELETE, etc, use dbSendStatement(). dbFetch() called result object returned dbSendQuery(). also accepts argument specifying number rows returned, e.g. n = 200. want fetch rows, use n = -1. dbClearResult() called finished retrieving data. releases resources associated result object.","code":"library(DBI) con <- dbConnect( RMariaDB::MariaDB(), host = \"db.relational-data.org\", port = 3306, username = \"guest\", password = \"relational\", dbname = \"sakila\" ) res <- dbSendQuery(con, \"SELECT * FROM film WHERE rating = 'G'\") df <- dbFetch(res, n = 3) dbClearResult(res) head(df, 3) ## film_id title ## 1 2 ACE GOLDFINGER ## 2 4 AFFAIR PREJUDICE ## 3 5 AFRICAN EGG ## description ## 1 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 2 A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank ## 3 A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico ## release_year language_id original_language_id rental_duration rental_rate ## 1 2006 1 NA 3 4.99 ## 2 2006 1 NA 5 2.99 ## 3 2006 1 NA 6 2.99 ## length replacement_cost rating special_features ## 1 48 12.99 G Trailers,Deleted Scenes ## 2 117 26.99 G Commentaries,Behind the Scenes ## 3 130 22.99 G Deleted Scenes ## last_update ## 1 2006-02-15 04:03:42 ## 2 2006-02-15 04:03:42 ## 3 2006-02-15 04:03:42"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"how-to-read-part-of-a-table-from-a-database","dir":"Articles","previous_headings":"","what":"How to read part of a table from a database","title":"Advanced DBI Usage","text":"dataset large may want fetch limited number rows time. demonstrated , can accomplished using loop function dbHasCompleted() used check ongoing rows, dbFetch() used n = X argument, specifying many rows return iteration. , call dbClearResult() end release resources.","code":"res <- dbSendQuery(con, \"SELECT * FROM film\") while (!dbHasCompleted(res)) { chunk <- dbFetch(res, n = 300) print(nrow(chunk)) } ## [1] 300 ## [1] 300 ## [1] 300 ## [1] 100 dbClearResult(res)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"how-to-use-parameters-safely-in-sql-queries","dir":"Articles","previous_headings":"","what":"How to use parameters (safely) in SQL queries","title":"Advanced DBI Usage","text":"dbSendQuery() can used parameterized SQL queries. DBI supports two ways avoid SQL injection attacks user-supplied parameters: quoting parameterized queries.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"quoting","dir":"Articles","previous_headings":"How to use parameters (safely) in SQL queries","what":"Quoting","title":"Advanced DBI Usage","text":"Quoting parameter values performed using function dbQuoteLiteral(), supports many R data types, including date time.1 cases users may supplying table column names use query data retrieval, names identifiers must also escaped. may DBMS-specific rules escaping identifiers, DBI provides function dbQuoteIdentifier() generate safe string representation. result can using glue::glue_sql(). performs safe quoting variable R statement appearing braces within query string.","code":"safe_id <- dbQuoteIdentifier(con, \"rating\") safe_param <- dbQuoteLiteral(con, \"G\") query <- paste0(\"SELECT title, \", safe_id, \" FROM film WHERE \", safe_id, \" = \", safe_param) query ## [1] \"SELECT title, `rating` FROM film WHERE `rating` = 'G'\" res <- dbSendQuery(con, query) dbFetch(res) ## title rating ## 1 ACE GOLDFINGER G ## 2 AFFAIR PREJUDICE G ## 3 AFRICAN EGG G ## Showing 3 out of 178 rows. dbClearResult(res) id <- \"rating\" param <- \"G\" query <- glue::glue_sql(\"SELECT title, {`id`} FROM film WHERE {`id`} = {param}\", .con = con) df <- dbGetQuery(con, query) head(df, 3) ## title rating ## 1 ACE GOLDFINGER G ## 2 AFFAIR PREJUDICE G ## 3 AFRICAN EGG G"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"parameterized-queries","dir":"Articles","previous_headings":"How to use parameters (safely) in SQL queries","what":"Parameterized queries","title":"Advanced DBI Usage","text":"Rather performing parameter substitution , can push DBMS including placeholders query. Different DBMS use different placeholder schemes, DBI passes SQL expression unchanged. MariaDB uses question mark (?) placeholder expects unnamed list parameter values. DBMS may use named parameters. recommend consulting documentation DBMS using. example, web search “mariadb parameterized queries” leads documentation PREPARE statement mentions: Within statement, “?” characters can used parameter markers indicate data values bound query later execute . Currently list placeholder scheme particular DBMS supports. Placeholders work literal values. parts query, e.g. table column identifiers, still need quoted dbQuoteIdentifier(). single set parameters, params argument dbSendQuery() dbGetQuery() can used. takes list members substituted order placeholders within query. example query using multiple placeholders MariaDB driver. placeholders supplied list values ordered match position placeholders query. wish perform query different sets parameter values, dbBind() used. two ways use dbBind(). Firstly, can used multiple times query. Secondly, dbBind() can used execute statement multiple values . Use list vectors query multiple parameters: Always disconnect database done.","code":"params <- list(\"G\") safe_id <- dbQuoteIdentifier(con, \"rating\") query <- paste0(\"SELECT * FROM film WHERE \", safe_id, \" = ?\") query ## [1] \"SELECT * FROM film WHERE `rating` = ?\" res <- dbSendQuery(con, query, params = params) dbFetch(res, n = 3) ## film_id title ## 1 2 ACE GOLDFINGER ## 2 4 AFFAIR PREJUDICE ## 3 5 AFRICAN EGG ## description ## 1 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 2 A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank ## 3 A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico ## release_year language_id original_language_id rental_duration rental_rate ## 1 2006 1 NA 3 4.99 ## 2 2006 1 NA 5 2.99 ## 3 2006 1 NA 6 2.99 ## length replacement_cost rating special_features ## 1 48 12.99 G Trailers,Deleted Scenes ## 2 117 26.99 G Commentaries,Behind the Scenes ## 3 130 22.99 G Deleted Scenes ## last_update ## 1 2006-02-15 04:03:42 ## 2 2006-02-15 04:03:42 ## 3 2006-02-15 04:03:42 dbClearResult(res) q_params <- list(\"G\", 90) query <- \"SELECT title, rating, length FROM film WHERE rating = ? AND length >= ?\" res <- dbSendQuery(con, query, params = q_params) dbFetch(res, n = 3) ## title rating length ## 1 AFFAIR PREJUDICE G 117 ## 2 AFRICAN EGG G 130 ## 3 ALAMO VIDEOTAPE G 126 dbClearResult(res) res <- dbSendQuery(con, \"SELECT * FROM film WHERE rating = ?\") dbBind(res, list(\"G\")) dbFetch(res, n = 3) ## film_id title ## 1 2 ACE GOLDFINGER ## 2 4 AFFAIR PREJUDICE ## 3 5 AFRICAN EGG ## description ## 1 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 2 A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank ## 3 A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico ## release_year language_id original_language_id rental_duration rental_rate ## 1 2006 1 NA 3 4.99 ## 2 2006 1 NA 5 2.99 ## 3 2006 1 NA 6 2.99 ## length replacement_cost rating special_features ## 1 48 12.99 G Trailers,Deleted Scenes ## 2 117 26.99 G Commentaries,Behind the Scenes ## 3 130 22.99 G Deleted Scenes ## last_update ## 1 2006-02-15 04:03:42 ## 2 2006-02-15 04:03:42 ## 3 2006-02-15 04:03:42 dbBind(res, list(\"PG\")) dbFetch(res, n = 3) ## film_id title ## 1 1 ACADEMY DINOSAUR ## 2 6 AGENT TRUMAN ## 3 12 ALASKA PHANTOM ## description ## 1 A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies ## 2 A Intrepid Panorama of a Robot And a Boy who must Escape a Sumo Wrestler in Ancient China ## 3 A Fanciful Saga of a Hunter And a Pastry Chef who must Vanquish a Boy in Australia ## release_year language_id original_language_id rental_duration rental_rate ## 1 2006 1 NA 6 0.99 ## 2 2006 1 NA 3 2.99 ## 3 2006 1 NA 6 0.99 ## length replacement_cost rating special_features ## 1 86 20.99 PG Deleted Scenes,Behind the Scenes ## 2 169 17.99 PG Deleted Scenes ## 3 136 22.99 PG Commentaries,Deleted Scenes ## last_update ## 1 2006-02-15 04:03:42 ## 2 2006-02-15 04:03:42 ## 3 2006-02-15 04:03:42 dbClearResult(res) res <- dbSendQuery(con, \"SELECT * FROM film WHERE rating = ?\") dbBind(res, list(c(\"G\", \"PG\"))) dbFetch(res, n = 3) ## film_id title ## 1 2 ACE GOLDFINGER ## 2 4 AFFAIR PREJUDICE ## 3 5 AFRICAN EGG ## description ## 1 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 2 A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank ## 3 A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico ## release_year language_id original_language_id rental_duration rental_rate ## 1 2006 1 NA 3 4.99 ## 2 2006 1 NA 5 2.99 ## 3 2006 1 NA 6 2.99 ## length replacement_cost rating special_features ## 1 48 12.99 G Trailers,Deleted Scenes ## 2 117 26.99 G Commentaries,Behind the Scenes ## 3 130 22.99 G Deleted Scenes ## last_update ## 1 2006-02-15 04:03:42 ## 2 2006-02-15 04:03:42 ## 3 2006-02-15 04:03:42 dbClearResult(res) q_params <- list(c(\"G\", \"PG\"), c(90, 120)) query <- \"SELECT title, rating, length FROM film WHERE rating = ? AND length >= ?\" res <- dbSendQuery(con, query, params = q_params) dbFetch(res, n = 3) ## title rating length ## 1 AFFAIR PREJUDICE G 117 ## 2 AFRICAN EGG G 130 ## 3 ALAMO VIDEOTAPE G 126 dbClearResult(res) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"sql-data-manipulation---update-delete-and-friends","dir":"Articles","previous_headings":"","what":"SQL data manipulation - UPDATE, DELETE and friends","title":"Advanced DBI Usage","text":"SQL queries affect underlying database, UPDATE, DELETE, INSERT , DROP TABLE, DBI provides two functions. dbExecute() passes SQL statement DBMS execution returns number rows affected. dbSendStatement() performs manner, returns result object. Call dbGetRowsAffected() result object get count affected rows. need call dbClearResult() result object afterwards release resources. actuality, dbExecute() convenience function calls dbSendStatement(), dbGetRowsAffected(), dbClearResult(). can use functions need control query process. subsequent examples use -memory SQL database provided RSQLite::SQLite(), remote database used examples allow writing. forget disconnect database end.","code":"library(DBI) con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cars\", head(cars, 3)) dbExecute( con, \"INSERT INTO cars (speed, dist) VALUES (1, 1), (2, 2), (3, 3)\" ) ## [1] 3 rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (4, 4), (5, 5), (6, 6)\" ) dbGetRowsAffected(rs) ## [1] 3 dbClearResult(rs) dbReadTable(con, \"cars\") ## speed dist ## 1 4 2 ## 2 4 10 ## 3 7 4 ## Showing 3 out of 9 rows. dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"sql-transactions-with-dbi","dir":"Articles","previous_headings":"","what":"SQL transactions with DBI","title":"Advanced DBI Usage","text":"DBI allows group multiple queries single atomic transaction. Transactions initiated dbBegin() either made persistent dbCommit() undone dbRollback(). example updates two tables ensures either tables updated, changes persisted database error thrown. withdrawing 300 credits, cash increased account decreased amount. transaction ensures either operations succeed, change occurs. can roll back changes manually necessary. forget call dbRollback() case error, otherwise transaction remains open indefinitely. dbWithTransaction() simplifies using transactions. Pass connection code want run transaction. execute code call dbCommit() success call dbRollback() error thrown. usual, forget disconnect database done.","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cash\", data.frame(amount = 100)) dbWriteTable(con, \"account\", data.frame(amount = 2000)) withdraw <- function(amount) { # All operations must be carried out as logical unit: dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(amount)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(amount)) } withdraw_transacted <- function(amount) { # Ensure atomicity dbBegin(con) # Perform operation withdraw(amount) # Persist results dbCommit(con) } withdraw_transacted(300) dbReadTable(con, \"cash\") ## amount ## 1 400 dbReadTable(con, \"account\") ## amount ## 1 1700 withdraw_if_funds <- function(amount) { dbBegin(con) withdraw(amount) # Rolling back after detecting negative value on account: if (dbReadTable(con, \"account\")$amount >= 0) { dbCommit(con) TRUE } else { message(\"Insufficient funds\") dbRollback(con) FALSE } } withdraw_if_funds(5000) ## Insufficient funds ## [1] FALSE dbReadTable(con, \"cash\") ## amount ## 1 400 dbReadTable(con, \"account\") ## amount ## 1 1700 withdraw_safely <- function(amount) { dbWithTransaction(con, { withdraw(amount) if (dbReadTable(con, \"account\")$amount < 0) { stop(\"Error: insufficient funds\", call. = FALSE) } }) } withdraw_safely(5000) ## Error: Error: insufficient funds dbReadTable(con, \"cash\") ## amount ## 1 400 dbReadTable(con, \"account\") ## amount ## 1 1700 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"conclusion","dir":"Articles","previous_headings":"","what":"Conclusion","title":"Advanced DBI Usage","text":"concludes major features DBI. details library functions covered tutorial vignette(\"DBI\", package = \"DBI\") introductory tutorial see DBI specification vignette(\"spec\", package = \"DBI\"). data manipulation library works higher level abstraction, check dplyr. grammar data manipulation can work local dataframes remote databases uses DBI hood.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"who-this-tutorial-is-for","dir":"Articles","previous_headings":"","what":"Who this tutorial is for","title":"Using DBI with Arrow","text":"tutorial want leverage Apache Arrow accessing manipulating data databases. See vignette(\"DBI\", package = \"DBI\") vignette(\"DBI-advanced\", package = \"DBI\") tutorials accessing data using R’s data frames instead Arrow’s structures.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"rationale","dir":"Articles","previous_headings":"","what":"Rationale","title":"Using DBI with Arrow","text":"Apache Arrow cross-language development platform -memory analytics, suitable large huge data, support --memory operation. Arrow also data exchange format, data types covered Arrow align well data types supported SQL databases. DBI 1.2.0 introduced support Arrow format exchanging data R databases. aim : accelerate data retrieval loading, using fewer costly data conversions; better support reading summarizing data database larger memory; provide better type fidelity workflows centered around Arrow. allows existing code used Arrow, allows new code written efficient flexible code uses R’s data frames. interface built around {nanoarrow} R package, nanoarrow::as_nanoarrow_array nanoarrow::as_nanoarrow_array_stream fundamental data structures.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"new-classes-and-generics","dir":"Articles","previous_headings":"","what":"New classes and generics","title":"Using DBI with Arrow","text":"DBI 1.2.0 introduces new classes generics working Arrow data: dbReadTableArrow() dbWriteTableArrow() dbCreateTableArrow() dbAppendTableArrow() dbGetQueryArrow() dbSendQueryArrow() dbBindArrow() dbFetchArrow() dbFetchArrowChunk() DBIResultArrow-class DBIResultArrowDefault-class Compatibility important DBI, implementing new generics classes greatly reduces risk breaking existing code. DBI package comes fully functional fallback implementation existing DBI backends. fallback improving performance, allows existing code used Arrow switching backend native Arrow support. Backends native support, like adbi package, implement new generics classes direct support improved performance. remainder tutorial, demonstrate new generics classes using RSQLite package. SQLite -memory database, code need database server installed running.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"prepare","dir":"Articles","previous_headings":"","what":"Prepare","title":"Using DBI with Arrow","text":"start setting database connection creating table data, using original dbWriteTable() method.","code":"library(DBI) con <- dbConnect(RSQLite::SQLite()) data <- data.frame( a = 1:3, b = 4.5, c = \"five\" ) dbWriteTable(con, \"tbl\", data)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"read-all-rows-from-a-table","dir":"Articles","previous_headings":"","what":"Read all rows from a table","title":"Using DBI with Arrow","text":"dbReadTableArrow() method reads rows table Arrow stream, similarly dbReadTable(). Arrow objects implement .data.frame() method, can convert stream data frame.","code":"stream <- dbReadTableArrow(con, \"tbl\") stream ## > ## $ get_schema:function () ## $ get_next :function (schema = x$get_schema(), validate = TRUE) ## $ release :function () as.data.frame(stream) ## a b c ## 1 1 4.5 five ## 2 2 4.5 five ## 3 3 4.5 five"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"run-queries","dir":"Articles","previous_headings":"","what":"Run queries","title":"Using DBI with Arrow","text":"dbGetQueryArrow() method runs query returns result Arrow stream. stream can turned arrow::RecordBatchReader object processed , without bringing R.","code":"stream <- dbGetQueryArrow(con, \"SELECT COUNT(*) AS n FROM tbl WHERE a < 3\") stream ## > ## $ get_schema:function () ## $ get_next :function (schema = x$get_schema(), validate = TRUE) ## $ release :function () path <- tempfile(fileext = \".parquet\") arrow::write_parquet(arrow::as_record_batch_reader(stream), path) arrow::read_parquet(path) ## n ## 1 2"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"prepared-queries","dir":"Articles","previous_headings":"","what":"Prepared queries","title":"Using DBI with Arrow","text":"dbGetQueryArrow() method supports prepared queries, using params argument accepts data frame list.","code":"params <- data.frame(a = 3L) stream <- dbGetQueryArrow(con, \"SELECT $a AS batch, * FROM tbl WHERE a < $a\", params = params) as.data.frame(stream) ## batch a b c ## 1 3 1 4.5 five ## 2 3 2 4.5 five params <- data.frame(a = c(2L, 4L)) # Equivalent to dbBind() stream <- dbGetQueryArrow(con, \"SELECT $a AS batch, * FROM tbl WHERE a < $a\", params = params) as.data.frame(stream) ## batch a b c ## 1 2 1 4.5 five ## 2 4 1 4.5 five ## 3 4 2 4.5 five ## 4 4 3 4.5 five"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"manual-flow","dir":"Articles","previous_headings":"","what":"Manual flow","title":"Using DBI with Arrow","text":"manual flow, use dbSendQueryArrow() send query database, dbFetchArrow() fetch result. also allows using new dbBindArrow() method bind data Arrow format prepared query. Result objects must cleared dbClearResult().","code":"rs <- dbSendQueryArrow(con, \"SELECT $a AS batch, * FROM tbl WHERE a < $a\") in_arrow <- nanoarrow::as_nanoarrow_array(data.frame(a = 1L)) dbBindArrow(rs, in_arrow) as.data.frame(dbFetchArrow(rs)) ## [1] batch a b c ## <0 rows> (or 0-length row.names) in_arrow <- nanoarrow::as_nanoarrow_array(data.frame(a = 2L)) dbBindArrow(rs, in_arrow) as.data.frame(dbFetchArrow(rs)) ## batch a b c ## 1 2 1 4.5 five in_arrow <- nanoarrow::as_nanoarrow_array(data.frame(a = 3L)) dbBindArrow(rs, in_arrow) as.data.frame(dbFetchArrow(rs)) ## batch a b c ## 1 3 1 4.5 five ## 2 3 2 4.5 five in_arrow <- nanoarrow::as_nanoarrow_array(data.frame(a = 1:4L)) dbBindArrow(rs, in_arrow) as.data.frame(dbFetchArrow(rs)) ## batch a b c ## 1 2 1 4.5 five ## 2 3 1 4.5 five ## 3 3 2 4.5 five ## 4 4 1 4.5 five ## 5 4 2 4.5 five ## 6 4 3 4.5 five dbClearResult(rs)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"writing-data","dir":"Articles","previous_headings":"","what":"Writing data","title":"Using DBI with Arrow","text":"Streams returned dbGetQueryArrow() dbReadTableArrow() can written table using dbWriteTableArrow().","code":"stream <- dbGetQueryArrow(con, \"SELECT * FROM tbl WHERE a < 3\") dbWriteTableArrow(con, \"tbl_new\", stream) dbReadTable(con, \"tbl_new\") ## a b c ## 1 1 4.5 five ## 2 2 4.5 five"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"appending-data","dir":"Articles","previous_headings":"","what":"Appending data","title":"Using DBI with Arrow","text":"control writing process, use dbCreateTableArrow() dbAppendTableArrow().","code":"stream <- dbGetQueryArrow(con, \"SELECT * FROM tbl WHERE a < 3\") dbCreateTableArrow(con, \"tbl_split\", stream) dbAppendTableArrow(con, \"tbl_split\", stream) ## [1] 2 stream <- dbGetQueryArrow(con, \"SELECT * FROM tbl WHERE a >= 3\") dbAppendTableArrow(con, \"tbl_split\", stream) ## [1] 1 dbReadTable(con, \"tbl_split\") ## a b c ## 1 1 4.5 five ## 2 2 4.5 five ## 3 3 4.5 five"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"conclusion","dir":"Articles","previous_headings":"","what":"Conclusion","title":"Using DBI with Arrow","text":"forget disconnect database done. concludes major features DBI’s new Arrow interface. details library functions covered tutorial see DBI specification vignette(\"spec\", package = \"DBI\"). See adbi package backend native Arrow support, nanoarrow arrow packages work Arrow format.","code":"dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:distr","dir":"Articles","previous_headings":"","what":"Computing with Distributed Data","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"data analysts, increasingly faced challenge larger data sources distributed machines locations; data sources reside relational database management systems (RDBMS). relational databases represent mature client-server distributed technology analysts exploiting ’ve done past. relational technology provides well-defined standard, ANSI SQL-92 X/Open CAE Specification: SQL RDA (1994), defining manipulating data highly optimized fashion virtually application. contrast, S Splus provided somewhat limited tools coping challenges larger distributed data sets (Splus provide import function import databases, quite limited terms SQL facilities). R community resourceful developed number good libraries connecting mSQL, MySQL, PostgreSQL, ODBC; library, however, defined interface database engine bit differently. think everybody’s advantage coordinate definition common interface, effort unlike taken Python Perl communities. goal common, seamless access distributed data modest one evolution towards fully distributed computing environment. recognize greater goal distributed computing means fully integrate diverse systems – just databases – truly flexible analysis environment. Good connectivity databases, however, immediate necessity practical terms means help us transition monolithic, self-contained systems computations, data, can carried parallel wide number computers /systems Temple Lang (2000). Issues reliability, security, location transparency, persistence, etc., new us working distributed data may provide gradual change ease ultimate goal full distributed computing.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:rs-dbi","dir":"Articles","previous_headings":"","what":"A Common Interface","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"believe common interface databases can help users easily access data stored RDBMS. common interface describe, uniform way, connect RDBMS, extract meta-data (list available databases, tables, etc.) well uniform way execute SQL statements import output R S. current emphasis querying databases much full low-level interface database development JDBC ODBC, unlike , want approach interface “whole-object” perspective J. M. Chambers (1998) natural R/S Python – instance, fetching fields records simultaneously single object. basic idea split interface front-end consisting classes generic functions users invoke back-end set database-specific classes methods implement actual communication. (well-known pattern software engineering, another good verbatim device-independent graphics R/S graphics functions produce similar output variety different devices, X displays, Postscript, etc.) following verbatim shows front-end: scripts work RDBMS (say, MySQL) replacing first line ","code":"> mgr <- dbManager(\"Oracle\") > con <- dbConnect(mgr, user = \"user\", passwd = \"passwd\") > rs <- dbExecStatement(con, \"select fld1, fld2, fld3 from MY_TABLE\") > tbls <- fetch(rs, n = 100) > hasCompleted(rs) [1] T > close(rs) > rs <- dbExecStatement(con, \"select id_name, q25, q50 from liv2\") > res <- fetch(rs) > getRowCount(rs) [1] 73 > close(con) > mgr <- dbManager(\"MySQL\")"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:rs-dbi-classes","dir":"Articles","previous_headings":"A Common Interface","what":"Interface Classes","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"following main RS-DBI classes. need extended individual database back-ends (MySQL, Oracle, etc.) dbManager Virtual class1 extended actual database managers, e.g., Oracle, MySQL, Informix. dbConnection Virtual class captures connection database instance2. dbResult Virtual class describes result SQL statement. dbResultSet Virtual class, extends dbResult fully describe output statements produce output records, .e., SELECT (SELECT-like) SQL statement. classes implement methods show, describe, getInfo: show (print R) prints one-line identification object. describe prints short summary meta-data specified object (like summary R/S). getInfo takes object one classes string specifying meta-data item, returns corresponding information (NULL unavailable). reason implement meta-data getInfo way simplify writing database back-ends. don’t want overwhelm developers drivers (, likely) hundreds methods case JDBC. addition, following methods also implemented: getDatabases lists available databases known dbManager. getTables lists tables database. getTableFields lists fields table database. getTableIndices lists indices defined table database. methods may implemented using appropriate getInfo method . next sections describe detail classes methods.","code":"> mgr <- dbManager(\"MySQL\") > getInfo(mgr, \"version\") > con <- dbConnect(mgr, ...) > getInfo(con, \"type\")"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:dbManager","dir":"Articles","previous_headings":"A Common Interface > Interface Classes","what":"Class dbManager","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"class identifies relational database management system. needs extended individual back-ends (Oracle, PostgreSQL, etc.) dbManager class defines following methods: load initializes driver code. suggest generator, dbManager(driver), automatically load driver. unload releases whatever resources driver using. getVersion returns version RS-DBI currently implemented, plus relevant information implementation RDBMS used.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:dbConnection","dir":"Articles","previous_headings":"A Common Interface > Interface Classes","what":"Class dbConnection","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"virtual class captures connection RDBMS, provides access dynamic SQL, result sets, RDBMS session management (transactions), etc. Note dbManager may may allow multiple simultaneous connections. methods defines include: dbConnect opens connection database dbname. likely arguments include host, user, password. returns object extends dbConnection driver-specific manner (e.g., MySQL implementation creates connection class MySQLConnection extends dbConnection). Note separate steps connecting RDBMS opening database (.e., opening instance). simplicity 2 steps method. user needs open another instance RDBMS, just open new connection. close closes connection discards pending work. dbExecStatement submits one SQL statement. returns dbResult object, case SELECT statement, object also inherits dbResultSet. dbResultSet object needed fetching output rows SELECT statements. result non-SELECT statement (e.g., UPDATE, DELETE, CREATE, ALTER, …) defined number rows affected (seems common among RDBMS). commit commits pending transaction (optional). rollback undoes current transaction (optional). callProc invokes stored procedure RDBMS (tentative). Stored procedures part ANSI SQL-92 standard possibly vary substantially one RDBMS another. instance, Oracle seems fairly decent implementation stored procedures, MySQL currently support . dbExec submit SQL “script” (multiple statements). May implemented looping dbExecStatement. dbNextResultSet running SQL scripts (multiple statements), closes current result set dbConnection, executes next statement returns result set.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:dbResult","dir":"Articles","previous_headings":"A Common Interface > Interface Classes","what":"Class dbResult","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"virtual class describes result SQL statement (statement) state operation. Non-query statements (e.g., CREATE, UPDATE, DELETE) set “completed” state 1, SELECT statements 0. Error conditions set slot negative number. dbResult class defines following methods: getStatement returns SQL statement associated result set. getDBConnection returns dbConnection associated result set. getRowsAffected returns number rows affected operation. hasCompleted operation completed? SELECT’s, instance, completed output rows fetched. getException returns status last SQL statement given connection list two members, status code status description.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:dbResultSet","dir":"Articles","previous_headings":"A Common Interface > Interface Classes","what":"Class dbResultSet","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"virtual class extends dbResult, describes additional information result SELECT statement state operation. completed state set 0 long pending rows fetch. dbResultSet class defines following additional methods: getRowCount returns number rows fetched far. getNullOk returns logical vector many elements fields result set, element describing whether corresponding field accepts NULL values. getFields describes SELECTed fields. description includes field names, RDBMS internal data types, internal length, internal precision scale, null flag (.e., column allows NULL’s), corresponding S classes (can -ridden user-provided classes). current MySQL Oracle implementations define dbResultSet named list following elements: connection: connection object associated result set; statement: string SQL statement processed; description: field description data.frame many rows fields SELECT output, columns specifying name, type, length, precision, scale, Sclass corresponding output field. rowsAffected: number rows affected; rowCount: number rows far fetched; completed: logical value describing whether operation completed . nullOk: logical vector specifying whether corresponding column may take NULL values. methods implemented accessor functions list obvious way. setDataMappings defines conversion internal RDBMS data types R/S classes. expect default mappings far common ones, users need control may specify class generator individual fields result set. (See Section [sec:mappings] details.) close closes result set frees resources R/S RDBMS. fetch extracts next max.rec records (-1 means ).","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:mappings","dir":"Articles","previous_headings":"A Common Interface","what":"Data Type Mappings","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"data types supported databases slightly different data types R S, mapping straightforward: many fixed varying length character types mapped R/S character. Fixed-precision (non-IEEE) numbers mapped either doubles (numeric) long (integer). Dates mapped character using appropriate TO_CHAR function RDBMS (take care locale information). RDBMS support type CURRENCY MONEY mapped numeric. Large objects (character, binary, file, etc.) also need mapped. User-defined functions may specified actual conversion follows: run query (either dbExec dbExecStatement): extract output field definitions replace class generator , say 3rd field, user generator: set new data mapping prior fetching fetch rows store data.frame","code":"> rs <- dbExecStatement(con, \"select whatever-You-need\") > flds <- getFields(rs) > flds[3, \"Sclass\"] # default mapping [1] \"character\" > flds[3, \"Sclass\"] <- \"myOwnGeneratorFunction\" > setDataMappings(resutlSet, flds) > data <- fetch(resultSet)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:open-issues","dir":"Articles","previous_headings":"A Common Interface","what":"Open Issues","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"may need provide additional utilities, instance convert dates, escape characters quotes slashes query strings, strip excessive blanks character fields, etc. need decide whether provide hooks conversions done C level, post-processing R S. Another issue kind data object output SQL query. Currently MySQL Oracle implementations return data data.frame; data frames slight inconvenience automatically re-label fields according R/S syntax, changing actual RDBMS labels variables; issue non-numeric data coerced factors automatically “drop hat” (someone s-news wrote) also annoying. execution SQL scripts fully described. method executes scripts run individual statements without returning encounters query (SELECT-like) statement. point return one result set. application responsible fetching rows, invoking dbNextResultSet opened dbConnection object repeat dbExec/fetch loop encounters next dbResultSet. . Another (potentially expensive) alternative run statements sequentially return list data.frames, element list storing result statement. Binary objects large objects present challenges R S. becoming common store images, sounds, data types binary objects RDBMS, can principle quite large. SQL-92 ANSI standard allows 2 gigabytes objects. need carefully plan deal binary objects – perhaps tentatively full generality. Large objects fetched repeatedly invoking specified R/S function takes argument chunks specified number raw bytes. case S4 (Splus5.x) RS-DBI implementation can write opened connection user defined reader (can guarantee won’t overflow connection?). case R clear data type binary large objects (BLOB) mapped .","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:limitations","dir":"Articles","previous_headings":"A Common Interface","what":"Limitations","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"limitations current interface definition: allow one SQL statement time, forcing users split SQL scripts individual statements; transaction management fully described; interface heavily biased towards queries, opposed general purpose database development. particular made attempt define “bind variables”; mechanism contents S objects implicitly moved database SQL execution. instance, following embedded SQL statement take vector sampleEmployee iterate elements get result. Perhaps RS-DBI point future implement feature.","code":"/* SQL */ SELECT * from emp_table where emp_id = :sampleEmployee"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"other-approaches","dir":"Articles","previous_headings":"","what":"Other Approaches","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"high-level, front-end description RS-DBI critical aspect interface. Details actually implement interface may change time. approach described document based one back-end driver per RDBMS reasonable, approach – simply felt simpler approach based well-understood self-contained tools (R, S, C API’s) better start. Nevertheless want briefly mention alternatives considered tentatively decided , may quite possibly re-visit near future.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:odbc","dir":"Articles","previous_headings":"Other Approaches","what":"Open Database Connectivity (ODBC)","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"ODBC protocol developed Microsoft allow connectivity among C/C++ applications RDBMS. expect, originally implementations ODBC available Windows environments. various effort create Unix implementation (see Unix ODBC web-site Harvey (1999)). approach looks promising allows us write one back-end, instead one per RDBMS. Since RDBMS already provide ODBC drivers, greatly simplify development. Unfortunately, Unix implementation ODBC mature enough time looked , situation expect change next year . point need re-evaluate make sure ODBC interface penalize interface terms performance, ease use, portability among various Unix versions, etc.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:jdbc","dir":"Articles","previous_headings":"Other Approaches","what":"Java Database Connectivity (JDBC)","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"Another protocol, Java database connectivity, well-done supported just every RDBMS. issue JDBC today neither S R (written C) interfaces cleanly Java. several efforts (quite fairly advanced state) allow S R invoke Java methods. interface widely available Splus5x R need re-visit issue study performance, usability, etc., JDBC common back-end RS-DBI.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:corba","dir":"Articles","previous_headings":"Other Approaches","what":"CORBA and a 3-tier Architecture","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"Yet another approach move interface RDBMS R S altogether separate system server serve proxy R/S databases. communication middle-layer proxy done CORBA Siegel (1996), Java’s RMI, similar technology. design flexible, CORBA facilities R S widely available yet, know whether made available Splus5 users MathSoft. Also, experience technology rather limited. hand, 3-tier architecture seem offer flexibility cope large distributed databases, necessarily relational.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:resources","dir":"Articles","previous_headings":"","what":"Resources","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"latest documentation software RS-DBI available www.omegahat.net (link dead now: https://www.omegahat.net/contrib/RS-DBI/index.html). R community developed interfaces databases: RmSQL interface mSQL database written Torsten Hothorn; RPgSQL interface PostgreSQL written Timothy H. Keitt; RODBC interface ODBC, written Michael Lapsley. (details see R Data Import/Export (2001).) R S-Plus interfaces MySQL follow propose RS-DBI API described ; also, ’s S-Plus interface SOracle James (preparation) Oracle (expect R implementation soon.) idea common interface databases successfully implemented Java’s Database Connectivity (JDBC) (www.javasoft.com), C Open Database Connectivity (ODBC) (www.unixodbc.org), Python’s Database Application Programming Interface (www.python.org), Perl’s Database Interface (www.cpan.org).","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"acknowledgements","dir":"Articles","previous_headings":"","what":"Acknowledgements","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"R/S database interface came suggestions, comments, discussions John M. Chambers Duncan Temple Lang context Omega Project Statistical Computing. Doug Bates Saikat DebRoy ported (greatly improved) first MySQL implementation R.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"the-s-version-4-definitions","dir":"Articles","previous_headings":"","what":"The S Version 4 Definitions","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"following code meant serve detailed description R/S database interface. decided use S4 (instead R S version 3) clean syntax help us describe easily classes methods form RS-DBI, also convey inter-class relationships.","code":"## Define all the classes and methods to be used by an ## implementation of the RS-DataBase Interface. Mostly, ## these classes are virtual and each driver should extend ## them to provide the actual implementation. ## Class: dbManager ## This class identifies the DataBase Management System ## (Oracle, MySQL, Informix, PostgreSQL, etc.) setClass(\"dbManager\", VIRTUAL) setGeneric(\"load\", def = function(dbMgr,...) standardGeneric(\"load\") ) setGeneric(\"unload\", def = function(dbMgr,...) standardGeneric(\"unload\") ) setGeneric(\"getVersion\", def = function(dbMgr,...) standardGeneric(\"getVersion\") ) ## Class: dbConnections ## This class captures a connection to a database instance. setClass(\"dbConnection\", VIRTUAL) setGeneric(\"dbConnection\", def = function(dbMgr, ...) standardGeneric(\"dbConnection\") ) setGeneric(\"dbConnect\", def = function(dbMgr, ...) standardGeneric(\"dbConnect\") ) setGeneric(\"dbExecStatement\", def = function(con, statement, ...) standardGeneric(\"dbExecStatement\") ) setGeneric(\"dbExec\", def = function(con, statement, ...) standardGeneric(\"dbExec\") ) setGeneric(\"getResultSet\", def = function(con, ..) standardGeneric(\"getResultSet\") ) setGeneric(\"commit\", def = function(con, ...) standardGeneric(\"commit\") ) setGeneric(\"rollback\", def = function(con, ...) standardGeneric(\"rollback\") ) setGeneric(\"callProc\", def = function(con, ...) standardGeneric(\"callProc\") ) setMethod(\"close\", signature = list(con=\"dbConnection\", type=\"missing\"), def = function(con, type) NULL ) ## Class: dbResult ## This is a base class for arbitrary results from the RDBMS ## (INSERT, UPDATE, DELETE). SELECTs (and SELECT-like) ## statements produce \"dbResultSet\" objects, which extend ## dbResult. setClass(\"dbResult\", VIRTUAL) setMethod(\"close\", signature = list(con=\"dbResult\", type=\"missing\"), def = function(con, type) NULL ) ## Class: dbResultSet ## Note that we define a resultSet as the result of a ## SELECT SQL statement. setClass(\"dbResultSet\", \"dbResult\") setGeneric(\"fetch\", def = function(resultSet,n,...) standardGeneric(\"fetch\") ) setGeneric(\"hasCompleted\", def = function(object, ...) standardGeneric(\"hasCompleted\") ) setGeneric(\"getException\", def = function(object, ...) standardGeneric(\"getException\") ) setGeneric(\"getDBconnection\", def = function(object, ...) standardGeneric(\"getDBconnection\") ) setGeneric(\"setDataMappings\", def = function(resultSet, ...) standardGeneric(\"setDataMappings\") ) setGeneric(\"getFields\", def = function(object, table, dbname, ...) standardGeneric(\"getFields\") ) setGeneric(\"getStatement\", def = function(object, ...) standardGeneric(\"getStatement\") ) setGeneric(\"getRowsAffected\", def = function(object, ...) standardGeneric(\"getRowsAffected\") ) setGeneric(\"getRowCount\", def = function(object, ...) standardGeneric(\"getRowCount\") ) setGeneric(\"getNullOk\", def = function(object, ...) standardGeneric(\"getNullOk\") ) ## Meta-data: setGeneric(\"getInfo\", def = function(object, ...) standardGeneric(\"getInfo\") ) setGeneric(\"describe\", def = function(object, verbose=F, ...) standardGeneric(\"describe\") ) setGeneric(\"getCurrentDatabase\", def = function(object, ...) standardGeneric(\"getCurrentDatabase\") ) setGeneric(\"getDatabases\", def = function(object, ...) standardGeneric(\"getDatabases\") ) setGeneric(\"getTables\", def = function(object, dbname, ...) standardGeneric(\"getTables\") ) setGeneric(\"getTableFields\", def = function(object, table, dbname, ...) standardGeneric(\"getTableFields\") ) setGeneric(\"getTableIndices\", def = function(object, table, dbname, ...) standardGeneric(\"getTableIndices\") )"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"who-this-tutorial-is-for","dir":"Articles","previous_headings":"","what":"Who this tutorial is for","title":"Introduction to DBI","text":"tutorial want access manipulate data database may machine different computer internet, found libraries use higher level abstraction, dbplyr, suitable purpose. Depending want achieve, may find useful understanding SQL using DBI. DBI (DataBase Interface) package provides simple, consistent interface R database management systems (DBMS). supported DBMS supported R package implements DBI specification vignette(\"spec\", package = \"DBI\"). DBI currently supports 30 DBMS, including: MySQL, using R-package RMySQL MariaDB, using R-package RMariaDB Postgres, using R-package RPostgres SQLite, using R-package RSQLite complete list supported DBMS visit https://github.com/r-dbi/backends. may need install package specific DBMS. functionality currently supported DBMS’s includes: manage connection database list tables database list column names table read table data frame advanced features, parameterized queries, transactions, see vignette(\"DBI-advanced\", package = \"DBI\").","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"how-to-connect-to-a-database-using-dbi","dir":"Articles","previous_headings":"","what":"How to connect to a database using DBI","title":"Introduction to DBI","text":"following code establishes connection Sakila database hosted Relational Dataset Repository https://relational-data.org/dataset/Sakila, lists tables database, closes connection. database represents fictional movie rental business includes tables describing films, actors, customers, stores, etc.: Connections databases created using dbConnect() function. first argument function driver DBMS connecting . example connecting MariaDB instance, use RMariaDB::MariaDB() driver. arguments depend authentication required DBMS. example host, port, username, password, dbname required. See documentation DBMS driver package using specifics. function dbListTables() takes database connection argument returns character vector table view names database. completing session DBMS, always release connection call dbDisconnect().","code":"library(DBI) con <- dbConnect( RMariaDB::MariaDB(), host = \"db.relational-data.org\", port = 3306, username = \"guest\", password = \"relational\", dbname = \"sakila\" ) dbListTables(con) ## [1] \"actor\" \"address\" \"category\" \"city\" ## [5] \"country\" \"customer\" \"film\" \"film_actor\" ## [9] \"film_category\" \"film_text\" \"inventory\" \"language\" ## [13] \"payment\" \"rental\" \"staff\" \"store\" dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"secure-password-storage","dir":"Articles","previous_headings":"How to connect to a database using DBI","what":"Secure password storage","title":"Introduction to DBI","text":"example contains password code, avoided databases secured access. One way use credentials securely store system’s credential store query keyring package. code connect database look like :","code":"con <- dbConnect( RMariaDB::MariaDB(), host = \"db.relational-data.org\", port = 3306, username = \"guest\", password = keyring::key_get(\"db.relational-data.org\", \"guest\"), dbname = \"sakila\" )"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"how-to-retrieve-column-names-for-a-table","dir":"Articles","previous_headings":"","what":"How to retrieve column names for a table","title":"Introduction to DBI","text":"can list column names table function dbListFields(). takes arguments database connection table name returns character vector column names order.","code":"con <- dbConnect(RMariaDB::MariaDB(), username = \"guest\", password = \"relational\", host = \"db.relational-data.org\", port = 3306, dbname = \"sakila\") dbListFields(con, \"film\") ## [1] \"film_id\" \"title\" \"description\" ## [4] \"release_year\" \"language_id\" \"original_language_id\" ## [7] \"rental_duration\" \"rental_rate\" \"length\" ## [10] \"replacement_cost\" \"rating\" \"special_features\" ## [13] \"last_update\""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"read-a-table-into-a-data-frame","dir":"Articles","previous_headings":"","what":"Read a table into a data frame","title":"Introduction to DBI","text":"function dbReadTable() reads entire table returns data frame. equivalent SQL query SELECT * . columns returned data frame share names columns table. DBI database backends best coerce data equivalent R data types.","code":"df <- dbReadTable(con, \"film\") head(df, 3) ## film_id title ## 1 1 ACADEMY DINOSAUR ## 2 2 ACE GOLDFINGER ## 3 3 ADAPTATION HOLES ## description ## 1 A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies ## 2 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 3 A Astounding Reflection of a Lumberjack And a Car who must Sink a Lumberjack in A Baloon Factory ## release_year language_id original_language_id rental_duration rental_rate ## 1 2006 1 NA 6 0.99 ## 2 2006 1 NA 3 4.99 ## 3 2006 1 NA 7 2.99 ## length replacement_cost rating special_features ## 1 86 20.99 PG Deleted Scenes,Behind the Scenes ## 2 48 12.99 G Trailers,Deleted Scenes ## 3 50 18.99 NC-17 Trailers,Deleted Scenes ## last_update ## 1 2006-02-15 04:03:42 ## 2 2006-02-15 04:03:42 ## 3 2006-02-15 04:03:42"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"read-only-selected-rows-and-columns-into-a-data-frame","dir":"Articles","previous_headings":"","what":"Read only selected rows and columns into a data frame","title":"Introduction to DBI","text":"read subset data table data frame, DBI provides functions run custom SQL queries manage results. small datasets need manage number results returned, function dbGetQuery() takes SQL SELECT query execute returns data frame. basic query specifies columns require (film_id, title description) rows (records) interested . retrieve films released year 2006. also retrieve movies released 2006 rated “G”. Note character strings must quoted. query contained within double quotes, use single quotes around rating. See dbQuoteLiteral() programmatically converting arbitrary R values SQL. covered detail vignette(\"DBI-advanced\", package = \"DBI\"). equivalent operation using dplyr reconstructs SQL query using three functions specify table (tbl()), subset rows (filter()), columns require (select()). Note dplyr takes care quoting. want perform data manipulation queries UPDATEs DELETEs, see dbSendStatement() vignette(\"DBI-advanced\", package = \"DBI\").","code":"df <- dbGetQuery(con, \"SELECT film_id, title, description FROM film WHERE release_year = 2006\") head(df, 3) ## film_id title ## 1 1 ACADEMY DINOSAUR ## 2 2 ACE GOLDFINGER ## 3 3 ADAPTATION HOLES ## description ## 1 A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies ## 2 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 3 A Astounding Reflection of a Lumberjack And a Car who must Sink a Lumberjack in A Baloon Factory df <- dbGetQuery(con, \"SELECT film_id, title, description FROM film WHERE release_year = 2006 AND rating = 'G'\") head(df, 3) ## film_id title ## 1 2 ACE GOLDFINGER ## 2 4 AFFAIR PREJUDICE ## 3 5 AFRICAN EGG ## description ## 1 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 2 A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank ## 3 A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico library(dplyr) lazy_df <- tbl(con, \"film\") %>% filter(release_year == 2006 & rating == \"G\") %>% select(film_id, title, description) head(lazy_df, 3) ## # Source: SQL [3 x 3] ## # Database: mysql [guest@db.relational-data.org:3306/sakila] ## film_id title description ## ## 1 2 ACE GOLDFINGER A Astounding Epistle of a Database Administrator And… ## 2 4 AFFAIR PREJUDICE A Fanciful Documentary of a Frisbee And a Lumberjack… ## 3 5 AFRICAN EGG A Fast-Paced Documentary of a Pastry Chef And a Dent…"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"how-to-end-a-dbms-session","dir":"Articles","previous_headings":"","what":"How to end a DBMS session","title":"Introduction to DBI","text":"finished accessing DBMS, always close connection using dbDisconnect().","code":"dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"conclusion","dir":"Articles","previous_headings":"","what":"Conclusion","title":"Introduction to DBI","text":"tutorial given basic techniques accessing data supported DBMS. need work databases fit memory, want run complex queries, including parameterized queries, please see vignette(\"DBI-advanced\", package = \"DBI\").","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"further-reading","dir":"Articles","previous_headings":"","what":"Further Reading","title":"Introduction to DBI","text":"overview working databases R Rstudio.com DBI specification: vignette(\"spec\", package = \"DBI\") List supported DBMS","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"getting-started","dir":"Articles","previous_headings":"","what":"Getting started","title":"Implementing a new backend","text":"Start creating package. ’s call package, following existing pattern RSQLite, RMySQL, RPostgres ROracle make easier people find . example, ’ll call package RKazam. ready--use template package available https://github.com/r-dbi/RKazam/. can start creating new GitHub repository template, copying package code. Rename “Kazam” desired name everywhere. template package already contains dummy implementations classes methods. chose create package manually, make sure include DESCRIPTION: Importing DBI fine, users supposed attach package anyway; preferred method attach DBI use explicit qualification via :: access driver package (needs done ).","code":"Imports: DBI (>= 0.3.0), methods Suggests: DBItest, testthat"},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"testing","dir":"Articles","previous_headings":"","what":"Testing","title":"Implementing a new backend","text":"testing early stage? testing integral part software development cycle. Test right start, add automated tests go, finish faster (tests automated) maintaining superb code quality (tests also check corner cases might aware ). Don’t worry: test cases difficult impossible satisfy, take long run, can just turn . Take time now head DBItest vignette vignette(\"test\", package = \"DBItest\"). find vast amount ready--use test cases help process implementing new DBI backend. Add custom tests covered DBItest discretion, enhance DBItest file pull request test generic enough useful many DBI backends.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"driver","dir":"Articles","previous_headings":"","what":"Driver","title":"Implementing a new backend","text":"Start making driver class inherits DBIDriver. class doesn’t need anything, ’s just used dispatch generics right method. Users don’t need know , can remove default help listing @keywords internal: driver class important older versions DBI, also provide dummy dbUnloadDriver() method. package needs global setup tear , .onLoad() .onUnload() functions. might also want add show method object prints nicely: Next create Kazam() instantiates class.","code":"#' Driver for Kazam database. #' #' @keywords internal #' @export #' @import DBI #' @import methods setClass(\"KazamDriver\", contains = \"DBIDriver\") #' @export #' @rdname Kazam-class setMethod(\"dbUnloadDriver\", \"KazamDriver\", function(drv, ...) { TRUE }) setMethod(\"show\", \"KazamDriver\", function(object) { cat(\"\\n\") }) #' @export Kazam <- function() { new(\"KazamDriver\") } Kazam() #> "},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"connection","dir":"Articles","previous_headings":"","what":"Connection","title":"Implementing a new backend","text":"Next create connection class inherits DBIConnection. store information needed connect database. ’re talking C api, include slot holds external pointer. Now boilerplate way, can start work connection. important method dbConnect() allows connect specified instance database. Note use @rdname Kazam. ensures Kazam() connect method documented together. Replace ... arguments needed connect database. ’ll always need include ... arguments, even don’t use , compatibility generic. likely people first come help, examples show connect database, query . (Obviously examples won’t work yet.) Ideally, include examples can run right away (perhaps relying publicly hosted database), failing surround \\dontrun{} people can least see code. Next, implement show() dbDisconnect() methods.","code":"#' Kazam connection class. #' #' @export #' @keywords internal setClass(\"KazamConnection\", contains = \"DBIConnection\", slots = list( host = \"character\", username = \"character\", # and so on ptr = \"externalptr\" ) ) #' @param drv An object created by \\code{Kazam()} #' @rdname Kazam #' @export #' @examples #' \\dontrun{ #' db <- dbConnect(RKazam::Kazam()) #' dbWriteTable(db, \"mtcars\", mtcars) #' dbGetQuery(db, \"SELECT * FROM mtcars WHERE cyl == 4\") #' } setMethod(\"dbConnect\", \"KazamDriver\", function(drv, ...) { # ... new(\"KazamConnection\", host = host, ...) })"},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"results","dir":"Articles","previous_headings":"","what":"Results","title":"Implementing a new backend","text":"Finally, ’re ready implement meat system: fetching results query data frame. First define results class: write dbSendQuery() method. takes connection SQL string arguments, returns result object. ... needed compatibility generic, can add arguments need . Next, implement dbClearResult(), close result set free resources associated : hardest part every DBI package writing dbFetch() method. needs take result set (optionally) number records return, create dataframe. Mapping R’s data types database may require custom implementation dbDataType() method connection class: Next, implement dbHasCompleted() return logical indicating rows remaining fetched. four methods place, can now use default dbGetQuery() send query database, retrieve results available clean . Spend time now making sure works existing database, relax let DBItest package work .","code":"#' Kazam results class. #' #' @keywords internal #' @export setClass(\"KazamResult\", contains = \"DBIResult\", slots = list(ptr = \"externalptr\") ) #' Send a query to Kazam. #' #' @export #' @examples #' # This is another good place to put examples setMethod(\"dbSendQuery\", \"KazamConnection\", function(conn, statement, ...) { # some code new(\"KazamResult\", ...) }) #' @export setMethod(\"dbClearResult\", \"KazamResult\", function(res, ...) { # free resources TRUE }) #' Retrieve records from Kazam query #' @export setMethod(\"dbFetch\", \"KazamResult\", function(res, n = -1, ...) { ... }) # (optionally) #' Find the database data type associated with an R object #' @export setMethod(\"dbDataType\", \"KazamConnection\", function(dbObj, obj, ...) { ... }) #' @export setMethod(\"dbHasCompleted\", \"KazamResult\", function(res, ...) { })"},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"sql-methods","dir":"Articles","previous_headings":"","what":"SQL methods","title":"Implementing a new backend","text":"’re now home stretch, can make wrapper substantially useful implementing methods wrap around variations SQL across databases: dbQuoteString() dbQuoteIdentifer() used safely quote strings identifiers avoid SQL injection attacks. Note former must vectorized, latter. dbWriteTable() creates database table given R dataframe. ’d recommend using functions prefixed sql package generate SQL. functions still work progress please let know problems. dbReadTable(): simple wrapper around SELECT * table. Use dbQuoteIdentifer() safely quote table name prevent mismatches names allowed R database. dbListTables() dbExistsTable() let determine tables available. provided database’s API, may need generate sql inspects system tables. dbListFields() shows fields available given table. dbRemoveTable() wraps around DROP TABLE. Start SQL::sqlTableDrop(). dbBegin(), dbCommit() dbRollback(): implement three functions provide basic transaction support. functionality currently tested DBItest package.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"metadata-methods","dir":"Articles","previous_headings":"","what":"Metadata methods","title":"Implementing a new backend","text":"lot extra metadata methods result sets (one connection) might want implement. described following. dbIsValid() returns connection result set open (TRUE) closed (FALSE). methods section valid result sets . dbGetStatement() returns issued query character value. dbColumnInfo() lists names types result set’s columns. dbGetRowCount() dbGetRowsAffected() returns number rows returned altered SELECT INSERT/UPDATE query, respectively. dbBind() allows using parametrised queries. Take look sqlInterpolate() sqlParseVariables() SQL engine doesn’t offer native parametrised queries.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"full-dbi-compliance","dir":"Articles","previous_headings":"","what":"Full DBI compliance","title":"Implementing a new backend","text":"now, package implement methods defined DBI specification. want walk extra mile, offer read-mode allows users sure valuable data doesn’t get destroyed inadvertently.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"dbi-r-database-interface","dir":"Articles","previous_headings":"","what":"DBI: R Database Interface","title":"DBI specification","text":"DBI defines interface communication R relational database management systems. classes package virtual need extended various R/DBMS implementations (-called DBI backends).","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"definition","dir":"Articles","previous_headings":"DBI: R Database Interface","what":"Definition","title":"DBI specification","text":"DBI backend R package imports DBI methods packages. better worse, names many existing backends start ‘R’, e.g., RSQLite, RMySQL, RSQLServer; backend author adopt convention .","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"dbi-classes-and-methods","dir":"Articles","previous_headings":"DBI: R Database Interface","what":"DBI classes and methods","title":"DBI specification","text":"backend defines three classes, subclasses DBIDriver, DBIConnection, DBIResult. backend provides implementation methods base classes defined implemented DBI. methods defined DBI reexported (package can used without attach DBI), ellipsis ... formals extensibility.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"construction-of-the-dbidriver-object","dir":"Articles","previous_headings":"DBI: R Database Interface","what":"Construction of the DBIDriver object","title":"DBI specification","text":"backend must support creation instance DBIDriver subclass constructor function. default, name package name without leading ‘R’ (exists), e.g., SQLite RSQLite package. However, backend authors may choose different name. constructor must exported, must function callable without arguments. DBI recommends define constructor empty argument list.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples","dir":"Articles","previous_headings":"DBI: R Database Interface","what":"Examples","title":"DBI specification","text":"","code":"RSQLite::SQLite()"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"determine-the-sql-data-type-of-an-object","dir":"Articles","previous_headings":"","what":"Determine the SQL data type of an object","title":"DBI specification","text":"section describes behavior following method:","code":"dbDataType(dbObj, obj, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description","dir":"Articles","previous_headings":"Determine the SQL data type of an object","what":"Description","title":"DBI specification","text":"Returns SQL string describes SQL data type used object. default implementation generic determines SQL type R object according SQL 92 specification, may serve starting point driver implementations. DBI also provides implementation data.frame return character vector giving type column dataframe.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details","dir":"Articles","previous_headings":"Determine the SQL data type of an object","what":"Details","title":"DBI specification","text":"data types supported databases different data types R, mapping primitive types straightforward: many fixed varying length character types mapped character vectors Fixed-precision (non-IEEE) numbers mapped either numeric integer vectors. Notice many DBMS follow IEEE arithmetic, potential problems /overflows loss precision.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value","dir":"Articles","previous_headings":"Determine the SQL data type of an object","what":"Value","title":"DBI specification","text":"dbDataType() returns SQL type corresponds obj argument non-empty character string. data frames, character vector one element per column returned.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes","dir":"Articles","previous_headings":"Determine the SQL data type of an object","what":"Failure modes","title":"DBI specification","text":"error raised invalid values obj argument NULL value.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification","dir":"Articles","previous_headings":"Determine the SQL data type of an object","what":"Specification","title":"DBI specification","text":"backend can override dbDataType() generic driver class. generic expects arbitrary object second argument. query values returned default implementation, run example(dbDataType, package = \"DBI\"). backend needs override generic, must accept basic R data types second argument, namely logical, integer, numeric, character, dates (see Dates), date-time (see DateTimeClasses), difftime. database supports blobs, method also must accept lists raw vectors, blob::blob objects. -objects (.e., wrapped ()) must supported return results unwrapped counterparts. SQL data type factor ordered character. behavior object types specified. data types returned dbDataType() usable SQL statement form \"CREATE TABLE test (...)\".","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-1","dir":"Articles","previous_headings":"Determine the SQL data type of an object","what":"Examples","title":"DBI specification","text":"","code":"dbDataType(ANSI(), 1:5) dbDataType(ANSI(), 1) dbDataType(ANSI(), TRUE) dbDataType(ANSI(), Sys.Date()) dbDataType(ANSI(), Sys.time()) dbDataType(ANSI(), Sys.time() - as.POSIXct(Sys.Date())) dbDataType(ANSI(), c(\"x\", \"abc\")) dbDataType(ANSI(), list(raw(10), raw(20))) dbDataType(ANSI(), I(3)) dbDataType(ANSI(), iris) con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbDataType(con, 1:5) dbDataType(con, 1) dbDataType(con, TRUE) dbDataType(con, Sys.Date()) dbDataType(con, Sys.time()) dbDataType(con, Sys.time() - as.POSIXct(Sys.Date())) dbDataType(con, c(\"x\", \"abc\")) dbDataType(con, list(raw(10), raw(20))) dbDataType(con, I(3)) dbDataType(con, iris) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"create-a-connection-to-a-dbms","dir":"Articles","previous_headings":"","what":"Create a connection to a DBMS","title":"DBI specification","text":"section describes behavior following method:","code":"dbConnect(drv, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-1","dir":"Articles","previous_headings":"Create a connection to a DBMS","what":"Description","title":"DBI specification","text":"Connect DBMS going appropriate authentication procedure. implementations may allow multiple connections open, may invoke function repeatedly assigning output different objects. authentication mechanism left unspecified, check documentation individual drivers details. Use dbCanConnect() check connection can established.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-1","dir":"Articles","previous_headings":"Create a connection to a DBMS","what":"Value","title":"DBI specification","text":"dbConnect() returns S4 object inherits DBIConnection. object used communicate database engine. format() method defined connection object. returns string consists single line text.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-1","dir":"Articles","previous_headings":"Create a connection to a DBMS","what":"Specification","title":"DBI specification","text":"DBI recommends using following argument names authentication parameters, NULL default: user user name (default: current user) password password host host name (default: local connection) port port number (default: local connection) dbname name database host, database file name defaults provide reasonable behavior, particular local connection host = NULL. DBMS (e.g., PostgreSQL), different TCP/IP connection localhost. addition, DBI supports bigint argument governs 64-bit integer data returned. following values supported: \"integer\": always return integer, silently overflow \"numeric\": always return numeric, silently round \"character\": always return decimal representation character \"integer64\": return data type can coerced using .integer() (warning overflow), .numeric() .character()","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-2","dir":"Articles","previous_headings":"Create a connection to a DBMS","what":"Examples","title":"DBI specification","text":"","code":"# SQLite only needs a path to the database. (Here, \":memory:\" is a special # path that creates an in-memory database.) Other database drivers # will require more details (like user, password, host, port, etc.) con <- dbConnect(RSQLite::SQLite(), \":memory:\") con dbListTables(con) dbDisconnect(con) # Bad, for subtle reasons: # This code fails when RSQLite isn't loaded yet, # because dbConnect() doesn't know yet about RSQLite. dbListTables(con <- dbConnect(RSQLite::SQLite(), \":memory:\"))"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"disconnect-close-a-connection","dir":"Articles","previous_headings":"","what":"Disconnect (close) a connection","title":"DBI specification","text":"section describes behavior following method:","code":"dbDisconnect(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-2","dir":"Articles","previous_headings":"Disconnect (close) a connection","what":"Description","title":"DBI specification","text":"closes connection, discards pending work, frees resources (e.g., memory, sockets).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-2","dir":"Articles","previous_headings":"Disconnect (close) a connection","what":"Value","title":"DBI specification","text":"dbDisconnect() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-1","dir":"Articles","previous_headings":"Disconnect (close) a connection","what":"Failure modes","title":"DBI specification","text":"warning issued garbage collection connection released without calling dbDisconnect(), tested automatically. least one warning issued immediately calling dbDisconnect() already disconnected invalid connection.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-3","dir":"Articles","previous_headings":"Disconnect (close) a connection","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"execute-a-query-on-a-given-database-connection","dir":"Articles","previous_headings":"","what":"Execute a query on a given database connection","title":"DBI specification","text":"section describes behavior following method:","code":"dbSendQuery(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-3","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Description","title":"DBI specification","text":"dbSendQuery() method submits synchronously executes SQL query database engine. extract records — need use dbFetch() method, must call dbClearResult() finish fetching records need. interactive use, almost always prefer dbGetQuery(). Use dbSendQueryArrow() dbGetQueryArrow() instead retrieve results Arrow object.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbSendQuery() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See “Specification” sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-2","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Specification","title":"DBI specification","text":"warnings occur normal conditions. done, DBIResult object must cleared call dbClearResult(). Failure clear result set leads warning connection closed. backend supports one open result set per connection, issuing second query invalidates already open result set raises warning. newly opened result set valid must cleared dbClearResult(). param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-for-the-immediate-argument","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Specification for the immediate argument","title":"DBI specification","text":"immediate argument supports distinguishing “direct” “prepared” APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via “direct” API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed “special” query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-1","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Details","title":"DBI specification","text":"method SELECT queries . backends may support data manipulation queries method compatibility reasons. However, callers strongly encouraged use dbSendStatement() data manipulation statements. query submitted database server DBMS executes , possibly generating vast amounts data. data live driver-specific: drivers may choose leave output server transfer piecemeal R, others may transfer data client – necessarily memory R manages. See individual drivers’ dbSendQuery() documentation details.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-3","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Value","title":"DBI specification","text":"dbSendQuery() returns S4 object inherits DBIResult. result set can used dbFetch() extract records. finished using result, make sure clear dbClearResult().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"The data retrieval flow","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell ’re done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-2","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Failure modes","title":"DBI specification","text":"error raised issuing query closed invalid connection, query non-NA string. error also raised syntax query invalid query parameters given (passing params argument) immediate argument set TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-4","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbFetch(rs) dbClearResult(rs) # Pass one set of values with the param argument: rs <- dbSendQuery( con, \"SELECT * FROM mtcars WHERE cyl = ?\", params = list(4L) ) dbFetch(rs) dbClearResult(rs) # Pass multiple sets of values with dbBind(): rs <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = ?\") dbBind(rs, list(6L)) dbFetch(rs) dbBind(rs, list(8L)) dbFetch(rs) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"fetch-records-from-a-previously-executed-query","dir":"Articles","previous_headings":"","what":"Fetch records from a previously executed query","title":"DBI specification","text":"section describes behavior following methods:","code":"dbFetch(res, n = -1, ...) fetch(res, n = -1, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-4","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"Description","title":"DBI specification","text":"Fetch next n elements (rows) result set return data.frame.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-2","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"Details","title":"DBI specification","text":"fetch() provided compatibility older DBI clients - new code strongly encouraged use dbFetch(). default implementation dbFetch() calls fetch() compatible existing code. Modern backends implement dbFetch() .","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-4","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"Value","title":"DBI specification","text":"dbFetch() always returns data.frame many rows records fetched many columns fields result set, even result single value one zero rows. Passing n = NA supported returns arbitrary number rows (least one) specified driver, remaining rows result set.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow-1","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"The data retrieval flow","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell ’re done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-3","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"Failure modes","title":"DBI specification","text":"attempt fetch closed result set raises error. n argument atomic whole number greater equal -1 Inf, error raised, subsequent call dbFetch() proper n argument succeeds. Calling dbFetch() result set data manipulation query created dbSendStatement() can fetched return empty data frame, warning.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-3","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"Specification","title":"DBI specification","text":"Fetching multi-row queries one columns default returns entire result. Multi-row queries can also fetched progressively passing whole number (integer numeric) n argument. value Inf n argument supported also returns full result. rows available fetched, result returned full without warning. fewer rows requested returned, fetches return data frame zero rows. zero rows fetched, columns data frame still fully typed. Fetching fewer rows available permitted, warning issued clearing result set. column named row_names treated like column. column types returned data frame depend data returned: integer (coercible integer) integer values -2^31 2^31 - 1, NA SQL NULL values numeric numbers fractional component, NA SQL NULL values logical Boolean values (backends may return integer); NA SQL NULL values character text, NA SQL NULL values lists raw blobs NULL entries SQL NULL values coercible using .Date() dates, NA SQL NULL values (also applies return value SQL function current_date) coercible using hms::as_hms() times, NA SQL NULL values (also applies return value SQL function current_time) coercible using .POSIXct() timestamps, NA SQL NULL values (also applies return value SQL function current_timestamp) dates timestamps supported backend, following R types used: Date dates (also applies return value SQL function current_date) POSIXct timestamps (also applies return value SQL function current_timestamp) R built-type lossless support full range 64-bit larger integers. 64-bit integers returned query, following rules apply: Values returned container support full range valid 64-bit values (integer64 class bit64 package) Coercion numeric always returns number close possible true value Loss precision converting numeric gives warning Conversion character always returns lossless decimal representation data","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-5","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) # Fetch all results rs <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbFetch(rs) dbClearResult(rs) # Fetch in chunks rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") while (!dbHasCompleted(rs)) { chunk <- dbFetch(rs, 10) print(nrow(chunk)) } dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"clear-a-result-set","dir":"Articles","previous_headings":"","what":"Clear a result set","title":"DBI specification","text":"section describes behavior following method:","code":"dbClearResult(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-5","dir":"Articles","previous_headings":"Clear a result set","what":"Description","title":"DBI specification","text":"Frees resources (local remote) associated result set. step mandatory objects obtained calling dbSendQuery() dbSendStatement().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-5","dir":"Articles","previous_headings":"Clear a result set","what":"Value","title":"DBI specification","text":"dbClearResult() returns TRUE, invisibly, result sets obtained dbSendQuery(), dbSendStatement(), dbSendQueryArrow(),","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow-2","dir":"Articles","previous_headings":"Clear a result set","what":"The data retrieval flow","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell ’re done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-command-execution-flow","dir":"Articles","previous_headings":"Clear a result set","what":"The command execution flow","title":"DBI specification","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-4","dir":"Articles","previous_headings":"Clear a result set","what":"Failure modes","title":"DBI specification","text":"attempt close already closed result set issues warning dbSendQuery(), dbSendStatement(), dbSendQueryArrow(),","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-4","dir":"Articles","previous_headings":"Clear a result set","what":"Specification","title":"DBI specification","text":"dbClearResult() frees resources associated retrieving result query update operation. DBI backend can expect call dbClearResult() dbSendQuery() dbSendStatement() call.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-6","dir":"Articles","previous_headings":"Clear a result set","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") rs <- dbSendQuery(con, \"SELECT 1\") print(dbFetch(rs)) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"bind-values-to-a-parameterizedprepared-statement","dir":"Articles","previous_headings":"","what":"Bind values to a parameterized/prepared statement","title":"DBI specification","text":"section describes behavior following methods:","code":"dbBind(res, params, ...) dbBindArrow(res, params, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-6","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"Description","title":"DBI specification","text":"parametrized prepared statements, dbSendQuery(), dbSendQueryArrow(), dbSendStatement() functions can called statements contain placeholders values. dbBind() dbBindArrow() functions bind placeholders actual values, intended called result set calling dbFetch() dbFetchArrow(). values passed dbBind() lists data frames, dbBindArrow() stream created nanoarrow::as_nanoarrow_array_stream(). dbBindArrow() experimental, ⁠*Arrow⁠ functions. dbSendQuery() compatible dbBindArrow(), dbSendQueryArrow() compatible dbBind().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-3","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"Details","title":"DBI specification","text":"DBI supports parametrized (prepared) queries statements via dbBind() dbBindArrow() generics. Parametrized queries different normal queries allow arbitrary number placeholders, later substituted actual values. Parametrized queries (statements) serve two purposes: query can executed different values. DBMS may cache intermediate information query, execution plan, execute faster. Separation query syntax parameters protects SQL injection. placeholder format currently specified DBI; future, uniform placeholder syntax may supported. Consult backend documentation supported formats. automated testing, backend authors specify placeholder syntax placeholder_pattern tweak. Known examples : ⁠?⁠ (positional matching order appearance) RMariaDB RSQLite ⁠\\$1⁠ (positional matching index) RPostgres RSQLite ⁠:name⁠ ⁠\\$name⁠ (named matching) RSQLite","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-6","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"Value","title":"DBI specification","text":"dbBind() returns result set, invisibly, queries issued dbSendQuery() dbSendQueryArrow() also data manipulation statements issued dbSendStatement().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow-3","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"The data retrieval flow","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell ’re done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow-for-arrow-streams","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"The data retrieval flow for Arrow streams","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data Arrow stream. flow, except repeated calling dbBindArrow() dbBind(), implemented dbGetQueryArrow(), sufficient unless parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQueryArrow() create result set object class DBIResultArrow. Optionally, bind query parameters dbBindArrow() dbBind(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Use dbFetchArrow() get data stream. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-command-execution-flow-1","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"The command execution flow","title":"DBI specification","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-5","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"Failure modes","title":"DBI specification","text":"Calling dbBind() query without parameters raises error. Binding many enough values, parameters wrong names unequal length, also raises error. placeholders query named, parameter values must names (must empty NA), vice versa, otherwise error raised. behavior mixing placeholders different types (particular mixing positional named placeholders) specified. Calling dbBind() result set already cleared dbClearResult() also raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-5","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"Specification","title":"DBI specification","text":"DBI clients execute parametrized statements follows: Call dbSendQuery(), dbSendQueryArrow() dbSendStatement() query statement contains placeholders, store returned DBIResult object variable. Mixing placeholders (particular, named unnamed ones) recommended. good practice register call dbClearResult() via .exit() right calling dbSendQuery() dbSendStatement() (see last enumeration item). dbBind() dbBindArrow() called, returned result set object following behavior: dbFetch() raises error (dbSendQuery() dbSendQueryArrow()) dbGetRowCount() returns zero (dbSendQuery() dbSendQueryArrow()) dbGetRowsAffected() returns integer NA (dbSendStatement()) dbIsValid() returns TRUE dbHasCompleted() returns FALSE Call dbBind() dbBindArrow(): dbBind(), params argument must list elements lengths contain values supported backend. data.frame internally stored list. dbBindArrow(), params argument must nanoarrow array stream, one column per query parameter. Retrieve data number affected rows DBIResult object. queries issued dbSendQuery() dbSendQueryArrow(), call dbFetch(). statements issued dbSendStatements(), call dbGetRowsAffected(). (Execution begins immediately dbBind() call, statement processed entirely function returns.) Repeat 2. 3. necessary. Close result set via dbClearResult(). elements params argument need scalars, vectors arbitrary length (including length 0) supported. queries, calling dbFetch() binding parameters returns concatenated results, equivalent binding fetching set values connecting via rbind(). data manipulation statements, dbGetRowsAffected() returns total number rows affected binding non-scalar parameters. dbBind() also accepts repeated calls result set queries data manipulation statements, even results fetched calls dbBind(), queries data manipulation statements. placeholders query named, order params argument important. least following data types accepted input (including NA): integer numeric logical Boolean values character (also special characters spaces, newlines, quotes, backslashes) factor (bound character, warning) Date (also stored internally integer) POSIXct timestamps POSIXlt timestamps difftime values (also units seconds value stored integer) lists raw blobs (NULL entries SQL NULL values) objects type blob::blob","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-7","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"Examples","title":"DBI specification","text":"","code":"# Data frame flow: con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"iris\", iris) # Using the same query for different values iris_result <- dbSendQuery(con, \"SELECT * FROM iris WHERE [Petal.Width] > ?\") dbBind(iris_result, list(2.3)) dbFetch(iris_result) dbBind(iris_result, list(3)) dbFetch(iris_result) dbClearResult(iris_result) # Executing the same statement with different values at once iris_result <- dbSendStatement(con, \"DELETE FROM iris WHERE [Species] = \\$species\") dbBind(iris_result, list(species = c(\"setosa\", \"versicolor\", \"unknown\"))) dbGetRowsAffected(iris_result) dbClearResult(iris_result) nrow(dbReadTable(con, \"iris\")) dbDisconnect(con) # Arrow flow: con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"iris\", iris) # Using the same query for different values iris_result <- dbSendQueryArrow(con, \"SELECT * FROM iris WHERE [Petal.Width] > ?\") dbBindArrow( iris_result, nanoarrow::as_nanoarrow_array_stream(data.frame(2.3, fix.empty.names = FALSE)) ) as.data.frame(dbFetchArrow(iris_result)) dbBindArrow( iris_result, nanoarrow::as_nanoarrow_array_stream(data.frame(3, fix.empty.names = FALSE)) ) as.data.frame(dbFetchArrow(iris_result)) dbClearResult(iris_result) # Executing the same statement with different values at once iris_result <- dbSendStatement(con, \"DELETE FROM iris WHERE [Species] = \\$species\") dbBindArrow(iris_result, nanoarrow::as_nanoarrow_array_stream(data.frame( species = c(\"setosa\", \"versicolor\", \"unknown\") ))) dbGetRowsAffected(iris_result) dbClearResult(iris_result) nrow(dbReadTable(con, \"iris\")) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"retrieve-results-from-a-query","dir":"Articles","previous_headings":"","what":"Retrieve results from a query","title":"DBI specification","text":"section describes behavior following method:","code":"dbGetQuery(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-7","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Description","title":"DBI specification","text":"Returns result query data frame. dbGetQuery() comes default implementation (work backends) calls dbSendQuery(), dbFetch(), ensuring result always freed dbClearResult(). retrieving chunked/paged results passing query parameters, see dbSendQuery(), particular “data retrieval flow” section. retrieving results Arrow object, see dbGetQueryArrow().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments-1","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbGetQuery() generic (improve compatibility across backends) part DBI specification: n (default: -1) params (default: NULL) immediate (default: NULL) must provided named arguments. See “Specification” “Value” sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-6","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Specification","title":"DBI specification","text":"column named row_names treated like column. n argument specifies number rows fetched. omitted, fetching multi-row queries one columns returns entire result. value Inf n argument supported also returns full result. rows available fetched (passing large value n), result returned full without warning. zero rows requested, columns data frame still fully typed. Fetching fewer rows available permitted, warning issued. param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-for-the-immediate-argument-1","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Specification for the immediate argument","title":"DBI specification","text":"immediate argument supports distinguishing “direct” “prepared” APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via “direct” API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed “special” query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-4","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Details","title":"DBI specification","text":"method SELECT queries (incl. SQL statements return SELECT-alike result, e.g., execution stored procedure data manipulation queries like ⁠INSERT ... RETURNING ...⁠). execute stored procedure return result set, use dbExecute(). backends may support data manipulation statements method compatibility reasons. However, callers strongly advised use dbExecute() data manipulation statements.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-7","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Value","title":"DBI specification","text":"dbGetQuery() always returns data.frame, many rows records fetched many columns fields result set, even result single value one zero rows.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"implementation-notes","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Implementation notes","title":"DBI specification","text":"Subclasses override method provide sort performance optimization.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-6","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Failure modes","title":"DBI specification","text":"error raised issuing query closed invalid connection, syntax query invalid, query non-NA string. n argument atomic whole number greater equal -1 Inf, error raised, subsequent call dbGetQuery() proper n argument succeeds.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-8","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) dbGetQuery(con, \"SELECT * FROM mtcars\") dbGetQuery(con, \"SELECT * FROM mtcars\", n = 6) # Pass values using the param argument: # (This query runs eight times, once for each different # parameter. The resulting rows are combined into a single # data frame.) dbGetQuery( con, \"SELECT COUNT(*) FROM mtcars WHERE cyl = ?\", params = list(1:8) ) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"execute-a-data-manipulation-statement-on-a-given-database-connection","dir":"Articles","previous_headings":"","what":"Execute a data manipulation statement on a given database connection","title":"DBI specification","text":"section describes behavior following method:","code":"dbSendStatement(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-8","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Description","title":"DBI specification","text":"dbSendStatement() method submits synchronously executes SQL data manipulation statement (e.g., UPDATE, DELETE, ⁠INSERT ⁠, ⁠DROP TABLE⁠, …) database engine. query number affected rows, call dbGetRowsAffected() returned result object. must also call dbClearResult() . interactive use, almost always prefer dbExecute().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments-2","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbSendStatement() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See “Specification” sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-7","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Specification","title":"DBI specification","text":"warnings occur normal conditions. done, DBIResult object must cleared call dbClearResult(). Failure clear result set leads warning connection closed. backend supports one open result set per connection, issuing second query invalidates already open result set raises warning. newly opened result set valid must cleared dbClearResult(). param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-for-the-immediate-argument-2","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Specification for the immediate argument","title":"DBI specification","text":"immediate argument supports distinguishing “direct” “prepared” APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via “direct” API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed “special” query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-5","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Details","title":"DBI specification","text":"dbSendStatement() comes default implementation simply forwards dbSendQuery(), support backends implement latter.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-8","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Value","title":"DBI specification","text":"dbSendStatement() returns S4 object inherits DBIResult. result set can used dbGetRowsAffected() determine number rows affected query. finished using result, make sure clear dbClearResult().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-command-execution-flow-2","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"The command execution flow","title":"DBI specification","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-7","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Failure modes","title":"DBI specification","text":"error raised issuing statement closed invalid connection, statement non-NA string. error also raised syntax query invalid query parameters given (passing params argument) immediate argument set TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-9","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cars\", head(cars, 3)) rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (1, 1), (2, 2), (3, 3)\" ) dbHasCompleted(rs) dbGetRowsAffected(rs) dbClearResult(rs) dbReadTable(con, \"cars\") # there are now 6 rows # Pass one set of values directly using the param argument: rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (?, ?)\", params = list(4L, 5L) ) dbClearResult(rs) # Pass multiple sets of values using dbBind(): rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (?, ?)\" ) dbBind(rs, list(5:6, 6:7)) dbBind(rs, list(7L, 8L)) dbClearResult(rs) dbReadTable(con, \"cars\") # there are now 10 rows dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"change-database-state","dir":"Articles","previous_headings":"","what":"Change database state","title":"DBI specification","text":"section describes behavior following method:","code":"dbExecute(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-9","dir":"Articles","previous_headings":"Change database state","what":"Description","title":"DBI specification","text":"Executes statement returns number rows affected. dbExecute() comes default implementation (work backends) calls dbSendStatement(), dbGetRowsAffected(), ensuring result always freed dbClearResult(). passing query parameters, see dbBind(), particular “command execution flow” section.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments-3","dir":"Articles","previous_headings":"Change database state","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbExecute() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See “Specification” sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-8","dir":"Articles","previous_headings":"Change database state","what":"Specification","title":"DBI specification","text":"param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-for-the-immediate-argument-3","dir":"Articles","previous_headings":"Change database state","what":"Specification for the immediate argument","title":"DBI specification","text":"immediate argument supports distinguishing “direct” “prepared” APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via “direct” API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed “special” query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-6","dir":"Articles","previous_headings":"Change database state","what":"Details","title":"DBI specification","text":"can also use dbExecute() call stored procedure performs data manipulation actions return result set. execute stored procedure returns result set, data manipulation query also returns result set ⁠INSERT ... RETURNING ...⁠, use dbGetQuery() instead.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-9","dir":"Articles","previous_headings":"Change database state","what":"Value","title":"DBI specification","text":"dbExecute() always returns scalar numeric specifies number rows affected statement.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"implementation-notes-1","dir":"Articles","previous_headings":"Change database state","what":"Implementation notes","title":"DBI specification","text":"Subclasses override method provide sort performance optimization.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-8","dir":"Articles","previous_headings":"Change database state","what":"Failure modes","title":"DBI specification","text":"error raised issuing statement closed invalid connection, syntax statement invalid, statement non-NA string.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-10","dir":"Articles","previous_headings":"Change database state","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cars\", head(cars, 3)) dbReadTable(con, \"cars\") # there are 3 rows dbExecute( con, \"INSERT INTO cars (speed, dist) VALUES (1, 1), (2, 2), (3, 3)\" ) dbReadTable(con, \"cars\") # there are now 6 rows # Pass values using the param argument: dbExecute( con, \"INSERT INTO cars (speed, dist) VALUES (?, ?)\", params = list(4:7, 5:8) ) dbReadTable(con, \"cars\") # there are now 10 rows dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"quote-literal-strings","dir":"Articles","previous_headings":"","what":"Quote literal strings","title":"DBI specification","text":"section describes behavior following method:","code":"dbQuoteString(conn, x, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-10","dir":"Articles","previous_headings":"Quote literal strings","what":"Description","title":"DBI specification","text":"Call method generate string suitable use query string literal, make sure generate valid SQL protect SQL injection attacks.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-10","dir":"Articles","previous_headings":"Quote literal strings","what":"Value","title":"DBI specification","text":"dbQuoteString() returns object can coerced character, length input. empty character vector function returns length-0 object. passing returned object dbQuoteString() x argument, returned unchanged. Passing objects class SQL also return unchanged. (backends may convenient return SQL objects achieve behavior, required.)","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-9","dir":"Articles","previous_headings":"Quote literal strings","what":"Failure modes","title":"DBI specification","text":"Passing numeric, integer, logical, raw vector, list x argument raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-9","dir":"Articles","previous_headings":"Quote literal strings","what":"Specification","title":"DBI specification","text":"returned expression can used ⁠SELECT ...⁠ query, scalar character x value dbGetQuery(paste0(\"SELECT \", dbQuoteString(x)))[[1]] must identical x, even x contains spaces, tabs, quotes (single double), backticks, newlines (combination) result dbQuoteString() call coerced back character (even repeatedly). x NA, result must merely satisfy .na(). strings \"NA\" \"NULL\" treated specially. NA translated unquoted SQL NULL, query ⁠SELECT * (SELECT 1) ... NULL⁠ returns one row.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-11","dir":"Articles","previous_headings":"Quote literal strings","what":"Examples","title":"DBI specification","text":"","code":"# Quoting ensures that arbitrary input is safe for use in a query name <- \"Robert'); DROP TABLE Students;--\" dbQuoteString(ANSI(), name) # NAs become NULL dbQuoteString(ANSI(), c(\"x\", NA)) # SQL vectors are always passed through as is var_name <- SQL(\"select\") var_name dbQuoteString(ANSI(), var_name) # This mechanism is used to prevent double escaping dbQuoteString(ANSI(), dbQuoteString(ANSI(), name))"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"quote-identifiers","dir":"Articles","previous_headings":"","what":"Quote identifiers","title":"DBI specification","text":"section describes behavior following method:","code":"dbQuoteIdentifier(conn, x, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-11","dir":"Articles","previous_headings":"Quote identifiers","what":"Description","title":"DBI specification","text":"Call method generate string suitable use query column table name, make sure generate valid SQL protect SQL injection attacks. inverse operation dbUnquoteIdentifier().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-11","dir":"Articles","previous_headings":"Quote identifiers","what":"Value","title":"DBI specification","text":"dbQuoteIdentifier() returns object can coerced character, length input. empty character vector function returns length-0 object. names input argument preserved output. passing returned object dbQuoteIdentifier() x argument, returned unchanged. Passing objects class SQL also return unchanged. (backends may convenient return SQL objects achieve behavior, required.)","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-10","dir":"Articles","previous_headings":"Quote identifiers","what":"Failure modes","title":"DBI specification","text":"error raised input contains NA, empty string.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-10","dir":"Articles","previous_headings":"Quote identifiers","what":"Specification","title":"DBI specification","text":"Calling dbGetQuery() query format ⁠SELECT 1 ...⁠ returns data frame identifier, unquoted, column name. Quoted identifiers can used table column names SQL queries, particular queries like ⁠SELECT 1 ...⁠ ⁠SELECT * (SELECT 1) ...⁠. method must use quoting mechanism unambiguously different quoting mechanism used strings, query like ⁠SELECT ... (SELECT 1 ...)⁠ throws error column names match. method can quote column names contain special characters space, dot, comma, quotes used mark strings identifiers, database supports . case, checking validity identifier performed executing query, dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-12","dir":"Articles","previous_headings":"Quote identifiers","what":"Examples","title":"DBI specification","text":"","code":"# Quoting ensures that arbitrary input is safe for use in a query name <- \"Robert'); DROP TABLE Students;--\" dbQuoteIdentifier(ANSI(), name) # Use Id() to specify other components such as the schema id_name <- Id(schema = \"schema_name\", table = \"table_name\") id_name dbQuoteIdentifier(ANSI(), id_name) # SQL vectors are always passed through as is var_name <- SQL(\"select\") var_name dbQuoteIdentifier(ANSI(), var_name) # This mechanism is used to prevent double escaping dbQuoteIdentifier(ANSI(), dbQuoteIdentifier(ANSI(), name))"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"read-database-tables-as-data-frames","dir":"Articles","previous_headings":"","what":"Read database tables as data frames","title":"DBI specification","text":"section describes behavior following method:","code":"dbReadTable(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-12","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Description","title":"DBI specification","text":"Reads database table data frame, optionally converting column row names converting column names valid R identifiers. Use dbReadTableArrow() instead obtain Arrow object.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"arguments-12","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Arguments","title":"DBI specification","text":"DBIConnection object, returned dbConnect(). table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. “table_name”, call Id() components fully qualified table name, e.g. Id(schema = “my_schema”, table = “table_name”) call SQL() quoted fully qualified table name given verbatim, e.g. SQL(‘“my_schema”.”table_name”’) parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments-4","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbReadTable() generic (improve compatibility across backends) part DBI specification: row.names (default: FALSE) check.names must provided named arguments. See “Value” section details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-11","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Specification","title":"DBI specification","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbReadTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-7","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Details","title":"DBI specification","text":"function returns data frame. Use dbReadTableArrow() obtain Arrow object.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-12","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Value","title":"DBI specification","text":"dbReadTable() returns data frame contains complete data remote table, effectively result calling dbGetQuery() ⁠SELECT * ⁠. empty table returned data frame zero rows. presence rownames depends row.names argument, see sqlColumnToRownames() details: FALSE NULL, returned data frame doesn’t row names. TRUE, column named “row_names” converted row names. NA, column named “row_names” converted row names exists, otherwise translation occurs. string, specifies name column remote table contains row names. default row.names = FALSE. database supports identifiers special characters, columns returned data frame converted valid R identifiers check.names argument TRUE, check.names = FALSE, returned table non-syntactic column names without quotes.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-11","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Failure modes","title":"DBI specification","text":"error raised table exist. error raised row.names TRUE “row_names” column exists, error raised row.names set string corresponding column exists. error raised calling method closed invalid connection. error raised name processed dbQuoteIdentifier() results non-scalar. Unsupported values row.names check.names (non-scalars, unsupported data types, NA check.names) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-13","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars[1:10, ]) dbReadTable(con, \"mtcars\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"copy-data-frames-to-database-tables","dir":"Articles","previous_headings":"","what":"Copy data frames to database tables","title":"DBI specification","text":"section describes behavior following method:","code":"dbWriteTable(conn, name, value, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-13","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Description","title":"DBI specification","text":"Writes, overwrites appends data frame database table, optionally converting row names column specifying SQL data types fields.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"arguments-13","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Arguments","title":"DBI specification","text":"DBIConnection object, returned dbConnect(). table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. “table_name”, call Id() components fully qualified table name, e.g. Id(schema = “my_schema”, table = “table_name”) call SQL() quoted fully qualified table name given verbatim, e.g. SQL(‘“my_schema”.”table_name”’) data.frame (coercible data.frame). parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments-5","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbWriteTable() generic (improve compatibility across backends) part DBI specification: row.names (default: FALSE) overwrite (default: FALSE) append (default: FALSE) field.types (default: NULL) temporary (default: FALSE) must provided named arguments. See “Specification” “Value” sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-12","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Specification","title":"DBI specification","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbWriteTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done value argument must data frame subset columns existing table append = TRUE. order columns matter append = TRUE. overwrite argument TRUE, existing table name overwritten. argument doesn’t change behavior table exist yet. append argument TRUE, rows existing table preserved, new data appended. table doesn’t exist yet, created. temporary argument TRUE, table available second connection gone reconnecting. backends support argument. regular, non-temporary table visible second connection, pre-existing connection, reconnecting database. SQL keywords can used freely table names, column names, data. Quotes, commas, spaces, special characters newlines tabs, can also used data, , database supports non-syntactic identifiers, also table names column names. following data types must supported least, read identically dbReadTable(): integer numeric (behavior Inf NaN specified) logical NA NULL 64-bit values (using \"bigint\" field type); result can converted numeric, may lose precision, converted character vector, gives full decimal representation written another table read unchanged character (UTF-8 native encodings), supporting empty strings non-empty string factor (returned character) list raw (supported database) objects type blob::blob (supported database) date (supported database; returned Date), also dates prior 1970 1900 2038 time (supported database; returned objects inherit difftime) timestamp (supported database; returned POSIXct respecting time zone necessarily preserving input time zone), also timestamps prior 1970 1900 2038 respecting time zone necessarily preserving input time zone) Mixing column types table supported. field.types argument must named character vector one entry column. indicates SQL data type used new column. column missed field.types, type inferred input data dbDataType(). interpretation rownames depends row.names argument, see sqlRownamesToColumn() details: FALSE NULL, row names ignored. TRUE, row names converted column named “row_names”, even input data frame natural row names 1 nrow(...). NA, column named “row_names” created data custom row names, extra column created case natural row names. string, specifies name column remote table contains row names, even input data frame natural row names. default row.names = FALSE.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-8","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Details","title":"DBI specification","text":"function expects data frame. Use dbWriteTableArrow() write Arrow object. function useful want create load table time. Use dbAppendTable() dbAppendTableArrow() appending data existing table, dbCreateTable() dbCreateTableArrow() creating table, dbExistsTable() dbRemoveTable() overwriting tables. DBI standardizes writing data frames dbWriteTable(). backends might implement methods can consume CSV files data formats. details, see documentation individual methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-13","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Value","title":"DBI specification","text":"dbWriteTable() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-12","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Failure modes","title":"DBI specification","text":"table exists, append overwrite arguments unset, append = TRUE data frame new data different column names, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar. Invalid values additional arguments row.names, overwrite, append, field.types, temporary (non-scalars, unsupported data types, NA, incompatible values, duplicate missing names, incompatible columns) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-14","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars[1:5, ]) dbReadTable(con, \"mtcars\") dbWriteTable(con, \"mtcars\", mtcars[6:10, ], append = TRUE) dbReadTable(con, \"mtcars\") dbWriteTable(con, \"mtcars\", mtcars[1:10, ], overwrite = TRUE) dbReadTable(con, \"mtcars\") # No row names dbWriteTable(con, \"mtcars\", mtcars[1:10, ], overwrite = TRUE, row.names = FALSE) dbReadTable(con, \"mtcars\")"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"list-remote-tables","dir":"Articles","previous_headings":"","what":"List remote tables","title":"DBI specification","text":"section describes behavior following method:","code":"dbListTables(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-14","dir":"Articles","previous_headings":"List remote tables","what":"Description","title":"DBI specification","text":"Returns unquoted names remote tables accessible connection. include views temporary objects, database backends (particular RMariaDB RMySQL) support .","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-14","dir":"Articles","previous_headings":"List remote tables","what":"Value","title":"DBI specification","text":"dbListTables() returns character vector enumerates tables views database. Tables added dbWriteTable() part list. soon table removed database, also removed list database tables. applies temporary tables supported database. returned names suitable quoting dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-13","dir":"Articles","previous_headings":"List remote tables","what":"Failure modes","title":"DBI specification","text":"error raised calling method closed invalid connection.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-15","dir":"Articles","previous_headings":"List remote tables","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbListTables(con) dbWriteTable(con, \"mtcars\", mtcars) dbListTables(con) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"does-a-table-exist","dir":"Articles","previous_headings":"","what":"Does a table exist?","title":"DBI specification","text":"section describes behavior following method:","code":"dbExistsTable(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-15","dir":"Articles","previous_headings":"Does a table exist?","what":"Description","title":"DBI specification","text":"Returns table given name exists database.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"arguments-15","dir":"Articles","previous_headings":"Does a table exist?","what":"Arguments","title":"DBI specification","text":"DBIConnection object, returned dbConnect(). table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. “table_name”, call Id() components fully qualified table name, e.g. Id(schema = “my_schema”, table = “table_name”) call SQL() quoted fully qualified table name given verbatim, e.g. SQL(‘“my_schema”.”table_name”’) parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-15","dir":"Articles","previous_headings":"Does a table exist?","what":"Value","title":"DBI specification","text":"dbExistsTable() returns logical scalar, TRUE table view specified name argument exists, FALSE otherwise. includes temporary tables supported database.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-14","dir":"Articles","previous_headings":"Does a table exist?","what":"Failure modes","title":"DBI specification","text":"error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-13","dir":"Articles","previous_headings":"Does a table exist?","what":"Specification","title":"DBI specification","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbExistsTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done tables listed dbListTables(), dbExistsTable() returns TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-16","dir":"Articles","previous_headings":"Does a table exist?","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbExistsTable(con, \"iris\") dbWriteTable(con, \"iris\", iris) dbExistsTable(con, \"iris\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"remove-a-table-from-the-database","dir":"Articles","previous_headings":"","what":"Remove a table from the database","title":"DBI specification","text":"section describes behavior following method:","code":"dbRemoveTable(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-16","dir":"Articles","previous_headings":"Remove a table from the database","what":"Description","title":"DBI specification","text":"Remove remote table (e.g., created dbWriteTable()) database.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"arguments-16","dir":"Articles","previous_headings":"Remove a table from the database","what":"Arguments","title":"DBI specification","text":"DBIConnection object, returned dbConnect(). table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. “table_name”, call Id() components fully qualified table name, e.g. Id(schema = “my_schema”, table = “table_name”) call SQL() quoted fully qualified table name given verbatim, e.g. SQL(‘“my_schema”.”table_name”’) parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments-6","dir":"Articles","previous_headings":"Remove a table from the database","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbRemoveTable() generic (improve compatibility across backends) part DBI specification: temporary (default: FALSE) fail_if_missing (default: TRUE) arguments must provided named arguments. temporary TRUE, call dbRemoveTable() consider temporary tables. backends support argument. particular, permanent tables name left untouched. fail_if_missing FALSE, call dbRemoveTable() succeeds table exist.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-14","dir":"Articles","previous_headings":"Remove a table from the database","what":"Specification","title":"DBI specification","text":"table removed dbRemoveTable() doesn’t appear list tables returned dbListTables(), dbExistsTable() returns FALSE. removal propagates immediately connections database. function can also used remove temporary table. name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbRemoveTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-16","dir":"Articles","previous_headings":"Remove a table from the database","what":"Value","title":"DBI specification","text":"dbRemoveTable() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-15","dir":"Articles","previous_headings":"Remove a table from the database","what":"Failure modes","title":"DBI specification","text":"table exist, error raised. attempt remove view function may result error. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-17","dir":"Articles","previous_headings":"Remove a table from the database","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbExistsTable(con, \"iris\") dbWriteTable(con, \"iris\", iris) dbExistsTable(con, \"iris\") dbRemoveTable(con, \"iris\") dbExistsTable(con, \"iris\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"list-field-names-of-a-remote-table","dir":"Articles","previous_headings":"","what":"List field names of a remote table","title":"DBI specification","text":"section describes behavior following method:","code":"dbListFields(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-17","dir":"Articles","previous_headings":"List field names of a remote table","what":"Description","title":"DBI specification","text":"Returns field names remote table character vector.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"arguments-17","dir":"Articles","previous_headings":"List field names of a remote table","what":"Arguments","title":"DBI specification","text":"DBIConnection object, returned dbConnect(). table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. “table_name”, call Id() components fully qualified table name, e.g. Id(schema = “my_schema”, table = “table_name”) call SQL() quoted fully qualified table name given verbatim, e.g. SQL(‘“my_schema”.”table_name”’) parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-17","dir":"Articles","previous_headings":"List field names of a remote table","what":"Value","title":"DBI specification","text":"dbListFields() returns character vector enumerates fields table correct order. also works temporary tables supported database. returned names suitable quoting dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-16","dir":"Articles","previous_headings":"List field names of a remote table","what":"Failure modes","title":"DBI specification","text":"table exist, error raised. Invalid types name argument (e.g., character length equal one, numeric) lead error. error also raised calling method closed invalid connection.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-15","dir":"Articles","previous_headings":"List field names of a remote table","what":"Specification","title":"DBI specification","text":"name argument can string return value dbQuoteIdentifier() value table column return value dbListObjects() is_prefix FALSE column named row_names treated like column.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-18","dir":"Articles","previous_headings":"List field names of a remote table","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) dbListFields(con, \"mtcars\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"is-this-dbms-object-still-valid","dir":"Articles","previous_headings":"","what":"Is this DBMS object still valid?","title":"DBI specification","text":"section describes behavior following method:","code":"dbIsValid(dbObj, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-18","dir":"Articles","previous_headings":"Is this DBMS object still valid?","what":"Description","title":"DBI specification","text":"generic tests whether database object still valid (.e. hasn’t disconnected cleared).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-18","dir":"Articles","previous_headings":"Is this DBMS object still valid?","what":"Value","title":"DBI specification","text":"dbIsValid() returns logical scalar, TRUE object specified dbObj valid, FALSE otherwise. DBIConnection object initially valid, becomes invalid disconnecting dbDisconnect(). invalid connection object (e.g., drivers object saved file restored), method also returns FALSE. DBIResult object valid call dbSendQuery(), stays valid even rows fetched; clearing dbClearResult() invalidates . DBIResult object also valid call dbSendStatement(), stays valid querying number rows affected; clearing dbClearResult() invalidates . connection database system dropped (e.g., due connectivity problems, server failure, etc.), dbIsValid() return FALSE. tested automatically.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-19","dir":"Articles","previous_headings":"Is this DBMS object still valid?","what":"Examples","title":"DBI specification","text":"","code":"dbIsValid(RSQLite::SQLite()) con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbIsValid(con) rs <- dbSendQuery(con, \"SELECT 1\") dbIsValid(rs) dbClearResult(rs) dbIsValid(rs) dbDisconnect(con) dbIsValid(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"completion-status","dir":"Articles","previous_headings":"","what":"Completion status","title":"DBI specification","text":"section describes behavior following method:","code":"dbHasCompleted(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-19","dir":"Articles","previous_headings":"Completion status","what":"Description","title":"DBI specification","text":"method returns operation completed. SELECT query completed rows fetched. data manipulation statement always completed.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-19","dir":"Articles","previous_headings":"Completion status","what":"Value","title":"DBI specification","text":"dbHasCompleted() returns logical scalar. query initiated dbSendQuery() non-empty result set, dbHasCompleted() returns FALSE initially TRUE calling dbFetch() without limit. query initiated dbSendStatement(), dbHasCompleted() always returns TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow-4","dir":"Articles","previous_headings":"Completion status","what":"The data retrieval flow","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell ’re done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-17","dir":"Articles","previous_headings":"Completion status","what":"Failure modes","title":"DBI specification","text":"Attempting query completion status result set cleared dbClearResult() gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-16","dir":"Articles","previous_headings":"Completion status","what":"Specification","title":"DBI specification","text":"completion status query guaranteed set FALSE attempting fetch past end entire result. Therefore, query empty result set, initial return value unspecified, result value TRUE trying fetch one row. Similarly, query result set length n, return value unspecified fetching n rows, result value TRUE trying fetch one row.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-20","dir":"Articles","previous_headings":"Completion status","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") dbHasCompleted(rs) ret1 <- dbFetch(rs, 10) dbHasCompleted(rs) ret2 <- dbFetch(rs) dbHasCompleted(rs) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"get-the-statement-associated-with-a-result-set","dir":"Articles","previous_headings":"","what":"Get the statement associated with a result set","title":"DBI specification","text":"section describes behavior following method:","code":"dbGetStatement(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-20","dir":"Articles","previous_headings":"Get the statement associated with a result set","what":"Description","title":"DBI specification","text":"Returns statement passed dbSendQuery() dbSendStatement().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-20","dir":"Articles","previous_headings":"Get the statement associated with a result set","what":"Value","title":"DBI specification","text":"dbGetStatement() returns string, query used either dbSendQuery() dbSendStatement().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-18","dir":"Articles","previous_headings":"Get the statement associated with a result set","what":"Failure modes","title":"DBI specification","text":"Attempting query statement result set cleared dbClearResult() gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-21","dir":"Articles","previous_headings":"Get the statement associated with a result set","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") dbGetStatement(rs) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-number-of-rows-fetched-so-far","dir":"Articles","previous_headings":"","what":"The number of rows fetched so far","title":"DBI specification","text":"section describes behavior following method:","code":"dbGetRowCount(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-21","dir":"Articles","previous_headings":"The number of rows fetched so far","what":"Description","title":"DBI specification","text":"Returns total number rows actually fetched calls dbFetch() result set.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-21","dir":"Articles","previous_headings":"The number of rows fetched so far","what":"Value","title":"DBI specification","text":"dbGetRowCount() returns scalar number (integer numeric), number rows fetched far. calling dbSendQuery(), row count initially zero. call dbFetch() without limit, row count matches total number rows returned. Fetching limited number rows increases number rows number rows returned, even fetching past end result set. queries empty result set, zero returned even fetching. data manipulation statements issued dbSendStatement(), zero returned calling dbFetch().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-19","dir":"Articles","previous_headings":"The number of rows fetched so far","what":"Failure modes","title":"DBI specification","text":"Attempting get row count result set cleared dbClearResult() gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-22","dir":"Articles","previous_headings":"The number of rows fetched so far","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") dbGetRowCount(rs) ret1 <- dbFetch(rs, 10) dbGetRowCount(rs) ret2 <- dbFetch(rs) dbGetRowCount(rs) nrow(ret1) + nrow(ret2) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-number-of-rows-affected","dir":"Articles","previous_headings":"","what":"The number of rows affected","title":"DBI specification","text":"section describes behavior following method:","code":"dbGetRowsAffected(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-22","dir":"Articles","previous_headings":"The number of rows affected","what":"Description","title":"DBI specification","text":"method returns number rows added, deleted, updated data manipulation statement.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-22","dir":"Articles","previous_headings":"The number of rows affected","what":"Value","title":"DBI specification","text":"dbGetRowsAffected() returns scalar number (integer numeric), number rows affected data manipulation statement issued dbSendStatement(). value available directly call change calling dbFetch(). NA_integer_ NA_numeric_ allowed number rows affected known. queries issued dbSendQuery(), zero returned call dbFetch(). NA values allowed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-command-execution-flow-3","dir":"Articles","previous_headings":"The number of rows affected","what":"The command execution flow","title":"DBI specification","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-20","dir":"Articles","previous_headings":"The number of rows affected","what":"Failure modes","title":"DBI specification","text":"Attempting get rows affected result set cleared dbClearResult() gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-23","dir":"Articles","previous_headings":"The number of rows affected","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendStatement(con, \"DELETE FROM mtcars\") dbGetRowsAffected(rs) nrow(mtcars) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"information-about-result-types","dir":"Articles","previous_headings":"","what":"Information about result types","title":"DBI specification","text":"section describes behavior following method:","code":"dbColumnInfo(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-23","dir":"Articles","previous_headings":"Information about result types","what":"Description","title":"DBI specification","text":"Produces data.frame describes output query. data.frame many rows output fields result set, column data.frame describes aspect result set field (field name, type, etc.)","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-23","dir":"Articles","previous_headings":"Information about result types","what":"Value","title":"DBI specification","text":"dbColumnInfo() returns data frame least two columns \"name\" \"type\" (order) (optional columns start dot). \"name\" \"type\" columns contain names types R columns data frame returned dbFetch(). \"type\" column type character information. compute \"type\" column, instead use dbFetch(res, n = 0) create zero-row data frame initialized correct data types.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow-5","dir":"Articles","previous_headings":"Information about result types","what":"The data retrieval flow","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell ’re done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-21","dir":"Articles","previous_headings":"Information about result types","what":"Failure modes","title":"DBI specification","text":"attempt query columns closed result set raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-17","dir":"Articles","previous_headings":"Information about result types","what":"Specification","title":"DBI specification","text":"column named row_names treated like column. column names always consistent data returned dbFetch(). query returns unnamed columns, non-empty non-NA names assigned. Column names correspond SQL R keywords left unchanged.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-24","dir":"Articles","previous_headings":"Information about result types","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") rs <- dbSendQuery(con, \"SELECT 1 AS a, 2 AS b\") dbColumnInfo(rs) dbFetch(rs) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"begincommitrollback-sql-transactions","dir":"Articles","previous_headings":"","what":"Begin/commit/rollback SQL transactions","title":"DBI specification","text":"section describes behavior following methods:","code":"dbBegin(conn, ...) dbCommit(conn, ...) dbRollback(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-24","dir":"Articles","previous_headings":"Begin/commit/rollback SQL transactions","what":"Description","title":"DBI specification","text":"transaction encapsulates several SQL statements atomic unit. initiated dbBegin() either made persistent dbCommit() undone dbRollback(). case, DBMS guarantees either none statements permanent effect. helps ensuring consistency write operations multiple tables.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-9","dir":"Articles","previous_headings":"Begin/commit/rollback SQL transactions","what":"Details","title":"DBI specification","text":"database engines implement transaction management, case methods implemented specific DBIConnection subclass.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-24","dir":"Articles","previous_headings":"Begin/commit/rollback SQL transactions","what":"Value","title":"DBI specification","text":"dbBegin(), dbCommit() dbRollback() return TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-22","dir":"Articles","previous_headings":"Begin/commit/rollback SQL transactions","what":"Failure modes","title":"DBI specification","text":"implementations expected raise error case failure, tested. way, generics throw error closed invalid connection. addition, call dbCommit() dbRollback() without prior call dbBegin() raises error. Nested transactions supported DBI, attempt call dbBegin() twice yields error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-18","dir":"Articles","previous_headings":"Begin/commit/rollback SQL transactions","what":"Specification","title":"DBI specification","text":"Actual support transactions may vary backends. transaction initiated call dbBegin() committed call dbCommit(). Data written transaction must persist transaction committed. example, record missing transaction started created transaction must exist transaction, also new connection. transaction can also aborted dbRollback(). data written transaction must removed transaction rolled back. example, record missing transaction started created transaction must exist anymore rollback. Disconnection connection open transaction effectively rolls back transaction. data written transaction must removed transaction rolled back. behavior specified arguments passed functions. particular, RSQLite issues named transactions support nesting name argument set. transaction isolation level specified DBI.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-25","dir":"Articles","previous_headings":"Begin/commit/rollback SQL transactions","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cash\", data.frame(amount = 100)) dbWriteTable(con, \"account\", data.frame(amount = 2000)) # All operations are carried out as logical unit: dbBegin(con) withdrawal <- 300 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) dbCommit(con) dbReadTable(con, \"cash\") dbReadTable(con, \"account\") # Rolling back after detecting negative value on account: dbBegin(con) withdrawal <- 5000 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) if (dbReadTable(con, \"account\")\\$amount >= 0) { dbCommit(con) } else { dbRollback(con) } dbReadTable(con, \"cash\") dbReadTable(con, \"account\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"self-contained-sql-transactions","dir":"Articles","previous_headings":"","what":"Self-contained SQL transactions","title":"DBI specification","text":"section describes behavior following methods:","code":"dbWithTransaction(conn, code, ...) dbBreak()"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-25","dir":"Articles","previous_headings":"Self-contained SQL transactions","what":"Description","title":"DBI specification","text":"Given transactions implemented, function allows pass code run transaction. default method dbWithTransaction() calls dbBegin() executing code, dbCommit() successful completion, dbRollback() case error. advantage don’t remember dbBegin() dbCommit() dbRollback() – taken care . special function dbBreak() allows early exit rollback, can called inside dbWithTransaction().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-10","dir":"Articles","previous_headings":"Self-contained SQL transactions","what":"Details","title":"DBI specification","text":"DBI implements dbWithTransaction(), backends need override generic implement specialized handling.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-25","dir":"Articles","previous_headings":"Self-contained SQL transactions","what":"Value","title":"DBI specification","text":"dbWithTransaction() returns value executed code.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-23","dir":"Articles","previous_headings":"Self-contained SQL transactions","what":"Failure modes","title":"DBI specification","text":"Failure initiate transaction (e.g., connection closed invalid dbBegin() called already) gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-19","dir":"Articles","previous_headings":"Self-contained SQL transactions","what":"Specification","title":"DBI specification","text":"dbWithTransaction() initiates transaction dbBegin(), executes code given code argument, commits transaction dbCommit(). code raises error, transaction instead aborted dbRollback(), error propagated. code calls dbBreak(), execution code stops transaction silently aborted. side effects caused code (creation new variables) propagate calling environment.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-26","dir":"Articles","previous_headings":"Self-contained SQL transactions","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cash\", data.frame(amount = 100)) dbWriteTable(con, \"account\", data.frame(amount = 2000)) # All operations are carried out as logical unit: dbWithTransaction( con, { withdrawal <- 300 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) } ) # The code is executed as if in the current environment: withdrawal # The changes are committed to the database after successful execution: dbReadTable(con, \"cash\") dbReadTable(con, \"account\") # Rolling back with dbBreak(): dbWithTransaction( con, { withdrawal <- 5000 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) if (dbReadTable(con, \"account\")\\$amount < 0) { dbBreak() } } ) # These changes were not committed to the database: dbReadTable(con, \"cash\") dbReadTable(con, \"account\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"get-dbms-metadata","dir":"Articles","previous_headings":"","what":"Get DBMS metadata","title":"DBI specification","text":"section describes behavior following method:","code":"dbGetInfo(dbObj, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-26","dir":"Articles","previous_headings":"Get DBMS metadata","what":"Description","title":"DBI specification","text":"Retrieves information objects class DBIDriver, DBIConnection DBIResult.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-26","dir":"Articles","previous_headings":"Get DBMS metadata","what":"Value","title":"DBI specification","text":"objects class DBIDriver, dbGetInfo() returns named list contains least following components: driver.version: package version DBI backend, client.version: version DBMS client library. objects class DBIConnection, dbGetInfo() returns named list contains least following components: db.version: version database server, dbname: database name, username: username connect database, host: hostname database server, port: port database server. must contain password component. Components applicable set NA. objects class DBIResult, dbGetInfo() returns named list contains least following components: statatment: statement used dbSendQuery() dbExecute(), returned dbGetStatement(), row.count: number rows fetched far (queries), returned dbGetRowCount(), rows.affected: number rows affected (statements), returned dbGetRowsAffected() .completed: logical indicates query statement completed, returned dbHasCompleted().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"implementation-notes-2","dir":"Articles","previous_headings":"Get DBMS metadata","what":"Implementation notes","title":"DBI specification","text":"default implementation ⁠DBIResult objects⁠ constructs list return values corresponding methods, dbGetStatement(), dbGetRowCount(), dbGetRowsAffected(), dbHasCompleted().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-27","dir":"Articles","previous_headings":"Get DBMS metadata","what":"Examples","title":"DBI specification","text":"","code":"dbGetInfo(RSQLite::SQLite())"},{"path":"https://dbi.r-dbi.org/dev/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"R Special Interest Group Databases (R-SIG-DB). Author. Hadley Wickham. Author. Kirill Müller. Author, maintainer. R Consortium. Funder.","code":""},{"path":"https://dbi.r-dbi.org/dev/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"R Special Interest Group Databases (R-SIG-DB), Wickham H, Müller K (2024). DBI: R Database Interface. R package version 1.2.3.9001, https://github.com/r-dbi/DBI, https://dbi.r-dbi.org.","code":"@Manual{, title = {DBI: R Database Interface}, author = {{R Special Interest Group on Databases (R-SIG-DB)} and Hadley Wickham and Kirill Müller}, year = {2024}, note = {R package version 1.2.3.9001, https://github.com/r-dbi/DBI}, url = {https://dbi.r-dbi.org}, }"},{"path":"https://dbi.r-dbi.org/dev/index.html","id":"dbi","dir":"","previous_headings":"","what":"R Database Interface","title":"R Database Interface","text":"DBI package helps connecting R database management systems (DBMS). DBI separates connectivity DBMS “front-end” “back-end”. package defines interface implemented DBI backends : RPostgres, RMariaDB, RSQLite, odbc, bigrquery, many , see list backends. R scripts packages use DBI access various databases DBI backends. interface defines small set classes methods similar spirit Perl’s DBI, Java’s JDBC, Python’s DB-API, Microsoft’s ODBC. supports following operations: connect/disconnect DBMS create execute statements DBMS extract results/output statements error/exception handling information (meta-data) database objects transaction management (optional)","code":""},{"path":"https://dbi.r-dbi.org/dev/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"R Database Interface","text":"users want access database need install DBI directly. installed automatically install one database backends: RPostgres PostgreSQL, RMariaDB MariaDB MySQL, RSQLite SQLite, odbc databases can access via ODBC, bigrquery, … . can install released version DBI CRAN : development version GitHub :","code":"install.packages(\"DBI\") # install.packages(\"devtools\") devtools::install_github(\"r-dbi/DBI\")"},{"path":"https://dbi.r-dbi.org/dev/index.html","id":"example","dir":"","previous_headings":"","what":"Example","title":"R Database Interface","text":"following example illustrates DBI capabilities:","code":"library(DBI) # Create an ephemeral in-memory RSQLite database con <- dbConnect(RSQLite::SQLite(), dbname = \":memory:\") dbListTables(con) #> character(0) dbWriteTable(con, \"mtcars\", mtcars) dbListTables(con) #> [1] \"mtcars\" dbListFields(con, \"mtcars\") #> [1] \"mpg\" \"cyl\" \"disp\" \"hp\" \"drat\" \"wt\" \"qsec\" \"vs\" \"am\" \"gear\" #> [11] \"carb\" dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> [ reached 'max' / getOption(\"max.print\") -- omitted 23 rows ] # You can fetch all results: res <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbFetch(res) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> [ reached 'max' / getOption(\"max.print\") -- omitted 2 rows ] dbClearResult(res) # Or a chunk at a time res <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = 4\") while (!dbHasCompleted(res)) { chunk <- dbFetch(res, n = 5) print(nrow(chunk)) } #> [1] 5 #> [1] 5 #> [1] 1 dbClearResult(res) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/index.html","id":"class-structure","dir":"","previous_headings":"","what":"Class structure","title":"R Database Interface","text":"four main DBI classes. Three extended individual database backends: DBIObject: common base class DBI. DBIDriver: base class representing overall DBMS properties. Typically generator functions instantiate driver objects like RSQLite(), RPostgreSQL(), RMySQL() etc. DBIConnection: represents connection specific database DBIResult: result DBMS query statement. classes virtual: instantiated directly instead must subclassed.","code":""},{"path":"https://dbi.r-dbi.org/dev/index.html","id":"further-reading","dir":"","previous_headings":"","what":"Further Reading","title":"R Database Interface","text":"Databases using R describes tools best practices ecosystem. DBI project site hosts blog recent developments presented. history DBI David James, driving force behind development DBI, many packages implement . Please note DBI project released Contributor Code Conduct. contributing project, agree abide terms.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/ANSI.html","id":null,"dir":"Reference","previous_headings":"","what":"A dummy DBI connector that simulates ANSI-SQL compliance — ANSI","title":"A dummy DBI connector that simulates ANSI-SQL compliance — ANSI","text":"dummy DBI connector simulates ANSI-SQL compliance","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/ANSI.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A dummy DBI connector that simulates ANSI-SQL compliance — ANSI","text":"","code":"ANSI()"},{"path":"https://dbi.r-dbi.org/dev/reference/ANSI.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"A dummy DBI connector that simulates ANSI-SQL compliance — ANSI","text":"","code":"ANSI() #> "},{"path":"https://dbi.r-dbi.org/dev/reference/DBI-package.html","id":null,"dir":"Reference","previous_headings":"","what":"DBI: R Database Interface — DBI-package","title":"DBI: R Database Interface — DBI-package","text":"DBI defines interface communication R relational database management systems. classes package virtual need extended various R/DBMS implementations (-called DBI backends).","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBI-package.html","id":"definition","dir":"Reference","previous_headings":"","what":"Definition","title":"DBI: R Database Interface — DBI-package","text":"DBI backend R package imports DBI methods packages. better worse, names many existing backends start ‘R’, e.g., RSQLite, RMySQL, RSQLServer; backend author adopt convention .","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBI-package.html","id":"dbi-classes-and-methods","dir":"Reference","previous_headings":"","what":"DBI classes and methods","title":"DBI: R Database Interface — DBI-package","text":"backend defines three classes, subclasses DBIDriver, DBIConnection, DBIResult. backend provides implementation methods base classes defined implemented DBI. methods defined DBI reexported (package can used without attach DBI), ellipsis ... formals extensibility.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBI-package.html","id":"construction-of-the-dbidriver-object","dir":"Reference","previous_headings":"","what":"Construction of the DBIDriver object","title":"DBI: R Database Interface — DBI-package","text":"backend must support creation instance DBIDriver subclass constructor function. default, name package name without leading ‘R’ (exists), e.g., SQLite RSQLite package. However, backend authors may choose different name. constructor must exported, must function callable without arguments. DBI recommends define constructor empty argument list.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/DBI-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"DBI: R Database Interface — DBI-package","text":"Maintainer: Kirill Müller kirill@cynkra.com (ORCID) Authors: R Special Interest Group Databases (R-SIG-DB) Hadley Wickham contributors: R Consortium [funder]","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBI-package.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"DBI: R Database Interface — DBI-package","text":"","code":"RSQLite::SQLite() #> "},{"path":"https://dbi.r-dbi.org/dev/reference/DBIConnection-class.html","id":null,"dir":"Reference","previous_headings":"","what":"DBIConnection class — DBIConnection-class","title":"DBIConnection class — DBIConnection-class","text":"virtual class encapsulates connection DBMS, provides access dynamic queries, result sets, DBMS session management (transactions), etc.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBIConnection-class.html","id":"implementation-note","dir":"Reference","previous_headings":"","what":"Implementation note","title":"DBIConnection class — DBIConnection-class","text":"Individual drivers free implement single multiple simultaneous connections.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/DBIConnection-class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"DBIConnection class — DBIConnection-class","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") con #> #> Path: :memory: #> Extensions: TRUE dbDisconnect(con) if (FALSE) { con <- dbConnect(RPostgreSQL::PostgreSQL(), \"username\", \"password\") con dbDisconnect(con) }"},{"path":"https://dbi.r-dbi.org/dev/reference/DBIConnector-class.html","id":null,"dir":"Reference","previous_headings":"","what":"DBIConnector class — DBIConnector-class","title":"DBIConnector class — DBIConnector-class","text":"Wraps objects DBIDriver class include connection options. purpose class store driver connection options. database connection can established call dbConnect(), passing object without additional arguments.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBIConnector-class.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"DBIConnector class — DBIConnector-class","text":"prevent leakage passwords credentials, class supports delayed evaluation. arguments can optionally function (callable without arguments). case, function evaluated transparently connecting dbGetConnectArgs().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/DBIConnector-class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"DBIConnector class — DBIConnector-class","text":"","code":"# Create a connector: cnr <- new(\"DBIConnector\", .drv = RSQLite::SQLite(), .conn_args = list(dbname = \":memory:\") ) cnr #> #> Arguments: #> $dbname #> [1] \":memory:\" #> # Establish a connection through this connector: con <- dbConnect(cnr) con #> #> Path: :memory: #> Extensions: TRUE # Access the database through this connection: dbGetQuery(con, \"SELECT 1 AS a\") #> a #> 1 1 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/DBIDriver-class.html","id":null,"dir":"Reference","previous_headings":"","what":"DBIDriver class — DBIDriver-class","title":"DBIDriver class — DBIDriver-class","text":"Base class DBMS drivers (e.g., RSQLite, MySQL, PostgreSQL). virtual class DBIDriver defines operations creating connections defining data type mappings. Actual driver classes, instance RPostgres, RMariaDB, etc. implement operations DBMS-specific manner.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/DBIObject-class.html","id":null,"dir":"Reference","previous_headings":"","what":"DBIObject class — DBIObject-class","title":"DBIObject class — DBIObject-class","text":"Base class DBI classes (e.g., drivers, connections). virtual Class: objects may created .","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBIObject-class.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"DBIObject class — DBIObject-class","text":"generally, DBI defines small set classes generics allows users applications access DBMS common interface. virtual classes DBIDriver individual drivers extend, DBIConnection represent instances DBMS connections, DBIResult represent result DBMS statement. three classes extend basic class DBIObject, serves root parent class hierarchy.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBIObject-class.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"DBIObject class — DBIObject-class","text":"implementation MUST provide methods following generics: dbGetInfo(). MAY also provide methods : summary(). Print concise description object. default method invokes dbGetInfo(dbObj) prints name-value pairs one per line. Individual implementations may tailor appropriately.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/DBIObject-class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"DBIObject class — DBIObject-class","text":"","code":"drv <- RSQLite::SQLite() con <- dbConnect(drv) rs <- dbSendQuery(con, \"SELECT 1\") is(drv, \"DBIObject\") ## True #> [1] TRUE is(con, \"DBIObject\") ## True #> [1] TRUE is(rs, \"DBIObject\") #> [1] TRUE dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/DBIResult-class.html","id":null,"dir":"Reference","previous_headings":"","what":"DBIResult class — DBIResult-class","title":"DBIResult class — DBIResult-class","text":"virtual class describes result state execution DBMS statement (statement, query non-query). result set keeps track whether statement produces output many rows affected operation, many rows fetched (statement query), whether rows fetch, etc.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBIResult-class.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"DBIResult class — DBIResult-class","text":"Individual drivers free allow single multiple active results per connection. default show method displays summary query using DBI generics.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/DBIResultArrow-class.html","id":null,"dir":"Reference","previous_headings":"","what":"DBIResultArrow class — DBIResultArrow-class","title":"DBIResultArrow class — DBIResultArrow-class","text":"virtual class describes result state execution DBMS statement (statement, query non-query) returning data Arrow object.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBIResultArrow-class.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"DBIResultArrow class — DBIResultArrow-class","text":"Individual drivers free allow single multiple active results per connection. default show method displays summary query using DBI generics.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/Id.html","id":null,"dir":"Reference","previous_headings":"","what":"Refer to a table nested in a hierarchy (e.g. within a schema) — Id-class","title":"Refer to a table nested in a hierarchy (e.g. within a schema) — Id-class","text":"Objects class Id single slot name, character vector. dbQuoteIdentifier() method converts Id objects strings. Support Id objects depends database backend. can used following methods name table argument: dbCreateTable() dbAppendTable() dbReadTable() dbWriteTable() dbExistsTable() dbRemoveTable() Objects class also returned dbListObjects().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/Id.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Refer to a table nested in a hierarchy (e.g. within a schema) — Id-class","text":"","code":"Id(...)"},{"path":"https://dbi.r-dbi.org/dev/reference/Id.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Refer to a table nested in a hierarchy (e.g. within a schema) — Id-class","text":"... Components hierarchy, e.g. cluster, catalog, schema, table, depending database backend. concepts, see https://stackoverflow.com/questions/7022755/","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/Id.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Refer to a table nested in a hierarchy (e.g. within a schema) — Id-class","text":"","code":"# Identifies a table in a specific schema: Id(\"dbo\", \"Customer\") #> \"dbo\".\"Customer\" # You can name the components if you want, but it's not needed Id(table = \"Customer\", schema = \"dbo\") #> \"dbo\".\"Customer\" # Create a SQL expression for an identifier: dbQuoteIdentifier(ANSI(), Id(\"nycflights13\", \"flights\")) #> \"nycflights13\".\"flights\" # Write a table in a specific schema: if (FALSE) { dbWriteTable(con, Id(\"myschema\", \"mytable\"), data.frame(a = 1)) }"},{"path":"https://dbi.r-dbi.org/dev/reference/SQL.html","id":null,"dir":"Reference","previous_headings":"","what":"SQL quoting — SQL","title":"SQL quoting — SQL","text":"set classes generics make possible flexibly deal SQL escaping needs. default, user supplied input query escaped using either dbQuoteIdentifier() dbQuoteString() depending whether refers table variable name, literal string. functions may return object SQL class, tells DBI functions character string need escaped anymore, prevent double escaping. SQL class associated SQL() constructor function.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/SQL.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"SQL quoting — SQL","text":"","code":"SQL(x, ..., names = NULL)"},{"path":"https://dbi.r-dbi.org/dev/reference/SQL.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"SQL quoting — SQL","text":"x character vector label escaped SQL. ... arguments passed methods. otherwise used. names Names returned object, must length x.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/SQL.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"SQL quoting — SQL","text":"object class SQL.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/SQL.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"SQL quoting — SQL","text":"DBI provides default generics SQL-92 compatible quoting. database uses different convention, need provide methods. Note way S4 dispatch finds methods SQL inherits character, implement (e.g.) method dbQuoteString(MyConnection, character), also need implement dbQuoteString(MyConnection, SQL) - simply return x unchanged.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/SQL.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"SQL quoting — SQL","text":"","code":"dbQuoteIdentifier(ANSI(), \"SELECT\") #> \"SELECT\" dbQuoteString(ANSI(), \"SELECT\") #> 'SELECT' # SQL vectors are always passed through as is var_name <- SQL(\"SELECT\") var_name #> SELECT dbQuoteIdentifier(ANSI(), var_name) #> SELECT dbQuoteString(ANSI(), var_name) #> SELECT # This mechanism is used to prevent double escaping dbQuoteString(ANSI(), dbQuoteString(ANSI(), \"SELECT\")) #> 'SELECT'"},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Insert rows into a table — dbAppendTable","title":"Insert rows into a table — dbAppendTable","text":"dbAppendTable() method assumes table created beforehand, e.g. dbCreateTable(). default implementation calls sqlAppendTableTemplate() dbExecute() param argument. Use dbAppendTableArrow() append data Arrow stream.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Insert rows into a table — dbAppendTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbAppendTable(\"AdbiConnection\", \"\", \"\") bigrquery::dbAppendTable(\"BigQueryConnection\", \"AsIs\", \"data.frame\") bigrquery::dbAppendTable(\"BigQueryConnection\", \"character\", \"data.frame\") bigrquery::dbAppendTable(\"BigQueryConnection\", \"Id\", \"data.frame\") DatabaseConnector::dbAppendTable(\"DatabaseConnectorConnection\", \"character\", \"\") duckdb::dbAppendTable(\"duckdb_connection\", \"\", \"\") odbc::dbAppendTable(\"OdbcConnection\", \"\", \"\") pool::dbAppendTable(\"Pool\", \"\", \"\") RMariaDB::dbAppendTable(\"MariaDBConnection\", \"\", \"\") RPostgres::dbAppendTable(\"PqConnection\", \"\", \"\") RPresto::dbAppendTable(\"PrestoConnection\", \"\", \"data.frame\") RSQLite::dbAppendTable(\"SQLiteConnection\", \"\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Insert rows into a table — dbAppendTable","text":"","code":"dbAppendTable(conn, name, value, ..., row.names = NULL)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Insert rows into a table — dbAppendTable","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') value data.frame (coercible data.frame). ... parameters passed methods. row.names Must NULL.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Insert rows into a table — dbAppendTable","text":"dbAppendTable() returns scalar numeric.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Insert rows into a table — dbAppendTable","text":"Backends compliant ANSI SQL 99 use ? placeholder prepared queries need override . Backends different SQL syntax use ? placeholder prepared queries can override sqlAppendTable(). backends (different placeholders entirely different ways create tables) need override dbAppendTable() method. row.names argument supported method. Process values sqlRownamesToColumn() calling method.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Insert rows into a table — dbAppendTable","text":"table exist, new data values data frame different column names, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar. Invalid values row.names argument (non-scalars, unsupported data types, NA) also raise error. Passing value argument different NULL row.names argument (particular TRUE, NA, string) raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Insert rows into a table — dbAppendTable","text":"SQL keywords can used freely table names, column names, data. Quotes, commas, spaces, special characters newlines tabs, can also used data, , database supports non-syntactic identifiers, also table names column names. following data types must supported least, read identically dbReadTable(): integer numeric (behavior Inf NaN specified) logical NA NULL 64-bit values (using \"bigint\" field type); result can converted numeric, may lose precision, converted character vector, gives full decimal representation written another table read unchanged character (UTF-8 native encodings), supporting empty strings (non-empty strings) factor (returned character, warning) list raw (supported database) objects type blob::blob (supported database) date (supported database; returned Date) also dates prior 1970 1900 2038 time (supported database; returned objects inherit difftime) timestamp (supported database; returned POSIXct respecting time zone necessarily preserving input time zone), also timestamps prior 1970 1900 2038 respecting time zone necessarily preserving input time zone) Mixing column types table supported. name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbAppendTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done support databases allow non-syntactic names objects: row.names argument must NULL, default value. Row names ignored. value argument must data frame subset columns existing table. order columns matter.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Insert rows into a table — dbAppendTable","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbCreateTable(con, \"iris\", iris) dbAppendTable(con, \"iris\", iris) #> Warning: Factors converted to character #> [1] 150 dbReadTable(con, \"iris\") #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 5.1 3.5 1.4 0.2 setosa #> 2 4.9 3.0 1.4 0.2 setosa #> 3 4.7 3.2 1.3 0.2 setosa #> 4 4.6 3.1 1.5 0.2 setosa #> 5 5.0 3.6 1.4 0.2 setosa #> 6 5.4 3.9 1.7 0.4 setosa #> 7 4.6 3.4 1.4 0.3 setosa #> 8 5.0 3.4 1.5 0.2 setosa #> 9 4.4 2.9 1.4 0.2 setosa #> 10 4.9 3.1 1.5 0.1 setosa #> 11 5.4 3.7 1.5 0.2 setosa #> 12 4.8 3.4 1.6 0.2 setosa #> 13 4.8 3.0 1.4 0.1 setosa #> 14 4.3 3.0 1.1 0.1 setosa #> 15 5.8 4.0 1.2 0.2 setosa #> 16 5.7 4.4 1.5 0.4 setosa #> 17 5.4 3.9 1.3 0.4 setosa #> 18 5.1 3.5 1.4 0.3 setosa #> 19 5.7 3.8 1.7 0.3 setosa #> 20 5.1 3.8 1.5 0.3 setosa #> 21 5.4 3.4 1.7 0.2 setosa #> 22 5.1 3.7 1.5 0.4 setosa #> 23 4.6 3.6 1.0 0.2 setosa #> 24 5.1 3.3 1.7 0.5 setosa #> 25 4.8 3.4 1.9 0.2 setosa #> 26 5.0 3.0 1.6 0.2 setosa #> 27 5.0 3.4 1.6 0.4 setosa #> 28 5.2 3.5 1.5 0.2 setosa #> 29 5.2 3.4 1.4 0.2 setosa #> 30 4.7 3.2 1.6 0.2 setosa #> 31 4.8 3.1 1.6 0.2 setosa #> 32 5.4 3.4 1.5 0.4 setosa #> 33 5.2 4.1 1.5 0.1 setosa #> 34 5.5 4.2 1.4 0.2 setosa #> 35 4.9 3.1 1.5 0.2 setosa #> 36 5.0 3.2 1.2 0.2 setosa #> 37 5.5 3.5 1.3 0.2 setosa #> 38 4.9 3.6 1.4 0.1 setosa #> 39 4.4 3.0 1.3 0.2 setosa #> 40 5.1 3.4 1.5 0.2 setosa #> 41 5.0 3.5 1.3 0.3 setosa #> 42 4.5 2.3 1.3 0.3 setosa #> 43 4.4 3.2 1.3 0.2 setosa #> 44 5.0 3.5 1.6 0.6 setosa #> 45 5.1 3.8 1.9 0.4 setosa #> 46 4.8 3.0 1.4 0.3 setosa #> 47 5.1 3.8 1.6 0.2 setosa #> 48 4.6 3.2 1.4 0.2 setosa #> 49 5.3 3.7 1.5 0.2 setosa #> 50 5.0 3.3 1.4 0.2 setosa #> 51 7.0 3.2 4.7 1.4 versicolor #> 52 6.4 3.2 4.5 1.5 versicolor #> 53 6.9 3.1 4.9 1.5 versicolor #> 54 5.5 2.3 4.0 1.3 versicolor #> 55 6.5 2.8 4.6 1.5 versicolor #> 56 5.7 2.8 4.5 1.3 versicolor #> 57 6.3 3.3 4.7 1.6 versicolor #> 58 4.9 2.4 3.3 1.0 versicolor #> 59 6.6 2.9 4.6 1.3 versicolor #> 60 5.2 2.7 3.9 1.4 versicolor #> 61 5.0 2.0 3.5 1.0 versicolor #> 62 5.9 3.0 4.2 1.5 versicolor #> 63 6.0 2.2 4.0 1.0 versicolor #> 64 6.1 2.9 4.7 1.4 versicolor #> 65 5.6 2.9 3.6 1.3 versicolor #> 66 6.7 3.1 4.4 1.4 versicolor #> 67 5.6 3.0 4.5 1.5 versicolor #> 68 5.8 2.7 4.1 1.0 versicolor #> 69 6.2 2.2 4.5 1.5 versicolor #> 70 5.6 2.5 3.9 1.1 versicolor #> 71 5.9 3.2 4.8 1.8 versicolor #> 72 6.1 2.8 4.0 1.3 versicolor #> 73 6.3 2.5 4.9 1.5 versicolor #> 74 6.1 2.8 4.7 1.2 versicolor #> 75 6.4 2.9 4.3 1.3 versicolor #> 76 6.6 3.0 4.4 1.4 versicolor #> 77 6.8 2.8 4.8 1.4 versicolor #> 78 6.7 3.0 5.0 1.7 versicolor #> 79 6.0 2.9 4.5 1.5 versicolor #> 80 5.7 2.6 3.5 1.0 versicolor #> 81 5.5 2.4 3.8 1.1 versicolor #> 82 5.5 2.4 3.7 1.0 versicolor #> 83 5.8 2.7 3.9 1.2 versicolor #> 84 6.0 2.7 5.1 1.6 versicolor #> 85 5.4 3.0 4.5 1.5 versicolor #> 86 6.0 3.4 4.5 1.6 versicolor #> 87 6.7 3.1 4.7 1.5 versicolor #> 88 6.3 2.3 4.4 1.3 versicolor #> 89 5.6 3.0 4.1 1.3 versicolor #> 90 5.5 2.5 4.0 1.3 versicolor #> 91 5.5 2.6 4.4 1.2 versicolor #> 92 6.1 3.0 4.6 1.4 versicolor #> 93 5.8 2.6 4.0 1.2 versicolor #> 94 5.0 2.3 3.3 1.0 versicolor #> 95 5.6 2.7 4.2 1.3 versicolor #> 96 5.7 3.0 4.2 1.2 versicolor #> 97 5.7 2.9 4.2 1.3 versicolor #> 98 6.2 2.9 4.3 1.3 versicolor #> 99 5.1 2.5 3.0 1.1 versicolor #> 100 5.7 2.8 4.1 1.3 versicolor #> 101 6.3 3.3 6.0 2.5 virginica #> 102 5.8 2.7 5.1 1.9 virginica #> 103 7.1 3.0 5.9 2.1 virginica #> 104 6.3 2.9 5.6 1.8 virginica #> 105 6.5 3.0 5.8 2.2 virginica #> 106 7.6 3.0 6.6 2.1 virginica #> 107 4.9 2.5 4.5 1.7 virginica #> 108 7.3 2.9 6.3 1.8 virginica #> 109 6.7 2.5 5.8 1.8 virginica #> 110 7.2 3.6 6.1 2.5 virginica #> 111 6.5 3.2 5.1 2.0 virginica #> 112 6.4 2.7 5.3 1.9 virginica #> 113 6.8 3.0 5.5 2.1 virginica #> 114 5.7 2.5 5.0 2.0 virginica #> 115 5.8 2.8 5.1 2.4 virginica #> 116 6.4 3.2 5.3 2.3 virginica #> 117 6.5 3.0 5.5 1.8 virginica #> 118 7.7 3.8 6.7 2.2 virginica #> 119 7.7 2.6 6.9 2.3 virginica #> 120 6.0 2.2 5.0 1.5 virginica #> 121 6.9 3.2 5.7 2.3 virginica #> 122 5.6 2.8 4.9 2.0 virginica #> 123 7.7 2.8 6.7 2.0 virginica #> 124 6.3 2.7 4.9 1.8 virginica #> 125 6.7 3.3 5.7 2.1 virginica #> 126 7.2 3.2 6.0 1.8 virginica #> 127 6.2 2.8 4.8 1.8 virginica #> 128 6.1 3.0 4.9 1.8 virginica #> 129 6.4 2.8 5.6 2.1 virginica #> 130 7.2 3.0 5.8 1.6 virginica #> 131 7.4 2.8 6.1 1.9 virginica #> 132 7.9 3.8 6.4 2.0 virginica #> 133 6.4 2.8 5.6 2.2 virginica #> 134 6.3 2.8 5.1 1.5 virginica #> 135 6.1 2.6 5.6 1.4 virginica #> 136 7.7 3.0 6.1 2.3 virginica #> 137 6.3 3.4 5.6 2.4 virginica #> 138 6.4 3.1 5.5 1.8 virginica #> 139 6.0 3.0 4.8 1.8 virginica #> 140 6.9 3.1 5.4 2.1 virginica #> 141 6.7 3.1 5.6 2.4 virginica #> 142 6.9 3.1 5.1 2.3 virginica #> 143 5.8 2.7 5.1 1.9 virginica #> 144 6.8 3.2 5.9 2.3 virginica #> 145 6.7 3.3 5.7 2.5 virginica #> 146 6.7 3.0 5.2 2.3 virginica #> 147 6.3 2.5 5.0 1.9 virginica #> 148 6.5 3.0 5.2 2.0 virginica #> 149 6.2 3.4 5.4 2.3 virginica #> 150 5.9 3.0 5.1 1.8 virginica dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"dbAppendTableArrow() method assumes table created beforehand, e.g. dbCreateTableArrow(). default implementation calls dbAppendTable() chunk stream. Use dbAppendTable() append data data.frame.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbAppendTableArrow(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"","code":"dbAppendTableArrow(conn, name, value, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') value object coercible nanoarrow::as_nanoarrow_array_stream(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"dbAppendTableArrow() returns scalar numeric.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"table exist, new data values data frame different column names, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"SQL keywords can used freely table names, column names, data. Quotes, commas, spaces, special characters newlines tabs, can also used data, , database supports non-syntactic identifiers, also table names column names. following data types must supported least, read identically dbReadTable(): integer numeric (behavior Inf NaN specified) logical NA NULL 64-bit values (using \"bigint\" field type); result can converted numeric, may lose precision, converted character vector, gives full decimal representation written another table read unchanged character (UTF-8 native encodings), supporting empty strings (non-empty strings) factor (possibly returned character) objects type blob::blob (supported database) date (supported database; returned Date) also dates prior 1970 1900 2038 time (supported database; returned objects inherit difftime) timestamp (supported database; returned POSIXct respecting time zone necessarily preserving input time zone), also timestamps prior 1970 1900 2038 respecting time zone necessarily preserving input time zone) Mixing column types table supported. name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbAppendTableArrow() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done support databases allow non-syntactic names objects: value argument must data frame subset columns existing table. order columns matter.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbCreateTableArrow(con, \"iris\", iris[0, ]) dbAppendTableArrow(con, \"iris\", iris[1:5, ]) #> [1] 5 dbReadTable(con, \"iris\") #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 5.1 3.5 1.4 0.2 setosa #> 2 4.9 3.0 1.4 0.2 setosa #> 3 4.7 3.2 1.3 0.2 setosa #> 4 4.6 3.1 1.5 0.2 setosa #> 5 5.0 3.6 1.4 0.2 setosa dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":null,"dir":"Reference","previous_headings":"","what":"Bind values to a parameterized/prepared statement — dbBind","title":"Bind values to a parameterized/prepared statement — dbBind","text":"parametrized prepared statements, dbSendQuery(), dbSendQueryArrow(), dbSendStatement() functions can called statements contain placeholders values. dbBind() dbBindArrow() functions bind placeholders actual values, intended called result set calling dbFetch() dbFetchArrow(). values passed dbBind() lists data frames, dbBindArrow() stream created nanoarrow::as_nanoarrow_array_stream(). dbBindArrow() experimental, *Arrow functions. dbSendQuery() compatible dbBindArrow(), dbSendQueryArrow() compatible dbBind().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Bind values to a parameterized/prepared statement — dbBind","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbBind(\"AdbiResult\") adbi::dbBind(\"AdbiResultArrow\") bigrquery::dbBind(\"BigQueryResult\") duckdb::dbBind(\"duckdb_result\") odbc::dbBind(\"OdbcResult\") RMariaDB::dbBind(\"MariaDBResult\") RPostgres::dbBind(\"PqResult\") RSQLite::dbBind(\"SQLiteResult\") sparklyr::dbBind(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Bind values to a parameterized/prepared statement — dbBind","text":"","code":"dbBind(res, params, ...) dbBindArrow(res, params, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Bind values to a parameterized/prepared statement — dbBind","text":"res object inheriting DBIResult. params dbBind(), list values, named unnamed, data frame, one element/column per query parameter. dbBindArrow(), values nanoarrow stream, one column per query parameter. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Bind values to a parameterized/prepared statement — dbBind","text":"dbBind() returns result set, invisibly, queries issued dbSendQuery() dbSendQueryArrow() also data manipulation statements issued dbSendStatement().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Bind values to a parameterized/prepared statement — dbBind","text":"DBI supports parametrized (prepared) queries statements via dbBind() dbBindArrow() generics. Parametrized queries different normal queries allow arbitrary number placeholders, later substituted actual values. Parametrized queries (statements) serve two purposes: query can executed different values. DBMS may cache intermediate information query, execution plan, execute faster. Separation query syntax parameters protects SQL injection. placeholder format currently specified DBI; future, uniform placeholder syntax may supported. Consult backend documentation supported formats. automated testing, backend authors specify placeholder syntax placeholder_pattern tweak. Known examples : ? (positional matching order appearance) RMariaDB RSQLite $1 (positional matching index) RPostgres RSQLite :name $name (named matching) RSQLite","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"the-data-retrieval-flow","dir":"Reference","previous_headings":"","what":"The data retrieval flow","title":"Bind values to a parameterized/prepared statement — dbBind","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"the-data-retrieval-flow-for-arrow-streams","dir":"Reference","previous_headings":"","what":"The data retrieval flow for Arrow streams","title":"Bind values to a parameterized/prepared statement — dbBind","text":"section gives complete overview flow execution queries return tabular data Arrow stream. flow, except repeated calling dbBindArrow() dbBind(), implemented dbGetQueryArrow(), sufficient unless parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQueryArrow() create result set object class DBIResultArrow. Optionally, bind query parameters dbBindArrow() dbBind(). required query contains placeholders ? $1, depending database backend. Use dbFetchArrow() get data stream. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"the-command-execution-flow","dir":"Reference","previous_headings":"","what":"The command execution flow","title":"Bind values to a parameterized/prepared statement — dbBind","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Bind values to a parameterized/prepared statement — dbBind","text":"Calling dbBind() query without parameters raises error. Binding many enough values, parameters wrong names unequal length, also raises error. placeholders query named, parameter values must names (must empty NA), vice versa, otherwise error raised. behavior mixing placeholders different types (particular mixing positional named placeholders) specified. Calling dbBind() result set already cleared dbClearResult() also raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Bind values to a parameterized/prepared statement — dbBind","text":"DBI clients execute parametrized statements follows: Call dbSendQuery(), dbSendQueryArrow() dbSendStatement() query statement contains placeholders, store returned DBIResult object variable. Mixing placeholders (particular, named unnamed ones) recommended. good practice register call dbClearResult() via .exit() right calling dbSendQuery() dbSendStatement() (see last enumeration item). dbBind() dbBindArrow() called, returned result set object following behavior: dbFetch() raises error (dbSendQuery() dbSendQueryArrow()) dbGetRowCount() returns zero (dbSendQuery() dbSendQueryArrow()) dbGetRowsAffected() returns integer NA (dbSendStatement()) dbIsValid() returns TRUE dbHasCompleted() returns FALSE Call dbBind() dbBindArrow(): dbBind(), params argument must list elements lengths contain values supported backend. data.frame internally stored list. dbBindArrow(), params argument must nanoarrow array stream, one column per query parameter. Retrieve data number affected rows DBIResult object. queries issued dbSendQuery() dbSendQueryArrow(), call dbFetch(). statements issued dbSendStatements(), call dbGetRowsAffected(). (Execution begins immediately dbBind() call, statement processed entirely function returns.) Repeat 2. 3. necessary. Close result set via dbClearResult(). elements params argument need scalars, vectors arbitrary length (including length 0) supported. queries, calling dbFetch() binding parameters returns concatenated results, equivalent binding fetching set values connecting via rbind(). data manipulation statements, dbGetRowsAffected() returns total number rows affected binding non-scalar parameters. dbBind() also accepts repeated calls result set queries data manipulation statements, even results fetched calls dbBind(), queries data manipulation statements. placeholders query named, order params argument important. least following data types accepted input (including NA): integer numeric logical Boolean values character (also special characters spaces, newlines, quotes, backslashes) factor (bound character, warning) Date (also stored internally integer) POSIXct timestamps POSIXlt timestamps difftime values (also units seconds value stored integer) lists raw blobs (NULL entries SQL NULL values) objects type blob::blob","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Bind values to a parameterized/prepared statement — dbBind","text":"","code":"# Data frame flow: con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"iris\", iris) # Using the same query for different values iris_result <- dbSendQuery(con, \"SELECT * FROM iris WHERE [Petal.Width] > ?\") dbBind(iris_result, list(2.3)) dbFetch(iris_result) #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 6.3 3.3 6.0 2.5 virginica #> 2 7.2 3.6 6.1 2.5 virginica #> 3 5.8 2.8 5.1 2.4 virginica #> 4 6.3 3.4 5.6 2.4 virginica #> 5 6.7 3.1 5.6 2.4 virginica #> 6 6.7 3.3 5.7 2.5 virginica dbBind(iris_result, list(3)) dbFetch(iris_result) #> [1] Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> <0 rows> (or 0-length row.names) dbClearResult(iris_result) # Executing the same statement with different values at once iris_result <- dbSendStatement(con, \"DELETE FROM iris WHERE [Species] = $species\") dbBind(iris_result, list(species = c(\"setosa\", \"versicolor\", \"unknown\"))) dbGetRowsAffected(iris_result) #> [1] 100 dbClearResult(iris_result) nrow(dbReadTable(con, \"iris\")) #> [1] 50 dbDisconnect(con) # Arrow flow: con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"iris\", iris) # Using the same query for different values iris_result <- dbSendQueryArrow(con, \"SELECT * FROM iris WHERE [Petal.Width] > ?\") dbBindArrow( iris_result, nanoarrow::as_nanoarrow_array_stream(data.frame(2.3, fix.empty.names = FALSE)) ) as.data.frame(dbFetchArrow(iris_result)) #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 6.3 3.3 6.0 2.5 virginica #> 2 7.2 3.6 6.1 2.5 virginica #> 3 5.8 2.8 5.1 2.4 virginica #> 4 6.3 3.4 5.6 2.4 virginica #> 5 6.7 3.1 5.6 2.4 virginica #> 6 6.7 3.3 5.7 2.5 virginica dbBindArrow( iris_result, nanoarrow::as_nanoarrow_array_stream(data.frame(3, fix.empty.names = FALSE)) ) as.data.frame(dbFetchArrow(iris_result)) #> [1] Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> <0 rows> (or 0-length row.names) dbClearResult(iris_result) # Executing the same statement with different values at once iris_result <- dbSendStatement(con, \"DELETE FROM iris WHERE [Species] = $species\") dbBindArrow(iris_result, nanoarrow::as_nanoarrow_array_stream(data.frame( species = c(\"setosa\", \"versicolor\", \"unknown\") ))) dbGetRowsAffected(iris_result) #> [1] 100 dbClearResult(iris_result) nrow(dbReadTable(con, \"iris\")) #> [1] 50 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCallProc.html","id":null,"dir":"Reference","previous_headings":"","what":"Call an SQL stored procedure — dbCallProc","title":"Call an SQL stored procedure — dbCallProc","text":"Deprecated since 2014","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCallProc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Call an SQL stored procedure — dbCallProc","text":"","code":"dbCallProc(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCallProc.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Call an SQL stored procedure — dbCallProc","text":"conn DBIConnection object, returned dbConnect(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCallProc.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Call an SQL stored procedure — dbCallProc","text":"recommended way calling stored procedure now dbGetQuery result set returned dbExecute data manipulation cases result set returned","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCanConnect.html","id":null,"dir":"Reference","previous_headings":"","what":"Check if a connection to a DBMS can be established — dbCanConnect","title":"Check if a connection to a DBMS can be established — dbCanConnect","text":"Like dbConnect(), checks validity without actually returning connection object. default implementation opens connection disconnects success, individual backends might implement lighter-weight check.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCanConnect.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Check if a connection to a DBMS can be established — dbCanConnect","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. AzureKusto::dbCanConnect(\"AzureKustoDriver\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCanConnect.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check if a connection to a DBMS can be established — dbCanConnect","text":"","code":"dbCanConnect(drv, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCanConnect.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check if a connection to a DBMS can be established — dbCanConnect","text":"drv object inherits DBIDriver, existing DBIConnection object (order clone existing connection). ... authentication arguments needed DBMS instance; typically include user, password, host, port, dbname, etc. details see appropriate DBIDriver.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCanConnect.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check if a connection to a DBMS can be established — dbCanConnect","text":"scalar logical. FALSE, \"reason\" attribute indicates reason failure.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbCanConnect.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Check if a connection to a DBMS can be established — dbCanConnect","text":"","code":"# SQLite only needs a path to the database. (Here, \":memory:\" is a special # path that creates an in-memory database.) Other database drivers # will require more details (like user, password, host, port, etc.) dbCanConnect(RSQLite::SQLite(), \":memory:\") #> [1] TRUE"},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":null,"dir":"Reference","previous_headings":"","what":"Clear a result set — dbClearResult","title":"Clear a result set — dbClearResult","text":"Frees resources (local remote) associated result set. step mandatory objects obtained calling dbSendQuery() dbSendStatement().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Clear a result set — dbClearResult","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbClearResult(\"AdbiResult\") adbi::dbClearResult(\"AdbiResultArrow\") bigrquery::dbClearResult(\"BigQueryResult\") DatabaseConnector::dbClearResult(\"DatabaseConnectorDbiResult\") DatabaseConnector::dbClearResult(\"DatabaseConnectorJdbcResult\") dittodb::dbClearResult(\"DBIMockResult\") duckdb::dbClearResult(\"duckdb_result\") lazysf::dbClearResult(\"SFSQLResult\") odbc::dbClearResult(\"OdbcResult\") RAthena::dbClearResult(\"AthenaResult\") RJDBC::dbClearResult(\"JDBCResult\") RMariaDB::dbClearResult(\"MariaDBResult\") RMySQL::dbClearResult(\"MySQLResult\") RPostgres::dbClearResult(\"PqResult\") RPostgreSQL::dbClearResult(\"PostgreSQLResult\") RPresto::dbClearResult(\"PrestoResult\") RSQLite::dbClearResult(\"SQLiteResult\") sergeant::dbClearResult(\"DrillResult\") sparklyr::dbClearResult(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Clear a result set — dbClearResult","text":"","code":"dbClearResult(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Clear a result set — dbClearResult","text":"res object inheriting DBIResult. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Clear a result set — dbClearResult","text":"dbClearResult() returns TRUE, invisibly, result sets obtained dbSendQuery(), dbSendStatement(), dbSendQueryArrow(),","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"the-data-retrieval-flow","dir":"Reference","previous_headings":"","what":"The data retrieval flow","title":"Clear a result set — dbClearResult","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"the-command-execution-flow","dir":"Reference","previous_headings":"","what":"The command execution flow","title":"Clear a result set — dbClearResult","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Clear a result set — dbClearResult","text":"attempt close already closed result set issues warning dbSendQuery(), dbSendStatement(), dbSendQueryArrow(),","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Clear a result set — dbClearResult","text":"dbClearResult() frees resources associated retrieving result query update operation. DBI backend can expect call dbClearResult() dbSendQuery() dbSendStatement() call.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Clear a result set — dbClearResult","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") rs <- dbSendQuery(con, \"SELECT 1\") print(dbFetch(rs)) #> 1 #> 1 1 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":null,"dir":"Reference","previous_headings":"","what":"Information about result types — dbColumnInfo","title":"Information about result types — dbColumnInfo","text":"Produces data.frame describes output query. data.frame many rows output fields result set, column data.frame describes aspect result set field (field name, type, etc.)","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Information about result types — dbColumnInfo","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbColumnInfo(\"AdbiResult\") adbi::dbColumnInfo(\"AdbiResultArrow\") AzureKusto::dbColumnInfo(\"AzureKustoResult\") bigrquery::dbColumnInfo(\"BigQueryResult\") DatabaseConnector::dbColumnInfo(\"DatabaseConnectorDbiResult\") DatabaseConnector::dbColumnInfo(\"DatabaseConnectorJdbcResult\") dittodb::dbColumnInfo(\"DBIMockResult\") duckdb::dbColumnInfo(\"duckdb_result\") odbc::dbColumnInfo(\"OdbcResult\") RAthena::dbColumnInfo(\"AthenaResult\") RJDBC::dbColumnInfo(\"JDBCResult\") RMariaDB::dbColumnInfo(\"MariaDBResult\") RMySQL::dbColumnInfo(\"MySQLConnection\") RMySQL::dbColumnInfo(\"MySQLResult\") RPostgres::dbColumnInfo(\"PqResult\") RPostgreSQL::dbColumnInfo(\"PostgreSQLResult\") RSQLite::dbColumnInfo(\"SQLiteResult\") sparklyr::dbColumnInfo(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Information about result types — dbColumnInfo","text":"","code":"dbColumnInfo(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Information about result types — dbColumnInfo","text":"res object inheriting DBIResult. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Information about result types — dbColumnInfo","text":"dbColumnInfo() returns data frame least two columns \"name\" \"type\" (order) (optional columns start dot). \"name\" \"type\" columns contain names types R columns data frame returned dbFetch(). \"type\" column type character information. compute \"type\" column, instead use dbFetch(res, n = 0) create zero-row data frame initialized correct data types.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"the-data-retrieval-flow","dir":"Reference","previous_headings":"","what":"The data retrieval flow","title":"Information about result types — dbColumnInfo","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Information about result types — dbColumnInfo","text":"attempt query columns closed result set raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Information about result types — dbColumnInfo","text":"column named row_names treated like column. column names always consistent data returned dbFetch(). query returns unnamed columns, non-empty non-NA names assigned. Column names correspond SQL R keywords left unchanged.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Information about result types — dbColumnInfo","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") rs <- dbSendQuery(con, \"SELECT 1 AS a, 2 AS b\") dbColumnInfo(rs) #> name type #> 1 a integer #> 2 b integer dbFetch(rs) #> a b #> 1 1 2 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a connection to a DBMS — dbConnect","title":"Create a connection to a DBMS — dbConnect","text":"Connect DBMS going appropriate authentication procedure. implementations may allow multiple connections open, may invoke function repeatedly assigning output different objects. authentication mechanism left unspecified, check documentation individual drivers details. Use dbCanConnect() check connection can established.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Create a connection to a DBMS — dbConnect","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbConnect(\"AdbiDriver\") AzureKusto::dbConnect(\"AzureKustoDriver\") bigrquery::dbConnect(\"BigQueryDriver\") bigrquery::dbConnect(\"bq_dataset\") DatabaseConnector::dbConnect(\"DatabaseConnectorDriver\") duckdb::dbConnect(\"duckdb_driver\") lazysf::dbConnect(\"SFSQLDriver\") odbc::dbConnect(\"DatabricksOdbcDriver\") odbc::dbConnect(\"OdbcDriver\") RAthena::dbConnect(\"AthenaDriver\") RH2::dbConnect(\"H2Driver\") RJDBC::dbConnect(\"JDBCDriver\") RMariaDB::dbConnect(\"MariaDBDriver\") RMySQL::dbConnect(\"MySQLConnection\") RMySQL::dbConnect(\"MySQLDriver\") RPostgres::dbConnect(\"PqDriver\") RPostgres::dbConnect(\"RedshiftDriver\") RPostgreSQL::dbConnect(\"character\") RPostgreSQL::dbConnect(\"PostgreSQLConnection\") RPostgreSQL::dbConnect(\"PostgreSQLDriver\") RPresto::dbConnect(\"PrestoDriver\") RSQLite::dbConnect(\"SQLiteConnection\") RSQLite::dbConnect(\"SQLiteDriver\") sergeant::dbConnect(\"DrillDriver\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a connection to a DBMS — dbConnect","text":"","code":"dbConnect(drv, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a connection to a DBMS — dbConnect","text":"drv object inherits DBIDriver, existing DBIConnection object (order clone existing connection). ... authentication arguments needed DBMS instance; typically include user, password, host, port, dbname, etc. details see appropriate DBIDriver.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a connection to a DBMS — dbConnect","text":"dbConnect() returns S4 object inherits DBIConnection. object used communicate database engine. format() method defined connection object. returns string consists single line text.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Create a connection to a DBMS — dbConnect","text":"DBI recommends using following argument names authentication parameters, NULL default: user user name (default: current user) password password host host name (default: local connection) port port number (default: local connection) dbname name database host, database file name defaults provide reasonable behavior, particular local connection host = NULL. DBMS (e.g., PostgreSQL), different TCP/IP connection localhost. addition, DBI supports bigint argument governs 64-bit integer data returned. following values supported: \"integer\": always return integer, silently overflow \"numeric\": always return numeric, silently round \"character\": always return decimal representation character \"integer64\": return data type can coerced using .integer() (warning overflow), .numeric() .character()","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a connection to a DBMS — dbConnect","text":"","code":"# SQLite only needs a path to the database. (Here, \":memory:\" is a special # path that creates an in-memory database.) Other database drivers # will require more details (like user, password, host, port, etc.) con <- dbConnect(RSQLite::SQLite(), \":memory:\") con #> #> Path: :memory: #> Extensions: TRUE dbListTables(con) #> character(0) dbDisconnect(con) # Bad, for subtle reasons: # This code fails when RSQLite isn't loaded yet, # because dbConnect() doesn't know yet about RSQLite. dbListTables(con <- dbConnect(RSQLite::SQLite(), \":memory:\")) #> character(0)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a table in the database — dbCreateTable","title":"Create a table in the database — dbCreateTable","text":"default dbCreateTable() method calls sqlCreateTable() dbExecute(). Use dbCreateTableArrow() create table Arrow schema.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Create a table in the database — dbCreateTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. AzureKusto::dbCreateTable(\"AzureKustoConnection\") bigrquery::dbCreateTable(\"BigQueryConnection\") DatabaseConnector::dbCreateTable(\"DatabaseConnectorConnection\") pool::dbCreateTable(\"Pool\") RPresto::dbCreateTable(\"PrestoConnection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a table in the database — dbCreateTable","text":"","code":"dbCreateTable(conn, name, fields, ..., row.names = NULL, temporary = FALSE)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a table in the database — dbCreateTable","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') fields Either character vector data frame. named character vector: Names column names, values types. Names escaped dbQuoteIdentifier(). Field types unescaped. data frame: field types generated using dbDataType(). ... parameters passed methods. row.names Must NULL. temporary TRUE, generate temporary table.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a table in the database — dbCreateTable","text":"dbCreateTable() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a table in the database — dbCreateTable","text":"Backends compliant ANSI SQL 99 need override . Backends different SQL syntax can override sqlCreateTable(), backends entirely different ways create tables need override method. row.names argument supported method. Process values sqlRownamesToColumn() calling method. argument order different sqlCreateTable() method, latter adapted later release DBI.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Create a table in the database — dbCreateTable","text":"table exists, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar. Invalid values row.names temporary arguments (non-scalars, unsupported data types, NA, incompatible values, duplicate names) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Create a table in the database — dbCreateTable","text":"following arguments part dbCreateTable() generic (improve compatibility across backends) part DBI specification: temporary (default: FALSE) must provided named arguments. See \"Specification\" \"Value\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Create a table in the database — dbCreateTable","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbCreateTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done value argument can : data frame, named list SQL types temporary argument TRUE, table available second connection gone reconnecting. backends support argument. regular, non-temporary table visible second connection, pre-existing connection, reconnecting database. SQL keywords can used freely table names, column names, data. Quotes, commas, spaces can also used table names column names, database supports non-syntactic identifiers. row.names argument must missing NULL, default value. values row.names argument (particular TRUE, NA, string) raise error.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a table in the database — dbCreateTable","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbCreateTable(con, \"iris\", iris) dbReadTable(con, \"iris\") #> [1] Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> <0 rows> (or 0-length row.names) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a table in the database based on an Arrow object — dbCreateTableArrow","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"default dbCreateTableArrow() method determines R data types Arrow schema associated Arrow object, calls dbCreateTable(). Backends implement dbAppendTableArrow() typically also implement generic. Use dbCreateTable() create table column types defined data frame.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbCreateTableArrow(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"","code":"dbCreateTableArrow(conn, name, value, ..., temporary = FALSE)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') value object schema can determined via nanoarrow::infer_nanoarrow_schema(). ... parameters passed methods. temporary TRUE, generate temporary table.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"dbCreateTableArrow() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"table exists, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar. Invalid values temporary argument (non-scalars, unsupported data types, NA, incompatible values, duplicate names) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"following arguments part dbCreateTableArrow() generic (improve compatibility across backends) part DBI specification: temporary (default: FALSE) must provided named arguments. See \"Specification\" \"Value\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbCreateTableArrow() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done value argument can : data frame, nanoarrow array nanoarrow array stream (still contain data call) nanoarrow schema temporary argument TRUE, table available second connection gone reconnecting. backends support argument. regular, non-temporary table visible second connection, pre-existing connection, reconnecting database. SQL keywords can used freely table names, column names, data. Quotes, commas, spaces can also used table names column names, database supports non-syntactic identifiers.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") ptype <- data.frame(a = numeric()) dbCreateTableArrow(con, \"df\", nanoarrow::infer_nanoarrow_schema(ptype)) dbReadTable(con, \"df\") #> [1] a #> <0 rows> (or 0-length row.names) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":null,"dir":"Reference","previous_headings":"","what":"Determine the SQL data type of an object — dbDataType","title":"Determine the SQL data type of an object — dbDataType","text":"Returns SQL string describes SQL data type used object. default implementation generic determines SQL type R object according SQL 92 specification, may serve starting point driver implementations. DBI also provides implementation data.frame return character vector giving type column dataframe.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Determine the SQL data type of an object — dbDataType","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbDataType(\"AdbiConnection\", \"\") adbi::dbDataType(\"AdbiDriver\", \"\") bigrquery::dbDataType(\"BigQueryConnection\", \"\") bigrquery::dbDataType(\"BigQueryDriver\", \"\") duckdb::dbDataType(\"duckdb_connection\", \"\") duckdb::dbDataType(\"duckdb_driver\", \"\") lazysf::dbDataType(\"SFSQLDriver\", \"\") odbc::dbDataType(\"OdbcConnection\", \"\") odbc::dbDataType(\"OdbcConnection\", \"data.frame\") odbc::dbDataType(\"OdbcDriver\", \"\") odbc::dbDataType(\"OdbcDriver\", \"data.frame\") odbc::dbDataType(\"OdbcDriver\", \"list\") pool::dbDataType(\"Pool\", \"\") RAthena::dbDataType(\"AthenaConnection\", \"\") RAthena::dbDataType(\"AthenaConnection\", \"data.frame\") RAthena::dbDataType(\"AthenaDriver\", \"\") RAthena::dbDataType(\"AthenaDriver\", \"list\") RH2::dbDataType(\"H2Connection\", \"\") RJDBC::dbDataType(\"JDBCConnection\", \"\") RMariaDB::dbDataType(\"MariaDBConnection\", \"\") RMariaDB::dbDataType(\"MariaDBDriver\", \"\") RMySQL::dbDataType(\"MySQLConnection\", \"\") RMySQL::dbDataType(\"MySQLDriver\", \"\") RPostgres::dbDataType(\"PqConnection\", \"\") RPostgres::dbDataType(\"PqDriver\", \"\") RPostgreSQL::dbDataType(\"PostgreSQLObject\", \"\") RPresto::dbDataType(\"PrestoDriver\", \"\") RSQLite::dbDataType(\"SQLiteConnection\", \"\") RSQLite::dbDataType(\"SQLiteDriver\", \"\") sergeant::dbDataType(\"DrillConnection\", \"\") sf::dbDataType(\"DBIObject\", \"sf\") sf::dbDataType(\"PostgreSQLConnection\", \"sf\") sparklyr::dbDataType(\"spark_connection\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Determine the SQL data type of an object — dbDataType","text":"","code":"dbDataType(dbObj, obj, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Determine the SQL data type of an object — dbDataType","text":"dbObj object inheriting DBIDriver DBIConnection obj R object whose SQL type want determine. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Determine the SQL data type of an object — dbDataType","text":"dbDataType() returns SQL type corresponds obj argument non-empty character string. data frames, character vector one element per column returned.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Determine the SQL data type of an object — dbDataType","text":"data types supported databases different data types R, mapping primitive types straightforward: many fixed varying length character types mapped character vectors Fixed-precision (non-IEEE) numbers mapped either numeric integer vectors. Notice many DBMS follow IEEE arithmetic, potential problems /overflows loss precision.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Determine the SQL data type of an object — dbDataType","text":"error raised invalid values obj argument NULL value.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Determine the SQL data type of an object — dbDataType","text":"backend can override dbDataType() generic driver class. generic expects arbitrary object second argument. query values returned default implementation, run example(dbDataType, package = \"DBI\"). backend needs override generic, must accept basic R data types second argument, namely logical, integer, numeric, character, dates (see Dates), date-time (see DateTimeClasses), difftime. database supports blobs, method also must accept lists raw vectors, blob::blob objects. -objects (.e., wrapped ()) must supported return results unwrapped counterparts. SQL data type factor ordered character. behavior object types specified. data types returned dbDataType() usable SQL statement form \"CREATE TABLE test (...)\".","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Determine the SQL data type of an object — dbDataType","text":"","code":"dbDataType(ANSI(), 1:5) #> [1] \"INT\" dbDataType(ANSI(), 1) #> [1] \"DOUBLE\" dbDataType(ANSI(), TRUE) #> [1] \"SMALLINT\" dbDataType(ANSI(), Sys.Date()) #> [1] \"DATE\" dbDataType(ANSI(), Sys.time()) #> [1] \"TIMESTAMP\" dbDataType(ANSI(), Sys.time() - as.POSIXct(Sys.Date())) #> [1] \"TIME\" dbDataType(ANSI(), c(\"x\", \"abc\")) #> [1] \"TEXT\" dbDataType(ANSI(), list(raw(10), raw(20))) #> [1] \"BLOB\" dbDataType(ANSI(), I(3)) #> [1] \"DOUBLE\" dbDataType(ANSI(), iris) #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> \"DOUBLE\" \"DOUBLE\" \"DOUBLE\" \"DOUBLE\" \"TEXT\" con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbDataType(con, 1:5) #> [1] \"INTEGER\" dbDataType(con, 1) #> [1] \"REAL\" dbDataType(con, TRUE) #> [1] \"INTEGER\" dbDataType(con, Sys.Date()) #> [1] \"REAL\" dbDataType(con, Sys.time()) #> [1] \"REAL\" dbDataType(con, Sys.time() - as.POSIXct(Sys.Date())) #> [1] \"REAL\" dbDataType(con, c(\"x\", \"abc\")) #> [1] \"TEXT\" dbDataType(con, list(raw(10), raw(20))) #> [1] \"BLOB\" dbDataType(con, I(3)) #> [1] \"REAL\" dbDataType(con, iris) #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> \"DOUBLE\" \"DOUBLE\" \"DOUBLE\" \"DOUBLE\" \"TEXT\" dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":null,"dir":"Reference","previous_headings":"","what":"Disconnect (close) a connection — dbDisconnect","title":"Disconnect (close) a connection — dbDisconnect","text":"closes connection, discards pending work, frees resources (e.g., memory, sockets).","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Disconnect (close) a connection — dbDisconnect","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbDisconnect(\"AdbiConnection\") AzureKusto::dbDisconnect(\"AzureKustoDriver\") bigrquery::dbDisconnect(\"BigQueryConnection\") DatabaseConnector::dbDisconnect(\"DatabaseConnectorConnection\") dittodb::dbDisconnect(\"DBIMockConnection\") duckdb::dbDisconnect(\"duckdb_connection\") implyr::dbDisconnect(\"src_impala\") lazysf::dbDisconnect(\"SFSQLConnection\") odbc::dbDisconnect(\"OdbcConnection\") pool::dbDisconnect(\"Pool\") RAthena::dbDisconnect(\"AthenaConnection\") RJDBC::dbDisconnect(\"JDBCConnection\") RMariaDB::dbDisconnect(\"MariaDBConnection\") RMySQL::dbDisconnect(\"MySQLConnection\") RPostgres::dbDisconnect(\"PqConnection\") RPostgreSQL::dbDisconnect(\"PostgreSQLConnection\") RPresto::dbDisconnect(\"PrestoConnection\") RSQLite::dbDisconnect(\"SQLiteConnection\") sergeant::dbDisconnect(\"DrillConnection\") sparklyr::dbDisconnect(\"spark_connection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Disconnect (close) a connection — dbDisconnect","text":"","code":"dbDisconnect(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Disconnect (close) a connection — dbDisconnect","text":"conn DBIConnection object, returned dbConnect(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Disconnect (close) a connection — dbDisconnect","text":"dbDisconnect() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Disconnect (close) a connection — dbDisconnect","text":"warning issued garbage collection connection released without calling dbDisconnect(), tested automatically. least one warning issued immediately calling dbDisconnect() already disconnected invalid connection.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Disconnect (close) a connection — dbDisconnect","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbDriver.html","id":null,"dir":"Reference","previous_headings":"","what":"Load and unload database drivers — dbDriver","title":"Load and unload database drivers — dbDriver","text":"methods deprecated, please consult documentation individual backends construction driver instances. dbDriver() helper method used create new driver object given name database corresponding R package. works convention: DBI-extending packages provide exported object name package. dbDriver() just looks object right places: know database connecting , call function directly. dbUnloadDriver() implemented modern backends.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDriver.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load and unload database drivers — dbDriver","text":"","code":"dbDriver(drvName, ...) dbUnloadDriver(drv, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbDriver.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load and unload database drivers — dbDriver","text":"drvName character name driver instantiate. ... arguments passed driver drvName. drv object inherits DBIDriver created dbDriver.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDriver.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load and unload database drivers — dbDriver","text":"case dbDriver, driver object whose class extends DBIDriver. object may used create connections actual DBMS engine. case dbUnloadDriver, logical indicating whether operation succeeded .","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDriver.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load and unload database drivers — dbDriver","text":"client part database communication initialized (typically dynamically loading C code, etc.) note connecting database engine needs done calls dbConnect.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbDriver.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load and unload database drivers — dbDriver","text":"","code":"# Create a RSQLite driver with a string d <- dbDriver(\"SQLite\") d #> # But better, access the object directly RSQLite::SQLite() #> "},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":null,"dir":"Reference","previous_headings":"","what":"Change database state — dbExecute","title":"Change database state — dbExecute","text":"Executes statement returns number rows affected. dbExecute() comes default implementation (work backends) calls dbSendStatement(), dbGetRowsAffected(), ensuring result always freed dbClearResult(). passing query parameters, see dbBind(), particular \"command execution flow\" section.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Change database state — dbExecute","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. AzureKusto::dbExecute(\"AzureKustoConnection\", \"character\") bigrquery::dbExecute(\"BigQueryConnection\", \"character\") DatabaseConnector::dbExecute(\"DatabaseConnectorConnection\", \"character\") implyr::dbExecute(\"src_impala\", \"character\") odbc::dbExecute(\"OdbcConnection\", \"character\") pool::dbExecute(\"Pool\", \"\") RAthena::dbExecute(\"AthenaConnection\", \"character\") sparklyr::dbExecute(\"spark_connection\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Change database state — dbExecute","text":"","code":"dbExecute(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Change database state — dbExecute","text":"conn DBIConnection object, returned dbConnect(). statement character string containing SQL. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Change database state — dbExecute","text":"dbExecute() always returns scalar numeric specifies number rows affected statement.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Change database state — dbExecute","text":"can also use dbExecute() call stored procedure performs data manipulation actions return result set. execute stored procedure returns result set, data manipulation query also returns result set INSERT ... RETURNING ..., use dbGetQuery() instead.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"Change database state — dbExecute","text":"Subclasses override method provide sort performance optimization.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Change database state — dbExecute","text":"error raised issuing statement closed invalid connection, syntax statement invalid, statement non-NA string.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Change database state — dbExecute","text":"following arguments part dbExecute() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See \"Specification\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Change database state — dbExecute","text":"param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"specification-for-the-immediate-argument","dir":"Reference","previous_headings":"","what":"Specification for the immediate argument","title":"Change database state — dbExecute","text":"immediate argument supports distinguishing \"direct\" \"prepared\" APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via \"direct\" API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed \"special\" query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Change database state — dbExecute","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cars\", head(cars, 3)) dbReadTable(con, \"cars\") # there are 3 rows #> speed dist #> 1 4 2 #> 2 4 10 #> 3 7 4 dbExecute( con, \"INSERT INTO cars (speed, dist) VALUES (1, 1), (2, 2), (3, 3)\" ) #> [1] 3 dbReadTable(con, \"cars\") # there are now 6 rows #> speed dist #> 1 4 2 #> 2 4 10 #> 3 7 4 #> 4 1 1 #> 5 2 2 #> 6 3 3 # Pass values using the param argument: dbExecute( con, \"INSERT INTO cars (speed, dist) VALUES (?, ?)\", params = list(4:7, 5:8) ) #> [1] 4 dbReadTable(con, \"cars\") # there are now 10 rows #> speed dist #> 1 4 2 #> 2 4 10 #> 3 7 4 #> 4 1 1 #> 5 2 2 #> 6 3 3 #> 7 4 5 #> 8 5 6 #> 9 6 7 #> 10 7 8 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Does a table exist? — dbExistsTable","title":"Does a table exist? — dbExistsTable","text":"Returns table given name exists database.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Does a table exist? — dbExistsTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbExistsTable(\"AdbiConnection\", \"character\") adbi::dbExistsTable(\"AdbiConnection\", \"Id\") adbi::dbExistsTable(\"AdbiConnection\", \"SQL\") AzureKusto::dbExistsTable(\"AzureKustoConnection\", \"\") bigrquery::dbExistsTable(\"BigQueryConnection\", \"AsIs\") bigrquery::dbExistsTable(\"BigQueryConnection\", \"character\") bigrquery::dbExistsTable(\"BigQueryConnection\", \"Id\") DatabaseConnector::dbExistsTable(\"DatabaseConnectorConnection\", \"character\") dittodb::dbExistsTable(\"DBIMockConnection\", \"character\") dittodb::dbExistsTable(\"DBIMockConnection\", \"Id\") duckdb::dbExistsTable(\"duckdb_connection\", \"character\") lazysf::dbExistsTable(\"SFSQLConnection\", \"\") odbc::dbExistsTable(\"Microsoft SQL Server\", \"character\") odbc::dbExistsTable(\"Microsoft SQL Server\", \"Id\") odbc::dbExistsTable(\"Microsoft SQL Server\", \"SQL\") odbc::dbExistsTable(\"OdbcConnection\", \"character\") odbc::dbExistsTable(\"OdbcConnection\", \"Id\") odbc::dbExistsTable(\"OdbcConnection\", \"SQL\") pool::dbExistsTable(\"Pool\", \"\") RAthena::dbExistsTable(\"AthenaConnection\", \"character\") RJDBC::dbExistsTable(\"JDBCConnection\", \"\") RMariaDB::dbExistsTable(\"MariaDBConnection\", \"character\") RMySQL::dbExistsTable(\"MySQLConnection\", \"character\") RPostgres::dbExistsTable(\"PqConnection\", \"character\") RPostgres::dbExistsTable(\"PqConnection\", \"Id\") RPostgreSQL::dbExistsTable(\"PostgreSQLConnection\", \"character\") RPresto::dbExistsTable(\"PrestoConnection\", \"\") RSQLite::dbExistsTable(\"SQLiteConnection\", \"character\") RSQLite::dbExistsTable(\"SQLiteConnection\", \"Id\") sparklyr::dbExistsTable(\"spark_connection\", \"character\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Does a table exist? — dbExistsTable","text":"","code":"dbExistsTable(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Does a table exist? — dbExistsTable","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Does a table exist? — dbExistsTable","text":"dbExistsTable() returns logical scalar, TRUE table view specified name argument exists, FALSE otherwise. includes temporary tables supported database.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Does a table exist? — dbExistsTable","text":"error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Does a table exist? — dbExistsTable","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbExistsTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done tables listed dbListTables(), dbExistsTable() returns TRUE.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Does a table exist? — dbExistsTable","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbExistsTable(con, \"iris\") #> [1] FALSE dbWriteTable(con, \"iris\", iris) dbExistsTable(con, \"iris\") #> [1] TRUE dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":null,"dir":"Reference","previous_headings":"","what":"Fetch records from a previously executed query — dbFetch","title":"Fetch records from a previously executed query — dbFetch","text":"Fetch next n elements (rows) result set return data.frame.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Fetch records from a previously executed query — dbFetch","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbFetch(\"AdbiResult\", \"\") AzureKusto::dbFetch(\"AzureKustoResult\", \"\") bigrquery::dbFetch(\"BigQueryResult\", \"\") DatabaseConnector::dbFetch(\"DatabaseConnectorDbiResult\", \"\") DatabaseConnector::dbFetch(\"DatabaseConnectorJdbcResult\", \"\") dittodb::dbFetch(\"DBIMockResult\", \"\") duckdb::dbFetch(\"duckdb_result\", \"\") lazysf::dbFetch(\"SFSQLResult\", \"\") odbc::dbFetch(\"OdbcResult\", \"\") RAthena::dbFetch(\"AthenaResult\", \"\") RMariaDB::dbFetch(\"MariaDBResult\", \"\") RMySQL::dbFetch(\"MySQLResult\", \"missing\") RMySQL::dbFetch(\"MySQLResult\", \"numeric\") RPostgres::dbFetch(\"PqResult\", \"\") RPresto::dbFetch(\"PrestoResult\", \"missing\") RPresto::dbFetch(\"PrestoResult\", \"numeric\") RSQLite::dbFetch(\"SQLiteResult\", \"\") sergeant::dbFetch(\"DrillResult\", \"\") sparklyr::dbFetch(\"DBISparkResult\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fetch records from a previously executed query — dbFetch","text":"","code":"dbFetch(res, n = -1, ...) fetch(res, n = -1, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fetch records from a previously executed query — dbFetch","text":"res object inheriting DBIResult, created dbSendQuery(). n maximum number records retrieve per fetch. Use n = -1 n = Inf retrieve pending records. implementations may recognize special values. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fetch records from a previously executed query — dbFetch","text":"dbFetch() always returns data.frame many rows records fetched many columns fields result set, even result single value one zero rows. Passing n = NA supported returns arbitrary number rows (least one) specified driver, remaining rows result set.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fetch records from a previously executed query — dbFetch","text":"fetch() provided compatibility older DBI clients - new code strongly encouraged use dbFetch(). default implementation dbFetch() calls fetch() compatible existing code. Modern backends implement dbFetch() .","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"the-data-retrieval-flow","dir":"Reference","previous_headings":"","what":"The data retrieval flow","title":"Fetch records from a previously executed query — dbFetch","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Fetch records from a previously executed query — dbFetch","text":"attempt fetch closed result set raises error. n argument atomic whole number greater equal -1 Inf, error raised, subsequent call dbFetch() proper n argument succeeds. Calling dbFetch() result set data manipulation query created dbSendStatement() can fetched return empty data frame, warning.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Fetch records from a previously executed query — dbFetch","text":"Fetching multi-row queries one columns default returns entire result. Multi-row queries can also fetched progressively passing whole number (integer numeric) n argument. value Inf n argument supported also returns full result. rows available fetched, result returned full without warning. fewer rows requested returned, fetches return data frame zero rows. zero rows fetched, columns data frame still fully typed. Fetching fewer rows available permitted, warning issued clearing result set. column named row_names treated like column. column types returned data frame depend data returned: integer (coercible integer) integer values -2^31 2^31 - 1, NA SQL NULL values numeric numbers fractional component, NA SQL NULL values logical Boolean values (backends may return integer); NA SQL NULL values character text, NA SQL NULL values lists raw blobs NULL entries SQL NULL values coercible using .Date() dates, NA SQL NULL values (also applies return value SQL function current_date) coercible using hms::as_hms() times, NA SQL NULL values (also applies return value SQL function current_time) coercible using .POSIXct() timestamps, NA SQL NULL values (also applies return value SQL function current_timestamp) dates timestamps supported backend, following R types used: Date dates (also applies return value SQL function current_date) POSIXct timestamps (also applies return value SQL function current_timestamp) R built-type lossless support full range 64-bit larger integers. 64-bit integers returned query, following rules apply: Values returned container support full range valid 64-bit values (integer64 class bit64 package) Coercion numeric always returns number close possible true value Loss precision converting numeric gives warning Conversion character always returns lossless decimal representation data","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fetch records from a previously executed query — dbFetch","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) # Fetch all results rs <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbFetch(rs) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 10 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 11 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 dbClearResult(rs) # Fetch in chunks rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") while (!dbHasCompleted(rs)) { chunk <- dbFetch(rs, 10) print(nrow(chunk)) } #> [1] 10 #> [1] 10 #> [1] 10 #> [1] 2 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"Fetch result set return Arrow object. Use dbFetchArrowChunk() fetch results chunks.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbFetchArrow(\"AdbiResultArrow\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"","code":"dbFetchArrow(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"res object inheriting DBIResultArrow, created dbSendQueryArrow(). ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"dbFetchArrow() always returns object coercible data.frame many rows records fetched many columns fields result set, even result single value one zero rows.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"the-data-retrieval-flow-for-arrow-streams","dir":"Reference","previous_headings":"","what":"The data retrieval flow for Arrow streams","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"section gives complete overview flow execution queries return tabular data Arrow stream. flow, except repeated calling dbBindArrow() dbBind(), implemented dbGetQueryArrow(), sufficient unless parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQueryArrow() create result set object class DBIResultArrow. Optionally, bind query parameters dbBindArrow() dbBind(). required query contains placeholders ? $1, depending database backend. Use dbFetchArrow() get data stream. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"attempt fetch closed result set raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"Fetching multi-row queries one columns default returns entire result. object returned dbFetchArrow() can also passed nanoarrow::as_nanoarrow_array_stream() create nanoarrow array stream object can used read result set batches. chunk size implementation-specific.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) # Fetch all results rs <- dbSendQueryArrow(con, \"SELECT * FROM mtcars WHERE cyl = 4\") as.data.frame(dbFetchArrow(rs)) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 10 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 11 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":null,"dir":"Reference","previous_headings":"","what":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"Fetch next chunk result set return Arrow object. chunk size implementation-specific. Use dbFetchArrow() fetch results.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbFetchArrowChunk(\"AdbiResultArrow\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"","code":"dbFetchArrowChunk(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"res object inheriting DBIResultArrow, created dbSendQueryArrow(). ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"dbFetchArrowChunk() always returns object coercible data.frame many rows records fetched many columns fields result set, even result single value one zero rows.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"the-data-retrieval-flow-for-arrow-streams","dir":"Reference","previous_headings":"","what":"The data retrieval flow for Arrow streams","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"section gives complete overview flow execution queries return tabular data Arrow stream. flow, except repeated calling dbBindArrow() dbBind(), implemented dbGetQueryArrow(), sufficient unless parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQueryArrow() create result set object class DBIResultArrow. Optionally, bind query parameters dbBindArrow() dbBind(). required query contains placeholders ? $1, depending database backend. Use dbFetchArrow() get data stream. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"attempt fetch closed result set raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"Fetching multi-row queries one columns returns next chunk. size chunk implementation-specific. object returned dbFetchArrowChunk() can also passed nanoarrow::as_nanoarrow_array() create nanoarrow array object. chunk size implementation-specific.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) # Fetch all results rs <- dbSendQueryArrow(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbHasCompleted(rs) #> [1] FALSE as.data.frame(dbFetchArrowChunk(rs)) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 10 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 11 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 dbHasCompleted(rs) #> [1] TRUE as.data.frame(dbFetchArrowChunk(rs)) #> [1] mpg cyl disp hp drat wt qsec vs am gear carb #> <0 rows> (or 0-length row.names) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetConnectArgs.html","id":null,"dir":"Reference","previous_headings":"","what":"Get connection arguments — dbGetConnectArgs","title":"Get connection arguments — dbGetConnectArgs","text":"Returns arguments stored DBIConnector object inspection, optionally evaluating . function called dbConnect() usually need called directly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetConnectArgs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get connection arguments — dbGetConnectArgs","text":"","code":"dbGetConnectArgs(drv, eval = TRUE, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetConnectArgs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get connection arguments — dbGetConnectArgs","text":"drv object inheriting DBIConnector. eval Set FALSE return functions generate argument instead evaluating . ... arguments passed methods. otherwise used.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetConnectArgs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get connection arguments — dbGetConnectArgs","text":"","code":"cnr <- new(\"DBIConnector\", .drv = RSQLite::SQLite(), .conn_args = list(dbname = \":memory:\", password = function() \"supersecret\") ) dbGetConnectArgs(cnr) #> $dbname #> [1] \":memory:\" #> #> $password #> [1] \"supersecret\" #> dbGetConnectArgs(cnr, eval = FALSE) #> $dbname #> [1] \":memory:\" #> #> $password #> function() \"supersecret\" #> #>"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetDBIVersion.html","id":null,"dir":"Reference","previous_headings":"","what":"Determine the current version of the package. — dbGetDBIVersion","title":"Determine the current version of the package. — dbGetDBIVersion","text":"Determine current version package.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetDBIVersion.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Determine the current version of the package. — dbGetDBIVersion","text":"","code":"dbGetDBIVersion()"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetException.html","id":null,"dir":"Reference","previous_headings":"","what":"Get DBMS exceptions — dbGetException","title":"Get DBMS exceptions — dbGetException","text":"DEPRECATED. Backends use R's condition system signal errors warnings.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetException.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get DBMS exceptions — dbGetException","text":"","code":"dbGetException(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetException.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get DBMS exceptions — dbGetException","text":"conn DBIConnection object, returned dbConnect(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetException.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get DBMS exceptions — dbGetException","text":"list elements errorNum (integer error number) errorMsg (character string) describing last error connection conn.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":null,"dir":"Reference","previous_headings":"","what":"Get DBMS metadata — dbGetInfo","title":"Get DBMS metadata — dbGetInfo","text":"Retrieves information objects class DBIDriver, DBIConnection DBIResult.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Get DBMS metadata — dbGetInfo","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbGetInfo(\"AdbiConnection\") adbi::dbGetInfo(\"AdbiDriver\") bigrquery::dbGetInfo(\"BigQueryConnection\") bigrquery::dbGetInfo(\"BigQueryDriver\") DatabaseConnector::dbGetInfo(\"DatabaseConnectorConnection\") DatabaseConnector::dbGetInfo(\"DatabaseConnectorDriver\") dittodb::dbGetInfo(\"DBIMockConnection\") dittodb::dbGetInfo(\"DBIMockResult\") duckdb::dbGetInfo(\"duckdb_connection\") duckdb::dbGetInfo(\"duckdb_driver\") duckdb::dbGetInfo(\"duckdb_result\") lazysf::dbGetInfo(\"SFSQLDriver\") odbc::dbGetInfo(\"OdbcConnection\") odbc::dbGetInfo(\"OdbcDriver\") pool::dbGetInfo(\"Pool\") RAthena::dbGetInfo(\"AthenaConnection\") RAthena::dbGetInfo(\"AthenaResult\") RJDBC::dbGetInfo(\"JDBCConnection\") RJDBC::dbGetInfo(\"JDBCDriver\") RJDBC::dbGetInfo(\"JDBCResult\") RMariaDB::dbGetInfo(\"MariaDBConnection\") RMariaDB::dbGetInfo(\"MariaDBDriver\") RMySQL::dbGetInfo(\"MySQLConnection\") RMySQL::dbGetInfo(\"MySQLDriver\") RMySQL::dbGetInfo(\"MySQLResult\") RPostgres::dbGetInfo(\"PqConnection\") RPostgres::dbGetInfo(\"PqDriver\") RPostgreSQL::dbGetInfo(\"PostgreSQLConnection\") RPostgreSQL::dbGetInfo(\"PostgreSQLDriver\") RPostgreSQL::dbGetInfo(\"PostgreSQLResult\") RPresto::dbGetInfo(\"PrestoConnection\") RPresto::dbGetInfo(\"PrestoDriver\") RPresto::dbGetInfo(\"PrestoResult\") RSQLite::dbGetInfo(\"SQLiteConnection\") RSQLite::dbGetInfo(\"SQLiteDriver\") sergeant::dbGetInfo(\"DrillConnection\") sergeant::dbGetInfo(\"DrillDriver\") sparklyr::dbGetInfo(\"spark_connection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get DBMS metadata — dbGetInfo","text":"","code":"dbGetInfo(dbObj, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get DBMS metadata — dbGetInfo","text":"dbObj object inheriting DBIObject, .e. DBIDriver, DBIConnection, DBIResult ... arguments methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get DBMS metadata — dbGetInfo","text":"objects class DBIDriver, dbGetInfo() returns named list contains least following components: driver.version: package version DBI backend, client.version: version DBMS client library. objects class DBIConnection, dbGetInfo() returns named list contains least following components: db.version: version database server, dbname: database name, username: username connect database, host: hostname database server, port: port database server. must contain password component. Components applicable set NA. objects class DBIResult, dbGetInfo() returns named list contains least following components: statatment: statement used dbSendQuery() dbExecute(), returned dbGetStatement(), row.count: number rows fetched far (queries), returned dbGetRowCount(), rows.affected: number rows affected (statements), returned dbGetRowsAffected() .completed: logical indicates query statement completed, returned dbHasCompleted().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"Get DBMS metadata — dbGetInfo","text":"default implementation DBIResult objects constructs list return values corresponding methods, dbGetStatement(), dbGetRowCount(), dbGetRowsAffected(), dbHasCompleted().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get DBMS metadata — dbGetInfo","text":"","code":"dbGetInfo(RSQLite::SQLite()) #> $driver.version #> [1] ‘2.3.7’ #> #> $client.version #> [1] ‘3.46.0’ #>"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":null,"dir":"Reference","previous_headings":"","what":"Retrieve results from a query — dbGetQuery","title":"Retrieve results from a query — dbGetQuery","text":"Returns result query data frame. dbGetQuery() comes default implementation (work backends) calls dbSendQuery(), dbFetch(), ensuring result always freed dbClearResult(). retrieving chunked/paged results passing query parameters, see dbSendQuery(), particular \"data retrieval flow\" section. retrieving results Arrow object, see dbGetQueryArrow().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Retrieve results from a query — dbGetQuery","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. AzureKusto::dbGetQuery(\"AzureKustoConnection\", \"character\") DatabaseConnector::dbGetQuery(\"DatabaseConnectorConnection\", \"character\") dittodb::dbGetQuery(\"DBIMockRPostgreSQLConnection\", \"character\") implyr::dbGetQuery(\"src_impala\", \"character\") odbc::dbGetQuery(\"OdbcConnection\", \"character\") pool::dbGetQuery(\"Pool\", \"\") RAthena::dbGetQuery(\"AthenaConnection\", \"character\") RH2::dbGetQuery(\"H2Connection\", \"character\") RJDBC::dbGetQuery(\"JDBCConnection\", \"character\") RPostgreSQL::dbGetQuery(\"PostgreSQLConnection\", \"character\") RPresto::dbGetQuery(\"PrestoConnection\", \"character\") sparklyr::dbGetQuery(\"spark_connection\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Retrieve results from a query — dbGetQuery","text":"","code":"dbGetQuery(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Retrieve results from a query — dbGetQuery","text":"conn DBIConnection object, returned dbConnect(). statement character string containing SQL. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Retrieve results from a query — dbGetQuery","text":"dbGetQuery() always returns data.frame, many rows records fetched many columns fields result set, even result single value one zero rows.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Retrieve results from a query — dbGetQuery","text":"method SELECT queries (incl. SQL statements return SELECT-alike result, e.g., execution stored procedure data manipulation queries like INSERT ... RETURNING ...). execute stored procedure return result set, use dbExecute(). backends may support data manipulation statements method compatibility reasons. However, callers strongly advised use dbExecute() data manipulation statements.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"Retrieve results from a query — dbGetQuery","text":"Subclasses override method provide sort performance optimization.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Retrieve results from a query — dbGetQuery","text":"error raised issuing query closed invalid connection, syntax query invalid, query non-NA string. n argument atomic whole number greater equal -1 Inf, error raised, subsequent call dbGetQuery() proper n argument succeeds.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Retrieve results from a query — dbGetQuery","text":"following arguments part dbGetQuery() generic (improve compatibility across backends) part DBI specification: n (default: -1) params (default: NULL) immediate (default: NULL) must provided named arguments. See \"Specification\" \"Value\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Retrieve results from a query — dbGetQuery","text":"column named row_names treated like column. n argument specifies number rows fetched. omitted, fetching multi-row queries one columns returns entire result. value Inf n argument supported also returns full result. rows available fetched (passing large value n), result returned full without warning. zero rows requested, columns data frame still fully typed. Fetching fewer rows available permitted, warning issued. param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"specification-for-the-immediate-argument","dir":"Reference","previous_headings":"","what":"Specification for the immediate argument","title":"Retrieve results from a query — dbGetQuery","text":"immediate argument supports distinguishing \"direct\" \"prepared\" APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via \"direct\" API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed \"special\" query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Retrieve results from a query — dbGetQuery","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) dbGetQuery(con, \"SELECT * FROM mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 #> 11 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 #> 12 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 #> 13 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 #> 14 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 #> 15 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 #> 16 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 #> 17 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 #> 18 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 19 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 20 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 21 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 #> 23 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 #> 24 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 #> 25 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 #> 26 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 27 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 28 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 29 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 #> 30 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 #> 31 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 #> 32 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 dbGetQuery(con, \"SELECT * FROM mtcars\", n = 6) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 # Pass values using the param argument: # (This query runs eight times, once for each different # parameter. The resulting rows are combined into a single # data frame.) dbGetQuery( con, \"SELECT COUNT(*) FROM mtcars WHERE cyl = ?\", params = list(1:8) ) #> COUNT(*) #> 1 0 #> 2 0 #> 3 0 #> 4 11 #> 5 0 #> 6 7 #> 7 0 #> 8 14 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"Returns result query Arrow object. dbGetQueryArrow() comes default implementation (work backends) calls dbSendQueryArrow(), dbFetchArrow(), ensuring result always freed dbClearResult(). passing query parameters, see dbSendQueryArrow(), particular \"data retrieval flow Arrow streams\" section. retrieving results data frame, see dbGetQuery().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbGetQueryArrow(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"","code":"dbGetQueryArrow(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"conn DBIConnection object, returned dbConnect(). statement character string containing SQL. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"dbGetQueryArrow() always returns object coercible data.frame, many rows records fetched many columns fields result set, even result single value one zero rows.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"method SELECT queries (incl. SQL statements return SELECT-alike result, e.g., execution stored procedure data manipulation queries like INSERT ... RETURNING ...). execute stored procedure return result set, use dbExecute(). backends may support data manipulation statements method. However, callers strongly advised use dbExecute() data manipulation statements.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"Subclasses override method provide sort performance optimization.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"error raised issuing query closed invalid connection, syntax query invalid, query non-NA string. object returned dbGetQueryArrow() can also passed nanoarrow::as_nanoarrow_array_stream() create nanoarrow array stream object can used read result set batches. chunk size implementation-specific.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"following arguments part dbGetQueryArrow() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See \"Specification\" \"Value\" sections details usage. param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"specification-for-the-immediate-argument","dir":"Reference","previous_headings":"","what":"Specification for the immediate argument","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"immediate argument supports distinguishing \"direct\" \"prepared\" APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via \"direct\" API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed \"special\" query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"","code":"# Retrieve data as arrow table con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) dbGetQueryArrow(con, \"SELECT * FROM mtcars\") #> > #> $ get_schema:function () #> $ get_next :function (schema = x$get_schema(), validate = TRUE) #> $ release :function () dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":null,"dir":"Reference","previous_headings":"","what":"The number of rows fetched so far — dbGetRowCount","title":"The number of rows fetched so far — dbGetRowCount","text":"Returns total number rows actually fetched calls dbFetch() result set.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"The number of rows fetched so far — dbGetRowCount","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbGetRowCount(\"AdbiResult\") adbi::dbGetRowCount(\"AdbiResultArrow\") bigrquery::dbGetRowCount(\"BigQueryResult\") DatabaseConnector::dbGetRowCount(\"DatabaseConnectorDbiResult\") DatabaseConnector::dbGetRowCount(\"DatabaseConnectorJdbcResult\") duckdb::dbGetRowCount(\"duckdb_result\") odbc::dbGetRowCount(\"OdbcResult\") RMariaDB::dbGetRowCount(\"MariaDBResult\") RMySQL::dbGetRowCount(\"MySQLResult\") RPostgres::dbGetRowCount(\"PqResult\") RPostgreSQL::dbGetRowCount(\"PostgreSQLResult\") RPresto::dbGetRowCount(\"PrestoResult\") RSQLite::dbGetRowCount(\"SQLiteResult\") sparklyr::dbGetRowCount(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"The number of rows fetched so far — dbGetRowCount","text":"","code":"dbGetRowCount(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"The number of rows fetched so far — dbGetRowCount","text":"res object inheriting DBIResult. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"The number of rows fetched so far — dbGetRowCount","text":"dbGetRowCount() returns scalar number (integer numeric), number rows fetched far. calling dbSendQuery(), row count initially zero. call dbFetch() without limit, row count matches total number rows returned. Fetching limited number rows increases number rows number rows returned, even fetching past end result set. queries empty result set, zero returned even fetching. data manipulation statements issued dbSendStatement(), zero returned calling dbFetch().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"The number of rows fetched so far — dbGetRowCount","text":"Attempting get row count result set cleared dbClearResult() gives error.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"The number of rows fetched so far — dbGetRowCount","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") dbGetRowCount(rs) #> [1] 0 ret1 <- dbFetch(rs, 10) dbGetRowCount(rs) #> [1] 10 ret2 <- dbFetch(rs) dbGetRowCount(rs) #> [1] 32 nrow(ret1) + nrow(ret2) #> [1] 32 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":null,"dir":"Reference","previous_headings":"","what":"The number of rows affected — dbGetRowsAffected","title":"The number of rows affected — dbGetRowsAffected","text":"method returns number rows added, deleted, updated data manipulation statement.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"The number of rows affected — dbGetRowsAffected","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbGetRowsAffected(\"AdbiResult\") adbi::dbGetRowsAffected(\"AdbiResultArrow\") bigrquery::dbGetRowsAffected(\"BigQueryResult\") DatabaseConnector::dbGetRowsAffected(\"DatabaseConnectorDbiResult\") DatabaseConnector::dbGetRowsAffected(\"DatabaseConnectorJdbcResult\") dittodb::dbGetRowsAffected(\"DBIMockResult\") duckdb::dbGetRowsAffected(\"duckdb_result\") odbc::dbGetRowsAffected(\"OdbcResult\") RMariaDB::dbGetRowsAffected(\"MariaDBResult\") RMySQL::dbGetRowsAffected(\"MySQLResult\") RPostgres::dbGetRowsAffected(\"PqResult\") RPostgreSQL::dbGetRowsAffected(\"PostgreSQLResult\") RPresto::dbGetRowsAffected(\"PrestoResult\") RSQLite::dbGetRowsAffected(\"SQLiteResult\") sparklyr::dbGetRowsAffected(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"The number of rows affected — dbGetRowsAffected","text":"","code":"dbGetRowsAffected(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"The number of rows affected — dbGetRowsAffected","text":"res object inheriting DBIResult. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"The number of rows affected — dbGetRowsAffected","text":"dbGetRowsAffected() returns scalar number (integer numeric), number rows affected data manipulation statement issued dbSendStatement(). value available directly call change calling dbFetch(). NA_integer_ NA_numeric_ allowed number rows affected known. queries issued dbSendQuery(), zero returned call dbFetch(). NA values allowed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"the-command-execution-flow","dir":"Reference","previous_headings":"","what":"The command execution flow","title":"The number of rows affected — dbGetRowsAffected","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"The number of rows affected — dbGetRowsAffected","text":"Attempting get rows affected result set cleared dbClearResult() gives error.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"The number of rows affected — dbGetRowsAffected","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendStatement(con, \"DELETE FROM mtcars\") dbGetRowsAffected(rs) #> [1] 32 nrow(mtcars) #> [1] 32 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the statement associated with a result set — dbGetStatement","title":"Get the statement associated with a result set — dbGetStatement","text":"Returns statement passed dbSendQuery() dbSendStatement().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Get the statement associated with a result set — dbGetStatement","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbGetStatement(\"AdbiResult\") adbi::dbGetStatement(\"AdbiResultArrow\") bigrquery::dbGetStatement(\"BigQueryResult\") DatabaseConnector::dbGetStatement(\"DatabaseConnectorDbiResult\") DatabaseConnector::dbGetStatement(\"DatabaseConnectorJdbcResult\") duckdb::dbGetStatement(\"duckdb_result\") odbc::dbGetStatement(\"OdbcResult\") RAthena::dbGetStatement(\"AthenaResult\") RMariaDB::dbGetStatement(\"MariaDBResult\") RMySQL::dbGetStatement(\"MySQLResult\") RPostgres::dbGetStatement(\"PqResult\") RPostgreSQL::dbGetStatement(\"PostgreSQLResult\") RPresto::dbGetStatement(\"PrestoResult\") RSQLite::dbGetStatement(\"SQLiteResult\") sergeant::dbGetStatement(\"DrillResult\") sparklyr::dbGetStatement(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the statement associated with a result set — dbGetStatement","text":"","code":"dbGetStatement(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the statement associated with a result set — dbGetStatement","text":"res object inheriting DBIResult. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the statement associated with a result set — dbGetStatement","text":"dbGetStatement() returns string, query used either dbSendQuery() dbSendStatement().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Get the statement associated with a result set — dbGetStatement","text":"Attempting query statement result set cleared dbClearResult() gives error.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the statement associated with a result set — dbGetStatement","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") dbGetStatement(rs) #> [1] \"SELECT * FROM mtcars\" dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":null,"dir":"Reference","previous_headings":"","what":"Completion status — dbHasCompleted","title":"Completion status — dbHasCompleted","text":"method returns operation completed. SELECT query completed rows fetched. data manipulation statement always completed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Completion status — dbHasCompleted","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbHasCompleted(\"AdbiResult\") adbi::dbHasCompleted(\"AdbiResultArrow\") bigrquery::dbHasCompleted(\"BigQueryResult\") DatabaseConnector::dbHasCompleted(\"DatabaseConnectorDbiResult\") DatabaseConnector::dbHasCompleted(\"DatabaseConnectorJdbcResult\") dittodb::dbHasCompleted(\"DBIMockResult\") duckdb::dbHasCompleted(\"duckdb_result\") lazysf::dbHasCompleted(\"SFSQLResult\") odbc::dbHasCompleted(\"OdbcResult\") RAthena::dbHasCompleted(\"AthenaResult\") RJDBC::dbHasCompleted(\"JDBCResult\") RMariaDB::dbHasCompleted(\"MariaDBResult\") RMySQL::dbHasCompleted(\"MySQLResult\") RPostgres::dbHasCompleted(\"PqResult\") RPostgreSQL::dbHasCompleted(\"PostgreSQLResult\") RPresto::dbHasCompleted(\"PrestoResult\") RSQLite::dbHasCompleted(\"SQLiteResult\") sergeant::dbHasCompleted(\"DrillResult\") sparklyr::dbHasCompleted(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Completion status — dbHasCompleted","text":"","code":"dbHasCompleted(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Completion status — dbHasCompleted","text":"res object inheriting DBIResult. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Completion status — dbHasCompleted","text":"dbHasCompleted() returns logical scalar. query initiated dbSendQuery() non-empty result set, dbHasCompleted() returns FALSE initially TRUE calling dbFetch() without limit. query initiated dbSendStatement(), dbHasCompleted() always returns TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"the-data-retrieval-flow","dir":"Reference","previous_headings":"","what":"The data retrieval flow","title":"Completion status — dbHasCompleted","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Completion status — dbHasCompleted","text":"Attempting query completion status result set cleared dbClearResult() gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Completion status — dbHasCompleted","text":"completion status query guaranteed set FALSE attempting fetch past end entire result. Therefore, query empty result set, initial return value unspecified, result value TRUE trying fetch one row. Similarly, query result set length n, return value unspecified fetching n rows, result value TRUE trying fetch one row.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Completion status — dbHasCompleted","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") dbHasCompleted(rs) #> [1] FALSE ret1 <- dbFetch(rs, 10) dbHasCompleted(rs) #> [1] FALSE ret2 <- dbFetch(rs) dbHasCompleted(rs) #> [1] TRUE dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsReadOnly.html","id":null,"dir":"Reference","previous_headings":"","what":"Is this DBMS object read only? — dbIsReadOnly","title":"Is this DBMS object read only? — dbIsReadOnly","text":"generic tests whether database object read .","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsReadOnly.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Is this DBMS object read only? — dbIsReadOnly","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbIsReadOnly(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsReadOnly.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Is this DBMS object read only? — dbIsReadOnly","text":"","code":"dbIsReadOnly(dbObj, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsReadOnly.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Is this DBMS object read only? — dbIsReadOnly","text":"dbObj object inheriting DBIObject, .e. DBIDriver, DBIConnection, DBIResult ... arguments methods.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsReadOnly.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Is this DBMS object read only? — dbIsReadOnly","text":"","code":"dbIsReadOnly(ANSI()) #> [1] FALSE"},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsValid.html","id":null,"dir":"Reference","previous_headings":"","what":"Is this DBMS object still valid? — dbIsValid","title":"Is this DBMS object still valid? — dbIsValid","text":"generic tests whether database object still valid (.e. disconnected cleared).","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsValid.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Is this DBMS object still valid? — dbIsValid","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbIsValid(\"AdbiConnection\") adbi::dbIsValid(\"AdbiDriver\") adbi::dbIsValid(\"AdbiResult\") adbi::dbIsValid(\"AdbiResultArrow\") bigrquery::dbIsValid(\"BigQueryConnection\") bigrquery::dbIsValid(\"BigQueryDriver\") bigrquery::dbIsValid(\"BigQueryResult\") DatabaseConnector::dbIsValid(\"DatabaseConnectorDbiConnection\") DatabaseConnector::dbIsValid(\"DatabaseConnectorJdbcConnection\") duckdb::dbIsValid(\"duckdb_connection\") duckdb::dbIsValid(\"duckdb_driver\") duckdb::dbIsValid(\"duckdb_result\") lazysf::dbIsValid(\"SFSQLDriver\") odbc::dbIsValid(\"OdbcConnection\") odbc::dbIsValid(\"OdbcDriver\") odbc::dbIsValid(\"OdbcResult\") pool::dbIsValid(\"Pool\") RAthena::dbIsValid(\"AthenaConnection\") RAthena::dbIsValid(\"AthenaResult\") RJDBC::dbIsValid(\"JDBCConnection\") RJDBC::dbIsValid(\"JDBCResult\") RMariaDB::dbIsValid(\"MariaDBConnection\") RMariaDB::dbIsValid(\"MariaDBDriver\") RMariaDB::dbIsValid(\"MariaDBResult\") RMySQL::dbIsValid(\"MySQLConnection\") RMySQL::dbIsValid(\"MySQLDriver\") RMySQL::dbIsValid(\"MySQLResult\") RPostgres::dbIsValid(\"PqConnection\") RPostgres::dbIsValid(\"PqDriver\") RPostgres::dbIsValid(\"PqResult\") RPresto::dbIsValid(\"PrestoResult\") RSQLite::dbIsValid(\"SQLiteConnection\") RSQLite::dbIsValid(\"SQLiteDriver\") RSQLite::dbIsValid(\"SQLiteResult\") sergeant::dbIsValid(\"DrillConnection\") sparklyr::dbIsValid(\"DBISparkResult\") sparklyr::dbIsValid(\"spark_connection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsValid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Is this DBMS object still valid? — dbIsValid","text":"","code":"dbIsValid(dbObj, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsValid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Is this DBMS object still valid? — dbIsValid","text":"dbObj object inheriting DBIObject, .e. DBIDriver, DBIConnection, DBIResult ... arguments methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsValid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Is this DBMS object still valid? — dbIsValid","text":"dbIsValid() returns logical scalar, TRUE object specified dbObj valid, FALSE otherwise. DBIConnection object initially valid, becomes invalid disconnecting dbDisconnect(). invalid connection object (e.g., drivers object saved file restored), method also returns FALSE. DBIResult object valid call dbSendQuery(), stays valid even rows fetched; clearing dbClearResult() invalidates . DBIResult object also valid call dbSendStatement(), stays valid querying number rows affected; clearing dbClearResult() invalidates . connection database system dropped (e.g., due connectivity problems, server failure, etc.), dbIsValid() return FALSE. tested automatically.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsValid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Is this DBMS object still valid? — dbIsValid","text":"","code":"dbIsValid(RSQLite::SQLite()) #> [1] TRUE con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbIsValid(con) #> [1] TRUE rs <- dbSendQuery(con, \"SELECT 1\") dbIsValid(rs) #> [1] TRUE dbClearResult(rs) dbIsValid(rs) #> [1] FALSE dbDisconnect(con) dbIsValid(con) #> [1] FALSE"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListConnections.html","id":null,"dir":"Reference","previous_headings":"","what":"List currently open connections — dbListConnections","title":"List currently open connections — dbListConnections","text":"DEPRECATED, drivers longer required implement method. Keep track connections opened require list.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListConnections.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List currently open connections — dbListConnections","text":"","code":"dbListConnections(drv, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListConnections.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List currently open connections — dbListConnections","text":"drv object inheriting DBIDriver ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListConnections.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"List currently open connections — dbListConnections","text":"list","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":null,"dir":"Reference","previous_headings":"","what":"List field names of a remote table — dbListFields","title":"List field names of a remote table — dbListFields","text":"Returns field names remote table character vector.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"List field names of a remote table — dbListFields","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbListFields(\"AdbiConnection\", \"character\") adbi::dbListFields(\"AdbiConnection\", \"Id\") adbi::dbListFields(\"AdbiConnection\", \"SQL\") AzureKusto::dbListFields(\"AzureKustoConnection\", \"character\") bigrquery::dbListFields(\"BigQueryConnection\", \"AsIs\") bigrquery::dbListFields(\"BigQueryConnection\", \"character\") bigrquery::dbListFields(\"BigQueryConnection\", \"Id\") DatabaseConnector::dbListFields(\"DatabaseConnectorConnection\", \"character\") dittodb::dbListFields(\"DBIMockConnection\", \"\") dittodb::dbListFields(\"DBIMockConnection\", \"character\") dittodb::dbListFields(\"DBIMockConnection\", \"Id\") duckdb::dbListFields(\"duckdb_connection\", \"character\") odbc::dbListFields(\"OdbcConnection\", \"character\") pool::dbListFields(\"Pool\", \"\") RAthena::dbListFields(\"AthenaConnection\", \"character\") RJDBC::dbListFields(\"JDBCConnection\", \"\") RMySQL::dbListFields(\"MySQLConnection\", \"character\") RMySQL::dbListFields(\"MySQLResult\", \"missing\") RPostgres::dbListFields(\"PqConnection\", \"character\") RPostgres::dbListFields(\"PqConnection\", \"Id\") RPostgreSQL::dbListFields(\"PostgreSQLConnection\", \"character\") RPostgreSQL::dbListFields(\"PostgreSQLResult\", \"missing\") RPresto::dbListFields(\"PrestoConnection\", \"\") RPresto::dbListFields(\"PrestoConnection\", \"character\") RPresto::dbListFields(\"PrestoConnection\", \"dbplyr_schema\") RPresto::dbListFields(\"PrestoConnection\", \"Id\") RPresto::dbListFields(\"PrestoConnection\", \"SQL\") RPresto::dbListFields(\"PrestoResult\", \"missing\") sergeant::dbListFields(\"DrillConnection\", \"character\") sergeant::dbListFields(\"DrillResult\", \"missing\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List field names of a remote table — dbListFields","text":"","code":"dbListFields(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List field names of a remote table — dbListFields","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"List field names of a remote table — dbListFields","text":"dbListFields() returns character vector enumerates fields table correct order. also works temporary tables supported database. returned names suitable quoting dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"List field names of a remote table — dbListFields","text":"table exist, error raised. Invalid types name argument (e.g., character length equal one, numeric) lead error. error also raised calling method closed invalid connection.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"List field names of a remote table — dbListFields","text":"name argument can string return value dbQuoteIdentifier() value table column return value dbListObjects() is_prefix FALSE column named row_names treated like column.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"List field names of a remote table — dbListFields","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) dbListFields(con, \"mtcars\") #> [1] \"mpg\" \"cyl\" \"disp\" \"hp\" \"drat\" \"wt\" \"qsec\" \"vs\" \"am\" \"gear\" #> [11] \"carb\" dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":null,"dir":"Reference","previous_headings":"","what":"List remote objects — dbListObjects","title":"List remote objects — dbListObjects","text":"Returns names remote objects accessible connection data frame. include temporary objects, database backends (particular RMariaDB RMySQL) support . Compared dbListTables(), method also enumerates tables views schemas, returns fully qualified identifiers access objects. allows exploration database objects available current user, including can accessed giving full namespace.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"List remote objects — dbListObjects","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbListObjects(\"Pool\") RMariaDB::dbListObjects(\"MariaDBConnection\") RPostgres::dbListObjects(\"PqConnection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List remote objects — dbListObjects","text":"","code":"dbListObjects(conn, prefix = NULL, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List remote objects — dbListObjects","text":"conn DBIConnection object, returned dbConnect(). prefix fully qualified path database's namespace, NULL. argument processed dbUnquoteIdentifier(). given method return objects accessible prefix. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"List remote objects — dbListObjects","text":"dbListObjects() returns data frame columns table is_prefix (order), optionally columns dot (.) prefix. table column type list. object list suitable use argument dbQuoteIdentifier(). is_prefix column logical. data frame contains one row object (schema, table view) accessible prefix (passed) global namespace (prefix omitted). Tables added dbWriteTable() part data frame. soon table removed database, also removed data frame database objects. applies temporary objects supported database. returned names suitable quoting dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"List remote objects — dbListObjects","text":"error raised calling method closed invalid connection.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"List remote objects — dbListObjects","text":"prefix column indicates table value refers table prefix. call default prefix = NULL, table values is_prefix == FALSE correspond tables returned dbListTables(), table object can quoted dbQuoteIdentifier(). result quoting can passed dbUnquoteIdentifier(). (backends may convenient use Id class, required.) Values table column is_prefix == TRUE can passed prefix argument another call dbListObjects(). data frame returned dbListObject() call prefix argument set, table values is_prefix FALSE can used call dbExistsTable() returns TRUE.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"List remote objects — dbListObjects","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbListObjects(con) #> [1] table is_prefix #> <0 rows> (or 0-length row.names) dbWriteTable(con, \"mtcars\", mtcars) dbListObjects(con) #> table is_prefix #> 1 \"mtcars\" FALSE dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListResults.html","id":null,"dir":"Reference","previous_headings":"","what":"A list of all pending results — dbListResults","title":"A list of all pending results — dbListResults","text":"DEPRECATED. DBI currenty supports one open result set per connection, need keep track result sets open need functionality.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListResults.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A list of all pending results — dbListResults","text":"","code":"dbListResults(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListResults.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A list of all pending results — dbListResults","text":"conn DBIConnection object, returned dbConnect(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListResults.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A list of all pending results — dbListResults","text":"list. results active, empty list. single result active, list one element.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":null,"dir":"Reference","previous_headings":"","what":"List remote tables — dbListTables","title":"List remote tables — dbListTables","text":"Returns unquoted names remote tables accessible connection. include views temporary objects, database backends (particular RMariaDB RMySQL) support .","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"List remote tables — dbListTables","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbListTables(\"AdbiConnection\") AzureKusto::dbListTables(\"AzureKustoConnection\") bigrquery::dbListTables(\"BigQueryConnection\") DatabaseConnector::dbListTables(\"DatabaseConnectorConnection\") dittodb::dbListTables(\"DBIMockConnection\") duckdb::dbListTables(\"duckdb_connection\") lazysf::dbListTables(\"SFSQLConnection\") odbc::dbListTables(\"Microsoft SQL Server\") odbc::dbListTables(\"OdbcConnection\") pool::dbListTables(\"Pool\") RAthena::dbListTables(\"AthenaConnection\") RJDBC::dbListTables(\"JDBCConnection\") RMariaDB::dbListTables(\"MariaDBConnection\") RMySQL::dbListTables(\"MySQLConnection\") RPostgres::dbListTables(\"PqConnection\") RPostgreSQL::dbListTables(\"PostgreSQLConnection\") RPresto::dbListTables(\"PrestoConnection\") RSQLite::dbListTables(\"SQLiteConnection\") sparklyr::dbListTables(\"spark_connection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List remote tables — dbListTables","text":"","code":"dbListTables(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List remote tables — dbListTables","text":"conn DBIConnection object, returned dbConnect(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"List remote tables — dbListTables","text":"dbListTables() returns character vector enumerates tables views database. Tables added dbWriteTable() part list. soon table removed database, also removed list database tables. applies temporary tables supported database. returned names suitable quoting dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"List remote tables — dbListTables","text":"error raised calling method closed invalid connection.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"List remote tables — dbListTables","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbListTables(con) #> character(0) dbWriteTable(con, \"mtcars\", mtcars) dbListTables(con) #> [1] \"mtcars\" dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":null,"dir":"Reference","previous_headings":"","what":"Quote identifiers — dbQuoteIdentifier","title":"Quote identifiers — dbQuoteIdentifier","text":"Call method generate string suitable use query column table name, make sure generate valid SQL protect SQL injection attacks. inverse operation dbUnquoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Quote identifiers — dbQuoteIdentifier","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbQuoteIdentifier(\"AdbiConnection\", \"character\") bigrquery::dbQuoteIdentifier(\"BigQueryConnection\", \"character\") bigrquery::dbQuoteIdentifier(\"BigQueryConnection\", \"SQL\") DatabaseConnector::dbQuoteIdentifier(\"DatabaseConnectorConnection\", \"character\") dittodb::dbQuoteIdentifier(\"DBIMockRPostgresConnection\", \"character\") dittodb::dbQuoteIdentifier(\"DBIMockRPostgresConnection\", \"SQL\") duckdb::dbQuoteIdentifier(\"duckdb_connection\", \"\") duckdb::dbQuoteIdentifier(\"duckdb_connection\", \"character\") duckdb::dbQuoteIdentifier(\"duckdb_connection\", \"Id\") duckdb::dbQuoteIdentifier(\"duckdb_connection\", \"SQL\") implyr::dbQuoteIdentifier(\"impala_connection\", \"character\") implyr::dbQuoteIdentifier(\"impala_connection\", \"dbplyr_table_ident\") odbc::dbQuoteIdentifier(\"OdbcConnection\", \"character\") pool::dbQuoteIdentifier(\"Pool\", \"\") RMariaDB::dbQuoteIdentifier(\"MariaDBConnection\", \"character\") RMariaDB::dbQuoteIdentifier(\"MariaDBConnection\", \"Id\") RMariaDB::dbQuoteIdentifier(\"MariaDBConnection\", \"SQL\") RMySQL::dbQuoteIdentifier(\"MySQLConnection\", \"character\") RPostgres::dbQuoteIdentifier(\"PqConnection\", \"character\") RPostgres::dbQuoteIdentifier(\"PqConnection\", \"Id\") RPostgres::dbQuoteIdentifier(\"PqConnection\", \"SQL\") RPresto::dbQuoteIdentifier(\"PrestoConnection\", \"dbplyr_schema\") RSQLite::dbQuoteIdentifier(\"SQLiteConnection\", \"character\") RSQLite::dbQuoteIdentifier(\"SQLiteConnection\", \"SQL\") sparklyr::dbQuoteIdentifier(\"spark_connection\", \"character\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Quote identifiers — dbQuoteIdentifier","text":"","code":"dbQuoteIdentifier(conn, x, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Quote identifiers — dbQuoteIdentifier","text":"conn DBIConnection object, returned dbConnect(). x character vector, SQL Id object quote identifier. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Quote identifiers — dbQuoteIdentifier","text":"dbQuoteIdentifier() returns object can coerced character, length input. empty character vector function returns length-0 object. names input argument preserved output. passing returned object dbQuoteIdentifier() x argument, returned unchanged. Passing objects class SQL also return unchanged. (backends may convenient return SQL objects achieve behavior, required.)","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Quote identifiers — dbQuoteIdentifier","text":"error raised input contains NA, empty string.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Quote identifiers — dbQuoteIdentifier","text":"Calling dbGetQuery() query format SELECT 1 ... returns data frame identifier, unquoted, column name. Quoted identifiers can used table column names SQL queries, particular queries like SELECT 1 ... SELECT * (SELECT 1) .... method must use quoting mechanism unambiguously different quoting mechanism used strings, query like SELECT ... (SELECT 1 ...) throws error column names match. method can quote column names contain special characters space, dot, comma, quotes used mark strings identifiers, database supports . case, checking validity identifier performed executing query, dbQuoteIdentifier().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Quote identifiers — dbQuoteIdentifier","text":"","code":"# Quoting ensures that arbitrary input is safe for use in a query name <- \"Robert'); DROP TABLE Students;--\" dbQuoteIdentifier(ANSI(), name) #> \"Robert'); DROP TABLE Students;--\" # Use Id() to specify other components such as the schema id_name <- Id(schema = \"schema_name\", table = \"table_name\") id_name #> \"schema_name\".\"table_name\" dbQuoteIdentifier(ANSI(), id_name) #> \"schema_name\".\"table_name\" # SQL vectors are always passed through as is var_name <- SQL(\"select\") var_name #> select dbQuoteIdentifier(ANSI(), var_name) #> select # This mechanism is used to prevent double escaping dbQuoteIdentifier(ANSI(), dbQuoteIdentifier(ANSI(), name)) #> \"Robert'); DROP TABLE Students;--\""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":null,"dir":"Reference","previous_headings":"","what":"Quote literal values — dbQuoteLiteral","title":"Quote literal values — dbQuoteLiteral","text":"Call methods generate string suitable use query literal value correct type, make sure generate valid SQL protect SQL injection attacks.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Quote literal values — dbQuoteLiteral","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbQuoteLiteral(\"AdbiConnection\", \"character\") bigrquery::dbQuoteLiteral(\"BigQueryConnection\", \"logical\") duckdb::dbQuoteLiteral(\"duckdb_connection\", \"\") pool::dbQuoteLiteral(\"Pool\", \"\") RMariaDB::dbQuoteLiteral(\"MariaDBConnection\", \"\") RPostgres::dbQuoteLiteral(\"PqConnection\", \"\") RPresto::dbQuoteLiteral(\"PrestoConnection\", \"\") sparklyr::dbQuoteLiteral(\"spark_connection\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Quote literal values — dbQuoteLiteral","text":"","code":"dbQuoteLiteral(conn, x, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Quote literal values — dbQuoteLiteral","text":"conn DBIConnection object, returned dbConnect(). x vector quote string. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Quote literal values — dbQuoteLiteral","text":"dbQuoteLiteral() returns object can coerced character, length input. empty integer, numeric, character, logical, date, time, blob vector, function returns length-0 object. passing returned object dbQuoteLiteral() x argument, returned unchanged. Passing objects class SQL also return unchanged. (backends may convenient return SQL objects achieve behavior, required.)","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Quote literal values — dbQuoteLiteral","text":"Passing list x argument raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Quote literal values — dbQuoteLiteral","text":"returned expression can used SELECT ... query, value dbGetQuery(paste0(\"SELECT \", dbQuoteLiteral(x)))[[1]] must equal x scalar integer, numeric, string, logical. x NA, result must merely satisfy .na(). literals \"NA\" \"NULL\" treated specially. NA translated unquoted SQL NULL, query SELECT * (SELECT 1) ... NULL returns one row.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Quote literal values — dbQuoteLiteral","text":"","code":"# Quoting ensures that arbitrary input is safe for use in a query name <- \"Robert'); DROP TABLE Students;--\" dbQuoteLiteral(ANSI(), name) #> 'Robert''); DROP TABLE Students;--' # NAs become NULL dbQuoteLiteral(ANSI(), c(1:3, NA)) #> 1 #> 2 #> 3 #> NULL # Logicals become integers by default dbQuoteLiteral(ANSI(), c(TRUE, FALSE, NA)) #> 1 #> 0 #> NULL # Raw vectors become hex strings by default dbQuoteLiteral(ANSI(), list(as.raw(1:3), NULL)) #> X'010203' #> NULL # SQL vectors are always passed through as is var_name <- SQL(\"select\") var_name #> select dbQuoteLiteral(ANSI(), var_name) #> select # This mechanism is used to prevent double escaping dbQuoteLiteral(ANSI(), dbQuoteLiteral(ANSI(), name)) #> 'Robert''); DROP TABLE Students;--'"},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":null,"dir":"Reference","previous_headings":"","what":"Quote literal strings — dbQuoteString","title":"Quote literal strings — dbQuoteString","text":"Call method generate string suitable use query string literal, make sure generate valid SQL protect SQL injection attacks.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Quote literal strings — dbQuoteString","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbQuoteString(\"AdbiConnection\", \"character\") bigrquery::dbQuoteString(\"BigQueryConnection\", \"character\") bigrquery::dbQuoteString(\"BigQueryConnection\", \"SQL\") DatabaseConnector::dbQuoteString(\"DatabaseConnectorConnection\", \"character\") dittodb::dbQuoteString(\"DBIMockMariaDBConnection\", \"character\") dittodb::dbQuoteString(\"DBIMockMariaDBConnection\", \"SQL\") dittodb::dbQuoteString(\"DBIMockRPostgresConnection\", \"character\") dittodb::dbQuoteString(\"DBIMockRPostgresConnection\", \"SQL\") odbc::dbQuoteString(\"Hive\", \"character\") pool::dbQuoteString(\"Pool\", \"\") RAthena::dbQuoteString(\"AthenaConnection\", \"character\") RAthena::dbQuoteString(\"AthenaConnection\", \"Date\") RAthena::dbQuoteString(\"AthenaConnection\", \"POSIXct\") RMariaDB::dbQuoteString(\"MariaDBConnection\", \"character\") RMariaDB::dbQuoteString(\"MariaDBConnection\", \"SQL\") RMySQL::dbQuoteString(\"MySQLConnection\", \"character\") RMySQL::dbQuoteString(\"MySQLConnection\", \"SQL\") RPostgres::dbQuoteString(\"PqConnection\", \"character\") RPostgres::dbQuoteString(\"PqConnection\", \"SQL\") sparklyr::dbQuoteString(\"spark_connection\", \"character\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Quote literal strings — dbQuoteString","text":"","code":"dbQuoteString(conn, x, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Quote literal strings — dbQuoteString","text":"conn DBIConnection object, returned dbConnect(). x character vector quote string. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Quote literal strings — dbQuoteString","text":"dbQuoteString() returns object can coerced character, length input. empty character vector function returns length-0 object. passing returned object dbQuoteString() x argument, returned unchanged. Passing objects class SQL also return unchanged. (backends may convenient return SQL objects achieve behavior, required.)","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Quote literal strings — dbQuoteString","text":"Passing numeric, integer, logical, raw vector, list x argument raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Quote literal strings — dbQuoteString","text":"returned expression can used SELECT ... query, scalar character x value dbGetQuery(paste0(\"SELECT \", dbQuoteString(x)))[[1]] must identical x, even x contains spaces, tabs, quotes (single double), backticks, newlines (combination) result dbQuoteString() call coerced back character (even repeatedly). x NA, result must merely satisfy .na(). strings \"NA\" \"NULL\" treated specially. NA translated unquoted SQL NULL, query SELECT * (SELECT 1) ... NULL returns one row.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Quote literal strings — dbQuoteString","text":"","code":"# Quoting ensures that arbitrary input is safe for use in a query name <- \"Robert'); DROP TABLE Students;--\" dbQuoteString(ANSI(), name) #> 'Robert''); DROP TABLE Students;--' # NAs become NULL dbQuoteString(ANSI(), c(\"x\", NA)) #> 'x' #> NULL # SQL vectors are always passed through as is var_name <- SQL(\"select\") var_name #> select dbQuoteString(ANSI(), var_name) #> select # This mechanism is used to prevent double escaping dbQuoteString(ANSI(), dbQuoteString(ANSI(), name)) #> 'Robert''); DROP TABLE Students;--'"},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Read database tables as data frames — dbReadTable","title":"Read database tables as data frames — dbReadTable","text":"Reads database table data frame, optionally converting column row names converting column names valid R identifiers. Use dbReadTableArrow() instead obtain Arrow object.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Read database tables as data frames — dbReadTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. AzureKusto::dbReadTable(\"AzureKustoConnection\", \"character\") bigrquery::dbReadTable(\"BigQueryConnection\", \"AsIs\") bigrquery::dbReadTable(\"BigQueryConnection\", \"character\") bigrquery::dbReadTable(\"BigQueryConnection\", \"Id\") DatabaseConnector::dbReadTable(\"DatabaseConnectorConnection\", \"character\") lazysf::dbReadTable(\"SFSQLConnection\", \"character\") pool::dbReadTable(\"Pool\", \"\") RJDBC::dbReadTable(\"JDBCConnection\", \"\") RJDBC::dbReadTable(\"JDBCConnection\", \"character\") RMariaDB::dbReadTable(\"MariaDBConnection\", \"character\") RMySQL::dbReadTable(\"MySQLConnection\", \"character\") RPostgres::dbReadTable(\"PqConnection\", \"character\") RPostgreSQL::dbReadTable(\"PostgreSQLConnection\", \"character\") RPresto::dbReadTable(\"PrestoConnection\", \"\") RPresto::dbReadTable(\"PrestoConnection\", \"character\") RPresto::dbReadTable(\"PrestoConnection\", \"dbplyr_schema\") RPresto::dbReadTable(\"PrestoConnection\", \"Id\") RPresto::dbReadTable(\"PrestoConnection\", \"SQL\") RSQLite::dbReadTable(\"SQLiteConnection\", \"character\") sparklyr::dbReadTable(\"spark_connection\", \"character\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read database tables as data frames — dbReadTable","text":"","code":"dbReadTable(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read database tables as data frames — dbReadTable","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Read database tables as data frames — dbReadTable","text":"dbReadTable() returns data frame contains complete data remote table, effectively result calling dbGetQuery() SELECT * . empty table returned data frame zero rows. presence rownames depends row.names argument, see sqlColumnToRownames() details: FALSE NULL, returned data frame row names. TRUE, column named \"row_names\" converted row names. NA, column named \"row_names\" converted row names exists, otherwise translation occurs. string, specifies name column remote table contains row names. default row.names = FALSE. database supports identifiers special characters, columns returned data frame converted valid R identifiers check.names argument TRUE, check.names = FALSE, returned table non-syntactic column names without quotes.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Read database tables as data frames — dbReadTable","text":"function returns data frame. Use dbReadTableArrow() obtain Arrow object.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Read database tables as data frames — dbReadTable","text":"error raised table exist. error raised row.names TRUE \"row_names\" column exists, error raised row.names set string corresponding column exists. error raised calling method closed invalid connection. error raised name processed dbQuoteIdentifier() results non-scalar. Unsupported values row.names check.names (non-scalars, unsupported data types, NA check.names) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Read database tables as data frames — dbReadTable","text":"following arguments part dbReadTable() generic (improve compatibility across backends) part DBI specification: row.names (default: FALSE) check.names must provided named arguments. See \"Value\" section details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Read database tables as data frames — dbReadTable","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbReadTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Read database tables as data frames — dbReadTable","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars[1:10, ]) dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Read database tables as Arrow objects — dbReadTableArrow","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"Reads database table Arrow object. Use dbReadTable() instead obtain data frame.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbReadTableArrow(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"","code":"dbReadTableArrow(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"dbReadTableArrow() returns Arrow object contains complete data remote table, effectively result calling dbGetQueryArrow() SELECT * . empty table returned Arrow object zero rows.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"function returns Arrow object. Convert data frame .data.frame() use dbReadTable() obtain data frame.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"error raised table exist. error raised calling method closed invalid connection. error raised name processed dbQuoteIdentifier() results non-scalar.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbReadTableArrow() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"","code":"# Read data as Arrow table con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars[1:10, ]) dbReadTableArrow(con, \"mtcars\") #> > #> $ get_schema:function () #> $ get_next :function (schema = x$get_schema(), validate = TRUE) #> $ release :function () dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Remove a table from the database — dbRemoveTable","title":"Remove a table from the database — dbRemoveTable","text":"Remove remote table (e.g., created dbWriteTable()) database.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Remove a table from the database — dbRemoveTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbRemoveTable(\"AdbiConnection\", \"character\") adbi::dbRemoveTable(\"AdbiConnection\", \"Id\") AzureKusto::dbRemoveTable(\"AzureKustoConnection\", \"\") bigrquery::dbRemoveTable(\"BigQueryConnection\", \"AsIs\") bigrquery::dbRemoveTable(\"BigQueryConnection\", \"character\") bigrquery::dbRemoveTable(\"BigQueryConnection\", \"Id\") DatabaseConnector::dbRemoveTable(\"DatabaseConnectorConnection\", \"\") dittodb::dbRemoveTable(\"DBIMockConnection\", \"character\") duckdb::dbRemoveTable(\"duckdb_connection\", \"character\") odbc::dbRemoveTable(\"OdbcConnection\", \"character\") pool::dbRemoveTable(\"Pool\", \"\") RAthena::dbRemoveTable(\"AthenaConnection\", \"character\") RJDBC::dbRemoveTable(\"JDBCConnection\", \"\") RMariaDB::dbRemoveTable(\"MariaDBConnection\", \"character\") RMySQL::dbRemoveTable(\"MySQLConnection\", \"character\") RPostgres::dbRemoveTable(\"PqConnection\", \"character\") RPostgreSQL::dbRemoveTable(\"PostgreSQLConnection\", \"character\") RPresto::dbRemoveTable(\"PrestoConnection\", \"\") RSQLite::dbRemoveTable(\"SQLiteConnection\", \"character\") sparklyr::dbRemoveTable(\"spark_connection\", \"character\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Remove a table from the database — dbRemoveTable","text":"","code":"dbRemoveTable(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Remove a table from the database — dbRemoveTable","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Remove a table from the database — dbRemoveTable","text":"dbRemoveTable() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Remove a table from the database — dbRemoveTable","text":"table exist, error raised. attempt remove view function may result error. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Remove a table from the database — dbRemoveTable","text":"following arguments part dbRemoveTable() generic (improve compatibility across backends) part DBI specification: temporary (default: FALSE) fail_if_missing (default: TRUE) arguments must provided named arguments. temporary TRUE, call dbRemoveTable() consider temporary tables. backends support argument. particular, permanent tables name left untouched. fail_if_missing FALSE, call dbRemoveTable() succeeds table exist.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Remove a table from the database — dbRemoveTable","text":"table removed dbRemoveTable() appear list tables returned dbListTables(), dbExistsTable() returns FALSE. removal propagates immediately connections database. function can also used remove temporary table. name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbRemoveTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Remove a table from the database — dbRemoveTable","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbExistsTable(con, \"iris\") #> [1] FALSE dbWriteTable(con, \"iris\", iris) dbExistsTable(con, \"iris\") #> [1] TRUE dbRemoveTable(con, \"iris\") dbExistsTable(con, \"iris\") #> [1] FALSE dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":null,"dir":"Reference","previous_headings":"","what":"Execute a query on a given database connection — dbSendQuery","title":"Execute a query on a given database connection — dbSendQuery","text":"dbSendQuery() method submits synchronously executes SQL query database engine. extract records — need use dbFetch() method, must call dbClearResult() finish fetching records need. interactive use, almost always prefer dbGetQuery(). Use dbSendQueryArrow() dbGetQueryArrow() instead retrieve results Arrow object.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Execute a query on a given database connection — dbSendQuery","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbSendQuery(\"AdbiConnection\", \"character\") AzureKusto::dbSendQuery(\"AzureKustoConnection\", \"\") bigrquery::dbSendQuery(\"BigQueryConnection\", \"character\") DatabaseConnector::dbSendQuery(\"DatabaseConnectorDbiConnection\", \"character\") DatabaseConnector::dbSendQuery(\"DatabaseConnectorJdbcConnection\", \"character\") dittodb::dbSendQuery(\"DBIMockConnection\", \"character\") dittodb::dbSendQuery(\"DBIMockConnection\", \"SQL\") duckdb::dbSendQuery(\"duckdb_connection\", \"character\") lazysf::dbSendQuery(\"SFSQLConnection\", \"\") odbc::dbSendQuery(\"OdbcConnection\", \"character\") pool::dbSendQuery(\"Pool\", \"\") RAthena::dbSendQuery(\"AthenaConnection\", \"character\") RH2::dbSendQuery(\"H2Connection\", \"character\") RJDBC::dbSendQuery(\"JDBCConnection\", \"character\") RMariaDB::dbSendQuery(\"MariaDBConnection\", \"character\") RMySQL::dbSendQuery(\"MySQLConnection\", \"character\") RPostgres::dbSendQuery(\"PqConnection\", \"\") RPostgreSQL::dbSendQuery(\"PostgreSQLConnection\", \"character\") RPresto::dbSendQuery(\"PrestoConnection\", \"character\") RSQLite::dbSendQuery(\"SQLiteConnection\", \"character\") sergeant::dbSendQuery(\"DrillConnection\", \"\") sparklyr::dbSendQuery(\"spark_connection\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Execute a query on a given database connection — dbSendQuery","text":"","code":"dbSendQuery(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Execute a query on a given database connection — dbSendQuery","text":"conn DBIConnection object, returned dbConnect(). statement character string containing SQL. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Execute a query on a given database connection — dbSendQuery","text":"dbSendQuery() returns S4 object inherits DBIResult. result set can used dbFetch() extract records. finished using result, make sure clear dbClearResult().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Execute a query on a given database connection — dbSendQuery","text":"method SELECT queries . backends may support data manipulation queries method compatibility reasons. However, callers strongly encouraged use dbSendStatement() data manipulation statements. query submitted database server DBMS executes , possibly generating vast amounts data. data live driver-specific: drivers may choose leave output server transfer piecemeal R, others may transfer data client – necessarily memory R manages. See individual drivers' dbSendQuery() documentation details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"the-data-retrieval-flow","dir":"Reference","previous_headings":"","what":"The data retrieval flow","title":"Execute a query on a given database connection — dbSendQuery","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Execute a query on a given database connection — dbSendQuery","text":"error raised issuing query closed invalid connection, query non-NA string. error also raised syntax query invalid query parameters given (passing params argument) immediate argument set TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Execute a query on a given database connection — dbSendQuery","text":"following arguments part dbSendQuery() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See \"Specification\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Execute a query on a given database connection — dbSendQuery","text":"warnings occur normal conditions. done, DBIResult object must cleared call dbClearResult(). Failure clear result set leads warning connection closed. backend supports one open result set per connection, issuing second query invalidates already open result set raises warning. newly opened result set valid must cleared dbClearResult(). param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"specification-for-the-immediate-argument","dir":"Reference","previous_headings":"","what":"Specification for the immediate argument","title":"Execute a query on a given database connection — dbSendQuery","text":"immediate argument supports distinguishing \"direct\" \"prepared\" APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via \"direct\" API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed \"special\" query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Execute a query on a given database connection — dbSendQuery","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbFetch(rs) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 10 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 11 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 dbClearResult(rs) # Pass one set of values with the param argument: rs <- dbSendQuery( con, \"SELECT * FROM mtcars WHERE cyl = ?\", params = list(4L) ) dbFetch(rs) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 10 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 11 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 dbClearResult(rs) # Pass multiple sets of values with dbBind(): rs <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = ?\") dbBind(rs, list(6L)) dbFetch(rs) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 4 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 5 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 #> 6 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 #> 7 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 dbBind(rs, list(8L)) dbFetch(rs) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 2 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 3 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 #> 4 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 #> 5 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 #> 6 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 #> 7 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 #> 8 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 #> 9 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 #> 10 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 #> 11 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 #> 12 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 #> 13 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 #> 14 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"dbSendQueryArrow() method submits synchronously executes SQL query database engine. extract records — need use dbFetchArrow() method, must call dbClearResult() finish fetching records need. interactive use, almost always prefer dbGetQueryArrow(). Use dbSendQuery() dbGetQuery() instead retrieve results data frame.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbSendQueryArrow(\"AdbiConnection\") pool::dbSendQueryArrow(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"","code":"dbSendQueryArrow(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"conn DBIConnection object, returned dbConnect(). statement character string containing SQL. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"dbSendQueryArrow() returns S4 object inherits DBIResultArrow. result set can used dbFetchArrow() extract records. finished using result, make sure clear dbClearResult().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"method SELECT queries . backends may support data manipulation queries method compatibility reasons. However, callers strongly encouraged use dbSendStatement() data manipulation statements.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"the-data-retrieval-flow-for-arrow-streams","dir":"Reference","previous_headings":"","what":"The data retrieval flow for Arrow streams","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"section gives complete overview flow execution queries return tabular data Arrow stream. flow, except repeated calling dbBindArrow() dbBind(), implemented dbGetQueryArrow(), sufficient unless parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQueryArrow() create result set object class DBIResultArrow. Optionally, bind query parameters dbBindArrow() dbBind(). required query contains placeholders ? $1, depending database backend. Use dbFetchArrow() get data stream. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"error raised issuing query closed invalid connection, query non-NA string. error also raised syntax query invalid query parameters given (passing params argument) immediate argument set TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"following arguments part dbSendQueryArrow() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See \"Specification\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"warnings occur normal conditions. done, DBIResult object must cleared call dbClearResult(). Failure clear result set leads warning connection closed. backend supports one open result set per connection, issuing second query invalidates already open result set raises warning. newly opened result set valid must cleared dbClearResult(). param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"specification-for-the-immediate-argument","dir":"Reference","previous_headings":"","what":"Specification for the immediate argument","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"immediate argument supports distinguishing \"direct\" \"prepared\" APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via \"direct\" API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed \"special\" query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"","code":"# Retrieve data as arrow table con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQueryArrow(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbFetchArrow(rs) #> > #> $ get_schema:function () #> $ get_next :function (schema = x$get_schema(), validate = TRUE) #> $ release :function () dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":null,"dir":"Reference","previous_headings":"","what":"Execute a data manipulation statement on a given database connection — dbSendStatement","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"dbSendStatement() method submits synchronously executes SQL data manipulation statement (e.g., UPDATE, DELETE, INSERT , DROP TABLE, ...) database engine. query number affected rows, call dbGetRowsAffected() returned result object. must also call dbClearResult() . interactive use, almost always prefer dbExecute().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbSendStatement(\"AdbiConnection\", \"character\") AzureKusto::dbSendStatement(\"AzureKustoConnection\", \"character\") DatabaseConnector::dbSendStatement(\"DatabaseConnectorConnection\", \"character\") dittodb::dbSendStatement(\"DBIMockConnection\", \"character\") odbc::dbSendStatement(\"OdbcConnection\", \"character\") pool::dbSendStatement(\"Pool\", \"\") RAthena::dbSendStatement(\"AthenaConnection\", \"character\") RMariaDB::dbSendStatement(\"MariaDBConnection\", \"character\") sparklyr::dbSendStatement(\"spark_connection\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"","code":"dbSendStatement(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"conn DBIConnection object, returned dbConnect(). statement character string containing SQL. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"dbSendStatement() returns S4 object inherits DBIResult. result set can used dbGetRowsAffected() determine number rows affected query. finished using result, make sure clear dbClearResult().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"dbSendStatement() comes default implementation simply forwards dbSendQuery(), support backends implement latter.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"the-command-execution-flow","dir":"Reference","previous_headings":"","what":"The command execution flow","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"error raised issuing statement closed invalid connection, statement non-NA string. error also raised syntax query invalid query parameters given (passing params argument) immediate argument set TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"following arguments part dbSendStatement() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See \"Specification\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"warnings occur normal conditions. done, DBIResult object must cleared call dbClearResult(). Failure clear result set leads warning connection closed. backend supports one open result set per connection, issuing second query invalidates already open result set raises warning. newly opened result set valid must cleared dbClearResult(). param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"specification-for-the-immediate-argument","dir":"Reference","previous_headings":"","what":"Specification for the immediate argument","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"immediate argument supports distinguishing \"direct\" \"prepared\" APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via \"direct\" API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed \"special\" query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cars\", head(cars, 3)) rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (1, 1), (2, 2), (3, 3)\" ) dbHasCompleted(rs) #> [1] TRUE dbGetRowsAffected(rs) #> [1] 3 dbClearResult(rs) dbReadTable(con, \"cars\") # there are now 6 rows #> speed dist #> 1 4 2 #> 2 4 10 #> 3 7 4 #> 4 1 1 #> 5 2 2 #> 6 3 3 # Pass one set of values directly using the param argument: rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (?, ?)\", params = list(4L, 5L) ) dbClearResult(rs) # Pass multiple sets of values using dbBind(): rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (?, ?)\" ) dbBind(rs, list(5:6, 6:7)) dbBind(rs, list(7L, 8L)) dbClearResult(rs) dbReadTable(con, \"cars\") # there are now 10 rows #> speed dist #> 1 4 2 #> 2 4 10 #> 3 7 4 #> 4 1 1 #> 5 2 2 #> 6 3 3 #> 7 4 5 #> 8 5 6 #> 9 6 7 #> 10 7 8 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSetDataMappings.html","id":null,"dir":"Reference","previous_headings":"","what":"Set data mappings between an DBMS and R. — dbSetDataMappings","title":"Set data mappings between an DBMS and R. — dbSetDataMappings","text":"generic deprecated since working implementation ever produced.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSetDataMappings.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set data mappings between an DBMS and R. — dbSetDataMappings","text":"","code":"dbSetDataMappings(res, flds, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSetDataMappings.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set data mappings between an DBMS and R. — dbSetDataMappings","text":"res object inheriting DBIResult. flds field description object returned dbColumnInfo. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSetDataMappings.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Set data mappings between an DBMS and R. — dbSetDataMappings","text":"Sets one conversion functions handle translation DBMS data types R objects. needed non-primitive data, since DBI drivers handle common base types (integers, numeric, strings, etc.) details conversion functions (e.g., arguments, whether can invoke initializers /destructors) specified.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":null,"dir":"Reference","previous_headings":"","what":"Unquote identifiers — dbUnquoteIdentifier","title":"Unquote identifiers — dbUnquoteIdentifier","text":"Call method convert SQL object created dbQuoteIdentifier() back list Id objects.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Unquote identifiers — dbUnquoteIdentifier","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbUnquoteIdentifier(\"AdbiConnection\", \"\") odbc::dbUnquoteIdentifier(\"Microsoft SQL Server\", \"SQL\") pool::dbUnquoteIdentifier(\"Pool\", \"\") RMariaDB::dbUnquoteIdentifier(\"MariaDBConnection\", \"SQL\") RPostgres::dbUnquoteIdentifier(\"PqConnection\", \"SQL\") RSQLite::dbUnquoteIdentifier(\"SQLiteConnection\", \"SQL\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Unquote identifiers — dbUnquoteIdentifier","text":"","code":"dbUnquoteIdentifier(conn, x, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Unquote identifiers — dbUnquoteIdentifier","text":"conn DBIConnection object, returned dbConnect(). x SQL Id object. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Unquote identifiers — dbUnquoteIdentifier","text":"dbUnquoteIdentifier() returns list objects length input. empty vector, function returns length-0 object. names input argument preserved output. x value returned dbUnquoteIdentifier(), calling dbUnquoteIdentifier(..., dbQuoteIdentifier(..., x)) returns list(x). x object class Id, calling dbUnquoteIdentifier(..., x) returns list(x). (backends may convenient return Id objects achieve behavior, required.) Plain character vectors can also passed dbUnquoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Unquote identifiers — dbUnquoteIdentifier","text":"error raised character vectors missing value passed x argument.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Unquote identifiers — dbUnquoteIdentifier","text":"character vector length one, quoting (dbQuoteIdentifier()) unquoting quoting first element identical just quoting. also true strings contain special characters space, dot, comma, quotes used mark strings identifiers, database supports . Unquoting simple strings (consisting letters) wrapped SQL() quoting via dbQuoteIdentifier() gives result just quoting string. Similarly, unquoting expressions form SQL(\"schema.table\") quoting gives result quoting identifier constructed Id(\"schema\", \"table\").","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Unquote identifiers — dbUnquoteIdentifier","text":"","code":"# Unquoting allows to understand the structure of a # possibly complex quoted identifier dbUnquoteIdentifier( ANSI(), SQL(c('\"Catalog\".\"Schema\".\"Table\"', '\"Schema\".\"Table\"', '\"UnqualifiedTable\"')) ) #> [[1]] #> \"Catalog\".\"Schema\".\"Table\" #> #> [[2]] #> \"Schema\".\"Table\" #> #> [[3]] #> \"UnqualifiedTable\" #> # The returned object is always a list, # also for Id objects dbUnquoteIdentifier(ANSI(), Id(\"Catalog\", \"Schema\", \"Table\")) #> [[1]] #> \"Catalog\".\"Schema\".\"Table\" #> # Quoting and unquoting are inverses dbQuoteIdentifier( ANSI(), dbUnquoteIdentifier(ANSI(), SQL(\"UnqualifiedTable\"))[[1]] ) #> \"UnqualifiedTable\" dbQuoteIdentifier( ANSI(), dbUnquoteIdentifier(ANSI(), Id(\"Schema\", \"Table\"))[[1]] ) #> \"Schema\".\"Table\""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":null,"dir":"Reference","previous_headings":"","what":"Self-contained SQL transactions — dbWithTransaction","title":"Self-contained SQL transactions — dbWithTransaction","text":"Given transactions implemented, function allows pass code run transaction. default method dbWithTransaction() calls dbBegin() executing code, dbCommit() successful completion, dbRollback() case error. advantage remember dbBegin() dbCommit() dbRollback() – taken care . special function dbBreak() allows early exit rollback, can called inside dbWithTransaction().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Self-contained SQL transactions — dbWithTransaction","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbWithTransaction(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Self-contained SQL transactions — dbWithTransaction","text":"","code":"dbWithTransaction(conn, code, ...) dbBreak()"},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Self-contained SQL transactions — dbWithTransaction","text":"conn DBIConnection object, returned dbConnect(). code arbitrary block R code. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Self-contained SQL transactions — dbWithTransaction","text":"dbWithTransaction() returns value executed code.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Self-contained SQL transactions — dbWithTransaction","text":"DBI implements dbWithTransaction(), backends need override generic implement specialized handling.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Self-contained SQL transactions — dbWithTransaction","text":"Failure initiate transaction (e.g., connection closed invalid dbBegin() called already) gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Self-contained SQL transactions — dbWithTransaction","text":"dbWithTransaction() initiates transaction dbBegin(), executes code given code argument, commits transaction dbCommit(). code raises error, transaction instead aborted dbRollback(), error propagated. code calls dbBreak(), execution code stops transaction silently aborted. side effects caused code (creation new variables) propagate calling environment.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Self-contained SQL transactions — dbWithTransaction","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cash\", data.frame(amount = 100)) dbWriteTable(con, \"account\", data.frame(amount = 2000)) # All operations are carried out as logical unit: dbWithTransaction( con, { withdrawal <- 300 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) } ) #> [1] 1 # The code is executed as if in the current environment: withdrawal #> [1] 300 # The changes are committed to the database after successful execution: dbReadTable(con, \"cash\") #> amount #> 1 400 dbReadTable(con, \"account\") #> amount #> 1 1700 # Rolling back with dbBreak(): dbWithTransaction( con, { withdrawal <- 5000 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) if (dbReadTable(con, \"account\")$amount < 0) { dbBreak() } } ) # These changes were not committed to the database: dbReadTable(con, \"cash\") #> amount #> 1 400 dbReadTable(con, \"account\") #> amount #> 1 1700 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Copy data frames to database tables — dbWriteTable","title":"Copy data frames to database tables — dbWriteTable","text":"Writes, overwrites appends data frame database table, optionally converting row names column specifying SQL data types fields.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Copy data frames to database tables — dbWriteTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbWriteTable(\"AdbiConnection\", \"character\", \"data.frame\") adbi::dbWriteTable(\"AdbiConnection\", \"Id\", \"data.frame\") adbi::dbWriteTable(\"AdbiConnection\", \"SQL\", \"data.frame\") AzureKusto::dbWriteTable(\"AzureKustoConnection\", \"\", \"\") bigrquery::dbWriteTable(\"BigQueryConnection\", \"AsIs\", \"data.frame\") bigrquery::dbWriteTable(\"BigQueryConnection\", \"character\", \"data.frame\") bigrquery::dbWriteTable(\"BigQueryConnection\", \"Id\", \"data.frame\") DatabaseConnector::dbWriteTable(\"DatabaseConnectorConnection\", \"\", \"\") dittodb::dbWriteTable(\"DBIMockConnection\", \"character\", \"data.frame\") duckdb::dbWriteTable(\"duckdb_connection\", \"character\", \"data.frame\") odbc::dbWriteTable(\"OdbcConnection\", \"character\", \"data.frame\") odbc::dbWriteTable(\"OdbcConnection\", \"Id\", \"data.frame\") odbc::dbWriteTable(\"OdbcConnection\", \"SQL\", \"data.frame\") pool::dbWriteTable(\"Pool\", \"\", \"\") RAthena::dbWriteTable(\"AthenaConnection\", \"character\", \"data.frame\") RAthena::dbWriteTable(\"AthenaConnection\", \"Id\", \"data.frame\") RAthena::dbWriteTable(\"AthenaConnection\", \"SQL\", \"data.frame\") RH2::dbWriteTable(\"H2Connection\", \"character\", \"\") RH2::dbWriteTable(\"H2Connection\", \"character\", \"data.frame\") RJDBC::dbWriteTable(\"JDBCConnection\", \"\", \"\") RMariaDB::dbWriteTable(\"MariaDBConnection\", \"character\", \"character\") RMariaDB::dbWriteTable(\"MariaDBConnection\", \"character\", \"data.frame\") RMySQL::dbWriteTable(\"MySQLConnection\", \"character\", \"character\") RMySQL::dbWriteTable(\"MySQLConnection\", \"character\", \"data.frame\") RPostgres::dbWriteTable(\"PqConnection\", \"character\", \"data.frame\") RPostgreSQL::dbWriteTable(\"PostgreSQLConnection\", \"character\", \"character\") RPostgreSQL::dbWriteTable(\"PostgreSQLConnection\", \"character\", \"data.frame\") RPresto::dbWriteTable(\"PrestoConnection\", \"\", \"data.frame\") RSQLite::dbWriteTable(\"SQLiteConnection\", \"character\", \"character\") RSQLite::dbWriteTable(\"SQLiteConnection\", \"character\", \"data.frame\") sf::dbWriteTable(\"DBIObject\", \"character\", \"sf\") sf::dbWriteTable(\"PostgreSQLConnection\", \"character\", \"sf\") sparklyr::dbWriteTable(\"spark_connection\", \"\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Copy data frames to database tables — dbWriteTable","text":"","code":"dbWriteTable(conn, name, value, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Copy data frames to database tables — dbWriteTable","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') value data.frame (coercible data.frame). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Copy data frames to database tables — dbWriteTable","text":"dbWriteTable() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Copy data frames to database tables — dbWriteTable","text":"function expects data frame. Use dbWriteTableArrow() write Arrow object. function useful want create load table time. Use dbAppendTable() dbAppendTableArrow() appending data existing table, dbCreateTable() dbCreateTableArrow() creating table, dbExistsTable() dbRemoveTable() overwriting tables. DBI standardizes writing data frames dbWriteTable(). backends might implement methods can consume CSV files data formats. details, see documentation individual methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Copy data frames to database tables — dbWriteTable","text":"table exists, append overwrite arguments unset, append = TRUE data frame new data different column names, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar. Invalid values additional arguments row.names, overwrite, append, field.types, temporary (non-scalars, unsupported data types, NA, incompatible values, duplicate missing names, incompatible columns) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Copy data frames to database tables — dbWriteTable","text":"following arguments part dbWriteTable() generic (improve compatibility across backends) part DBI specification: row.names (default: FALSE) overwrite (default: FALSE) append (default: FALSE) field.types (default: NULL) temporary (default: FALSE) must provided named arguments. See \"Specification\" \"Value\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Copy data frames to database tables — dbWriteTable","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbWriteTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done value argument must data frame subset columns existing table append = TRUE. order columns matter append = TRUE. overwrite argument TRUE, existing table name overwritten. argument change behavior table exist yet. append argument TRUE, rows existing table preserved, new data appended. table exist yet, created. temporary argument TRUE, table available second connection gone reconnecting. backends support argument. regular, non-temporary table visible second connection, pre-existing connection, reconnecting database. SQL keywords can used freely table names, column names, data. Quotes, commas, spaces, special characters newlines tabs, can also used data, , database supports non-syntactic identifiers, also table names column names. following data types must supported least, read identically dbReadTable(): integer numeric (behavior Inf NaN specified) logical NA NULL 64-bit values (using \"bigint\" field type); result can converted numeric, may lose precision, converted character vector, gives full decimal representation written another table read unchanged character (UTF-8 native encodings), supporting empty strings non-empty string factor (returned character) list raw (supported database) objects type blob::blob (supported database) date (supported database; returned Date), also dates prior 1970 1900 2038 time (supported database; returned objects inherit difftime) timestamp (supported database; returned POSIXct respecting time zone necessarily preserving input time zone), also timestamps prior 1970 1900 2038 respecting time zone necessarily preserving input time zone) Mixing column types table supported. field.types argument must named character vector one entry column. indicates SQL data type used new column. column missed field.types, type inferred input data dbDataType(). interpretation rownames depends row.names argument, see sqlRownamesToColumn() details: FALSE NULL, row names ignored. TRUE, row names converted column named \"row_names\", even input data frame natural row names 1 nrow(...). NA, column named \"row_names\" created data custom row names, extra column created case natural row names. string, specifies name column remote table contains row names, even input data frame natural row names. default row.names = FALSE.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Copy data frames to database tables — dbWriteTable","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars[1:5, ]) dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 dbWriteTable(con, \"mtcars\", mtcars[6:10, ], append = TRUE) dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 dbWriteTable(con, \"mtcars\", mtcars[1:10, ], overwrite = TRUE) dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 # No row names dbWriteTable(con, \"mtcars\", mtcars[1:10, ], overwrite = TRUE, row.names = FALSE) dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4"},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Copy Arrow objects to database tables — dbWriteTableArrow","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"Writes, overwrites appends Arrow object database table.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbWriteTableArrow(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"","code":"dbWriteTableArrow(conn, name, value, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') value nanoarray stream, object coercible nanoarray stream nanoarrow::as_nanoarrow_array_stream(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"dbWriteTableArrow() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"function expects Arrow object. Convert data frame Arrow object nanoarrow::as_nanoarrow_array_stream() use dbWriteTable() write data frame. function useful want create load table time. Use dbAppendTableArrow() appending data existing table, dbCreateTableArrow() creating table specifying field types, dbRemoveTable() overwriting tables.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"table exists, append overwrite arguments unset, append = TRUE data frame new data different column names, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar. Invalid values additional arguments overwrite, append, temporary (non-scalars, unsupported data types, NA, incompatible values, incompatible columns) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"following arguments part dbWriteTableArrow() generic (improve compatibility across backends) part DBI specification: overwrite (default: FALSE) append (default: FALSE) temporary (default: FALSE) must provided named arguments. See \"Specification\" \"Value\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbWriteTableArrow() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done value argument must data frame subset columns existing table append = TRUE. order columns matter append = TRUE. overwrite argument TRUE, existing table name overwritten. argument change behavior table exist yet. append argument TRUE, rows existing table preserved, new data appended. table exist yet, created. temporary argument TRUE, table available second connection gone reconnecting. backends support argument. regular, non-temporary table visible second connection, pre-existing connection, reconnecting database. SQL keywords can used freely table names, column names, data. Quotes, commas, spaces, special characters newlines tabs, can also used data, , database supports non-syntactic identifiers, also table names column names. following data types must supported least, read identically dbReadTable(): integer numeric (behavior Inf NaN specified) logical NA NULL 64-bit values (using \"bigint\" field type); result can converted numeric, may lose precision, converted character vector, gives full decimal representation written another table read unchanged character (UTF-8 native encodings), supporting empty strings non-empty string factor (possibly returned character) objects type blob::blob (supported database) date (supported database; returned Date), also dates prior 1970 1900 2038 time (supported database; returned objects inherit difftime) timestamp (supported database; returned POSIXct respecting time zone necessarily preserving input time zone), also timestamps prior 1970 1900 2038 respecting time zone necessarily preserving input time zone) Mixing column types table supported.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTableArrow(con, \"mtcars\", nanoarrow::as_nanoarrow_array_stream(mtcars[1:5, ])) dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dot-SQL92Keywords.html","id":null,"dir":"Reference","previous_headings":"","what":"Keywords according to the SQL-92 standard — .SQL92Keywords","title":"Keywords according to the SQL-92 standard — .SQL92Keywords","text":"character vector SQL-92 keywords, uppercase.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dot-SQL92Keywords.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Keywords according to the SQL-92 standard — .SQL92Keywords","text":"","code":".SQL92Keywords"},{"path":"https://dbi.r-dbi.org/dev/reference/dot-SQL92Keywords.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Keywords according to the SQL-92 standard — .SQL92Keywords","text":"object class character length 220.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dot-SQL92Keywords.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Keywords according to the SQL-92 standard — .SQL92Keywords","text":"","code":"\"SELECT\" %in% .SQL92Keywords #> [1] TRUE"},{"path":"https://dbi.r-dbi.org/dev/reference/hidden_aliases.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal page for hidden aliases — hidden_aliases","title":"Internal page for hidden aliases — hidden_aliases","text":"S4 methods require documentation entry clutter index.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/hidden_aliases.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal page for hidden aliases — hidden_aliases","text":"","code":"# S4 method for class 'DBIObject' SQLKeywords(dbObj, ...) # S4 method for class 'missing' SQLKeywords(dbObj, ...) # S4 method for class 'DBIConnection' dbAppendTableArrow(conn, name, value, ...) # S4 method for class 'DBIConnection' dbAppendTable(conn, name, value, ..., row.names = NULL) # S4 method for class 'DBIResult' dbBindArrow(res, params, ...) # S4 method for class 'DBIResultArrowDefault' dbBindArrow(res, params, ...) # S4 method for class 'DBIResultArrow' dbBind(res, params, ...) # S4 method for class 'DBIDriver' dbCanConnect(drv, ...) # S4 method for class 'DBIResultArrow' dbClearResult(res, ...) # S4 method for class 'DBIConnector' dbConnect(drv, ...) # S4 method for class 'DBIConnection' dbCreateTableArrow(conn, name, value, ..., temporary = FALSE) # S4 method for class 'DBIConnection' dbCreateTable(conn, name, fields, ..., row.names = NULL, temporary = FALSE) # S4 method for class 'DBIConnector' dbDataType(dbObj, obj, ...) # S4 method for class 'DBIObject' dbDataType(dbObj, obj, ...) # S4 method for class 'character' dbDriver(drvName, ...) # S4 method for class 'DBIConnection,character' dbExecute(conn, statement, ...) # S4 method for class 'DBIConnection,Id' dbExistsTable(conn, name, ...) # S4 method for class 'DBIResultArrow' dbFetchArrowChunk(res, ...) # S4 method for class 'DBIResultArrow' dbFetchArrow(res, ...) # S4 method for class 'DBIResult' dbFetch(res, n = -1, ...) # S4 method for class 'DBIResultArrow' dbFetch(res, n = -1, ...) # S4 method for class 'DBIConnector' dbGetConnectArgs(drv, eval = TRUE, ...) # S4 method for class 'DBIResult' dbGetInfo(dbObj, ...) # S4 method for class 'DBIResultArrow' dbGetInfo(dbObj, ...) # S4 method for class 'DBIConnection' dbGetQueryArrow(conn, statement, ...) # S4 method for class 'DBIConnection,character' dbGetQuery(conn, statement, ..., n = -1L) # S4 method for class 'DBIResultArrow' dbGetRowCount(res, ...) # S4 method for class 'DBIResultArrow' dbGetRowsAffected(res, ...) # S4 method for class 'DBIResultArrow' dbGetStatement(res, ...) # S4 method for class 'DBIResultArrow' dbHasCompleted(res, ...) # S4 method for class 'DBIConnector' dbIsReadOnly(dbObj, ...) # S4 method for class 'DBIObject' dbIsReadOnly(dbObj, ...) # S4 method for class 'DBIResultArrowDefault' dbIsValid(dbObj, ...) # S4 method for class 'DBIConnection,Id' dbListFields(conn, name, ...) # S4 method for class 'DBIConnection,character' dbListFields(conn, name, ...) # S4 method for class 'DBIConnection' dbListObjects(conn, prefix = NULL, ...) # S4 method for class 'DBIConnection,ANY' dbQuoteIdentifier(conn, x, ...) # S4 method for class 'DBIConnection,character' dbQuoteIdentifier(conn, x, ...) # S4 method for class 'DBIConnection,SQL' dbQuoteIdentifier(conn, x, ...) # S4 method for class 'DBIConnection,Id' dbQuoteIdentifier(conn, x, ...) # S4 method for class 'DBIConnection' dbQuoteLiteral(conn, x, ...) # S4 method for class 'DBIConnection,ANY' dbQuoteString(conn, x, ...) # S4 method for class 'DBIConnection,character' dbQuoteString(conn, x, ...) # S4 method for class 'DBIConnection,SQL' dbQuoteString(conn, x, ...) # S4 method for class 'DBIConnection' dbReadTableArrow(conn, name, ...) # S4 method for class 'DBIConnection,Id' dbReadTable(conn, name, ...) # S4 method for class 'DBIConnection,character' dbReadTable(conn, name, ..., row.names = FALSE, check.names = TRUE) # S4 method for class 'DBIConnection,Id' dbRemoveTable(conn, name, ...) # S4 method for class 'DBIConnection' dbSendQueryArrow(conn, statement, params = NULL, ...) # S4 method for class 'DBIConnection,character' dbSendStatement(conn, statement, ...) # S4 method for class 'DBIConnection' dbUnquoteIdentifier(conn, x, ...) # S4 method for class 'DBIConnection' dbWithTransaction(conn, code) # S4 method for class 'DBIConnection' dbWriteTableArrow( conn, name, value, append = FALSE, overwrite = FALSE, ..., temporary = FALSE ) # S4 method for class 'DBIConnection,Id' dbWriteTable(conn, name, value, ...) # S4 method for class 'DBIObject,character' isSQLKeyword( dbObj, name, keywords = .SQL92Keywords, case = c(\"lower\", \"upper\", \"any\")[3], ... ) # S4 method for class 'DBIObject,character' make.db.names( dbObj, snames, keywords = .SQL92Keywords, unique = TRUE, allow.keywords = TRUE, ... ) # S4 method for class 'AnsiConnection' show(object) # S4 method for class 'DBIConnection' show(object) # S4 method for class 'DBIConnector' show(object) # S4 method for class 'DBIDriver' show(object) # S4 method for class 'DBIResult' show(object) # S4 method for class 'Id' show(object) # S4 method for class 'SQL' show(object) # S4 method for class 'DBIConnection' sqlAppendTable(con, table, values, row.names = NA, ...) # S4 method for class 'DBIConnection' sqlCreateTable(con, table, fields, row.names = NA, temporary = FALSE, ...) # S4 method for class 'DBIConnection' sqlData(con, value, row.names = NA, ...) # S4 method for class 'DBIConnection' sqlInterpolate(conn, sql, ..., .dots = list()) # S4 method for class 'DBIConnection' sqlParseVariables(conn, sql, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/hidden_aliases.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal page for hidden aliases — hidden_aliases","text":"n Number rows fetch, default -1 object Table object print","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":null,"dir":"Reference","previous_headings":"","what":"Make R identifiers into legal SQL identifiers — make.db.names.default","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"methods DEPRECATED. Please use dbQuoteIdentifier() (possibly dbQuoteString()) instead.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"","code":"make.db.names.default( snames, keywords = .SQL92Keywords, unique = TRUE, allow.keywords = TRUE ) isSQLKeyword.default( name, keywords = .SQL92Keywords, case = c(\"lower\", \"upper\", \"any\")[3] ) isSQLKeyword( dbObj, name, keywords = .SQL92Keywords, case = c(\"lower\", \"upper\", \"any\")[3], ... ) make.db.names( dbObj, snames, keywords = .SQL92Keywords, unique = TRUE, allow.keywords = TRUE, ... )"},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"snames character vector R identifiers (symbols) need make SQL identifiers. keywords character vector SQL keywords, default .SQL92Keywords defined DBI. unique logical describing whether resulting set SQL names unique. default TRUE. Following SQL 92 standard, uniqueness SQL identifiers determined regardless whether letters upper lower case. allow.keywords logical describing whether SQL keywords allowed resulting set SQL names. default TRUE name character vector database identifier candidates need determine whether legal SQL identifiers . case character string specifying whether make comparison lower case, upper case, two. defaults . dbObj DBI object (e.g., DBIDriver). ... argument passed driver implementation.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"make.db.names returns character vector legal SQL identifiers corresponding snames argument. SQLKeywords returns character vector known keywords database-engine associated dbObj. isSQLKeyword returns logical vector parallel name.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"algorithm make.db.names first invokes make.names replaces occurrence dot . underscore _. allow.keywords FALSE identifiers collide SQL keywords, small integer appended identifier form \"_n\". set SQL keywords stored character vector .SQL92Keywords reflects SQL ANSI/ISO standard documented \"X/Open SQL RDA\", 1994, ISBN 1-872630-68-8. Users can easily override update vector.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":"bugs","dir":"Reference","previous_headings":"","what":"Bugs","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"current mapping guaranteed fully reversible: SQL identifiers get mapped R identifiers make.names back SQL make.db.names() equal original SQL identifiers (e.g., compound SQL identifiers form username.tablename loose dot “.”).","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"set SQL keywords stored character vector .SQL92Keywords reflects SQL ANSI/ISO standard documented \"X/Open SQL RDA\", 1994, ISBN 1-872630-68-8. Users can easily override update vector.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/rownames.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert row names back and forth between columns — rownames","title":"Convert row names back and forth between columns — rownames","text":"functions provide reasonably automatic way preserving row names data frame back--forth translation SQL table. default, row names converted explicit column called \"row_names\", query returning column called \"row_names\" automatically set row names. methods mostly useful backend implementers.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/rownames.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert row names back and forth between columns — rownames","text":"","code":"sqlRownamesToColumn(df, row.names = NA) sqlColumnToRownames(df, row.names = NA)"},{"path":"https://dbi.r-dbi.org/dev/reference/rownames.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert row names back and forth between columns — rownames","text":"df data frame row.names Either TRUE, FALSE, NA string. TRUE, always translate row names column called \"row_names\". FALSE, never translate row names. NA, translate rownames character vector. string equivalent TRUE, allows override default name. backward compatibility, NULL equivalent FALSE.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/rownames.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert row names back and forth between columns — rownames","text":"","code":"# If have row names sqlRownamesToColumn(head(mtcars)) #> row_names mpg cyl disp hp drat wt qsec vs am gear carb #> 1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 #> 6 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 sqlRownamesToColumn(head(mtcars), FALSE) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 sqlRownamesToColumn(head(mtcars), \"ROWNAMES\") #> ROWNAMES mpg cyl disp hp drat wt qsec vs am gear carb #> 1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 #> 6 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 # If don't have sqlRownamesToColumn(head(iris)) #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 5.1 3.5 1.4 0.2 setosa #> 2 4.9 3.0 1.4 0.2 setosa #> 3 4.7 3.2 1.3 0.2 setosa #> 4 4.6 3.1 1.5 0.2 setosa #> 5 5.0 3.6 1.4 0.2 setosa #> 6 5.4 3.9 1.7 0.4 setosa sqlRownamesToColumn(head(iris), TRUE) #> row_names Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 1 5.1 3.5 1.4 0.2 setosa #> 2 2 4.9 3.0 1.4 0.2 setosa #> 3 3 4.7 3.2 1.3 0.2 setosa #> 4 4 4.6 3.1 1.5 0.2 setosa #> 5 5 5.0 3.6 1.4 0.2 setosa #> 6 6 5.4 3.9 1.7 0.4 setosa sqlRownamesToColumn(head(iris), \"ROWNAMES\") #> ROWNAMES Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 1 5.1 3.5 1.4 0.2 setosa #> 2 2 4.9 3.0 1.4 0.2 setosa #> 3 3 4.7 3.2 1.3 0.2 setosa #> 4 4 4.6 3.1 1.5 0.2 setosa #> 5 5 5.0 3.6 1.4 0.2 setosa #> 6 6 5.4 3.9 1.7 0.4 setosa"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlAppendTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Compose query to insert rows into a table — sqlAppendTable","title":"Compose query to insert rows into a table — sqlAppendTable","text":"sqlAppendTable() generates single SQL string inserts data frame existing table. sqlAppendTableTemplate() generates template suitable use dbBind(). default methods ANSI SQL 99 compliant. methods mostly useful backend implementers.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlAppendTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Compose query to insert rows into a table — sqlAppendTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::sqlAppendTable(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlAppendTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compose query to insert rows into a table — sqlAppendTable","text":"","code":"sqlAppendTable(con, table, values, row.names = NA, ...) sqlAppendTableTemplate( con, table, values, row.names = NA, prefix = \"?\", ..., pattern = \"\" )"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlAppendTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compose query to insert rows into a table — sqlAppendTable","text":"con database connection. table table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') values data frame. Factors converted character vectors. Character vectors escaped dbQuoteString(). row.names Either TRUE, FALSE, NA string. TRUE, always translate row names column called \"row_names\". FALSE, never translate row names. NA, translate rownames character vector. string equivalent TRUE, allows override default name. backward compatibility, NULL equivalent FALSE. ... arguments used individual methods. prefix Parameter prefix use placeholders. pattern Parameter pattern use placeholders: \"\": pattern \"1\": position anything else: field name","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlAppendTable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compose query to insert rows into a table — sqlAppendTable","text":"row.names argument must passed explicitly order avoid compatibility warning. default changed later release.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlAppendTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compose query to insert rows into a table — sqlAppendTable","text":"","code":"sqlAppendTable(ANSI(), \"iris\", head(iris)) #> Warning: Do not rely on the default value of the row.names argument for sqlAppendTable(), it will change in the future. #> INSERT INTO \"iris\" #> (\"Sepal.Length\", \"Sepal.Width\", \"Petal.Length\", \"Petal.Width\", \"Species\") #> VALUES #> (5.1, 3.5, 1.4, 0.2, 'setosa'), #> (4.9, 3, 1.4, 0.2, 'setosa'), #> (4.7, 3.2, 1.3, 0.2, 'setosa'), #> (4.6, 3.1, 1.5, 0.2, 'setosa'), #> (5, 3.6, 1.4, 0.2, 'setosa'), #> (5.4, 3.9, 1.7, 0.4, 'setosa') sqlAppendTable(ANSI(), \"mtcars\", head(mtcars)) #> Warning: Do not rely on the default value of the row.names argument for sqlAppendTable(), it will change in the future. #> INSERT INTO \"mtcars\" #> (\"row_names\", \"mpg\", \"cyl\", \"disp\", \"hp\", \"drat\", \"wt\", \"qsec\", \"vs\", \"am\", \"gear\", \"carb\") #> VALUES #> ('Mazda RX4', 21, 6, 160, 110, 3.9, 2.62, 16.46, 0, 1, 4, 4), #> ('Mazda RX4 Wag', 21, 6, 160, 110, 3.9, 2.875, 17.02, 0, 1, 4, 4), #> ('Datsun 710', 22.8, 4, 108, 93, 3.85, 2.32, 18.61, 1, 1, 4, 1), #> ('Hornet 4 Drive', 21.4, 6, 258, 110, 3.08, 3.215, 19.44, 1, 0, 3, 1), #> ('Hornet Sportabout', 18.7, 8, 360, 175, 3.15, 3.44, 17.02, 0, 0, 3, 2), #> ('Valiant', 18.1, 6, 225, 105, 2.76, 3.46, 20.22, 1, 0, 3, 1) sqlAppendTable(ANSI(), \"mtcars\", head(mtcars), row.names = FALSE) #> INSERT INTO \"mtcars\" #> (\"mpg\", \"cyl\", \"disp\", \"hp\", \"drat\", \"wt\", \"qsec\", \"vs\", \"am\", \"gear\", \"carb\") #> VALUES #> (21, 6, 160, 110, 3.9, 2.62, 16.46, 0, 1, 4, 4), #> (21, 6, 160, 110, 3.9, 2.875, 17.02, 0, 1, 4, 4), #> (22.8, 4, 108, 93, 3.85, 2.32, 18.61, 1, 1, 4, 1), #> (21.4, 6, 258, 110, 3.08, 3.215, 19.44, 1, 0, 3, 1), #> (18.7, 8, 360, 175, 3.15, 3.44, 17.02, 0, 0, 3, 2), #> (18.1, 6, 225, 105, 2.76, 3.46, 20.22, 1, 0, 3, 1) sqlAppendTableTemplate(ANSI(), \"iris\", iris) #> Warning: Do not rely on the default value of the `row.names` argument to `sqlAppendTableTemplate()`, it will change in the future. #> INSERT INTO \"iris\" #> (\"Sepal.Length\", \"Sepal.Width\", \"Petal.Length\", \"Petal.Width\", \"Species\") #> VALUES #> (?, ?, ?, ?, ?) sqlAppendTableTemplate(ANSI(), \"mtcars\", mtcars) #> Warning: Do not rely on the default value of the `row.names` argument to `sqlAppendTableTemplate()`, it will change in the future. #> INSERT INTO \"mtcars\" #> (\"row_names\", \"mpg\", \"cyl\", \"disp\", \"hp\", \"drat\", \"wt\", \"qsec\", \"vs\", \"am\", \"gear\", \"carb\") #> VALUES #> (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) sqlAppendTableTemplate(ANSI(), \"mtcars\", mtcars, row.names = FALSE) #> INSERT INTO \"mtcars\" #> (\"mpg\", \"cyl\", \"disp\", \"hp\", \"drat\", \"wt\", \"qsec\", \"vs\", \"am\", \"gear\", \"carb\") #> VALUES #> (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlCreateTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Compose query to create a simple table — sqlCreateTable","title":"Compose query to create a simple table — sqlCreateTable","text":"Exposes interface simple CREATE TABLE commands. default method ANSI SQL 99 compliant. method mostly useful backend implementers.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlCreateTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Compose query to create a simple table — sqlCreateTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. odbc::sqlCreateTable(\"DB2/AIX64\") odbc::sqlCreateTable(\"HDB\") odbc::sqlCreateTable(\"Microsoft SQL Server\") odbc::sqlCreateTable(\"OdbcConnection\") odbc::sqlCreateTable(\"Oracle\") odbc::sqlCreateTable(\"Teradata\") pool::sqlCreateTable(\"Pool\") RAthena::sqlCreateTable(\"AthenaConnection\") RPresto::sqlCreateTable(\"PrestoConnection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlCreateTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compose query to create a simple table — sqlCreateTable","text":"","code":"sqlCreateTable(con, table, fields, row.names = NA, temporary = FALSE, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlCreateTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compose query to create a simple table — sqlCreateTable","text":"con database connection. table table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') fields Either character vector data frame. named character vector: Names column names, values types. Names escaped dbQuoteIdentifier(). Field types unescaped. data frame: field types generated using dbDataType(). row.names Either TRUE, FALSE, NA string. TRUE, always translate row names column called \"row_names\". FALSE, never translate row names. NA, translate rownames character vector. string equivalent TRUE, allows override default name. backward compatibility, NULL equivalent FALSE. temporary TRUE, generate temporary table. ... arguments used individual methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlCreateTable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compose query to create a simple table — sqlCreateTable","text":"row.names argument must passed explicitly order avoid compatibility warning. default changed later release.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlCreateTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compose query to create a simple table — sqlCreateTable","text":"","code":"sqlCreateTable(ANSI(), \"my-table\", c(a = \"integer\", b = \"text\")) #> Warning: Do not rely on the default value of the row.names argument for sqlCreateTable(), it will change in the future. #> CREATE TABLE \"my-table\" ( #> \"a\" integer, #> \"b\" text #> ) #> sqlCreateTable(ANSI(), \"my-table\", iris) #> Warning: Do not rely on the default value of the row.names argument for sqlCreateTable(), it will change in the future. #> CREATE TABLE \"my-table\" ( #> \"Sepal.Length\" DOUBLE, #> \"Sepal.Width\" DOUBLE, #> \"Petal.Length\" DOUBLE, #> \"Petal.Width\" DOUBLE, #> \"Species\" TEXT #> ) #> # By default, character row names are converted to a row_names colum sqlCreateTable(ANSI(), \"mtcars\", mtcars[, 1:5]) #> Warning: Do not rely on the default value of the row.names argument for sqlCreateTable(), it will change in the future. #> CREATE TABLE \"mtcars\" ( #> \"row_names\" TEXT, #> \"mpg\" DOUBLE, #> \"cyl\" DOUBLE, #> \"disp\" DOUBLE, #> \"hp\" DOUBLE, #> \"drat\" DOUBLE #> ) #> sqlCreateTable(ANSI(), \"mtcars\", mtcars[, 1:5], row.names = FALSE) #> CREATE TABLE \"mtcars\" ( #> \"mpg\" DOUBLE, #> \"cyl\" DOUBLE, #> \"disp\" DOUBLE, #> \"hp\" DOUBLE, #> \"drat\" DOUBLE #> ) #>"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlData.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert a data frame into form suitable for upload to an SQL database — sqlData","title":"Convert a data frame into form suitable for upload to an SQL database — sqlData","text":"generic method coerces R objects vectors suitable upload database. output vary little method method depending whether main upload device single SQL string multiple parameterized queries. method mostly useful backend implementers.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlData.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Convert a data frame into form suitable for upload to an SQL database — sqlData","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. odbc::sqlData(\"OdbcConnection\") pool::sqlData(\"Pool\") RAthena::sqlData(\"AthenaConnection\") RMariaDB::sqlData(\"MariaDBConnection\") RPostgres::sqlData(\"PqConnection\") RSQLite::sqlData(\"SQLiteConnection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlData.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert a data frame into form suitable for upload to an SQL database — sqlData","text":"","code":"sqlData(con, value, row.names = NA, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlData.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert a data frame into form suitable for upload to an SQL database — sqlData","text":"con database connection. value data frame row.names Either TRUE, FALSE, NA string. TRUE, always translate row names column called \"row_names\". FALSE, never translate row names. NA, translate rownames character vector. string equivalent TRUE, allows override default name. backward compatibility, NULL equivalent FALSE. ... arguments used individual methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlData.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Convert a data frame into form suitable for upload to an SQL database — sqlData","text":"default method: Converts factors characters Quotes strings dbQuoteIdentifier() Converts columns strings dbQuoteLiteral() Replaces NA NULL","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlData.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert a data frame into form suitable for upload to an SQL database — sqlData","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") sqlData(con, head(iris)) #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 5.1 3.5 1.4 0.2 'setosa' #> 2 4.9 3.0 1.4 0.2 'setosa' #> 3 4.7 3.2 1.3 0.2 'setosa' #> 4 4.6 3.1 1.5 0.2 'setosa' #> 5 5.0 3.6 1.4 0.2 'setosa' #> 6 5.4 3.9 1.7 0.4 'setosa' sqlData(con, head(mtcars)) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":null,"dir":"Reference","previous_headings":"","what":"Safely interpolate values into an SQL string — sqlInterpolate","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"Accepts query string placeholders values, returns string values embedded. function careful quote inputs dbQuoteLiteral() protect SQL injection attacks. Placeholders can specified one two syntaxes: ?: occurrence standalone ? replaced value ?name1, ?name2, ...: values given named arguments named list, names used match values Mixing ? ?name syntaxes error. number names values supplied must correspond placeholders used query.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::sqlInterpolate(\"Pool\") sparklyr::sqlInterpolate(\"spark_connection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"","code":"sqlInterpolate(conn, sql, ..., .dots = list())"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"conn DBIConnection object, returned dbConnect(). sql SQL string containing variables interpolate. Variables must start question mark can valid R identifier, .e. must start letter ., followed letter, digit, . _. ..., .dots Values (...) list (.dots) interpolate string. Names required sql uses ?name syntax placeholders. values first escaped dbQuoteLiteral() prior interpolation protect SQL injection attacks. Arguments created SQL() dbQuoteIdentifier() remain unchanged.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"sql query values ... .dots safely embedded.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":"backend-authors","dir":"Reference","previous_headings":"","what":"Backend authors","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"implementing SQL backend non-ANSI quoting rules, need implement method sqlParseVariables(). Failure expose SQL injection attacks, (rarely) result errors matching supplied interpolated variables.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"","code":"sql <- \"SELECT * FROM X WHERE name = ?name\" sqlInterpolate(ANSI(), sql, name = \"Hadley\") #> SELECT * FROM X WHERE name = 'Hadley' # This is safe because the single quote has been double escaped sqlInterpolate(ANSI(), sql, name = \"H'); DROP TABLE--;\") #> SELECT * FROM X WHERE name = 'H''); DROP TABLE--;' # Using paste0() could lead to dangerous SQL with carefully crafted inputs # (SQL injection) name <- \"H'); DROP TABLE--;\" paste0(\"SELECT * FROM X WHERE name = '\", name, \"'\") #> [1] \"SELECT * FROM X WHERE name = 'H'); DROP TABLE--;'\" # Use SQL() or dbQuoteIdentifier() to avoid escaping sql2 <- \"SELECT * FROM ?table WHERE name in ?names\" sqlInterpolate(ANSI(), sql2, table = dbQuoteIdentifier(ANSI(), \"X\"), names = SQL(\"('a', 'b')\") ) #> SELECT * FROM \"X\" WHERE name in ('a', 'b') # Don't use SQL() to escape identifiers to avoid SQL injection sqlInterpolate(ANSI(), sql2, table = SQL(\"X; DELETE FROM X; SELECT * FROM X\"), names = SQL(\"('a', 'b')\") ) #> SELECT * FROM X; DELETE FROM X; SELECT * FROM X WHERE name in ('a', 'b') # Use dbGetQuery() or dbExecute() to process these queries: if (requireNamespace(\"RSQLite\", quietly = TRUE)) { con <- dbConnect(RSQLite::SQLite()) sql <- \"SELECT ?value AS value\" query <- sqlInterpolate(con, sql, value = 3) print(dbGetQuery(con, query)) dbDisconnect(con) } #> value #> 1 3"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlParseVariables.html","id":null,"dir":"Reference","previous_headings":"","what":"Parse interpolated variables from SQL. — sqlCommentSpec","title":"Parse interpolated variables from SQL. — sqlCommentSpec","text":"implementing backend uses non-ANSI quoting commenting rules, need implement method sqlParseVariables calls sqlParseVariablesImpl appropriate quote comment specifications.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlParseVariables.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Parse interpolated variables from SQL. — sqlCommentSpec","text":"","code":"sqlCommentSpec(start, end, endRequired) sqlQuoteSpec(start, end, escape = \"\", doubleEscape = TRUE) sqlParseVariablesImpl(sql, quotes, comments) sqlParseVariables(conn, sql, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlParseVariables.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Parse interpolated variables from SQL. — sqlCommentSpec","text":"start, end Start end characters quotes comments endRequired ending character comment required? escape character can used escape quoting characters? Defaults \"\", .e. nothing. doubleEscape Can quoting characters escaped doubling ? Defaults TRUE. sql SQL parse (character string) quotes list QuoteSpec calls defining quoting specification. comments list CommentSpec calls defining commenting specification.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlParseVariables.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Parse interpolated variables from SQL. — sqlCommentSpec","text":"","code":"# Use [] for quoting and no comments sqlParseVariablesImpl(\"[?a]\", list(sqlQuoteSpec(\"[\", \"]\", \"\\\\\", FALSE)), list() ) #> $start #> integer(0) #> #> $end #> integer(0) #> # Standard quotes, use # for commenting sqlParseVariablesImpl(\"# ?a\\n?b\", list(sqlQuoteSpec(\"'\", \"'\"), sqlQuoteSpec('\"', '\"')), list(sqlCommentSpec(\"#\", \"\\n\", FALSE)) ) #> $start #> [1] 6 #> #> $end #> [1] 7 #>"},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":null,"dir":"Reference","previous_headings":"","what":"Begin/commit/rollback SQL transactions — dbBegin","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"transaction encapsulates several SQL statements atomic unit. initiated dbBegin() either made persistent dbCommit() undone dbRollback(). case, DBMS guarantees either none statements permanent effect. helps ensuring consistency write operations multiple tables.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbBegin(\"AdbiConnection\") adbi::dbCommit(\"AdbiConnection\") adbi::dbRollback(\"AdbiConnection\") bigrquery::dbBegin(\"BigQueryConnection\") bigrquery::dbCommit(\"BigQueryConnection\") bigrquery::dbRollback(\"BigQueryConnection\") DatabaseConnector::dbBegin(\"DatabaseConnectorConnection\") DatabaseConnector::dbCommit(\"DatabaseConnectorConnection\") DatabaseConnector::dbRollback(\"DatabaseConnectorConnection\") dittodb::dbBegin(\"DBIMockConnection\") dittodb::dbCommit(\"DBIMockConnection\") dittodb::dbRollback(\"DBIMockConnection\") duckdb::dbBegin(\"duckdb_connection\") duckdb::dbCommit(\"duckdb_connection\") duckdb::dbRollback(\"duckdb_connection\") odbc::dbBegin(\"OdbcConnection\") odbc::dbCommit(\"OdbcConnection\") odbc::dbRollback(\"OdbcConnection\") pool::dbBegin(\"Pool\") pool::dbCommit(\"Pool\") pool::dbRollback(\"Pool\") RJDBC::dbBegin(\"JDBCConnection\") RJDBC::dbCommit(\"JDBCConnection\") RJDBC::dbRollback(\"JDBCConnection\") RMariaDB::dbBegin(\"MariaDBConnection\") RMariaDB::dbCommit(\"MariaDBConnection\") RMariaDB::dbRollback(\"MariaDBConnection\") RMySQL::dbBegin(\"MySQLConnection\") RMySQL::dbCommit(\"MySQLConnection\") RMySQL::dbRollback(\"MySQLConnection\") RPostgres::dbBegin(\"PqConnection\") RPostgres::dbCommit(\"PqConnection\") RPostgres::dbRollback(\"PqConnection\") RPostgreSQL::dbBegin(\"PostgreSQLConnection\") RPostgreSQL::dbCommit(\"PostgreSQLConnection\") RPostgreSQL::dbRollback(\"PostgreSQLConnection\") RSQLite::dbBegin(\"SQLiteConnection\") RSQLite::dbCommit(\"SQLiteConnection\") RSQLite::dbRollback(\"SQLiteConnection\") sparklyr::dbBegin(\"spark_connection\") sparklyr::dbCommit(\"spark_connection\") sparklyr::dbRollback(\"spark_connection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"","code":"dbBegin(conn, ...) dbCommit(conn, ...) dbRollback(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"conn DBIConnection object, returned dbConnect(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"dbBegin(), dbCommit() dbRollback() return TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"database engines implement transaction management, case methods implemented specific DBIConnection subclass.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"implementations expected raise error case failure, tested. way, generics throw error closed invalid connection. addition, call dbCommit() dbRollback() without prior call dbBegin() raises error. Nested transactions supported DBI, attempt call dbBegin() twice yields error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"Actual support transactions may vary backends. transaction initiated call dbBegin() committed call dbCommit(). Data written transaction must persist transaction committed. example, record missing transaction started created transaction must exist transaction, also new connection. transaction can also aborted dbRollback(). data written transaction must removed transaction rolled back. example, record missing transaction started created transaction must exist anymore rollback. Disconnection connection open transaction effectively rolls back transaction. data written transaction must removed transaction rolled back. behavior specified arguments passed functions. particular, RSQLite issues named transactions support nesting name argument set. transaction isolation level specified DBI.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cash\", data.frame(amount = 100)) dbWriteTable(con, \"account\", data.frame(amount = 2000)) # All operations are carried out as logical unit: dbBegin(con) withdrawal <- 300 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) #> [1] 1 dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) #> [1] 1 dbCommit(con) dbReadTable(con, \"cash\") #> amount #> 1 400 dbReadTable(con, \"account\") #> amount #> 1 1700 # Rolling back after detecting negative value on account: dbBegin(con) withdrawal <- 5000 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) #> [1] 1 dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) #> [1] 1 if (dbReadTable(con, \"account\")$amount >= 0) { dbCommit(con) } else { dbRollback(con) } dbReadTable(con, \"cash\") #> amount #> 1 400 dbReadTable(con, \"account\") #> amount #> 1 1700 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/security.html","id":null,"dir":"","previous_headings":"","what":"Process for reporting security vulnerabilities","title":"Process for reporting security vulnerabilities","text":"reporting security vulnerability, please e-mail package maintainer krlmlr+r@mailbox.org instructions. include confidential information e-mail.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-1239001-2024-06-02","dir":"Changelog","previous_headings":"","what":"DBI 1.2.3.9001 (2024-06-02)","title":"DBI 1.2.3.9001 (2024-06-02)","text":"Merge branch ‘cran-1.2.3’.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-1239000-2024-06-02","dir":"Changelog","previous_headings":"","what":"DBI 1.2.3.9000 (2024-06-02)","title":"DBI 1.2.3.9000 (2024-06-02)","text":"Merge branch ‘cran-1.2.3’.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"bug-fixes-1-2-3","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"DBI 1.2.3 (2024-06-02)","text":"dbQuoteLiteral() uses format \"%Y-%m-%d %H-%M-%S%z\" understood databases (#467, #474).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-2-3","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.2.3 (2024-06-02)","text":"Use relational-data.org replacement relational.fit.cvut.cz. Set BS version explicitly now (@maelle, #478). Include dbGetInfo() spec (#477). Fix typos (@salim-b, #469, @MichaelChirico, #482).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"bug-fixes-1-2-2","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"DBI 1.2.2 (2024-02-09)","text":"Id() assign empty names components arguments unnamed (#464). Add spec version control avoid weird pandoc errors CRAN (#465).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"bug-fixes-1-2-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"DBI 1.2.1 (2024-01-12)","text":"Fix dbWriteTableArrow() according spec (#457). Fix type inference default method dbCreateTableArrow() (#450).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"features-1-2-1","dir":"Changelog","previous_headings":"","what":"Features","title":"DBI 1.2.1 (2024-01-12)","text":"dbAppendTableArrow() returns number rows (#454). Add temporary argument dbCreateTableArrow() (#453). Avoid coercing params default implementation dbSendQueryArrow() (#447). Use nanoarrow::infer_nanoarrow_schema() default method dbCreateTable() (#445).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"chore-1-2-1","dir":"Changelog","previous_headings":"","what":"Chore","title":"DBI 1.2.1 (2024-01-12)","text":"Add badge DBIResultArrow class (#452). Change maintainer e-mail.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-2-1","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.2.1 (2024-01-12)","text":"Finalize Arrow vignette (#451, #455). Document new Arrow generics (#444, #449). Use dbitemplate (@maelle, #442).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"breaking-changes-1-2-0","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"DBI 1.2.0 (2023-12-20)","text":"dbUnquoteIdentifier() creates Id() objects without component names allows non-NA character input (#421, #422).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"features-1-2-0","dir":"Changelog","previous_headings":"","what":"Features","title":"DBI 1.2.0 (2023-12-20)","text":"New generics dbSendQueryArrow(), dbFetchArrow(), dbGetQueryArrow(), dbReadTableArrow(), dbWriteTableArrow() (@nbenn, #390), dbCreateTableArrow(), dbAppendTableArrow() (#396), dbBindArrow() (#415) dbFetchArrowChunk() (#424), default implementations via nanoarrow (#414). Id() now accepts unnamed components (#417). names provided, components arranged SQL order (@eauleaf, #427). New dbIsValid() method \"DBIResultArrowDefault\" objects implemented DBI (#425). Implement dbiDataType() objects class \"blob\".","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-2-0","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.2.0 (2023-12-20)","text":"Update pkgdown template (@maelle, #428, #438, #437). Clarify repeated parameter binding (#430). Deal sundown https://relational.fit.cvut.cz (#423). Correct vignette titles (#419). Harmonize table documentation (#400). Tweak typo, add families data retrieval command execution.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"testing-1-2-0","dir":"Changelog","previous_headings":"","what":"Testing","title":"DBI 1.2.0 (2023-12-20)","text":"Enable BLOB tests arrow >= 10.0.0 (#395). Run DBItest SQLite part checks (#431). Fix checks without suggested packages (#420). Fix Windows tests GHA (#406). testthat::use_testthat(3) (#416).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"features-1-1-3","dir":"Changelog","previous_headings":"","what":"Features","title":"DBI 1.1.3 (2022-06-18)","text":"dbAppendTable() accepts Id (#381, @renkun-ken).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-1-3","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.1.3 (2022-06-18)","text":"?dbSendQuery related methods gain section “data retrieval flow” (#386). ?dbSendStatement related methods gain section “command execution flow” (#386).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"features-1-1-2","dir":"Changelog","previous_headings":"","what":"Features","title":"DBI 1.1.2 (2021-12-19)","text":"Use dbQuoteLiteral() default method sqlData() (#362, #371). Update specification changes DBItest 1.7.2 (#367).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-1-2","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.1.2 (2021-12-19)","text":"pkgdown documentation DBI generics (e.g. ?dbConnect) contains clickable links known backends (except ROracle), explanatory sentence (#360). ?Id gains better examples (#295, #370). Elaborate status dbWriteTable() documentation (#352, #372). Make method definition similar S3. setMethod() calls refer top-level functions (#368). ?dbReadTable pages gain pointers Id() SQL() (#359).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-1-1","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.1.1 (2021-01-04)","text":"Expand “Get started” vignette two tutorials, basic advanced (#332, @jawond).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"bug-fixes-1-1-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"DBI 1.1.1 (2021-01-04)","text":"dbAppendTable() now allows columns named sep (#336). dbAppendTable() shows better error message input zero columns (#313). sqlInterpolate() now correctly interprets consecutive comments (#329, @rnorberg). dbQuoteLiteral() works difftime objects (#325). dbQuoteLiteral() quotes dates YYYY-MM-DD without time zone (#331).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"internal-1-1-1","dir":"Changelog","previous_headings":"","what":"Internal","title":"DBI 1.1.1 (2021-01-04)","text":"Switch GitHub Actions (#326). Update URL DESCRIPTION.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"new-features-1-1-0","dir":"Changelog","previous_headings":"","what":"New features","title":"DBI 1.1.0 (2019-12-15)","text":"New DBIConnector class (#280). Specify immediate argument dbSendQuery(), dbGetQuery(), dbSendStatement() dbExecute() (#268). Use specification dbGetInfo() (#271). dbUnquoteIdentifier() now supports Id() objects catalog members (#266, @raffscallion). also handles unquoted identifiers form table, schema.table catalog.schema.table, compatibility dbplyr.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-1-0","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.1.0 (2019-12-15)","text":"New DBI intro article (#286, @cutterkom). Add pkgdown reference index (#288). DBI specification https://dbi.r-dbi.org/dev/articles/spec now comes table contents code formatting. Update examples refer params instead param (#235). Improved documentation sqlInterpolate() (#100). Add usage SQL() sqlInterpolate() examples (#259, @renkun-ken). Improve documentation Id.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"internal-1-1-0","dir":"Changelog","previous_headings":"","what":"Internal","title":"DBI 1.1.0 (2019-12-15)","text":"Add tests dbUnquoteIdentifier() (#279, @baileych). sqlInterpolate() uses dbQuoteLiteral() instead checking type input. Avoid partial argument match dbWriteTable() (#246, @richfitz).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"new-generics-1-0-0","dir":"Changelog","previous_headings":"","what":"New generics","title":"DBI 1.0.0 (2018-05-02)","text":"New dbAppendTable() default calls sqlAppendTableTemplate() dbExecute() param argument, without support row.names argument (#74). New dbCreateTable() default calls sqlCreateTable() dbExecute(), without support row.names argument (#74). New dbCanConnect() generic default implementation (#87). New dbIsReadOnly() generic default implementation (#190, @anhqle).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"changes-1-0-0","dir":"Changelog","previous_headings":"","what":"Changes","title":"DBI 1.0.0 (2018-05-02)","text":"sqlAppendTable() now accepts lists values argument, support lists SQL objects R 3.1. Add default implementation dbListFields(DBIConnection, Id), relies dbQuoteIdentifier(DBIConnection, Id) (#75).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-updates-1-0-0","dir":"Changelog","previous_headings":"","what":"Documentation updates","title":"DBI 1.0.0 (2018-05-02)","text":"DBI specification vignette rendered correctly installed package (#234). Update docs cope stored procedures (#242, @aryoda). Add “Additional arguments” sections examples dbGetQuery(), dbSendQuery(), dbExecute() dbSendStatement(). dbColumnInfo() method now fully specified (#75). dbListFields() method now fully specified (#75). dynamic list methods help pages doesn’t contain methods DBI anymore.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"bug-fixes-1-0-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"DBI 1.0.0 (2018-05-02)","text":"Pass missing value argument secondary dbWriteTable() call (#737, @jimhester). Id class now uses printing. default dbUnquoteIdentifier() implementation now complies spec.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"breaking-changes-0-8","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"DBI 0.8 (2018-02-24)","text":"SQL() now strips names output names argument unset. dbReadTable(), dbWriteTable(), dbExistsTable(), dbRemoveTable(), dbListFields() generics now specialize first two arguments support implementations Id S4 class type second argument. packages may need update documentation satisfy R CMD check .","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"new-generics-0-8","dir":"Changelog","previous_headings":"","what":"New generics","title":"DBI 0.8 (2018-02-24)","text":"Schema support: Export Id(), new generics dbListObjects() dbUnquoteIdentifier(), methods Id call dbQuoteIdentifier() forward (#220). New dbQuoteLiteral() generic. default implementation uses switchpatch avoid dispatch ambiguities, forwards dbQuoteString() character vectors. Backends may override methods also dispatch second argument, case also override \"SQL\" class necessary (#172).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"default-implementations-0-8","dir":"Changelog","previous_headings":"","what":"Default implementations","title":"DBI 0.8 (2018-02-24)","text":"Default implementations dbQuoteIdentifier() dbQuoteLiteral() preserve names, default implementation dbQuoteString() strips names (#173). Specialized methods dbQuoteString() dbQuoteIdentifier() available , compatibility clients use getMethod() access (#218). Add default implementation dbListFields(). default implementation dbReadTable() now row.names = FALSE default also supports row.names = NULL (#186).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"api-changes-0-8","dir":"Changelog","previous_headings":"","what":"API changes","title":"DBI 0.8 (2018-02-24)","text":"SQL() function gains optional names argument can used assign names SQL strings.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"deprecated-generics-0-8","dir":"Changelog","previous_headings":"","what":"Deprecated generics","title":"DBI 0.8 (2018-02-24)","text":"dbListConnections() soft-deprecated documentation. dbListResults() deprecated documentation (#58). dbGetException() soft-deprecated documentation (#51). deprecated print.list.pairs() removed.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"bug-fixes-0-8","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"DBI 0.8 (2018-02-24)","text":"Fix dbDataType() AsIs object (#198, @yutannihilation). Fix dbQuoteString() dbQuoteIdentifier() ignore invalid UTF-8 strings (r-dbi/DBItest#156).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-0-8","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 0.8 (2018-02-24)","text":"Help pages generics now contain dynamic list methods implemented DBI backends (#162). sqlInterpolate() now supports named positional variables (#216, @hannesmuehleisen). Point db.rstudio.com (@wibeasley, #209). Reflect new ‘r-dbi’ organization DESCRIPTION (@wibeasley, #207).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"internal-0-8","dir":"Changelog","previous_headings":"","what":"Internal","title":"DBI 0.8 (2018-02-24)","text":"Using switchpatch second argument default implementations dbQuoteString() dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-07-2017-06-17","dir":"Changelog","previous_headings":"","what":"DBI 0.7 (2017-06-17)","title":"DBI 0.7 (2017-06-17)","text":"Import updated specs DBItest. default implementation dbGetQuery() now accepts n argument forwards dbFetch(). warning pending rows issued anymore (#76). Require R >= 3.0.0 (slots argument setClass()) (#169, @mvkorpel).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-06-1-2017-04-01","dir":"Changelog","previous_headings":"","what":"DBI 0.6-1 (2017-04-01)","title":"DBI 0.6-1 (2017-04-01)","text":"Fix dbReadTable() backends provide implementation (#171).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-06-2017-03-08","dir":"Changelog","previous_headings":"","what":"DBI 0.6 (2017-03-08)","title":"DBI 0.6 (2017-03-08)","text":"Deprecated dbDriver() dbUnloadDriver() documentation (#21). Renamed arguments sqlInterpolate() sqlParseVariables() consistent rest interface, added .dots argument sqlParseVariables. DBI drivers now expected implement sqlParseVariables(conn, sql, ..., .dots) sqlInterpolate(conn, sql, ...) (#147). Removed valueClass = \"logical\" generics return value meaningless, allow backends return invisibly (#135). Avoiding using braces definitions generics possible, standard generics can detected (#146). Added default implementation dbReadTable(). standard generics required ellipsis (test), future extensibility. Improved default implementation dbQuoteString() dbQuoteIdentifier() (#77). Removed tryCatch() call dbGetQuery() (#113). Finalized first draft DBI specification, now vignette. methods now draw documentation DBItest, behavior finally decided don’t yet yet. Removed max.connections requirement documentation (#56). Improved dbBind() documentation example (#136). Change omegahat.org URL omegahat.net, particular document still doesn’t exist new domain. Use roxygen2 inheritance copy DBI specification package. Use tic package building documentation. Use markdown documentation.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-05-1-2016-09-09","dir":"Changelog","previous_headings":"","what":"DBI 0.5-1 (2016-09-09)","title":"DBI 0.5-1 (2016-09-09)","text":"Documentation example updates.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-05-2016-08-11-cran-release","dir":"Changelog","previous_headings":"","what":"DBI 0.5 (2016-08-11, CRAN release)","title":"DBI 0.5 (2016-08-11, CRAN release)","text":"dbDataType() maps character values \"TEXT\" default (#102). default implementation dbQuoteString() doesn’t call encodeString() anymore: Neither SQLite Postgres understand e.g. \\n string literal, SQLite, Postgres, MySQL accept embedded newline (#121). New dbSendStatement() generic, forwards dbSendQuery() default (#20, #132). New dbExecute(), calls dbSendStatement() default (#109, @bborgesr). New dbWithTransaction() calls dbBegin() dbCommit(), dbRollback() failure (#110, @bborgesr). New dbBreak() function allows aborting within dbWithTransaction() (#115, #133). Export dbFetch() dbQuoteString() methods. One example per function (except functions scheduled deprecation) (#67). Consistent layout identifier naming. Better documentation generics adding links class related generics “See also” section “DBI… generics” (#130). S4 documentation directed hidden page unclutter documentation index (#59). Fix two minor vignette typos (#124, @mdsumner). Add package documentation. Remove misleading parts dbConnect() documentation (#118). Remove misleading link dbDataType() documentation. Remove full stop documentation titles. New help topic “DBIspec” contains full DBI specification (currently work progress) (#129). HTML documentation generated staticdocs now uploaded https://rstats-db.github.io/DBI build “production” branch (#131). minor changes fixes. Use contains argument instead representation() denote base classes (#93). Remove redundant declaration transaction methods (#110, @bborgesr).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-04-1-2016-05-07-cran-release","dir":"Changelog","previous_headings":"","what":"DBI 0.4-1 (2016-05-07, CRAN release)","title":"DBI 0.4-1 (2016-05-07, CRAN release)","text":"default show() implementations silently ignore errors. DBI drivers (e.g., RPostgreSQL) might fail implement dbIsValid() methods used.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-04-2016-04-30","dir":"Changelog","previous_headings":"","what":"DBI 0.4 (2016-04-30)","title":"DBI 0.4 (2016-04-30)","text":"New package maintainer: Kirill Müller. dbGetInfo() gains default method extracts information dbGetStatement(), dbGetRowsAffected(), dbHasCompleted(), dbGetRowCount(). means drivers longer need implement dbGetInfo() (may deprecated anyway point) (#55). dbDataType() dbQuoteString() now properly exported. default implementation dbDataType() (powered dbiDataType()) now also supports difftime AsIs objects lists raw (#70). Default dbGetQuery() method now always calls dbFetch(), tryCatch() block. New generic dbBind() binding values parameterised query. DBI gains number SQL generation functions. make easier write backends implementing common operations slightly tricky absolutely correctly. sqlCreateTable() sqlAppendTable() create tables data frame insert rows existing table. power implementations dbWriteTable(). sqlAppendTable() useful databases support parameterised queries. sqlRownamesToColumn() sqlColumnToRownames() provide standard way translating row names database. sqlInterpolate() sqlParseVariables() allows databases without native parameterised queries use parameterised queries avoid SQL injection attacks. sqlData() new generic converts data frame data frame suitable sending database. used (e.g.) ensure character vectors encoded UTF-8, convert R varible types (like factor) types supported database. sqlParseVariablesImpl() now implemented purely R, full test coverage (#83, @hannesmuehleisen). dbiCheckCompliance() removed, functionality now available DBItest package (#80). Added default show() methods driver, connection results. New concrete ANSIConnection class ANSI() function generate dummy ANSI compliant connection useful testing. Default dbQuoteString() dbQuoteIdentifer() methods now use encodeString() special characters like \\n correctly escaped. dbQuoteString() converts NA (unquoted) NULL. initial DBI proposal DBI version 1 specification now included vignette. mostly historical interest. new DBItest package described vignette. Deprecated print.list.pairs(). Removed unused dbi_dep().","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-031","dir":"Changelog","previous_headings":"","what":"Version 0.3.1","title":"Version 0.3.1","text":"Actually export dbIsValid() :/ dbGetQuery() uses dbFetch() default implementation.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"new-and-enhanced-generics-0-3-0","dir":"Changelog","previous_headings":"","what":"New and enhanced generics","title":"Version 0.3.0","text":"dbIsValid() returns logical value describing whether connection result set (object) still valid. (#12). dbQuoteString() dbQuoteIdentifier() implement database specific quoting mechanisms. dbFetch() added alias fetch() provide consistent name. Implementers define methods fetch() dbFetch() fetch() deprecated 2015. now, default method dbFetch() calls fetch(). dbBegin() begins transaction (#17). supported, DB specific methods throw error (dbCommit() dbRollback()).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"new-default-methods-0-3-0","dir":"Changelog","previous_headings":"","what":"New default methods","title":"Version 0.3.0","text":"dbGetStatement(), dbGetRowsAffected(), dbHasCompleted(), dbGetRowCount() gain default methods extract appropriate elements dbGetInfo(). means drivers longer need implement methods (#13). dbGetQuery() gains default method DBIConnection uses dbSendQuery(), fetch() dbClearResult().","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"deprecated-features-0-3-0","dir":"Changelog","previous_headings":"","what":"Deprecated features","title":"Version 0.3.0","text":"following functions soft-deprecated. going away, developers use DBI begin preparing. formal deprecation process begin July 2015, function emit warnings use. fetch() replaced dbFetch(). make.db.names(), isSQLKeyword() SQLKeywords(): black list based approach fundamentally flawed; instead quote strings identifiers dbQuoteIdentifier() dbQuoteString(). dbGetDBIVersion() deprecated since ’s now just thin wrapper around packageVersion(\"DBI\"). dbSetDataMappings() (#9) dbCallProc() (#7) deprecated implementations ever provided.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"other-improvements-0-3-0","dir":"Changelog","previous_headings":"","what":"Other improvements","title":"Version 0.3.0","text":"dbiCheckCompliance() makes easier implementors check package compliance DBI specification. examples now use RSQLite package can easily try code samples (#4). dbDriver() gains effective search mechanism doesn’t rely packages loaded (#1). DBI converted use roxygen2 documentation, now functions documentation files. love feedback make documentation better!","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-02-7","dir":"Changelog","previous_headings":"","what":"Version 0.2-7","title":"Version 0.2-7","text":"Trivial changes (updated package fields, daj)","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-02-6","dir":"Changelog","previous_headings":"","what":"Version 0.2-6","title":"Version 0.2-6","text":"Removed deprecated Rd files (thanks Prof. Ripley)","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-02-5","dir":"Changelog","previous_headings":"","what":"Version 0.2-5","title":"Version 0.2-5","text":"Code cleanups contributed Matthias Burger: avoid partial argument name matching use TRUE/FALSE, T/F. Change behavior make.db.names.default quote SQL keywords allow.keywords FALSE. Previously, SQL keywords name mangled underscores digit. Now quoted using ‘“’.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-02-4","dir":"Changelog","previous_headings":"","what":"Version 0.2-4","title":"Version 0.2-4","text":"Changed license GPL LPGL Fixed trivial typo documentation","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-10","dir":"Changelog","previous_headings":"","what":"Version 0.1-10","title":"Version 0.1-10","text":"Fixed documentation typos.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-9","dir":"Changelog","previous_headings":"","what":"Version 0.1-9","title":"Version 0.1-9","text":"Trivial changes.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-8","dir":"Changelog","previous_headings":"","what":"Version 0.1-8","title":"Version 0.1-8","text":"trivial change due package.description() deprecated 1.9.0.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-7","dir":"Changelog","previous_headings":"","what":"Version 0.1-7","title":"Version 0.1-7","text":"substantial re-formatting documentation due incompatibilities introduced 1.8.0 S4 method documentation. contents changed (modulo fixing typos). Thanks Kurt Hornik John Chambers help.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-6","dir":"Changelog","previous_headings":"","what":"Version 0.1-6","title":"Version 0.1-6","text":"Trivial documentation changes (R CMD check’s sake)","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-5","dir":"Changelog","previous_headings":"","what":"Version 0.1-5","title":"Version 0.1-5","text":"Removed duplicated setGeneric(“dbSetDataMappings”)","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-4","dir":"Changelog","previous_headings":"","what":"Version 0.1-4","title":"Version 0.1-4","text":"Removed “valueClass” generic functions, namely, dbListConnections, dbListResults, dbGetException, dbGetQuery, dbGetInfo. reason methods generics potentially return different classes objects (e.g., call dbGetInfo(res) return list name-value pairs, dbGetInfo(res, “statement”) character vector). Added 00Index inst/doc Added dbGetDBIVersion() (simple wrapper package.description).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-3","dir":"Changelog","previous_headings":"","what":"Version 0.1-3","title":"Version 0.1-3","text":"??? Minor changes?","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-2","dir":"Changelog","previous_headings":"","what":"Version 0.1-2","title":"Version 0.1-2","text":"implementation based version 4 classes methods. Incorporated (mostly Tim Keitt’s) comments.","code":""}] +[{"path":"https://dbi.r-dbi.org/dev/CODE_OF_CONDUCT.html","id":null,"dir":"","previous_headings":"","what":"Contributor Code of Conduct","title":"Contributor Code of Conduct","text":"contributors maintainers project, pledge respect people contribute reporting issues, posting feature requests, updating documentation, submitting pull requests patches, activities. committed making participation project harassment-free experience everyone, regardless level experience, gender, gender identity expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion. Examples unacceptable behavior participants include use sexual language imagery, derogatory comments personal attacks, trolling, public private harassment, insults, unprofessional conduct. Project maintainers right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct. Project maintainers follow Code Conduct may removed project team. Instances abusive, harassing, otherwise unacceptable behavior may reported opening issue contacting one project maintainers. Code Conduct adapted Contributor Covenant (https://www.contributor-covenant.org), version 1.0.0, available https://contributor-covenant.org/version/1/0/0/.","code":""},{"path":"https://dbi.r-dbi.org/dev/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to DBI","title":"Contributing to DBI","text":"outlines propose change DBI.","code":""},{"path":"https://dbi.r-dbi.org/dev/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to DBI","text":"Small typos grammatical errors documentation may edited directly using GitHub web interface, long changes made source file. YES: edit roxygen comment .R file R/. : edit .Rd file man/.","code":""},{"path":"https://dbi.r-dbi.org/dev/CONTRIBUTING.html","id":"prerequisites","dir":"","previous_headings":"","what":"Prerequisites","title":"Contributing to DBI","text":"make substantial pull request, always file issue make sure someone team agrees ’s problem. ’ve found bug, create associated issue illustrate bug minimal reprex.","code":""},{"path":"https://dbi.r-dbi.org/dev/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"","what":"Pull request process","title":"Contributing to DBI","text":"recommend create Git branch pull request (PR). Look Travis AppVeyor build status making changes. README contain badges continuous integration services used package. use roxygen2, Markdown syntax, documentation. use testthat. Contributions test cases included easier accept. Please update NEWS.md.","code":""},{"path":"https://dbi.r-dbi.org/dev/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to DBI","text":"Please note DBI project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"https://dbi.r-dbi.org/dev/LICENSE.html","id":"gnu-lesser-general-public-license","dir":"","previous_headings":"","what":"GNU LESSER GENERAL PUBLIC LICENSE","title":"NA","text":"Version 2.1, February 1999","code":"Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.]"},{"path":"https://dbi.r-dbi.org/dev/LICENSE.html","id":"preamble","dir":"","previous_headings":"","what":"Preamble","title":"NA","text":"licenses software designed take away freedom share change . contrast, GNU General Public Licenses intended guarantee freedom share change free software–make sure software free users. license, Lesser General Public License, applies specially designated software packages–typically libraries–Free Software Foundation authors decide use . can use , suggest first think carefully whether license ordinary General Public License better strategy use particular case, based explanations . speak free software, referring freedom use, price. General Public Licenses designed make sure freedom distribute copies free software (charge service wish); receive source code can get want ; can change software use pieces new free programs; informed can things. protect rights, need make restrictions forbid distributors deny rights ask surrender rights. restrictions translate certain responsibilities distribute copies library modify . example, distribute copies library, whether gratis fee, must give recipients rights gave . must make sure , , receive can get source code. link code library, must provide complete object files recipients, can relink library making changes library recompiling . must show terms know rights. protect rights two-step method: (1) copyright library, (2) offer license, gives legal permission copy, distribute /modify library. protect distributor, want make clear warranty free library. Also, library modified someone else passed , recipients know original version, original author’s reputation affected problems might introduced others. Finally, software patents pose constant threat existence free program. wish make sure company effectively restrict users free program obtaining restrictive license patent holder. Therefore, insist patent license obtained version library must consistent full freedom use specified license. GNU software, including libraries, covered ordinary GNU General Public License. license, GNU Lesser General Public License, applies certain designated libraries, quite different ordinary General Public License. use license certain libraries order permit linking libraries non-free programs. program linked library, whether statically using shared library, combination two legally speaking combined work, derivative original library. ordinary General Public License therefore permits linking entire combination fits criteria freedom. Lesser General Public License permits lax criteria linking code library. call license “Lesser” General Public License Less protect user’s freedom ordinary General Public License. also provides free software developers Less advantage competing non-free programs. disadvantages reason use ordinary General Public License many libraries. However, Lesser license provides advantages certain special circumstances. example, rare occasions, may special need encourage widest possible use certain library, becomes de-facto standard. achieve , non-free programs must allowed use library. frequent case free library job widely used non-free libraries. case, little gain limiting free library free software , use Lesser General Public License. cases, permission use particular library non-free programs enables greater number people use large body free software. example, permission use GNU C Library non-free programs enables many people use whole GNU operating system, well variant, GNU/Linux operating system. Although Lesser General Public License Less protective users’ freedom, ensure user program linked Library freedom wherewithal run program using modified version Library. precise terms conditions copying, distribution modification follow. Pay close attention difference “work based library” “work uses library”. former contains code derived library, whereas latter must combined library order run.","code":""},{"path":"https://dbi.r-dbi.org/dev/LICENSE.html","id":"terms-and-conditions-for-copying-distribution-and-modification","dir":"","previous_headings":"","what":"TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION","title":"NA","text":"0. License Agreement applies software library program contains notice placed copyright holder authorized party saying may distributed terms Lesser General Public License (also called “License”). licensee addressed “”. “library” means collection software functions /data prepared conveniently linked application programs (use functions data) form executables. “Library”, , refers software library work distributed terms. “work based Library” means either Library derivative work copyright law: say, work containing Library portion , either verbatim modifications /translated straightforwardly another language. (Hereinafter, translation included without limitation term “modification”.) “Source code” work means preferred form work making modifications . library, complete source code means source code modules contains, plus associated interface definition files, plus scripts used control compilation installation library. Activities copying, distribution modification covered License; outside scope. act running program using Library restricted, output program covered contents constitute work based Library (independent use Library tool writing ). Whether true depends Library program uses Library . 1. may copy distribute verbatim copies Library’s complete source code receive , medium, provided conspicuously appropriately publish copy appropriate copyright notice disclaimer warranty; keep intact notices refer License absence warranty; distribute copy License along Library. may charge fee physical act transferring copy, may option offer warranty protection exchange fee. 2. may modify copy copies Library portion , thus forming work based Library, copy distribute modifications work terms Section 1 , provided also meet conditions: ) modified work must software library. b) must cause files modified carry prominent notices stating changed files date change. c) must cause whole work licensed charge third parties terms License. d) facility modified Library refers function table data supplied application program uses facility, argument passed facility invoked, must make good faith effort ensure , event application supply function table, facility still operates, performs whatever part purpose remains meaningful. (example, function library compute square roots purpose entirely well-defined independent application. Therefore, Subsection 2d requires application-supplied function table used function must optional: application supply , square root function must still compute square roots.) requirements apply modified work whole. identifiable sections work derived Library, can reasonably considered independent separate works , License, terms, apply sections distribute separate works. distribute sections part whole work based Library, distribution whole must terms License, whose permissions licensees extend entire whole, thus every part regardless wrote . Thus, intent section claim rights contest rights work written entirely ; rather, intent exercise right control distribution derivative collective works based Library. addition, mere aggregation another work based Library Library (work based Library) volume storage distribution medium bring work scope License. 3. may opt apply terms ordinary GNU General Public License instead License given copy Library. , must alter notices refer License, refer ordinary GNU General Public License, version 2, instead License. (newer version version 2 ordinary GNU General Public License appeared, can specify version instead wish.) make change notices. change made given copy, irreversible copy, ordinary GNU General Public License applies subsequent copies derivative works made copy. option useful wish copy part code Library program library. 4. may copy distribute Library (portion derivative , Section 2) object code executable form terms Sections 1 2 provided accompany complete corresponding machine-readable source code, must distributed terms Sections 1 2 medium customarily used software interchange. distribution object code made offering access copy designated place, offering equivalent access copy source code place satisfies requirement distribute source code, even though third parties compelled copy source along object code. 5. program contains derivative portion Library, designed work Library compiled linked , called “work uses Library”. work, isolation, derivative work Library, therefore falls outside scope License. However, linking “work uses Library” Library creates executable derivative Library (contains portions Library), rather “work uses library”. executable therefore covered License. Section 6 states terms distribution executables. “work uses Library” uses material header file part Library, object code work may derivative work Library even though source code . Whether true especially significant work can linked without Library, work library. threshold true precisely defined law. object file uses numerical parameters, data structure layouts accessors, small macros small inline functions (ten lines less length), use object file unrestricted, regardless whether legally derivative work. (Executables containing object code plus portions Library still fall Section 6.) Otherwise, work derivative Library, may distribute object code work terms Section 6. executables containing work also fall Section 6, whether linked directly Library . 6. exception Sections , may also combine link “work uses Library” Library produce work containing portions Library, distribute work terms choice, provided terms permit modification work customer’s use reverse engineering debugging modifications. must give prominent notice copy work Library used Library use covered License. must supply copy License. work execution displays copyright notices, must include copyright notice Library among , well reference directing user copy License. Also, must one things: ) Accompany work complete corresponding machine-readable source code Library including whatever changes used work (must distributed Sections 1 2 ); , work executable linked Library, complete machine-readable “work uses Library”, object code /source code, user can modify Library relink produce modified executable containing modified Library. (understood user changes contents definitions files Library necessarily able recompile application use modified definitions.) b) Use suitable shared library mechanism linking Library. suitable mechanism one (1) uses run time copy library already present user’s computer system, rather copying library functions executable, (2) operate properly modified version library, user installs one, long modified version interface-compatible version work made . c) Accompany work written offer, valid least three years, give user materials specified Subsection 6a, , charge cost performing distribution. d) distribution work made offering access copy designated place, offer equivalent access copy specified materials place. e) Verify user already received copy materials already sent user copy. executable, required form “work uses Library” must include data utility programs needed reproducing executable . However, special exception, materials distributed need include anything normally distributed (either source binary form) major components (compiler, kernel, ) operating system executable runs, unless component accompanies executable. may happen requirement contradicts license restrictions proprietary libraries normally accompany operating system. contradiction means use Library together executable distribute. 7. may place library facilities work based Library side--side single library together library facilities covered License, distribute combined library, provided separate distribution work based Library library facilities otherwise permitted, provided two things: ) Accompany combined library copy work based Library, uncombined library facilities. must distributed terms Sections . b) Give prominent notice combined library fact part work based Library, explaining find accompanying uncombined form work. 8. may copy, modify, sublicense, link , distribute Library except expressly provided License. attempt otherwise copy, modify, sublicense, link , distribute Library void, automatically terminate rights License. However, parties received copies, rights, License licenses terminated long parties remain full compliance. 9. required accept License, since signed . However, nothing else grants permission modify distribute Library derivative works. actions prohibited law accept License. Therefore, modifying distributing Library (work based Library), indicate acceptance License , terms conditions copying, distributing modifying Library works based . 10. time redistribute Library (work based Library), recipient automatically receives license original licensor copy, distribute, link modify Library subject terms conditions. may impose restrictions recipients’ exercise rights granted herein. responsible enforcing compliance third parties License. 11. , consequence court judgment allegation patent infringement reason (limited patent issues), conditions imposed (whether court order, agreement otherwise) contradict conditions License, excuse conditions License. distribute satisfy simultaneously obligations License pertinent obligations, consequence may distribute Library . example, patent license permit royalty-free redistribution Library receive copies directly indirectly , way satisfy License refrain entirely distribution Library. portion section held invalid unenforceable particular circumstance, balance section intended apply, section whole intended apply circumstances. purpose section induce infringe patents property right claims contest validity claims; section sole purpose protecting integrity free software distribution system implemented public license practices. Many people made generous contributions wide range software distributed system reliance consistent application system; author/donor decide willing distribute software system licensee impose choice. section intended make thoroughly clear believed consequence rest License. 12. distribution /use Library restricted certain countries either patents copyrighted interfaces, original copyright holder places Library License may add explicit geographical distribution limitation excluding countries, distribution permitted among countries thus excluded. case, License incorporates limitation written body License. 13. Free Software Foundation may publish revised /new versions Lesser General Public License time time. new versions similar spirit present version, may differ detail address new problems concerns. version given distinguishing version number. Library specifies version number License applies “later version”, option following terms conditions either version later version published Free Software Foundation. Library specify license version number, may choose version ever published Free Software Foundation. 14. wish incorporate parts Library free programs whose distribution conditions incompatible , write author ask permission. software copyrighted Free Software Foundation, write Free Software Foundation; sometimes make exceptions . decision guided two goals preserving free status derivatives free software promoting sharing reuse software generally. WARRANTY 15. LIBRARY LICENSED FREE CHARGE, WARRANTY LIBRARY, EXTENT PERMITTED APPLICABLE LAW. EXCEPT OTHERWISE STATED WRITING COPYRIGHT HOLDERS /PARTIES PROVIDE LIBRARY “” WITHOUT WARRANTY KIND, EITHER EXPRESSED IMPLIED, INCLUDING, LIMITED , IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE. ENTIRE RISK QUALITY PERFORMANCE LIBRARY . LIBRARY PROVE DEFECTIVE, ASSUME COST NECESSARY SERVICING, REPAIR CORRECTION. 16. EVENT UNLESS REQUIRED APPLICABLE LAW AGREED WRITING COPYRIGHT HOLDER, PARTY MAY MODIFY /REDISTRIBUTE LIBRARY PERMITTED , LIABLE DAMAGES, INCLUDING GENERAL, SPECIAL, INCIDENTAL CONSEQUENTIAL DAMAGES ARISING USE INABILITY USE LIBRARY (INCLUDING LIMITED LOSS DATA DATA RENDERED INACCURATE LOSSES SUSTAINED THIRD PARTIES FAILURE LIBRARY OPERATE SOFTWARE), EVEN HOLDER PARTY ADVISED POSSIBILITY DAMAGES.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/LICENSE.html","id":"how-to-apply-these-terms-to-your-new-libraries","dir":"","previous_headings":"","what":"How to Apply These Terms to Your New Libraries","title":"NA","text":"develop new library, want greatest possible use public, recommend making free software everyone can redistribute change. can permitting redistribution terms (, alternatively, terms ordinary General Public License). apply terms, attach following notices library. safest attach start source file effectively convey exclusion warranty; file least “copyright” line pointer full notice found. Also add information contact electronic paper mail. also get employer (work programmer) school, , sign “copyright disclaimer” library, necessary. sample; alter names: ’s !","code":"one line to give the library's name and an idea of what it does. Copyright (C) year name of author This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. signature of Ty Coon, 1 April 1990 Ty Coon, President of Vice"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:version","dir":"Articles","previous_headings":"","what":"Version","title":"A Common Database Interface (DBI)","text":"document describes version 0.1-6 database interface API (application programming interface).","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:intro","dir":"Articles","previous_headings":"","what":"Introduction","title":"A Common Database Interface (DBI)","text":"database interface (DBI) separates connectivity DBMS “front-end” “back-end”. Applications use exposed “front-end” API. facilities communicate specific DBMS (Oracle, PostgreSQL, etc.) provided “device drivers” get invoked automatically S language evaluator. following example illustrates DBI capabilities: (first 2 expressions DBMS-specific – others independent database engine ). Individual DBI drivers need implement features list (indicate optional). Furthermore, drivers may extend core DBI facilities, suggest extensions clearly indicated documented. following elements DBI: set classes methods (Section [sec:DBIClasses]) defines operations possible defined, e.g.: connect/disconnect DBMS create execute statements DBMS extract results/output statements error/exception handling information (meta-data) database objects transaction management (optional) things left explicitly unspecified, e.g., authentication even query language, although hard avoid references SQL relational database management systems (RDBMS). Drivers Drivers collection functions implement functionality defined context specific DBMS, e.g., mSQL, Informix. Data type mappings (Section [sec:data-mappings].) Mappings conversions DBMS data types R/S objects. drivers implement “basic” primitives (see ), may chose add user-defined conversion function handle generic objects (e.g., factors, ordered factors, time series, arrays, images). Utilities (Section [sec:utilities].) facilities help details mapping identifiers S DBMS (e.g., _ illegal R/S names, . used constructing compound SQL identifiers), etc.","code":"## Choose the proper DBMS driver and connect to the server drv <- dbDriver(\"ODBC\") con <- dbConnect(drv, \"dsn\", \"usr\", \"pwd\") ## The interface can work at a higher level importing tables ## as data.frames and exporting data.frames as DBMS tables. dbListTables(con) dbListFields(con, \"quakes\") if(dbExistsTable(con, \"new_results\")) dbRemoveTable(con, \"new_results\") dbWriteTable(con, \"new_results\", new.output) ## The interface allows lower-level interface to the DBMS res <- dbSendQuery(con, paste( \"SELECT g.id, g.mirror, g.diam, e.voltage\", \"FROM geom_table as g, elec_measures as e\", \"WHERE g.id = e.id and g.mirrortype = 'inside'\", \"ORDER BY g.diam\")) out <- NULL while(!dbHasCompleted(res)){ chunk <- fetch(res, n = 10000) out <- c(out, doit(chunk)) } ## Free up resources dbClearResult(res) dbDisconnect(con) dbUnloadDriver(drv)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:DBIClasses","dir":"Articles","previous_headings":"","what":"DBI Classes and Methods","title":"A Common Database Interface (DBI)","text":"following main DBI classes. need extended individual database back-ends (Sybase, Oracle, etc.) Individual drivers need provide methods generic functions listed (methods optional indicated). Note: Although R releases prior 1.4 formal concept classes, use syntax S Version 4 classes methods (available R releases 1.4 later library methods) convey precisely DBI class hierarchy, methods, intended behavior. DBI classes DBIObject, DBIDriver, DBIConnection DBIResult. virtual classes. Drivers define new classes extend , e.g., PgSQLDriver, PgSQLConnection, . DBIObject: Virtual class1 groups DBI classes. DBIDriver: Virtual class groups DBMS drivers. DBMS driver extends class. Typically generator functions instantiate actual driver objects, e.g., PgSQL, HDF5, BerkeleyDB. DBIConnection: Virtual class encapsulates connections DBMS. DBIResult: Virtual class describes result DBMS query statement. [Q: distinguish simple result DBMS statements e.g., delete DBMS queries (.e., generate data).] methods format, print, show, dbGetInfo, summary defined (implemented DBI package) DBIObject base class, thus available implementations; individual drivers, however, free override see fit. format(x, ...): produces concise character representation (label) DBIObject x. print(x, ...)/show(x): prints one-line identification object x. summary(object, ...): produces concise description object. default method DBIObject simply invokes dbGetInfo(dbObj) prints name-value pairs one per line. Individual implementations may tailor appropriately. dbGetInfo(dbObj, ...): extracts information (meta-data) relevant DBIObject dbObj. may return list key/value pairs, individual meta-data supplied call, NULL requested meta-data available. Hint: Driver implementations may choose allow argument specify individual meta-data, e.g., dbGetInfo(drv, = max.connections). next sub-sections describe detail classes methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:DBIObject","dir":"Articles","previous_headings":"DBI Classes and Methods","what":"Class DBIObject","title":"A Common Database Interface (DBI)","text":"class simply groups DBI classes, thus extend .","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:DBIDriver","dir":"Articles","previous_headings":"DBI Classes and Methods","what":"Class DBIDriver","title":"A Common Database Interface (DBI)","text":"class identifies database management system. needs extended individual back-ends (Oracle, PostgreSQL, etc.) DBI provides generator dbDriver(driverName) simply invokes function driverName, turn instantiates corresponding driver object. DBIDriver class defines following methods: driverName: [meth:driverName] initializes driver code. name driverName refers actual generator function DBMS, e.g., RPgSQL, RODBC, HDF5. driver instance object used dbConnect (see page ) opening one possibly connections one DBMS. dbListConnections(drv, ...): list current connections handled drv driver. May NULL open connections. Drivers support multiple connections may return one open connection. dbGetInfo(dbObj, ...): returns list name-value pairs information driver. Hint: Useful entries include name: driver name (e.g., RODBC, RPgSQL); driver.version: version driver; DBI.version: version DBI driver implements, e.g., 0.1-2; client.version: client DBMS libraries (e.g., version libpq library case RPgSQL); max.connections: maximum number simultaneous connections; plus relevant information implementation, instance, driver handles upper/lower case identifiers. dbUnloadDriver(driverName) (optional): frees resources (local remote) used driver. Returns logical indicate succeeded .","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:DBIConnection","dir":"Articles","previous_headings":"DBI Classes and Methods","what":"Class DBIConnection","title":"A Common Database Interface (DBI)","text":"virtual class encapsulates connection DBMS, provides access dynamic queries, result sets, DBMS session management (transactions), etc. Note: Individual drivers free implement single multiple simultaneous connections. methods defined DBIConnection class include: dbConnect(drv, ...): [meth:dbConnect] creates opens connection database implemented driver drv (see Section [sec:DBIDriver]). driver define arguments required, e.g., dbname dsn database name, user, password. returns object extends DBIConnection driver-specific manner (e.g., MySQL implementation create object class MySQLConnection extends DBIConnection). dbDisconnect(conn, ...): closes connection, discards pending work, frees resources (e.g., memory, sockets). Returns logical indicating whether succeeded . dbSendQuery(conn, statement, ...): submits one statement DBMS. returns DBIResult object. object needed fetching data case statement generates output (see fetch page ), may used querying state operation; see dbGetInfo meta-data methods page . dbGetQuery(conn, statement, ...): submit, execute, extract output one operation. resulting object may data.frame statement generates output. Otherwise return value logical indicating whether query succeeded . dbGetException(conn, ...): returns list elements errNum errMsg status last DBMS statement sent given connection (information may also provided dbGetInfo meta-data function conn object. Hint: ANSI SQL-92 defines status code status message return members list. dbGetInfo(dbObj, ...): returns list name-value pairs describing state connection; may return one meta-data, actual driver method allows specify individual pieces meta-data (e.g., maximum number open results/cursors). Hint: Useful entries include dbname: name database use; db.version: DBMS server version (e.g., “Oracle 8.1.7 Solaris”; host: host database server resides; user: user name; password: password (safe?); plus arguments related connection (e.g., thread id, socket TCP connection type). dbListResults(conn, ...): list DBIResult objects currently active connection conn. May NULL result set active conn. Drivers implement one result set per connection return one object (need wrap list). Note: following convenience methods simplify import/export (mainly) data.frames. first five methods implement core methods needed attach remote DBMS S search path. (details, see Chambers (1991, 1998).) Hint: relational DBMS methods may easily implemented using core DBI methods dbConnect, dbSendQuery, fetch, due SQL reflectance (.e., one easily gets meta-data querying appropriate tables RDBMS). dbListTables(conn, ...): returns character vector (possibly zero-length) object (table) names available conn connection. dbReadTable(conn, name, ...): imports data stored remotely table name connection conn. Use field row.names row.names attribute output data.frame. Returns data.frame. [Q: spell row.names created? E.g., use field (unique values) row.names? Also, dbReadTable reproduce data.frame exported dbWriteTable?] dbWriteTable(conn, name, value, ...): write object value (perhaps coercing data.frame) remote object name connection conn. Returns logical indicating whether operation succeeded . dbExistsTable(conn, name, ...): remote object name exist conn? Returns logical. dbRemoveTable(conn, name, ...): removes remote object name connection conn. Returns logical indicating whether operation succeeded . dbListFields(conn, name, ...): returns character vector listing field names remote table name connection conn (see dbColumnInfo() extracting data type table). Note: following methods deal transactions stored procedures. functions optional. dbCommit(conn, ...)(optional): commits pending transaction connection returns TRUE FALSE depending whether operation succeeded . dbRollback(conn, ...)(optional): undoes current transaction connection returns TRUE FALSE depending whether operation succeeded . dbCallProc(conn, storedProc, ...)(optional): invokes stored procedure DBMS returns DBIResult object. [Stored procedures part ANSI SQL-92 standard vary substantially one RDBMS another.] Deprecated since 2014: recommended way calling stored procedure now dbGetQuery result set returned dbExecute data manipulation cases return result set.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:DBIResult","dir":"Articles","previous_headings":"DBI Classes and Methods","what":"Class DBIResult","title":"A Common Database Interface (DBI)","text":"virtual class describes result state execution DBMS statement (statement, query non-query). result set res keeps track whether statement produces output R/S, many rows affected operation, many rows fetched (statement query), whether rows fetch, etc. Note: Individual drivers free allow single multiple active results per connection. [Q: distinguish results return data return data?] class DBIResult defines following methods: fetch(res, n, ...): [meth:fetch] fetches next n elements (rows) result set res return data.frame. value n=-1 interpreted “return elements/rows”. dbClearResult(res, ...): flushes pending data frees resources (local remote) used object res sides connection. Returns logical indicating success . dbGetInfo(dbObj, ...): returns name-value list state result set. Hint: Useful entries include statement: character string representation statement executed; rows.affected: number affected records (changed, deleted, inserted, extracted); row.count: number rows fetched far; .completed: statement (query) finished? .select: logical describing whether statement generates output; plus relevant driver-specific meta-data. dbColumnInfo(res, ...): produces data.frame describes output query. data.frame many rows output fields result set, column data.frame describe aspect result set field (field name, type, etc.) Hint: data.frame columns include field.name: DBMS field label; field.type: DBMS field type (implementation-specific); data.type: corresponding R/S data type, e.g., integer; precision/scale: (ODBC terminology), display width number decimal digits, respectively; nullable: whether corresponding field may contain (DBMS) NULL values; plus driver-specific information. dbSetDataMappings(flds, ...)(optional): defines conversion internal DBMS data types R/S classes. expect default mappings (see Section [sec:data-mappings]) far common ones, users need control may specify class generator individual fields result set. [topic needs discussion.] Note: following convenience methods extract information result object (may implemented invoking dbGetInfo appropriate arguments). dbGetStatement(res, ...)(optional): returns DBMS statement (character string) associated result res. dbGetRowsAffected(res, ...)(optional): returns number rows affected executed statement (number records deleted, modified, extracted, etc.) dbHasCompleted(res, ...)(optional): returns logical indicates whether operation completed (e.g., records fetched?). dbGetRowCount(res, ...)(optional): returns number rows fetched far.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:data-mappings","dir":"Articles","previous_headings":"","what":"Data Type Mappings","title":"A Common Database Interface (DBI)","text":"data types supported databases different data types R S, mapping “primitive” types straightforward: many fixed varying length character types mapped R/S character. Fixed-precision (non-IEEE) numbers mapped either doubles (numeric) long (integer). Notice many DBMS follow -called IEEE arithmetic, potential problems /overflows loss precision, given R/S primitive types much identify situations warn application (?). default dates date-time objects mapped character using appropriate TO_CHAR function DBMS (take care locale information). RDBMS support type CURRENCY MONEY mapped numeric (potential round errors). Large objects (character, binary, file, etc.) also need mapped. User-defined functions may specified actual conversion (done inter-systems packages 2). Specifying user-defined conversion functions still needs defined.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:utilities","dir":"Articles","previous_headings":"","what":"Utilities","title":"A Common Database Interface (DBI)","text":"core DBI implementation make available drivers common basic utilities. instance: dbGetDBIVersion: returns version currently attached DBI string. dbDataType(dbObj, obj, ...): returns string (approximately) appropriate data type R/S object obj. DBI can implement following ANSI-92 standard, individual drivers may want/need extend make use DBMS-specific types. make.db.names(dbObj, snames, ...): maps R/S names (identifiers) SQL identifiers replacing illegal characters (.) legal SQL _. SQLKeywords(dbObj, ...): returns character vector SQL keywords (reserved words). default method returns list .SQL92Keywords, drivers update vector DBMS-specific additional reserved words. isSQLKeyword(dbObj, name, ...): element character vector name determine whether SQL keyword, reported generic function SQLKeywords. Returns logical vector parallel input object name.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:open-issues","dir":"Articles","previous_headings":"","what":"Open Issues and Limitations","title":"A Common Database Interface (DBI)","text":"number issues limitations current DBI conscientiously address interest simplicity. list important ones. Non-SQL: realistic attempt encompass non-relational databases, like HDF5, Berkeley DB, etc.? Security: allowing users specify passwords R/S scripts may unacceptable applications. need consider alternatives users store authentication files (perhaps similar ODBC’s odbc.ini) stringent permissions. Exceptions: exception mechanism bit simple, provide information problems stem DBMS interface . instance, /overflow loss precision move numeric data DBMS limited primitives R/S. Asynchronous communication: DBMS support synchronous asynchronous communications, allowing applications submit query proceed database server process query. application notified (may need poll server) query completed. large computations, useful, DBI need specify interrupt server (necessary) plus details. Also, DBMS require applications use threads implement asynchronous communication, something neither R S-Plus currently addresses. SQL scripts: DBI defines execute one SQL statement time, forcing users split SQL scripts individual statements. need mechanism users can submit SQL scripts possibly generate multiple result sets; case may need introduce new methods loop multiple results (similar Python’s nextResultSet). BLOBS/CLOBS: large objects (character binary) present challenges R S-Plus. becoming common store images, sounds, data types binary objects DBMS, can principle quite large. SQL-92 ANSI standard allows 2 gigabytes objects. need carefully plan deal binary objects. Transactions: transaction management fully described. Additional methods: need additional methods? (e.g., dbListDatabases(conn), dbListTableIndices(conn, name), list available drivers?) Bind variables: interface heavily biased towards queries, opposed general purpose database development. particular made attempt define “bind variables”; mechanism contents R/S objects implicitly moved database SQL execution. instance, following embedded SQL statement take vector sampleEmployee iterate elements get result. Perhaps DBI point future implement feature.","code":"/* SQL */ SELECT * from emp_table where emp_id = :sampleEmployee"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-1.html","id":"sec:resources","dir":"Articles","previous_headings":"","what":"Resources","title":"A Common Database Interface (DBI)","text":"idea common interface databases successfully implemented various environments, instance: Java’s Database Connectivity (JDBC) (www.javasoft.com). C Open Database Connectivity (ODBC) (www.unixodbc.org). Python’s Database Application Programming Interface (www.python.org). Perl’s Database Interface (dbi.perl.org).","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"who-this-tutorial-is-for","dir":"Articles","previous_headings":"","what":"Who this tutorial is for","title":"Advanced DBI Usage","text":"tutorial need use richer set SQL features data manipulation queries, parameterized queries queries performed using SQL’s transaction features. See vignette(\"DBI\", package = \"DBI\") basic tutorial covering connecting DBMS executing simple queries.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"how-to-run-more-complex-queries-using-dbi","dir":"Articles","previous_headings":"","what":"How to run more complex queries using DBI","title":"Advanced DBI Usage","text":"dbGetQuery() works calling number functions behind scenes. need control can manually build query, retrieve results selected rate, release resources involved calling functions. functions : dbSendQuery() sends SQL query DBMS returns result object. query limited SELECT statements. want send statements, INSERT, UPDATE, DELETE, etc, use dbSendStatement(). dbFetch() called result object returned dbSendQuery(). also accepts argument specifying number rows returned, e.g. n = 200. want fetch rows, use n = -1. dbClearResult() called finished retrieving data. releases resources associated result object.","code":"library(DBI) con <- dbConnect( RMariaDB::MariaDB(), host = \"db.relational-data.org\", port = 3306, username = \"guest\", password = \"relational\", dbname = \"sakila\" ) res <- dbSendQuery(con, \"SELECT * FROM film WHERE rating = 'G'\") df <- dbFetch(res, n = 3) dbClearResult(res) head(df, 3) ## film_id title ## 1 2 ACE GOLDFINGER ## 2 4 AFFAIR PREJUDICE ## 3 5 AFRICAN EGG ## description ## 1 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 2 A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank ## 3 A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico ## release_year language_id original_language_id rental_duration rental_rate ## 1 2006 1 NA 3 4.99 ## 2 2006 1 NA 5 2.99 ## 3 2006 1 NA 6 2.99 ## length replacement_cost rating special_features ## 1 48 12.99 G Trailers,Deleted Scenes ## 2 117 26.99 G Commentaries,Behind the Scenes ## 3 130 22.99 G Deleted Scenes ## last_update ## 1 2006-02-15 04:03:42 ## 2 2006-02-15 04:03:42 ## 3 2006-02-15 04:03:42"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"how-to-read-part-of-a-table-from-a-database","dir":"Articles","previous_headings":"","what":"How to read part of a table from a database","title":"Advanced DBI Usage","text":"dataset large may want fetch limited number rows time. demonstrated , can accomplished using loop function dbHasCompleted() used check ongoing rows, dbFetch() used n = X argument, specifying many rows return iteration. , call dbClearResult() end release resources.","code":"res <- dbSendQuery(con, \"SELECT * FROM film\") while (!dbHasCompleted(res)) { chunk <- dbFetch(res, n = 300) print(nrow(chunk)) } ## [1] 300 ## [1] 300 ## [1] 300 ## [1] 100 dbClearResult(res)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"how-to-use-parameters-safely-in-sql-queries","dir":"Articles","previous_headings":"","what":"How to use parameters (safely) in SQL queries","title":"Advanced DBI Usage","text":"dbSendQuery() can used parameterized SQL queries. DBI supports two ways avoid SQL injection attacks user-supplied parameters: quoting parameterized queries.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"quoting","dir":"Articles","previous_headings":"How to use parameters (safely) in SQL queries","what":"Quoting","title":"Advanced DBI Usage","text":"Quoting parameter values performed using function dbQuoteLiteral(), supports many R data types, including date time.1 cases users may supplying table column names use query data retrieval, names identifiers must also escaped. may DBMS-specific rules escaping identifiers, DBI provides function dbQuoteIdentifier() generate safe string representation. result can using glue::glue_sql(). performs safe quoting variable R statement appearing braces within query string.","code":"safe_id <- dbQuoteIdentifier(con, \"rating\") safe_param <- dbQuoteLiteral(con, \"G\") query <- paste0(\"SELECT title, \", safe_id, \" FROM film WHERE \", safe_id, \" = \", safe_param) query ## [1] \"SELECT title, `rating` FROM film WHERE `rating` = 'G'\" res <- dbSendQuery(con, query) dbFetch(res) ## title rating ## 1 ACE GOLDFINGER G ## 2 AFFAIR PREJUDICE G ## 3 AFRICAN EGG G ## Showing 3 out of 178 rows. dbClearResult(res) id <- \"rating\" param <- \"G\" query <- glue::glue_sql(\"SELECT title, {`id`} FROM film WHERE {`id`} = {param}\", .con = con) df <- dbGetQuery(con, query) head(df, 3) ## title rating ## 1 ACE GOLDFINGER G ## 2 AFFAIR PREJUDICE G ## 3 AFRICAN EGG G"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"parameterized-queries","dir":"Articles","previous_headings":"How to use parameters (safely) in SQL queries","what":"Parameterized queries","title":"Advanced DBI Usage","text":"Rather performing parameter substitution , can push DBMS including placeholders query. Different DBMS use different placeholder schemes, DBI passes SQL expression unchanged. MariaDB uses question mark (?) placeholder expects unnamed list parameter values. DBMS may use named parameters. recommend consulting documentation DBMS using. example, web search “mariadb parameterized queries” leads documentation PREPARE statement mentions: Within statement, “?” characters can used parameter markers indicate data values bound query later execute . Currently list placeholder scheme particular DBMS supports. Placeholders work literal values. parts query, e.g. table column identifiers, still need quoted dbQuoteIdentifier(). single set parameters, params argument dbSendQuery() dbGetQuery() can used. takes list members substituted order placeholders within query. example query using multiple placeholders MariaDB driver. placeholders supplied list values ordered match position placeholders query. wish perform query different sets parameter values, dbBind() used. two ways use dbBind(). Firstly, can used multiple times query. Secondly, dbBind() can used execute statement multiple values . Use list vectors query multiple parameters: Always disconnect database done.","code":"params <- list(\"G\") safe_id <- dbQuoteIdentifier(con, \"rating\") query <- paste0(\"SELECT * FROM film WHERE \", safe_id, \" = ?\") query ## [1] \"SELECT * FROM film WHERE `rating` = ?\" res <- dbSendQuery(con, query, params = params) dbFetch(res, n = 3) ## film_id title ## 1 2 ACE GOLDFINGER ## 2 4 AFFAIR PREJUDICE ## 3 5 AFRICAN EGG ## description ## 1 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 2 A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank ## 3 A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico ## release_year language_id original_language_id rental_duration rental_rate ## 1 2006 1 NA 3 4.99 ## 2 2006 1 NA 5 2.99 ## 3 2006 1 NA 6 2.99 ## length replacement_cost rating special_features ## 1 48 12.99 G Trailers,Deleted Scenes ## 2 117 26.99 G Commentaries,Behind the Scenes ## 3 130 22.99 G Deleted Scenes ## last_update ## 1 2006-02-15 04:03:42 ## 2 2006-02-15 04:03:42 ## 3 2006-02-15 04:03:42 dbClearResult(res) q_params <- list(\"G\", 90) query <- \"SELECT title, rating, length FROM film WHERE rating = ? AND length >= ?\" res <- dbSendQuery(con, query, params = q_params) dbFetch(res, n = 3) ## title rating length ## 1 AFFAIR PREJUDICE G 117 ## 2 AFRICAN EGG G 130 ## 3 ALAMO VIDEOTAPE G 126 dbClearResult(res) res <- dbSendQuery(con, \"SELECT * FROM film WHERE rating = ?\") dbBind(res, list(\"G\")) dbFetch(res, n = 3) ## film_id title ## 1 2 ACE GOLDFINGER ## 2 4 AFFAIR PREJUDICE ## 3 5 AFRICAN EGG ## description ## 1 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 2 A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank ## 3 A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico ## release_year language_id original_language_id rental_duration rental_rate ## 1 2006 1 NA 3 4.99 ## 2 2006 1 NA 5 2.99 ## 3 2006 1 NA 6 2.99 ## length replacement_cost rating special_features ## 1 48 12.99 G Trailers,Deleted Scenes ## 2 117 26.99 G Commentaries,Behind the Scenes ## 3 130 22.99 G Deleted Scenes ## last_update ## 1 2006-02-15 04:03:42 ## 2 2006-02-15 04:03:42 ## 3 2006-02-15 04:03:42 dbBind(res, list(\"PG\")) dbFetch(res, n = 3) ## film_id title ## 1 1 ACADEMY DINOSAUR ## 2 6 AGENT TRUMAN ## 3 12 ALASKA PHANTOM ## description ## 1 A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies ## 2 A Intrepid Panorama of a Robot And a Boy who must Escape a Sumo Wrestler in Ancient China ## 3 A Fanciful Saga of a Hunter And a Pastry Chef who must Vanquish a Boy in Australia ## release_year language_id original_language_id rental_duration rental_rate ## 1 2006 1 NA 6 0.99 ## 2 2006 1 NA 3 2.99 ## 3 2006 1 NA 6 0.99 ## length replacement_cost rating special_features ## 1 86 20.99 PG Deleted Scenes,Behind the Scenes ## 2 169 17.99 PG Deleted Scenes ## 3 136 22.99 PG Commentaries,Deleted Scenes ## last_update ## 1 2006-02-15 04:03:42 ## 2 2006-02-15 04:03:42 ## 3 2006-02-15 04:03:42 dbClearResult(res) res <- dbSendQuery(con, \"SELECT * FROM film WHERE rating = ?\") dbBind(res, list(c(\"G\", \"PG\"))) dbFetch(res, n = 3) ## film_id title ## 1 2 ACE GOLDFINGER ## 2 4 AFFAIR PREJUDICE ## 3 5 AFRICAN EGG ## description ## 1 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 2 A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank ## 3 A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico ## release_year language_id original_language_id rental_duration rental_rate ## 1 2006 1 NA 3 4.99 ## 2 2006 1 NA 5 2.99 ## 3 2006 1 NA 6 2.99 ## length replacement_cost rating special_features ## 1 48 12.99 G Trailers,Deleted Scenes ## 2 117 26.99 G Commentaries,Behind the Scenes ## 3 130 22.99 G Deleted Scenes ## last_update ## 1 2006-02-15 04:03:42 ## 2 2006-02-15 04:03:42 ## 3 2006-02-15 04:03:42 dbClearResult(res) q_params <- list(c(\"G\", \"PG\"), c(90, 120)) query <- \"SELECT title, rating, length FROM film WHERE rating = ? AND length >= ?\" res <- dbSendQuery(con, query, params = q_params) dbFetch(res, n = 3) ## title rating length ## 1 AFFAIR PREJUDICE G 117 ## 2 AFRICAN EGG G 130 ## 3 ALAMO VIDEOTAPE G 126 dbClearResult(res) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"sql-data-manipulation---update-delete-and-friends","dir":"Articles","previous_headings":"","what":"SQL data manipulation - UPDATE, DELETE and friends","title":"Advanced DBI Usage","text":"SQL queries affect underlying database, UPDATE, DELETE, INSERT , DROP TABLE, DBI provides two functions. dbExecute() passes SQL statement DBMS execution returns number rows affected. dbSendStatement() performs manner, returns result object. Call dbGetRowsAffected() result object get count affected rows. need call dbClearResult() result object afterwards release resources. actuality, dbExecute() convenience function calls dbSendStatement(), dbGetRowsAffected(), dbClearResult(). can use functions need control query process. subsequent examples use -memory SQL database provided RSQLite::SQLite(), remote database used examples allow writing. forget disconnect database end.","code":"library(DBI) con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cars\", head(cars, 3)) dbExecute( con, \"INSERT INTO cars (speed, dist) VALUES (1, 1), (2, 2), (3, 3)\" ) ## [1] 3 rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (4, 4), (5, 5), (6, 6)\" ) dbGetRowsAffected(rs) ## [1] 3 dbClearResult(rs) dbReadTable(con, \"cars\") ## speed dist ## 1 4 2 ## 2 4 10 ## 3 7 4 ## Showing 3 out of 9 rows. dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"sql-transactions-with-dbi","dir":"Articles","previous_headings":"","what":"SQL transactions with DBI","title":"Advanced DBI Usage","text":"DBI allows group multiple queries single atomic transaction. Transactions initiated dbBegin() either made persistent dbCommit() undone dbRollback(). example updates two tables ensures either tables updated, changes persisted database error thrown. withdrawing 300 credits, cash increased account decreased amount. transaction ensures either operations succeed, change occurs. can roll back changes manually necessary. forget call dbRollback() case error, otherwise transaction remains open indefinitely. dbWithTransaction() simplifies using transactions. Pass connection code want run transaction. execute code call dbCommit() success call dbRollback() error thrown. usual, forget disconnect database done.","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cash\", data.frame(amount = 100)) dbWriteTable(con, \"account\", data.frame(amount = 2000)) withdraw <- function(amount) { # All operations must be carried out as logical unit: dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(amount)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(amount)) } withdraw_transacted <- function(amount) { # Ensure atomicity dbBegin(con) # Perform operation withdraw(amount) # Persist results dbCommit(con) } withdraw_transacted(300) dbReadTable(con, \"cash\") ## amount ## 1 400 dbReadTable(con, \"account\") ## amount ## 1 1700 withdraw_if_funds <- function(amount) { dbBegin(con) withdraw(amount) # Rolling back after detecting negative value on account: if (dbReadTable(con, \"account\")$amount >= 0) { dbCommit(con) TRUE } else { message(\"Insufficient funds\") dbRollback(con) FALSE } } withdraw_if_funds(5000) ## Insufficient funds ## [1] FALSE dbReadTable(con, \"cash\") ## amount ## 1 400 dbReadTable(con, \"account\") ## amount ## 1 1700 withdraw_safely <- function(amount) { dbWithTransaction(con, { withdraw(amount) if (dbReadTable(con, \"account\")$amount < 0) { stop(\"Error: insufficient funds\", call. = FALSE) } }) } withdraw_safely(5000) ## Error: Error: insufficient funds dbReadTable(con, \"cash\") ## amount ## 1 400 dbReadTable(con, \"account\") ## amount ## 1 1700 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-advanced.html","id":"conclusion","dir":"Articles","previous_headings":"","what":"Conclusion","title":"Advanced DBI Usage","text":"concludes major features DBI. details library functions covered tutorial vignette(\"DBI\", package = \"DBI\") introductory tutorial see DBI specification vignette(\"spec\", package = \"DBI\"). data manipulation library works higher level abstraction, check dplyr. grammar data manipulation can work local dataframes remote databases uses DBI hood.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"who-this-tutorial-is-for","dir":"Articles","previous_headings":"","what":"Who this tutorial is for","title":"Using DBI with Arrow","text":"tutorial want leverage Apache Arrow accessing manipulating data databases. See vignette(\"DBI\", package = \"DBI\") vignette(\"DBI-advanced\", package = \"DBI\") tutorials accessing data using R’s data frames instead Arrow’s structures.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"rationale","dir":"Articles","previous_headings":"","what":"Rationale","title":"Using DBI with Arrow","text":"Apache Arrow cross-language development platform -memory analytics, suitable large huge data, support --memory operation. Arrow also data exchange format, data types covered Arrow align well data types supported SQL databases. DBI 1.2.0 introduced support Arrow format exchanging data R databases. aim : accelerate data retrieval loading, using fewer costly data conversions; better support reading summarizing data database larger memory; provide better type fidelity workflows centered around Arrow. allows existing code used Arrow, allows new code written efficient flexible code uses R’s data frames. interface built around {nanoarrow} R package, nanoarrow::as_nanoarrow_array nanoarrow::as_nanoarrow_array_stream fundamental data structures.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"new-classes-and-generics","dir":"Articles","previous_headings":"","what":"New classes and generics","title":"Using DBI with Arrow","text":"DBI 1.2.0 introduces new classes generics working Arrow data: dbReadTableArrow() dbWriteTableArrow() dbCreateTableArrow() dbAppendTableArrow() dbGetQueryArrow() dbSendQueryArrow() dbBindArrow() dbFetchArrow() dbFetchArrowChunk() DBIResultArrow-class DBIResultArrowDefault-class Compatibility important DBI, implementing new generics classes greatly reduces risk breaking existing code. DBI package comes fully functional fallback implementation existing DBI backends. fallback improving performance, allows existing code used Arrow switching backend native Arrow support. Backends native support, like adbi package, implement new generics classes direct support improved performance. remainder tutorial, demonstrate new generics classes using RSQLite package. SQLite -memory database, code need database server installed running.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"prepare","dir":"Articles","previous_headings":"","what":"Prepare","title":"Using DBI with Arrow","text":"start setting database connection creating table data, using original dbWriteTable() method.","code":"library(DBI) con <- dbConnect(RSQLite::SQLite()) data <- data.frame( a = 1:3, b = 4.5, c = \"five\" ) dbWriteTable(con, \"tbl\", data)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"read-all-rows-from-a-table","dir":"Articles","previous_headings":"","what":"Read all rows from a table","title":"Using DBI with Arrow","text":"dbReadTableArrow() method reads rows table Arrow stream, similarly dbReadTable(). Arrow objects implement .data.frame() method, can convert stream data frame.","code":"stream <- dbReadTableArrow(con, \"tbl\") stream ## > ## $ get_schema:function () ## $ get_next :function (schema = x$get_schema(), validate = TRUE) ## $ release :function () as.data.frame(stream) ## a b c ## 1 1 4.5 five ## 2 2 4.5 five ## 3 3 4.5 five"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"run-queries","dir":"Articles","previous_headings":"","what":"Run queries","title":"Using DBI with Arrow","text":"dbGetQueryArrow() method runs query returns result Arrow stream. stream can turned arrow::RecordBatchReader object processed , without bringing R.","code":"stream <- dbGetQueryArrow(con, \"SELECT COUNT(*) AS n FROM tbl WHERE a < 3\") stream ## > ## $ get_schema:function () ## $ get_next :function (schema = x$get_schema(), validate = TRUE) ## $ release :function () path <- tempfile(fileext = \".parquet\") arrow::write_parquet(arrow::as_record_batch_reader(stream), path) arrow::read_parquet(path) ## n ## 1 2"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"prepared-queries","dir":"Articles","previous_headings":"","what":"Prepared queries","title":"Using DBI with Arrow","text":"dbGetQueryArrow() method supports prepared queries, using params argument accepts data frame list.","code":"params <- data.frame(a = 3L) stream <- dbGetQueryArrow(con, \"SELECT $a AS batch, * FROM tbl WHERE a < $a\", params = params) as.data.frame(stream) ## batch a b c ## 1 3 1 4.5 five ## 2 3 2 4.5 five params <- data.frame(a = c(2L, 4L)) # Equivalent to dbBind() stream <- dbGetQueryArrow(con, \"SELECT $a AS batch, * FROM tbl WHERE a < $a\", params = params) as.data.frame(stream) ## batch a b c ## 1 2 1 4.5 five ## 2 4 1 4.5 five ## 3 4 2 4.5 five ## 4 4 3 4.5 five"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"manual-flow","dir":"Articles","previous_headings":"","what":"Manual flow","title":"Using DBI with Arrow","text":"manual flow, use dbSendQueryArrow() send query database, dbFetchArrow() fetch result. also allows using new dbBindArrow() method bind data Arrow format prepared query. Result objects must cleared dbClearResult().","code":"rs <- dbSendQueryArrow(con, \"SELECT $a AS batch, * FROM tbl WHERE a < $a\") in_arrow <- nanoarrow::as_nanoarrow_array(data.frame(a = 1L)) dbBindArrow(rs, in_arrow) as.data.frame(dbFetchArrow(rs)) ## [1] batch a b c ## <0 rows> (or 0-length row.names) in_arrow <- nanoarrow::as_nanoarrow_array(data.frame(a = 2L)) dbBindArrow(rs, in_arrow) as.data.frame(dbFetchArrow(rs)) ## batch a b c ## 1 2 1 4.5 five in_arrow <- nanoarrow::as_nanoarrow_array(data.frame(a = 3L)) dbBindArrow(rs, in_arrow) as.data.frame(dbFetchArrow(rs)) ## batch a b c ## 1 3 1 4.5 five ## 2 3 2 4.5 five in_arrow <- nanoarrow::as_nanoarrow_array(data.frame(a = 1:4L)) dbBindArrow(rs, in_arrow) as.data.frame(dbFetchArrow(rs)) ## batch a b c ## 1 2 1 4.5 five ## 2 3 1 4.5 five ## 3 3 2 4.5 five ## 4 4 1 4.5 five ## 5 4 2 4.5 five ## 6 4 3 4.5 five dbClearResult(rs)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"writing-data","dir":"Articles","previous_headings":"","what":"Writing data","title":"Using DBI with Arrow","text":"Streams returned dbGetQueryArrow() dbReadTableArrow() can written table using dbWriteTableArrow().","code":"stream <- dbGetQueryArrow(con, \"SELECT * FROM tbl WHERE a < 3\") dbWriteTableArrow(con, \"tbl_new\", stream) dbReadTable(con, \"tbl_new\") ## a b c ## 1 1 4.5 five ## 2 2 4.5 five"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"appending-data","dir":"Articles","previous_headings":"","what":"Appending data","title":"Using DBI with Arrow","text":"control writing process, use dbCreateTableArrow() dbAppendTableArrow().","code":"stream <- dbGetQueryArrow(con, \"SELECT * FROM tbl WHERE a < 3\") dbCreateTableArrow(con, \"tbl_split\", stream) dbAppendTableArrow(con, \"tbl_split\", stream) ## [1] 2 stream <- dbGetQueryArrow(con, \"SELECT * FROM tbl WHERE a >= 3\") dbAppendTableArrow(con, \"tbl_split\", stream) ## [1] 1 dbReadTable(con, \"tbl_split\") ## a b c ## 1 1 4.5 five ## 2 2 4.5 five ## 3 3 4.5 five"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-arrow.html","id":"conclusion","dir":"Articles","previous_headings":"","what":"Conclusion","title":"Using DBI with Arrow","text":"forget disconnect database done. concludes major features DBI’s new Arrow interface. details library functions covered tutorial see DBI specification vignette(\"spec\", package = \"DBI\"). See adbi package backend native Arrow support, nanoarrow arrow packages work Arrow format.","code":"dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:distr","dir":"Articles","previous_headings":"","what":"Computing with Distributed Data","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"data analysts, increasingly faced challenge larger data sources distributed machines locations; data sources reside relational database management systems (RDBMS). relational databases represent mature client-server distributed technology analysts exploiting ’ve done past. relational technology provides well-defined standard, ANSI SQL-92 X/Open CAE Specification: SQL RDA (1994), defining manipulating data highly optimized fashion virtually application. contrast, S Splus provided somewhat limited tools coping challenges larger distributed data sets (Splus provide import function import databases, quite limited terms SQL facilities). R community resourceful developed number good libraries connecting mSQL, MySQL, PostgreSQL, ODBC; library, however, defined interface database engine bit differently. think everybody’s advantage coordinate definition common interface, effort unlike taken Python Perl communities. goal common, seamless access distributed data modest one evolution towards fully distributed computing environment. recognize greater goal distributed computing means fully integrate diverse systems – just databases – truly flexible analysis environment. Good connectivity databases, however, immediate necessity practical terms means help us transition monolithic, self-contained systems computations, data, can carried parallel wide number computers /systems Temple Lang (2000). Issues reliability, security, location transparency, persistence, etc., new us working distributed data may provide gradual change ease ultimate goal full distributed computing.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:rs-dbi","dir":"Articles","previous_headings":"","what":"A Common Interface","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"believe common interface databases can help users easily access data stored RDBMS. common interface describe, uniform way, connect RDBMS, extract meta-data (list available databases, tables, etc.) well uniform way execute SQL statements import output R S. current emphasis querying databases much full low-level interface database development JDBC ODBC, unlike , want approach interface “whole-object” perspective J. M. Chambers (1998) natural R/S Python – instance, fetching fields records simultaneously single object. basic idea split interface front-end consisting classes generic functions users invoke back-end set database-specific classes methods implement actual communication. (well-known pattern software engineering, another good verbatim device-independent graphics R/S graphics functions produce similar output variety different devices, X displays, Postscript, etc.) following verbatim shows front-end: scripts work RDBMS (say, MySQL) replacing first line ","code":"> mgr <- dbManager(\"Oracle\") > con <- dbConnect(mgr, user = \"user\", passwd = \"passwd\") > rs <- dbExecStatement(con, \"select fld1, fld2, fld3 from MY_TABLE\") > tbls <- fetch(rs, n = 100) > hasCompleted(rs) [1] T > close(rs) > rs <- dbExecStatement(con, \"select id_name, q25, q50 from liv2\") > res <- fetch(rs) > getRowCount(rs) [1] 73 > close(con) > mgr <- dbManager(\"MySQL\")"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:rs-dbi-classes","dir":"Articles","previous_headings":"A Common Interface","what":"Interface Classes","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"following main RS-DBI classes. need extended individual database back-ends (MySQL, Oracle, etc.) dbManager Virtual class1 extended actual database managers, e.g., Oracle, MySQL, Informix. dbConnection Virtual class captures connection database instance2. dbResult Virtual class describes result SQL statement. dbResultSet Virtual class, extends dbResult fully describe output statements produce output records, .e., SELECT (SELECT-like) SQL statement. classes implement methods show, describe, getInfo: show (print R) prints one-line identification object. describe prints short summary meta-data specified object (like summary R/S). getInfo takes object one classes string specifying meta-data item, returns corresponding information (NULL unavailable). reason implement meta-data getInfo way simplify writing database back-ends. don’t want overwhelm developers drivers (, likely) hundreds methods case JDBC. addition, following methods also implemented: getDatabases lists available databases known dbManager. getTables lists tables database. getTableFields lists fields table database. getTableIndices lists indices defined table database. methods may implemented using appropriate getInfo method . next sections describe detail classes methods.","code":"> mgr <- dbManager(\"MySQL\") > getInfo(mgr, \"version\") > con <- dbConnect(mgr, ...) > getInfo(con, \"type\")"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:dbManager","dir":"Articles","previous_headings":"A Common Interface > Interface Classes","what":"Class dbManager","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"class identifies relational database management system. needs extended individual back-ends (Oracle, PostgreSQL, etc.) dbManager class defines following methods: load initializes driver code. suggest generator, dbManager(driver), automatically load driver. unload releases whatever resources driver using. getVersion returns version RS-DBI currently implemented, plus relevant information implementation RDBMS used.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:dbConnection","dir":"Articles","previous_headings":"A Common Interface > Interface Classes","what":"Class dbConnection","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"virtual class captures connection RDBMS, provides access dynamic SQL, result sets, RDBMS session management (transactions), etc. Note dbManager may may allow multiple simultaneous connections. methods defines include: dbConnect opens connection database dbname. likely arguments include host, user, password. returns object extends dbConnection driver-specific manner (e.g., MySQL implementation creates connection class MySQLConnection extends dbConnection). Note separate steps connecting RDBMS opening database (.e., opening instance). simplicity 2 steps method. user needs open another instance RDBMS, just open new connection. close closes connection discards pending work. dbExecStatement submits one SQL statement. returns dbResult object, case SELECT statement, object also inherits dbResultSet. dbResultSet object needed fetching output rows SELECT statements. result non-SELECT statement (e.g., UPDATE, DELETE, CREATE, ALTER, …) defined number rows affected (seems common among RDBMS). commit commits pending transaction (optional). rollback undoes current transaction (optional). callProc invokes stored procedure RDBMS (tentative). Stored procedures part ANSI SQL-92 standard possibly vary substantially one RDBMS another. instance, Oracle seems fairly decent implementation stored procedures, MySQL currently support . dbExec submit SQL “script” (multiple statements). May implemented looping dbExecStatement. dbNextResultSet running SQL scripts (multiple statements), closes current result set dbConnection, executes next statement returns result set.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:dbResult","dir":"Articles","previous_headings":"A Common Interface > Interface Classes","what":"Class dbResult","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"virtual class describes result SQL statement (statement) state operation. Non-query statements (e.g., CREATE, UPDATE, DELETE) set “completed” state 1, SELECT statements 0. Error conditions set slot negative number. dbResult class defines following methods: getStatement returns SQL statement associated result set. getDBConnection returns dbConnection associated result set. getRowsAffected returns number rows affected operation. hasCompleted operation completed? SELECT’s, instance, completed output rows fetched. getException returns status last SQL statement given connection list two members, status code status description.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:dbResultSet","dir":"Articles","previous_headings":"A Common Interface > Interface Classes","what":"Class dbResultSet","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"virtual class extends dbResult, describes additional information result SELECT statement state operation. completed state set 0 long pending rows fetch. dbResultSet class defines following additional methods: getRowCount returns number rows fetched far. getNullOk returns logical vector many elements fields result set, element describing whether corresponding field accepts NULL values. getFields describes SELECTed fields. description includes field names, RDBMS internal data types, internal length, internal precision scale, null flag (.e., column allows NULL’s), corresponding S classes (can -ridden user-provided classes). current MySQL Oracle implementations define dbResultSet named list following elements: connection: connection object associated result set; statement: string SQL statement processed; description: field description data.frame many rows fields SELECT output, columns specifying name, type, length, precision, scale, Sclass corresponding output field. rowsAffected: number rows affected; rowCount: number rows far fetched; completed: logical value describing whether operation completed . nullOk: logical vector specifying whether corresponding column may take NULL values. methods implemented accessor functions list obvious way. setDataMappings defines conversion internal RDBMS data types R/S classes. expect default mappings far common ones, users need control may specify class generator individual fields result set. (See Section [sec:mappings] details.) close closes result set frees resources R/S RDBMS. fetch extracts next max.rec records (-1 means ).","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:mappings","dir":"Articles","previous_headings":"A Common Interface","what":"Data Type Mappings","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"data types supported databases slightly different data types R S, mapping straightforward: many fixed varying length character types mapped R/S character. Fixed-precision (non-IEEE) numbers mapped either doubles (numeric) long (integer). Dates mapped character using appropriate TO_CHAR function RDBMS (take care locale information). RDBMS support type CURRENCY MONEY mapped numeric. Large objects (character, binary, file, etc.) also need mapped. User-defined functions may specified actual conversion follows: run query (either dbExec dbExecStatement): extract output field definitions replace class generator , say 3rd field, user generator: set new data mapping prior fetching fetch rows store data.frame","code":"> rs <- dbExecStatement(con, \"select whatever-You-need\") > flds <- getFields(rs) > flds[3, \"Sclass\"] # default mapping [1] \"character\" > flds[3, \"Sclass\"] <- \"myOwnGeneratorFunction\" > setDataMappings(resutlSet, flds) > data <- fetch(resultSet)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:open-issues","dir":"Articles","previous_headings":"A Common Interface","what":"Open Issues","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"may need provide additional utilities, instance convert dates, escape characters quotes slashes query strings, strip excessive blanks character fields, etc. need decide whether provide hooks conversions done C level, post-processing R S. Another issue kind data object output SQL query. Currently MySQL Oracle implementations return data data.frame; data frames slight inconvenience automatically re-label fields according R/S syntax, changing actual RDBMS labels variables; issue non-numeric data coerced factors automatically “drop hat” (someone s-news wrote) also annoying. execution SQL scripts fully described. method executes scripts run individual statements without returning encounters query (SELECT-like) statement. point return one result set. application responsible fetching rows, invoking dbNextResultSet opened dbConnection object repeat dbExec/fetch loop encounters next dbResultSet. . Another (potentially expensive) alternative run statements sequentially return list data.frames, element list storing result statement. Binary objects large objects present challenges R S. becoming common store images, sounds, data types binary objects RDBMS, can principle quite large. SQL-92 ANSI standard allows 2 gigabytes objects. need carefully plan deal binary objects – perhaps tentatively full generality. Large objects fetched repeatedly invoking specified R/S function takes argument chunks specified number raw bytes. case S4 (Splus5.x) RS-DBI implementation can write opened connection user defined reader (can guarantee won’t overflow connection?). case R clear data type binary large objects (BLOB) mapped .","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:limitations","dir":"Articles","previous_headings":"A Common Interface","what":"Limitations","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"limitations current interface definition: allow one SQL statement time, forcing users split SQL scripts individual statements; transaction management fully described; interface heavily biased towards queries, opposed general purpose database development. particular made attempt define “bind variables”; mechanism contents S objects implicitly moved database SQL execution. instance, following embedded SQL statement take vector sampleEmployee iterate elements get result. Perhaps RS-DBI point future implement feature.","code":"/* SQL */ SELECT * from emp_table where emp_id = :sampleEmployee"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"other-approaches","dir":"Articles","previous_headings":"","what":"Other Approaches","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"high-level, front-end description RS-DBI critical aspect interface. Details actually implement interface may change time. approach described document based one back-end driver per RDBMS reasonable, approach – simply felt simpler approach based well-understood self-contained tools (R, S, C API’s) better start. Nevertheless want briefly mention alternatives considered tentatively decided , may quite possibly re-visit near future.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:odbc","dir":"Articles","previous_headings":"Other Approaches","what":"Open Database Connectivity (ODBC)","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"ODBC protocol developed Microsoft allow connectivity among C/C++ applications RDBMS. expect, originally implementations ODBC available Windows environments. various effort create Unix implementation (see Unix ODBC web-site Harvey (1999)). approach looks promising allows us write one back-end, instead one per RDBMS. Since RDBMS already provide ODBC drivers, greatly simplify development. Unfortunately, Unix implementation ODBC mature enough time looked , situation expect change next year . point need re-evaluate make sure ODBC interface penalize interface terms performance, ease use, portability among various Unix versions, etc.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:jdbc","dir":"Articles","previous_headings":"Other Approaches","what":"Java Database Connectivity (JDBC)","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"Another protocol, Java database connectivity, well-done supported just every RDBMS. issue JDBC today neither S R (written C) interfaces cleanly Java. several efforts (quite fairly advanced state) allow S R invoke Java methods. interface widely available Splus5x R need re-visit issue study performance, usability, etc., JDBC common back-end RS-DBI.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:corba","dir":"Articles","previous_headings":"Other Approaches","what":"CORBA and a 3-tier Architecture","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"Yet another approach move interface RDBMS R S altogether separate system server serve proxy R/S databases. communication middle-layer proxy done CORBA Siegel (1996), Java’s RMI, similar technology. design flexible, CORBA facilities R S widely available yet, know whether made available Splus5 users MathSoft. Also, experience technology rather limited. hand, 3-tier architecture seem offer flexibility cope large distributed databases, necessarily relational.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"sec:resources","dir":"Articles","previous_headings":"","what":"Resources","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"latest documentation software RS-DBI available www.omegahat.net (link dead now: https://www.omegahat.net/contrib/RS-DBI/index.html). R community developed interfaces databases: RmSQL interface mSQL database written Torsten Hothorn; RPgSQL interface PostgreSQL written Timothy H. Keitt; RODBC interface ODBC, written Michael Lapsley. (details see R Data Import/Export (2001).) R S-Plus interfaces MySQL follow propose RS-DBI API described ; also, ’s S-Plus interface SOracle James (preparation) Oracle (expect R implementation soon.) idea common interface databases successfully implemented Java’s Database Connectivity (JDBC) (www.javasoft.com), C Open Database Connectivity (ODBC) (www.unixodbc.org), Python’s Database Application Programming Interface (www.python.org), Perl’s Database Interface (www.cpan.org).","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"acknowledgements","dir":"Articles","previous_headings":"","what":"Acknowledgements","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"R/S database interface came suggestions, comments, discussions John M. Chambers Duncan Temple Lang context Omega Project Statistical Computing. Doug Bates Saikat DebRoy ported (greatly improved) first MySQL implementation R.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI-proposal.html","id":"the-s-version-4-definitions","dir":"Articles","previous_headings":"","what":"The S Version 4 Definitions","title":"A Common Interface to Relational Databases from R and S -- A Proposal","text":"following code meant serve detailed description R/S database interface. decided use S4 (instead R S version 3) clean syntax help us describe easily classes methods form RS-DBI, also convey inter-class relationships.","code":"## Define all the classes and methods to be used by an ## implementation of the RS-DataBase Interface. Mostly, ## these classes are virtual and each driver should extend ## them to provide the actual implementation. ## Class: dbManager ## This class identifies the DataBase Management System ## (Oracle, MySQL, Informix, PostgreSQL, etc.) setClass(\"dbManager\", VIRTUAL) setGeneric(\"load\", def = function(dbMgr,...) standardGeneric(\"load\") ) setGeneric(\"unload\", def = function(dbMgr,...) standardGeneric(\"unload\") ) setGeneric(\"getVersion\", def = function(dbMgr,...) standardGeneric(\"getVersion\") ) ## Class: dbConnections ## This class captures a connection to a database instance. setClass(\"dbConnection\", VIRTUAL) setGeneric(\"dbConnection\", def = function(dbMgr, ...) standardGeneric(\"dbConnection\") ) setGeneric(\"dbConnect\", def = function(dbMgr, ...) standardGeneric(\"dbConnect\") ) setGeneric(\"dbExecStatement\", def = function(con, statement, ...) standardGeneric(\"dbExecStatement\") ) setGeneric(\"dbExec\", def = function(con, statement, ...) standardGeneric(\"dbExec\") ) setGeneric(\"getResultSet\", def = function(con, ..) standardGeneric(\"getResultSet\") ) setGeneric(\"commit\", def = function(con, ...) standardGeneric(\"commit\") ) setGeneric(\"rollback\", def = function(con, ...) standardGeneric(\"rollback\") ) setGeneric(\"callProc\", def = function(con, ...) standardGeneric(\"callProc\") ) setMethod(\"close\", signature = list(con=\"dbConnection\", type=\"missing\"), def = function(con, type) NULL ) ## Class: dbResult ## This is a base class for arbitrary results from the RDBMS ## (INSERT, UPDATE, DELETE). SELECTs (and SELECT-like) ## statements produce \"dbResultSet\" objects, which extend ## dbResult. setClass(\"dbResult\", VIRTUAL) setMethod(\"close\", signature = list(con=\"dbResult\", type=\"missing\"), def = function(con, type) NULL ) ## Class: dbResultSet ## Note that we define a resultSet as the result of a ## SELECT SQL statement. setClass(\"dbResultSet\", \"dbResult\") setGeneric(\"fetch\", def = function(resultSet,n,...) standardGeneric(\"fetch\") ) setGeneric(\"hasCompleted\", def = function(object, ...) standardGeneric(\"hasCompleted\") ) setGeneric(\"getException\", def = function(object, ...) standardGeneric(\"getException\") ) setGeneric(\"getDBconnection\", def = function(object, ...) standardGeneric(\"getDBconnection\") ) setGeneric(\"setDataMappings\", def = function(resultSet, ...) standardGeneric(\"setDataMappings\") ) setGeneric(\"getFields\", def = function(object, table, dbname, ...) standardGeneric(\"getFields\") ) setGeneric(\"getStatement\", def = function(object, ...) standardGeneric(\"getStatement\") ) setGeneric(\"getRowsAffected\", def = function(object, ...) standardGeneric(\"getRowsAffected\") ) setGeneric(\"getRowCount\", def = function(object, ...) standardGeneric(\"getRowCount\") ) setGeneric(\"getNullOk\", def = function(object, ...) standardGeneric(\"getNullOk\") ) ## Meta-data: setGeneric(\"getInfo\", def = function(object, ...) standardGeneric(\"getInfo\") ) setGeneric(\"describe\", def = function(object, verbose=F, ...) standardGeneric(\"describe\") ) setGeneric(\"getCurrentDatabase\", def = function(object, ...) standardGeneric(\"getCurrentDatabase\") ) setGeneric(\"getDatabases\", def = function(object, ...) standardGeneric(\"getDatabases\") ) setGeneric(\"getTables\", def = function(object, dbname, ...) standardGeneric(\"getTables\") ) setGeneric(\"getTableFields\", def = function(object, table, dbname, ...) standardGeneric(\"getTableFields\") ) setGeneric(\"getTableIndices\", def = function(object, table, dbname, ...) standardGeneric(\"getTableIndices\") )"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"who-this-tutorial-is-for","dir":"Articles","previous_headings":"","what":"Who this tutorial is for","title":"Introduction to DBI","text":"tutorial want access manipulate data database may machine different computer internet, found libraries use higher level abstraction, dbplyr, suitable purpose. Depending want achieve, may find useful understanding SQL using DBI. DBI (DataBase Interface) package provides simple, consistent interface R database management systems (DBMS). supported DBMS supported R package implements DBI specification vignette(\"spec\", package = \"DBI\"). DBI currently supports 30 DBMS, including: MySQL, using R-package RMySQL MariaDB, using R-package RMariaDB Postgres, using R-package RPostgres SQLite, using R-package RSQLite complete list supported DBMS visit https://github.com/r-dbi/backends. may need install package specific DBMS. functionality currently supported DBMS’s includes: manage connection database list tables database list column names table read table data frame advanced features, parameterized queries, transactions, see vignette(\"DBI-advanced\", package = \"DBI\").","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"how-to-connect-to-a-database-using-dbi","dir":"Articles","previous_headings":"","what":"How to connect to a database using DBI","title":"Introduction to DBI","text":"following code establishes connection Sakila database hosted Relational Dataset Repository https://relational-data.org/dataset/Sakila, lists tables database, closes connection. database represents fictional movie rental business includes tables describing films, actors, customers, stores, etc.: Connections databases created using dbConnect() function. first argument function driver DBMS connecting . example connecting MariaDB instance, use RMariaDB::MariaDB() driver. arguments depend authentication required DBMS. example host, port, username, password, dbname required. See documentation DBMS driver package using specifics. function dbListTables() takes database connection argument returns character vector table view names database. completing session DBMS, always release connection call dbDisconnect().","code":"library(DBI) con <- dbConnect( RMariaDB::MariaDB(), host = \"db.relational-data.org\", port = 3306, username = \"guest\", password = \"relational\", dbname = \"sakila\" ) dbListTables(con) ## [1] \"actor\" \"address\" \"category\" \"city\" ## [5] \"country\" \"customer\" \"film\" \"film_actor\" ## [9] \"film_category\" \"film_text\" \"inventory\" \"language\" ## [13] \"payment\" \"rental\" \"staff\" \"store\" dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"secure-password-storage","dir":"Articles","previous_headings":"How to connect to a database using DBI","what":"Secure password storage","title":"Introduction to DBI","text":"example contains password code, avoided databases secured access. One way use credentials securely store system’s credential store query keyring package. code connect database look like :","code":"con <- dbConnect( RMariaDB::MariaDB(), host = \"db.relational-data.org\", port = 3306, username = \"guest\", password = keyring::key_get(\"db.relational-data.org\", \"guest\"), dbname = \"sakila\" )"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"how-to-retrieve-column-names-for-a-table","dir":"Articles","previous_headings":"","what":"How to retrieve column names for a table","title":"Introduction to DBI","text":"can list column names table function dbListFields(). takes arguments database connection table name returns character vector column names order.","code":"con <- dbConnect(RMariaDB::MariaDB(), username = \"guest\", password = \"relational\", host = \"db.relational-data.org\", port = 3306, dbname = \"sakila\") dbListFields(con, \"film\") ## [1] \"film_id\" \"title\" \"description\" ## [4] \"release_year\" \"language_id\" \"original_language_id\" ## [7] \"rental_duration\" \"rental_rate\" \"length\" ## [10] \"replacement_cost\" \"rating\" \"special_features\" ## [13] \"last_update\""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"read-a-table-into-a-data-frame","dir":"Articles","previous_headings":"","what":"Read a table into a data frame","title":"Introduction to DBI","text":"function dbReadTable() reads entire table returns data frame. equivalent SQL query SELECT * . columns returned data frame share names columns table. DBI database backends best coerce data equivalent R data types.","code":"df <- dbReadTable(con, \"film\") head(df, 3) ## film_id title ## 1 1 ACADEMY DINOSAUR ## 2 2 ACE GOLDFINGER ## 3 3 ADAPTATION HOLES ## description ## 1 A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies ## 2 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 3 A Astounding Reflection of a Lumberjack And a Car who must Sink a Lumberjack in A Baloon Factory ## release_year language_id original_language_id rental_duration rental_rate ## 1 2006 1 NA 6 0.99 ## 2 2006 1 NA 3 4.99 ## 3 2006 1 NA 7 2.99 ## length replacement_cost rating special_features ## 1 86 20.99 PG Deleted Scenes,Behind the Scenes ## 2 48 12.99 G Trailers,Deleted Scenes ## 3 50 18.99 NC-17 Trailers,Deleted Scenes ## last_update ## 1 2006-02-15 04:03:42 ## 2 2006-02-15 04:03:42 ## 3 2006-02-15 04:03:42"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"read-only-selected-rows-and-columns-into-a-data-frame","dir":"Articles","previous_headings":"","what":"Read only selected rows and columns into a data frame","title":"Introduction to DBI","text":"read subset data table data frame, DBI provides functions run custom SQL queries manage results. small datasets need manage number results returned, function dbGetQuery() takes SQL SELECT query execute returns data frame. basic query specifies columns require (film_id, title description) rows (records) interested . retrieve films released year 2006. also retrieve movies released 2006 rated “G”. Note character strings must quoted. query contained within double quotes, use single quotes around rating. See dbQuoteLiteral() programmatically converting arbitrary R values SQL. covered detail vignette(\"DBI-advanced\", package = \"DBI\"). equivalent operation using dplyr reconstructs SQL query using three functions specify table (tbl()), subset rows (filter()), columns require (select()). Note dplyr takes care quoting. want perform data manipulation queries UPDATEs DELETEs, see dbSendStatement() vignette(\"DBI-advanced\", package = \"DBI\").","code":"df <- dbGetQuery(con, \"SELECT film_id, title, description FROM film WHERE release_year = 2006\") head(df, 3) ## film_id title ## 1 1 ACADEMY DINOSAUR ## 2 2 ACE GOLDFINGER ## 3 3 ADAPTATION HOLES ## description ## 1 A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies ## 2 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 3 A Astounding Reflection of a Lumberjack And a Car who must Sink a Lumberjack in A Baloon Factory df <- dbGetQuery(con, \"SELECT film_id, title, description FROM film WHERE release_year = 2006 AND rating = 'G'\") head(df, 3) ## film_id title ## 1 2 ACE GOLDFINGER ## 2 4 AFFAIR PREJUDICE ## 3 5 AFRICAN EGG ## description ## 1 A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China ## 2 A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank ## 3 A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico library(dplyr) lazy_df <- tbl(con, \"film\") %>% filter(release_year == 2006 & rating == \"G\") %>% select(film_id, title, description) head(lazy_df, 3) ## # Source: SQL [3 x 3] ## # Database: mysql [guest@db.relational-data.org:3306/sakila] ## film_id title description ## ## 1 2 ACE GOLDFINGER A Astounding Epistle of a Database Administrator And… ## 2 4 AFFAIR PREJUDICE A Fanciful Documentary of a Frisbee And a Lumberjack… ## 3 5 AFRICAN EGG A Fast-Paced Documentary of a Pastry Chef And a Dent…"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"how-to-end-a-dbms-session","dir":"Articles","previous_headings":"","what":"How to end a DBMS session","title":"Introduction to DBI","text":"finished accessing DBMS, always close connection using dbDisconnect().","code":"dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"conclusion","dir":"Articles","previous_headings":"","what":"Conclusion","title":"Introduction to DBI","text":"tutorial given basic techniques accessing data supported DBMS. need work databases fit memory, want run complex queries, including parameterized queries, please see vignette(\"DBI-advanced\", package = \"DBI\").","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/DBI.html","id":"further-reading","dir":"Articles","previous_headings":"","what":"Further Reading","title":"Introduction to DBI","text":"overview working databases R Rstudio.com DBI specification: vignette(\"spec\", package = \"DBI\") List supported DBMS","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"getting-started","dir":"Articles","previous_headings":"","what":"Getting started","title":"Implementing a new backend","text":"Start creating package. ’s call package, following existing pattern RSQLite, RMySQL, RPostgres ROracle make easier people find . example, ’ll call package RKazam. ready--use template package available https://github.com/r-dbi/RKazam/. can start creating new GitHub repository template, copying package code. Rename “Kazam” desired name everywhere. template package already contains dummy implementations classes methods. chose create package manually, make sure include DESCRIPTION: Importing DBI fine, users supposed attach package anyway; preferred method attach DBI use explicit qualification via :: access driver package (needs done ).","code":"Imports: DBI (>= 0.3.0), methods Suggests: DBItest, testthat"},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"testing","dir":"Articles","previous_headings":"","what":"Testing","title":"Implementing a new backend","text":"testing early stage? testing integral part software development cycle. Test right start, add automated tests go, finish faster (tests automated) maintaining superb code quality (tests also check corner cases might aware ). Don’t worry: test cases difficult impossible satisfy, take long run, can just turn . Take time now head DBItest vignette vignette(\"test\", package = \"DBItest\"). find vast amount ready--use test cases help process implementing new DBI backend. Add custom tests covered DBItest discretion, enhance DBItest file pull request test generic enough useful many DBI backends.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"driver","dir":"Articles","previous_headings":"","what":"Driver","title":"Implementing a new backend","text":"Start making driver class inherits DBIDriver. class doesn’t need anything, ’s just used dispatch generics right method. Users don’t need know , can remove default help listing @keywords internal: driver class important older versions DBI, also provide dummy dbUnloadDriver() method. package needs global setup tear , .onLoad() .onUnload() functions. might also want add show method object prints nicely: Next create Kazam() instantiates class.","code":"#' Driver for Kazam database. #' #' @keywords internal #' @export #' @import DBI #' @import methods setClass(\"KazamDriver\", contains = \"DBIDriver\") #' @export #' @rdname Kazam-class setMethod(\"dbUnloadDriver\", \"KazamDriver\", function(drv, ...) { TRUE }) setMethod(\"show\", \"KazamDriver\", function(object) { cat(\"\\n\") }) #' @export Kazam <- function() { new(\"KazamDriver\") } Kazam() #> "},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"connection","dir":"Articles","previous_headings":"","what":"Connection","title":"Implementing a new backend","text":"Next create connection class inherits DBIConnection. store information needed connect database. ’re talking C api, include slot holds external pointer. Now boilerplate way, can start work connection. important method dbConnect() allows connect specified instance database. Note use @rdname Kazam. ensures Kazam() connect method documented together. Replace ... arguments needed connect database. ’ll always need include ... arguments, even don’t use , compatibility generic. likely people first come help, examples show connect database, query . (Obviously examples won’t work yet.) Ideally, include examples can run right away (perhaps relying publicly hosted database), failing surround \\dontrun{} people can least see code. Next, implement show() dbDisconnect() methods.","code":"#' Kazam connection class. #' #' @export #' @keywords internal setClass(\"KazamConnection\", contains = \"DBIConnection\", slots = list( host = \"character\", username = \"character\", # and so on ptr = \"externalptr\" ) ) #' @param drv An object created by \\code{Kazam()} #' @rdname Kazam #' @export #' @examples #' \\dontrun{ #' db <- dbConnect(RKazam::Kazam()) #' dbWriteTable(db, \"mtcars\", mtcars) #' dbGetQuery(db, \"SELECT * FROM mtcars WHERE cyl == 4\") #' } setMethod(\"dbConnect\", \"KazamDriver\", function(drv, ...) { # ... new(\"KazamConnection\", host = host, ...) })"},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"results","dir":"Articles","previous_headings":"","what":"Results","title":"Implementing a new backend","text":"Finally, ’re ready implement meat system: fetching results query data frame. First define results class: write dbSendQuery() method. takes connection SQL string arguments, returns result object. ... needed compatibility generic, can add arguments need . Next, implement dbClearResult(), close result set free resources associated : hardest part every DBI package writing dbFetch() method. needs take result set (optionally) number records return, create dataframe. Mapping R’s data types database may require custom implementation dbDataType() method connection class: Next, implement dbHasCompleted() return logical indicating rows remaining fetched. four methods place, can now use default dbGetQuery() send query database, retrieve results available clean . Spend time now making sure works existing database, relax let DBItest package work .","code":"#' Kazam results class. #' #' @keywords internal #' @export setClass(\"KazamResult\", contains = \"DBIResult\", slots = list(ptr = \"externalptr\") ) #' Send a query to Kazam. #' #' @export #' @examples #' # This is another good place to put examples setMethod(\"dbSendQuery\", \"KazamConnection\", function(conn, statement, ...) { # some code new(\"KazamResult\", ...) }) #' @export setMethod(\"dbClearResult\", \"KazamResult\", function(res, ...) { # free resources TRUE }) #' Retrieve records from Kazam query #' @export setMethod(\"dbFetch\", \"KazamResult\", function(res, n = -1, ...) { ... }) # (optionally) #' Find the database data type associated with an R object #' @export setMethod(\"dbDataType\", \"KazamConnection\", function(dbObj, obj, ...) { ... }) #' @export setMethod(\"dbHasCompleted\", \"KazamResult\", function(res, ...) { })"},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"sql-methods","dir":"Articles","previous_headings":"","what":"SQL methods","title":"Implementing a new backend","text":"’re now home stretch, can make wrapper substantially useful implementing methods wrap around variations SQL across databases: dbQuoteString() dbQuoteIdentifer() used safely quote strings identifiers avoid SQL injection attacks. Note former must vectorized, latter. dbWriteTable() creates database table given R dataframe. ’d recommend using functions prefixed sql package generate SQL. functions still work progress please let know problems. dbReadTable(): simple wrapper around SELECT * table. Use dbQuoteIdentifer() safely quote table name prevent mismatches names allowed R database. dbListTables() dbExistsTable() let determine tables available. provided database’s API, may need generate sql inspects system tables. dbListFields() shows fields available given table. dbRemoveTable() wraps around DROP TABLE. Start SQL::sqlTableDrop(). dbBegin(), dbCommit() dbRollback(): implement three functions provide basic transaction support. functionality currently tested DBItest package.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"metadata-methods","dir":"Articles","previous_headings":"","what":"Metadata methods","title":"Implementing a new backend","text":"lot extra metadata methods result sets (one connection) might want implement. described following. dbIsValid() returns connection result set open (TRUE) closed (FALSE). methods section valid result sets . dbGetStatement() returns issued query character value. dbColumnInfo() lists names types result set’s columns. dbGetRowCount() dbGetRowsAffected() returns number rows returned altered SELECT INSERT/UPDATE query, respectively. dbBind() allows using parametrised queries. Take look sqlInterpolate() sqlParseVariables() SQL engine doesn’t offer native parametrised queries.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/backend.html","id":"full-dbi-compliance","dir":"Articles","previous_headings":"","what":"Full DBI compliance","title":"Implementing a new backend","text":"now, package implement methods defined DBI specification. want walk extra mile, offer read-mode allows users sure valuable data doesn’t get destroyed inadvertently.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"dbi-r-database-interface","dir":"Articles","previous_headings":"","what":"DBI: R Database Interface","title":"DBI specification","text":"DBI defines interface communication R relational database management systems. classes package virtual need extended various R/DBMS implementations (-called DBI backends).","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"definition","dir":"Articles","previous_headings":"DBI: R Database Interface","what":"Definition","title":"DBI specification","text":"DBI backend R package imports DBI methods packages. better worse, names many existing backends start ‘R’, e.g., RSQLite, RMySQL, RSQLServer; backend author adopt convention .","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"dbi-classes-and-methods","dir":"Articles","previous_headings":"DBI: R Database Interface","what":"DBI classes and methods","title":"DBI specification","text":"backend defines three classes, subclasses DBIDriver, DBIConnection, DBIResult. backend provides implementation methods base classes defined implemented DBI. methods defined DBI reexported (package can used without attach DBI), ellipsis ... formals extensibility.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"construction-of-the-dbidriver-object","dir":"Articles","previous_headings":"DBI: R Database Interface","what":"Construction of the DBIDriver object","title":"DBI specification","text":"backend must support creation instance DBIDriver subclass constructor function. default, name package name without leading ‘R’ (exists), e.g., SQLite RSQLite package. However, backend authors may choose different name. constructor must exported, must function callable without arguments. DBI recommends define constructor empty argument list.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples","dir":"Articles","previous_headings":"DBI: R Database Interface","what":"Examples","title":"DBI specification","text":"","code":"RSQLite::SQLite()"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"determine-the-sql-data-type-of-an-object","dir":"Articles","previous_headings":"","what":"Determine the SQL data type of an object","title":"DBI specification","text":"section describes behavior following method:","code":"dbDataType(dbObj, obj, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description","dir":"Articles","previous_headings":"Determine the SQL data type of an object","what":"Description","title":"DBI specification","text":"Returns SQL string describes SQL data type used object. default implementation generic determines SQL type R object according SQL 92 specification, may serve starting point driver implementations. DBI also provides implementation data.frame return character vector giving type column dataframe.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details","dir":"Articles","previous_headings":"Determine the SQL data type of an object","what":"Details","title":"DBI specification","text":"data types supported databases different data types R, mapping primitive types straightforward: many fixed varying length character types mapped character vectors Fixed-precision (non-IEEE) numbers mapped either numeric integer vectors. Notice many DBMS follow IEEE arithmetic, potential problems /overflows loss precision.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value","dir":"Articles","previous_headings":"Determine the SQL data type of an object","what":"Value","title":"DBI specification","text":"dbDataType() returns SQL type corresponds obj argument non-empty character string. data frames, character vector one element per column returned.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes","dir":"Articles","previous_headings":"Determine the SQL data type of an object","what":"Failure modes","title":"DBI specification","text":"error raised invalid values obj argument NULL value.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification","dir":"Articles","previous_headings":"Determine the SQL data type of an object","what":"Specification","title":"DBI specification","text":"backend can override dbDataType() generic driver class. generic expects arbitrary object second argument. query values returned default implementation, run example(dbDataType, package = \"DBI\"). backend needs override generic, must accept basic R data types second argument, namely logical, integer, numeric, character, dates (see Dates), date-time (see DateTimeClasses), difftime. database supports blobs, method also must accept lists raw vectors, blob::blob objects. -objects (.e., wrapped ()) must supported return results unwrapped counterparts. SQL data type factor ordered character. behavior object types specified. data types returned dbDataType() usable SQL statement form \"CREATE TABLE test (...)\".","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-1","dir":"Articles","previous_headings":"Determine the SQL data type of an object","what":"Examples","title":"DBI specification","text":"","code":"dbDataType(ANSI(), 1:5) dbDataType(ANSI(), 1) dbDataType(ANSI(), TRUE) dbDataType(ANSI(), Sys.Date()) dbDataType(ANSI(), Sys.time()) dbDataType(ANSI(), Sys.time() - as.POSIXct(Sys.Date())) dbDataType(ANSI(), c(\"x\", \"abc\")) dbDataType(ANSI(), list(raw(10), raw(20))) dbDataType(ANSI(), I(3)) dbDataType(ANSI(), iris) con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbDataType(con, 1:5) dbDataType(con, 1) dbDataType(con, TRUE) dbDataType(con, Sys.Date()) dbDataType(con, Sys.time()) dbDataType(con, Sys.time() - as.POSIXct(Sys.Date())) dbDataType(con, c(\"x\", \"abc\")) dbDataType(con, list(raw(10), raw(20))) dbDataType(con, I(3)) dbDataType(con, iris) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"create-a-connection-to-a-dbms","dir":"Articles","previous_headings":"","what":"Create a connection to a DBMS","title":"DBI specification","text":"section describes behavior following method:","code":"dbConnect(drv, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-1","dir":"Articles","previous_headings":"Create a connection to a DBMS","what":"Description","title":"DBI specification","text":"Connect DBMS going appropriate authentication procedure. implementations may allow multiple connections open, may invoke function repeatedly assigning output different objects. authentication mechanism left unspecified, check documentation individual drivers details. Use dbCanConnect() check connection can established.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-1","dir":"Articles","previous_headings":"Create a connection to a DBMS","what":"Value","title":"DBI specification","text":"dbConnect() returns S4 object inherits DBIConnection. object used communicate database engine. format() method defined connection object. returns string consists single line text.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-1","dir":"Articles","previous_headings":"Create a connection to a DBMS","what":"Specification","title":"DBI specification","text":"DBI recommends using following argument names authentication parameters, NULL default: user user name (default: current user) password password host host name (default: local connection) port port number (default: local connection) dbname name database host, database file name defaults provide reasonable behavior, particular local connection host = NULL. DBMS (e.g., PostgreSQL), different TCP/IP connection localhost. addition, DBI supports bigint argument governs 64-bit integer data returned. following values supported: \"integer\": always return integer, silently overflow \"numeric\": always return numeric, silently round \"character\": always return decimal representation character \"integer64\": return data type can coerced using .integer() (warning overflow), .numeric() .character()","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-2","dir":"Articles","previous_headings":"Create a connection to a DBMS","what":"Examples","title":"DBI specification","text":"","code":"# SQLite only needs a path to the database. (Here, \":memory:\" is a special # path that creates an in-memory database.) Other database drivers # will require more details (like user, password, host, port, etc.) con <- dbConnect(RSQLite::SQLite(), \":memory:\") con dbListTables(con) dbDisconnect(con) # Bad, for subtle reasons: # This code fails when RSQLite isn't loaded yet, # because dbConnect() doesn't know yet about RSQLite. dbListTables(con <- dbConnect(RSQLite::SQLite(), \":memory:\"))"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"disconnect-close-a-connection","dir":"Articles","previous_headings":"","what":"Disconnect (close) a connection","title":"DBI specification","text":"section describes behavior following method:","code":"dbDisconnect(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-2","dir":"Articles","previous_headings":"Disconnect (close) a connection","what":"Description","title":"DBI specification","text":"closes connection, discards pending work, frees resources (e.g., memory, sockets).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-2","dir":"Articles","previous_headings":"Disconnect (close) a connection","what":"Value","title":"DBI specification","text":"dbDisconnect() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-1","dir":"Articles","previous_headings":"Disconnect (close) a connection","what":"Failure modes","title":"DBI specification","text":"warning issued garbage collection connection released without calling dbDisconnect(), tested automatically. least one warning issued immediately calling dbDisconnect() already disconnected invalid connection.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-3","dir":"Articles","previous_headings":"Disconnect (close) a connection","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"execute-a-query-on-a-given-database-connection","dir":"Articles","previous_headings":"","what":"Execute a query on a given database connection","title":"DBI specification","text":"section describes behavior following method:","code":"dbSendQuery(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-3","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Description","title":"DBI specification","text":"dbSendQuery() method submits synchronously executes SQL query database engine. extract records — need use dbFetch() method, must call dbClearResult() finish fetching records need. interactive use, almost always prefer dbGetQuery(). Use dbSendQueryArrow() dbGetQueryArrow() instead retrieve results Arrow object.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbSendQuery() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See “Specification” sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-2","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Specification","title":"DBI specification","text":"warnings occur normal conditions. done, DBIResult object must cleared call dbClearResult(). Failure clear result set leads warning connection closed. backend supports one open result set per connection, issuing second query invalidates already open result set raises warning. newly opened result set valid must cleared dbClearResult(). param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-for-the-immediate-argument","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Specification for the immediate argument","title":"DBI specification","text":"immediate argument supports distinguishing “direct” “prepared” APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via “direct” API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed “special” query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-1","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Details","title":"DBI specification","text":"method SELECT queries . backends may support data manipulation queries method compatibility reasons. However, callers strongly encouraged use dbSendStatement() data manipulation statements. query submitted database server DBMS executes , possibly generating vast amounts data. data live driver-specific: drivers may choose leave output server transfer piecemeal R, others may transfer data client – necessarily memory R manages. See individual drivers’ dbSendQuery() documentation details.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-3","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Value","title":"DBI specification","text":"dbSendQuery() returns S4 object inherits DBIResult. result set can used dbFetch() extract records. finished using result, make sure clear dbClearResult().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"The data retrieval flow","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell ’re done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-2","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Failure modes","title":"DBI specification","text":"error raised issuing query closed invalid connection, query non-NA string. error also raised syntax query invalid query parameters given (passing params argument) immediate argument set TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-4","dir":"Articles","previous_headings":"Execute a query on a given database connection","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbFetch(rs) dbClearResult(rs) # Pass one set of values with the param argument: rs <- dbSendQuery( con, \"SELECT * FROM mtcars WHERE cyl = ?\", params = list(4L) ) dbFetch(rs) dbClearResult(rs) # Pass multiple sets of values with dbBind(): rs <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = ?\") dbBind(rs, list(6L)) dbFetch(rs) dbBind(rs, list(8L)) dbFetch(rs) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"fetch-records-from-a-previously-executed-query","dir":"Articles","previous_headings":"","what":"Fetch records from a previously executed query","title":"DBI specification","text":"section describes behavior following methods:","code":"dbFetch(res, n = -1, ...) fetch(res, n = -1, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-4","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"Description","title":"DBI specification","text":"Fetch next n elements (rows) result set return data.frame.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-2","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"Details","title":"DBI specification","text":"fetch() provided compatibility older DBI clients - new code strongly encouraged use dbFetch(). default implementation dbFetch() calls fetch() compatible existing code. Modern backends implement dbFetch() .","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-4","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"Value","title":"DBI specification","text":"dbFetch() always returns data.frame many rows records fetched many columns fields result set, even result single value one zero rows. Passing n = NA supported returns arbitrary number rows (least one) specified driver, remaining rows result set.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow-1","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"The data retrieval flow","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell ’re done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-3","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"Failure modes","title":"DBI specification","text":"attempt fetch closed result set raises error. n argument atomic whole number greater equal -1 Inf, error raised, subsequent call dbFetch() proper n argument succeeds. Calling dbFetch() result set data manipulation query created dbSendStatement() can fetched return empty data frame, warning.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-3","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"Specification","title":"DBI specification","text":"Fetching multi-row queries one columns default returns entire result. Multi-row queries can also fetched progressively passing whole number (integer numeric) n argument. value Inf n argument supported also returns full result. rows available fetched, result returned full without warning. fewer rows requested returned, fetches return data frame zero rows. zero rows fetched, columns data frame still fully typed. Fetching fewer rows available permitted, warning issued clearing result set. column named row_names treated like column. column types returned data frame depend data returned: integer (coercible integer) integer values -2^31 2^31 - 1, NA SQL NULL values numeric numbers fractional component, NA SQL NULL values logical Boolean values (backends may return integer); NA SQL NULL values character text, NA SQL NULL values lists raw blobs NULL entries SQL NULL values coercible using .Date() dates, NA SQL NULL values (also applies return value SQL function current_date) coercible using hms::as_hms() times, NA SQL NULL values (also applies return value SQL function current_time) coercible using .POSIXct() timestamps, NA SQL NULL values (also applies return value SQL function current_timestamp) dates timestamps supported backend, following R types used: Date dates (also applies return value SQL function current_date) POSIXct timestamps (also applies return value SQL function current_timestamp) R built-type lossless support full range 64-bit larger integers. 64-bit integers returned query, following rules apply: Values returned container support full range valid 64-bit values (integer64 class bit64 package) Coercion numeric always returns number close possible true value Loss precision converting numeric gives warning Conversion character always returns lossless decimal representation data","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-5","dir":"Articles","previous_headings":"Fetch records from a previously executed query","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) # Fetch all results rs <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbFetch(rs) dbClearResult(rs) # Fetch in chunks rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") while (!dbHasCompleted(rs)) { chunk <- dbFetch(rs, 10) print(nrow(chunk)) } dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"clear-a-result-set","dir":"Articles","previous_headings":"","what":"Clear a result set","title":"DBI specification","text":"section describes behavior following method:","code":"dbClearResult(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-5","dir":"Articles","previous_headings":"Clear a result set","what":"Description","title":"DBI specification","text":"Frees resources (local remote) associated result set. step mandatory objects obtained calling dbSendQuery() dbSendStatement().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-5","dir":"Articles","previous_headings":"Clear a result set","what":"Value","title":"DBI specification","text":"dbClearResult() returns TRUE, invisibly, result sets obtained dbSendQuery(), dbSendStatement(), dbSendQueryArrow(),","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow-2","dir":"Articles","previous_headings":"Clear a result set","what":"The data retrieval flow","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell ’re done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-command-execution-flow","dir":"Articles","previous_headings":"Clear a result set","what":"The command execution flow","title":"DBI specification","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-4","dir":"Articles","previous_headings":"Clear a result set","what":"Failure modes","title":"DBI specification","text":"attempt close already closed result set issues warning dbSendQuery(), dbSendStatement(), dbSendQueryArrow(),","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-4","dir":"Articles","previous_headings":"Clear a result set","what":"Specification","title":"DBI specification","text":"dbClearResult() frees resources associated retrieving result query update operation. DBI backend can expect call dbClearResult() dbSendQuery() dbSendStatement() call.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-6","dir":"Articles","previous_headings":"Clear a result set","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") rs <- dbSendQuery(con, \"SELECT 1\") print(dbFetch(rs)) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"bind-values-to-a-parameterizedprepared-statement","dir":"Articles","previous_headings":"","what":"Bind values to a parameterized/prepared statement","title":"DBI specification","text":"section describes behavior following methods:","code":"dbBind(res, params, ...) dbBindArrow(res, params, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-6","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"Description","title":"DBI specification","text":"parametrized prepared statements, dbSendQuery(), dbSendQueryArrow(), dbSendStatement() functions can called statements contain placeholders values. dbBind() dbBindArrow() functions bind placeholders actual values, intended called result set calling dbFetch() dbFetchArrow(). values passed dbBind() lists data frames, dbBindArrow() stream created nanoarrow::as_nanoarrow_array_stream(). dbBindArrow() experimental, ⁠*Arrow⁠ functions. dbSendQuery() compatible dbBindArrow(), dbSendQueryArrow() compatible dbBind().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-3","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"Details","title":"DBI specification","text":"DBI supports parametrized (prepared) queries statements via dbBind() dbBindArrow() generics. Parametrized queries different normal queries allow arbitrary number placeholders, later substituted actual values. Parametrized queries (statements) serve two purposes: query can executed different values. DBMS may cache intermediate information query, execution plan, execute faster. Separation query syntax parameters protects SQL injection. placeholder format currently specified DBI; future, uniform placeholder syntax may supported. Consult backend documentation supported formats. automated testing, backend authors specify placeholder syntax placeholder_pattern tweak. Known examples : ⁠?⁠ (positional matching order appearance) RMariaDB RSQLite ⁠\\$1⁠ (positional matching index) RPostgres RSQLite ⁠:name⁠ ⁠\\$name⁠ (named matching) RSQLite","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-6","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"Value","title":"DBI specification","text":"dbBind() returns result set, invisibly, queries issued dbSendQuery() dbSendQueryArrow() also data manipulation statements issued dbSendStatement().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow-3","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"The data retrieval flow","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell ’re done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow-for-arrow-streams","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"The data retrieval flow for Arrow streams","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data Arrow stream. flow, except repeated calling dbBindArrow() dbBind(), implemented dbGetQueryArrow(), sufficient unless parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQueryArrow() create result set object class DBIResultArrow. Optionally, bind query parameters dbBindArrow() dbBind(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Use dbFetchArrow() get data stream. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-command-execution-flow-1","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"The command execution flow","title":"DBI specification","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-5","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"Failure modes","title":"DBI specification","text":"Calling dbBind() query without parameters raises error. Binding many enough values, parameters wrong names unequal length, also raises error. placeholders query named, parameter values must names (must empty NA), vice versa, otherwise error raised. behavior mixing placeholders different types (particular mixing positional named placeholders) specified. Calling dbBind() result set already cleared dbClearResult() also raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-5","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"Specification","title":"DBI specification","text":"DBI clients execute parametrized statements follows: Call dbSendQuery(), dbSendQueryArrow() dbSendStatement() query statement contains placeholders, store returned DBIResult object variable. Mixing placeholders (particular, named unnamed ones) recommended. good practice register call dbClearResult() via .exit() right calling dbSendQuery() dbSendStatement() (see last enumeration item). dbBind() dbBindArrow() called, returned result set object following behavior: dbFetch() raises error (dbSendQuery() dbSendQueryArrow()) dbGetRowCount() returns zero (dbSendQuery() dbSendQueryArrow()) dbGetRowsAffected() returns integer NA (dbSendStatement()) dbIsValid() returns TRUE dbHasCompleted() returns FALSE Call dbBind() dbBindArrow(): dbBind(), params argument must list elements lengths contain values supported backend. data.frame internally stored list. dbBindArrow(), params argument must nanoarrow array stream, one column per query parameter. Retrieve data number affected rows DBIResult object. queries issued dbSendQuery() dbSendQueryArrow(), call dbFetch(). statements issued dbSendStatements(), call dbGetRowsAffected(). (Execution begins immediately dbBind() call, statement processed entirely function returns.) Repeat 2. 3. necessary. Close result set via dbClearResult(). elements params argument need scalars, vectors arbitrary length (including length 0) supported. queries, calling dbFetch() binding parameters returns concatenated results, equivalent binding fetching set values connecting via rbind(). data manipulation statements, dbGetRowsAffected() returns total number rows affected binding non-scalar parameters. dbBind() also accepts repeated calls result set queries data manipulation statements, even results fetched calls dbBind(), queries data manipulation statements. placeholders query named, order params argument important. least following data types accepted input (including NA): integer numeric logical Boolean values character (also special characters spaces, newlines, quotes, backslashes) factor (bound character, warning) Date (also stored internally integer) POSIXct timestamps POSIXlt timestamps difftime values (also units seconds value stored integer) lists raw blobs (NULL entries SQL NULL values) objects type blob::blob","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-7","dir":"Articles","previous_headings":"Bind values to a parameterized/prepared statement","what":"Examples","title":"DBI specification","text":"","code":"# Data frame flow: con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"iris\", iris) # Using the same query for different values iris_result <- dbSendQuery(con, \"SELECT * FROM iris WHERE [Petal.Width] > ?\") dbBind(iris_result, list(2.3)) dbFetch(iris_result) dbBind(iris_result, list(3)) dbFetch(iris_result) dbClearResult(iris_result) # Executing the same statement with different values at once iris_result <- dbSendStatement(con, \"DELETE FROM iris WHERE [Species] = \\$species\") dbBind(iris_result, list(species = c(\"setosa\", \"versicolor\", \"unknown\"))) dbGetRowsAffected(iris_result) dbClearResult(iris_result) nrow(dbReadTable(con, \"iris\")) dbDisconnect(con) # Arrow flow: con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"iris\", iris) # Using the same query for different values iris_result <- dbSendQueryArrow(con, \"SELECT * FROM iris WHERE [Petal.Width] > ?\") dbBindArrow( iris_result, nanoarrow::as_nanoarrow_array_stream(data.frame(2.3, fix.empty.names = FALSE)) ) as.data.frame(dbFetchArrow(iris_result)) dbBindArrow( iris_result, nanoarrow::as_nanoarrow_array_stream(data.frame(3, fix.empty.names = FALSE)) ) as.data.frame(dbFetchArrow(iris_result)) dbClearResult(iris_result) # Executing the same statement with different values at once iris_result <- dbSendStatement(con, \"DELETE FROM iris WHERE [Species] = \\$species\") dbBindArrow(iris_result, nanoarrow::as_nanoarrow_array_stream(data.frame( species = c(\"setosa\", \"versicolor\", \"unknown\") ))) dbGetRowsAffected(iris_result) dbClearResult(iris_result) nrow(dbReadTable(con, \"iris\")) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"retrieve-results-from-a-query","dir":"Articles","previous_headings":"","what":"Retrieve results from a query","title":"DBI specification","text":"section describes behavior following method:","code":"dbGetQuery(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-7","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Description","title":"DBI specification","text":"Returns result query data frame. dbGetQuery() comes default implementation (work backends) calls dbSendQuery(), dbFetch(), ensuring result always freed dbClearResult(). retrieving chunked/paged results passing query parameters, see dbSendQuery(), particular “data retrieval flow” section. retrieving results Arrow object, see dbGetQueryArrow().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments-1","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbGetQuery() generic (improve compatibility across backends) part DBI specification: n (default: -1) params (default: NULL) immediate (default: NULL) must provided named arguments. See “Specification” “Value” sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-6","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Specification","title":"DBI specification","text":"column named row_names treated like column. n argument specifies number rows fetched. omitted, fetching multi-row queries one columns returns entire result. value Inf n argument supported also returns full result. rows available fetched (passing large value n), result returned full without warning. zero rows requested, columns data frame still fully typed. Fetching fewer rows available permitted, warning issued. param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-for-the-immediate-argument-1","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Specification for the immediate argument","title":"DBI specification","text":"immediate argument supports distinguishing “direct” “prepared” APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via “direct” API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed “special” query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-4","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Details","title":"DBI specification","text":"method SELECT queries (incl. SQL statements return SELECT-alike result, e.g., execution stored procedure data manipulation queries like ⁠INSERT ... RETURNING ...⁠). execute stored procedure return result set, use dbExecute(). backends may support data manipulation statements method compatibility reasons. However, callers strongly advised use dbExecute() data manipulation statements.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-7","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Value","title":"DBI specification","text":"dbGetQuery() always returns data.frame, many rows records fetched many columns fields result set, even result single value one zero rows.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"implementation-notes","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Implementation notes","title":"DBI specification","text":"Subclasses override method provide sort performance optimization.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-6","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Failure modes","title":"DBI specification","text":"error raised issuing query closed invalid connection, syntax query invalid, query non-NA string. n argument atomic whole number greater equal -1 Inf, error raised, subsequent call dbGetQuery() proper n argument succeeds.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-8","dir":"Articles","previous_headings":"Retrieve results from a query","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) dbGetQuery(con, \"SELECT * FROM mtcars\") dbGetQuery(con, \"SELECT * FROM mtcars\", n = 6) # Pass values using the param argument: # (This query runs eight times, once for each different # parameter. The resulting rows are combined into a single # data frame.) dbGetQuery( con, \"SELECT COUNT(*) FROM mtcars WHERE cyl = ?\", params = list(1:8) ) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"execute-a-data-manipulation-statement-on-a-given-database-connection","dir":"Articles","previous_headings":"","what":"Execute a data manipulation statement on a given database connection","title":"DBI specification","text":"section describes behavior following method:","code":"dbSendStatement(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-8","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Description","title":"DBI specification","text":"dbSendStatement() method submits synchronously executes SQL data manipulation statement (e.g., UPDATE, DELETE, ⁠INSERT ⁠, ⁠DROP TABLE⁠, …) database engine. query number affected rows, call dbGetRowsAffected() returned result object. must also call dbClearResult() . interactive use, almost always prefer dbExecute().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments-2","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbSendStatement() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See “Specification” sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-7","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Specification","title":"DBI specification","text":"warnings occur normal conditions. done, DBIResult object must cleared call dbClearResult(). Failure clear result set leads warning connection closed. backend supports one open result set per connection, issuing second query invalidates already open result set raises warning. newly opened result set valid must cleared dbClearResult(). param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-for-the-immediate-argument-2","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Specification for the immediate argument","title":"DBI specification","text":"immediate argument supports distinguishing “direct” “prepared” APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via “direct” API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed “special” query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-5","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Details","title":"DBI specification","text":"dbSendStatement() comes default implementation simply forwards dbSendQuery(), support backends implement latter.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-8","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Value","title":"DBI specification","text":"dbSendStatement() returns S4 object inherits DBIResult. result set can used dbGetRowsAffected() determine number rows affected query. finished using result, make sure clear dbClearResult().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-command-execution-flow-2","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"The command execution flow","title":"DBI specification","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-7","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Failure modes","title":"DBI specification","text":"error raised issuing statement closed invalid connection, statement non-NA string. error also raised syntax query invalid query parameters given (passing params argument) immediate argument set TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-9","dir":"Articles","previous_headings":"Execute a data manipulation statement on a given database connection","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cars\", head(cars, 3)) rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (1, 1), (2, 2), (3, 3)\" ) dbHasCompleted(rs) dbGetRowsAffected(rs) dbClearResult(rs) dbReadTable(con, \"cars\") # there are now 6 rows # Pass one set of values directly using the param argument: rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (?, ?)\", params = list(4L, 5L) ) dbClearResult(rs) # Pass multiple sets of values using dbBind(): rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (?, ?)\" ) dbBind(rs, list(5:6, 6:7)) dbBind(rs, list(7L, 8L)) dbClearResult(rs) dbReadTable(con, \"cars\") # there are now 10 rows dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"change-database-state","dir":"Articles","previous_headings":"","what":"Change database state","title":"DBI specification","text":"section describes behavior following method:","code":"dbExecute(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-9","dir":"Articles","previous_headings":"Change database state","what":"Description","title":"DBI specification","text":"Executes statement returns number rows affected. dbExecute() comes default implementation (work backends) calls dbSendStatement(), dbGetRowsAffected(), ensuring result always freed dbClearResult(). passing query parameters, see dbBind(), particular “command execution flow” section.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments-3","dir":"Articles","previous_headings":"Change database state","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbExecute() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See “Specification” sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-8","dir":"Articles","previous_headings":"Change database state","what":"Specification","title":"DBI specification","text":"param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-for-the-immediate-argument-3","dir":"Articles","previous_headings":"Change database state","what":"Specification for the immediate argument","title":"DBI specification","text":"immediate argument supports distinguishing “direct” “prepared” APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via “direct” API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed “special” query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-6","dir":"Articles","previous_headings":"Change database state","what":"Details","title":"DBI specification","text":"can also use dbExecute() call stored procedure performs data manipulation actions return result set. execute stored procedure returns result set, data manipulation query also returns result set ⁠INSERT ... RETURNING ...⁠, use dbGetQuery() instead.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-9","dir":"Articles","previous_headings":"Change database state","what":"Value","title":"DBI specification","text":"dbExecute() always returns scalar numeric specifies number rows affected statement.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"implementation-notes-1","dir":"Articles","previous_headings":"Change database state","what":"Implementation notes","title":"DBI specification","text":"Subclasses override method provide sort performance optimization.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-8","dir":"Articles","previous_headings":"Change database state","what":"Failure modes","title":"DBI specification","text":"error raised issuing statement closed invalid connection, syntax statement invalid, statement non-NA string.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-10","dir":"Articles","previous_headings":"Change database state","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cars\", head(cars, 3)) dbReadTable(con, \"cars\") # there are 3 rows dbExecute( con, \"INSERT INTO cars (speed, dist) VALUES (1, 1), (2, 2), (3, 3)\" ) dbReadTable(con, \"cars\") # there are now 6 rows # Pass values using the param argument: dbExecute( con, \"INSERT INTO cars (speed, dist) VALUES (?, ?)\", params = list(4:7, 5:8) ) dbReadTable(con, \"cars\") # there are now 10 rows dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"quote-literal-strings","dir":"Articles","previous_headings":"","what":"Quote literal strings","title":"DBI specification","text":"section describes behavior following method:","code":"dbQuoteString(conn, x, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-10","dir":"Articles","previous_headings":"Quote literal strings","what":"Description","title":"DBI specification","text":"Call method generate string suitable use query string literal, make sure generate valid SQL protect SQL injection attacks.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-10","dir":"Articles","previous_headings":"Quote literal strings","what":"Value","title":"DBI specification","text":"dbQuoteString() returns object can coerced character, length input. empty character vector function returns length-0 object. passing returned object dbQuoteString() x argument, returned unchanged. Passing objects class SQL also return unchanged. (backends may convenient return SQL objects achieve behavior, required.)","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-9","dir":"Articles","previous_headings":"Quote literal strings","what":"Failure modes","title":"DBI specification","text":"Passing numeric, integer, logical, raw vector, list x argument raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-9","dir":"Articles","previous_headings":"Quote literal strings","what":"Specification","title":"DBI specification","text":"returned expression can used ⁠SELECT ...⁠ query, scalar character x value dbGetQuery(paste0(\"SELECT \", dbQuoteString(x)))[[1]] must identical x, even x contains spaces, tabs, quotes (single double), backticks, newlines (combination) result dbQuoteString() call coerced back character (even repeatedly). x NA, result must merely satisfy .na(). strings \"NA\" \"NULL\" treated specially. NA translated unquoted SQL NULL, query ⁠SELECT * (SELECT 1) ... NULL⁠ returns one row.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-11","dir":"Articles","previous_headings":"Quote literal strings","what":"Examples","title":"DBI specification","text":"","code":"# Quoting ensures that arbitrary input is safe for use in a query name <- \"Robert'); DROP TABLE Students;--\" dbQuoteString(ANSI(), name) # NAs become NULL dbQuoteString(ANSI(), c(\"x\", NA)) # SQL vectors are always passed through as is var_name <- SQL(\"select\") var_name dbQuoteString(ANSI(), var_name) # This mechanism is used to prevent double escaping dbQuoteString(ANSI(), dbQuoteString(ANSI(), name))"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"quote-identifiers","dir":"Articles","previous_headings":"","what":"Quote identifiers","title":"DBI specification","text":"section describes behavior following method:","code":"dbQuoteIdentifier(conn, x, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-11","dir":"Articles","previous_headings":"Quote identifiers","what":"Description","title":"DBI specification","text":"Call method generate string suitable use query column table name, make sure generate valid SQL protect SQL injection attacks. inverse operation dbUnquoteIdentifier().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-11","dir":"Articles","previous_headings":"Quote identifiers","what":"Value","title":"DBI specification","text":"dbQuoteIdentifier() returns object can coerced character, length input. empty character vector function returns length-0 object. names input argument preserved output. passing returned object dbQuoteIdentifier() x argument, returned unchanged. Passing objects class SQL also return unchanged. (backends may convenient return SQL objects achieve behavior, required.)","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-10","dir":"Articles","previous_headings":"Quote identifiers","what":"Failure modes","title":"DBI specification","text":"error raised input contains NA, empty string.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-10","dir":"Articles","previous_headings":"Quote identifiers","what":"Specification","title":"DBI specification","text":"Calling dbGetQuery() query format ⁠SELECT 1 ...⁠ returns data frame identifier, unquoted, column name. Quoted identifiers can used table column names SQL queries, particular queries like ⁠SELECT 1 ...⁠ ⁠SELECT * (SELECT 1) ...⁠. method must use quoting mechanism unambiguously different quoting mechanism used strings, query like ⁠SELECT ... (SELECT 1 ...)⁠ throws error column names match. method can quote column names contain special characters space, dot, comma, quotes used mark strings identifiers, database supports . case, checking validity identifier performed executing query, dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-12","dir":"Articles","previous_headings":"Quote identifiers","what":"Examples","title":"DBI specification","text":"","code":"# Quoting ensures that arbitrary input is safe for use in a query name <- \"Robert'); DROP TABLE Students;--\" dbQuoteIdentifier(ANSI(), name) # Use Id() to specify other components such as the schema id_name <- Id(schema = \"schema_name\", table = \"table_name\") id_name dbQuoteIdentifier(ANSI(), id_name) # SQL vectors are always passed through as is var_name <- SQL(\"select\") var_name dbQuoteIdentifier(ANSI(), var_name) # This mechanism is used to prevent double escaping dbQuoteIdentifier(ANSI(), dbQuoteIdentifier(ANSI(), name))"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"read-database-tables-as-data-frames","dir":"Articles","previous_headings":"","what":"Read database tables as data frames","title":"DBI specification","text":"section describes behavior following method:","code":"dbReadTable(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-12","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Description","title":"DBI specification","text":"Reads database table data frame, optionally converting column row names converting column names valid R identifiers. Use dbReadTableArrow() instead obtain Arrow object.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"arguments-12","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Arguments","title":"DBI specification","text":"DBIConnection object, returned dbConnect(). table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. “table_name”, call Id() components fully qualified table name, e.g. Id(schema = “my_schema”, table = “table_name”) call SQL() quoted fully qualified table name given verbatim, e.g. SQL(‘“my_schema”.”table_name”’) parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments-4","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbReadTable() generic (improve compatibility across backends) part DBI specification: row.names (default: FALSE) check.names must provided named arguments. See “Value” section details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-11","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Specification","title":"DBI specification","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbReadTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-7","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Details","title":"DBI specification","text":"function returns data frame. Use dbReadTableArrow() obtain Arrow object.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-12","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Value","title":"DBI specification","text":"dbReadTable() returns data frame contains complete data remote table, effectively result calling dbGetQuery() ⁠SELECT * ⁠. empty table returned data frame zero rows. presence rownames depends row.names argument, see sqlColumnToRownames() details: FALSE NULL, returned data frame doesn’t row names. TRUE, column named “row_names” converted row names. NA, column named “row_names” converted row names exists, otherwise translation occurs. string, specifies name column remote table contains row names. default row.names = FALSE. database supports identifiers special characters, columns returned data frame converted valid R identifiers check.names argument TRUE, check.names = FALSE, returned table non-syntactic column names without quotes.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-11","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Failure modes","title":"DBI specification","text":"error raised table exist. error raised row.names TRUE “row_names” column exists, error raised row.names set string corresponding column exists. error raised calling method closed invalid connection. error raised name processed dbQuoteIdentifier() results non-scalar. Unsupported values row.names check.names (non-scalars, unsupported data types, NA check.names) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-13","dir":"Articles","previous_headings":"Read database tables as data frames","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars[1:10, ]) dbReadTable(con, \"mtcars\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"copy-data-frames-to-database-tables","dir":"Articles","previous_headings":"","what":"Copy data frames to database tables","title":"DBI specification","text":"section describes behavior following method:","code":"dbWriteTable(conn, name, value, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-13","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Description","title":"DBI specification","text":"Writes, overwrites appends data frame database table, optionally converting row names column specifying SQL data types fields.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"arguments-13","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Arguments","title":"DBI specification","text":"DBIConnection object, returned dbConnect(). table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. “table_name”, call Id() components fully qualified table name, e.g. Id(schema = “my_schema”, table = “table_name”) call SQL() quoted fully qualified table name given verbatim, e.g. SQL(‘“my_schema”.”table_name”’) data.frame (coercible data.frame). parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments-5","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbWriteTable() generic (improve compatibility across backends) part DBI specification: row.names (default: FALSE) overwrite (default: FALSE) append (default: FALSE) field.types (default: NULL) temporary (default: FALSE) must provided named arguments. See “Specification” “Value” sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-12","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Specification","title":"DBI specification","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbWriteTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done value argument must data frame subset columns existing table append = TRUE. order columns matter append = TRUE. overwrite argument TRUE, existing table name overwritten. argument doesn’t change behavior table exist yet. append argument TRUE, rows existing table preserved, new data appended. table doesn’t exist yet, created. temporary argument TRUE, table available second connection gone reconnecting. backends support argument. regular, non-temporary table visible second connection, pre-existing connection, reconnecting database. SQL keywords can used freely table names, column names, data. Quotes, commas, spaces, special characters newlines tabs, can also used data, , database supports non-syntactic identifiers, also table names column names. following data types must supported least, read identically dbReadTable(): integer numeric (behavior Inf NaN specified) logical NA NULL 64-bit values (using \"bigint\" field type); result can converted numeric, may lose precision, converted character vector, gives full decimal representation written another table read unchanged character (UTF-8 native encodings), supporting empty strings non-empty string factor (returned character) list raw (supported database) objects type blob::blob (supported database) date (supported database; returned Date), also dates prior 1970 1900 2038 time (supported database; returned objects inherit difftime) timestamp (supported database; returned POSIXct respecting time zone necessarily preserving input time zone), also timestamps prior 1970 1900 2038 respecting time zone necessarily preserving input time zone) Mixing column types table supported. field.types argument must named character vector one entry column. indicates SQL data type used new column. column missed field.types, type inferred input data dbDataType(). interpretation rownames depends row.names argument, see sqlRownamesToColumn() details: FALSE NULL, row names ignored. TRUE, row names converted column named “row_names”, even input data frame natural row names 1 nrow(...). NA, column named “row_names” created data custom row names, extra column created case natural row names. string, specifies name column remote table contains row names, even input data frame natural row names. default row.names = FALSE.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-8","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Details","title":"DBI specification","text":"function expects data frame. Use dbWriteTableArrow() write Arrow object. function useful want create load table time. Use dbAppendTable() dbAppendTableArrow() appending data existing table, dbCreateTable() dbCreateTableArrow() creating table, dbExistsTable() dbRemoveTable() overwriting tables. DBI standardizes writing data frames dbWriteTable(). backends might implement methods can consume CSV files data formats. details, see documentation individual methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-13","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Value","title":"DBI specification","text":"dbWriteTable() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-12","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Failure modes","title":"DBI specification","text":"table exists, append overwrite arguments unset, append = TRUE data frame new data different column names, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar. Invalid values additional arguments row.names, overwrite, append, field.types, temporary (non-scalars, unsupported data types, NA, incompatible values, duplicate missing names, incompatible columns) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-14","dir":"Articles","previous_headings":"Copy data frames to database tables","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars[1:5, ]) dbReadTable(con, \"mtcars\") dbWriteTable(con, \"mtcars\", mtcars[6:10, ], append = TRUE) dbReadTable(con, \"mtcars\") dbWriteTable(con, \"mtcars\", mtcars[1:10, ], overwrite = TRUE) dbReadTable(con, \"mtcars\") # No row names dbWriteTable(con, \"mtcars\", mtcars[1:10, ], overwrite = TRUE, row.names = FALSE) dbReadTable(con, \"mtcars\")"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"list-remote-tables","dir":"Articles","previous_headings":"","what":"List remote tables","title":"DBI specification","text":"section describes behavior following method:","code":"dbListTables(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-14","dir":"Articles","previous_headings":"List remote tables","what":"Description","title":"DBI specification","text":"Returns unquoted names remote tables accessible connection. include views temporary objects, database backends (particular RMariaDB RMySQL) support .","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-14","dir":"Articles","previous_headings":"List remote tables","what":"Value","title":"DBI specification","text":"dbListTables() returns character vector enumerates tables views database. Tables added dbWriteTable() part list. soon table removed database, also removed list database tables. applies temporary tables supported database. returned names suitable quoting dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-13","dir":"Articles","previous_headings":"List remote tables","what":"Failure modes","title":"DBI specification","text":"error raised calling method closed invalid connection.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-15","dir":"Articles","previous_headings":"List remote tables","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbListTables(con) dbWriteTable(con, \"mtcars\", mtcars) dbListTables(con) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"does-a-table-exist","dir":"Articles","previous_headings":"","what":"Does a table exist?","title":"DBI specification","text":"section describes behavior following method:","code":"dbExistsTable(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-15","dir":"Articles","previous_headings":"Does a table exist?","what":"Description","title":"DBI specification","text":"Returns table given name exists database.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"arguments-15","dir":"Articles","previous_headings":"Does a table exist?","what":"Arguments","title":"DBI specification","text":"DBIConnection object, returned dbConnect(). table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. “table_name”, call Id() components fully qualified table name, e.g. Id(schema = “my_schema”, table = “table_name”) call SQL() quoted fully qualified table name given verbatim, e.g. SQL(‘“my_schema”.”table_name”’) parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-15","dir":"Articles","previous_headings":"Does a table exist?","what":"Value","title":"DBI specification","text":"dbExistsTable() returns logical scalar, TRUE table view specified name argument exists, FALSE otherwise. includes temporary tables supported database.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-14","dir":"Articles","previous_headings":"Does a table exist?","what":"Failure modes","title":"DBI specification","text":"error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-13","dir":"Articles","previous_headings":"Does a table exist?","what":"Specification","title":"DBI specification","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbExistsTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done tables listed dbListTables(), dbExistsTable() returns TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-16","dir":"Articles","previous_headings":"Does a table exist?","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbExistsTable(con, \"iris\") dbWriteTable(con, \"iris\", iris) dbExistsTable(con, \"iris\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"remove-a-table-from-the-database","dir":"Articles","previous_headings":"","what":"Remove a table from the database","title":"DBI specification","text":"section describes behavior following method:","code":"dbRemoveTable(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-16","dir":"Articles","previous_headings":"Remove a table from the database","what":"Description","title":"DBI specification","text":"Remove remote table (e.g., created dbWriteTable()) database.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"arguments-16","dir":"Articles","previous_headings":"Remove a table from the database","what":"Arguments","title":"DBI specification","text":"DBIConnection object, returned dbConnect(). table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. “table_name”, call Id() components fully qualified table name, e.g. Id(schema = “my_schema”, table = “table_name”) call SQL() quoted fully qualified table name given verbatim, e.g. SQL(‘“my_schema”.”table_name”’) parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"additional-arguments-6","dir":"Articles","previous_headings":"Remove a table from the database","what":"Additional arguments","title":"DBI specification","text":"following arguments part dbRemoveTable() generic (improve compatibility across backends) part DBI specification: temporary (default: FALSE) fail_if_missing (default: TRUE) arguments must provided named arguments. temporary TRUE, call dbRemoveTable() consider temporary tables. backends support argument. particular, permanent tables name left untouched. fail_if_missing FALSE, call dbRemoveTable() succeeds table exist.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-14","dir":"Articles","previous_headings":"Remove a table from the database","what":"Specification","title":"DBI specification","text":"table removed dbRemoveTable() doesn’t appear list tables returned dbListTables(), dbExistsTable() returns FALSE. removal propagates immediately connections database. function can also used remove temporary table. name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbRemoveTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-16","dir":"Articles","previous_headings":"Remove a table from the database","what":"Value","title":"DBI specification","text":"dbRemoveTable() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-15","dir":"Articles","previous_headings":"Remove a table from the database","what":"Failure modes","title":"DBI specification","text":"table exist, error raised. attempt remove view function may result error. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-17","dir":"Articles","previous_headings":"Remove a table from the database","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbExistsTable(con, \"iris\") dbWriteTable(con, \"iris\", iris) dbExistsTable(con, \"iris\") dbRemoveTable(con, \"iris\") dbExistsTable(con, \"iris\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"list-field-names-of-a-remote-table","dir":"Articles","previous_headings":"","what":"List field names of a remote table","title":"DBI specification","text":"section describes behavior following method:","code":"dbListFields(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-17","dir":"Articles","previous_headings":"List field names of a remote table","what":"Description","title":"DBI specification","text":"Returns field names remote table character vector.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"arguments-17","dir":"Articles","previous_headings":"List field names of a remote table","what":"Arguments","title":"DBI specification","text":"DBIConnection object, returned dbConnect(). table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. “table_name”, call Id() components fully qualified table name, e.g. Id(schema = “my_schema”, table = “table_name”) call SQL() quoted fully qualified table name given verbatim, e.g. SQL(‘“my_schema”.”table_name”’) parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-17","dir":"Articles","previous_headings":"List field names of a remote table","what":"Value","title":"DBI specification","text":"dbListFields() returns character vector enumerates fields table correct order. also works temporary tables supported database. returned names suitable quoting dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-16","dir":"Articles","previous_headings":"List field names of a remote table","what":"Failure modes","title":"DBI specification","text":"table exist, error raised. Invalid types name argument (e.g., character length equal one, numeric) lead error. error also raised calling method closed invalid connection.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-15","dir":"Articles","previous_headings":"List field names of a remote table","what":"Specification","title":"DBI specification","text":"name argument can string return value dbQuoteIdentifier() value table column return value dbListObjects() is_prefix FALSE column named row_names treated like column.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-18","dir":"Articles","previous_headings":"List field names of a remote table","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) dbListFields(con, \"mtcars\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"is-this-dbms-object-still-valid","dir":"Articles","previous_headings":"","what":"Is this DBMS object still valid?","title":"DBI specification","text":"section describes behavior following method:","code":"dbIsValid(dbObj, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-18","dir":"Articles","previous_headings":"Is this DBMS object still valid?","what":"Description","title":"DBI specification","text":"generic tests whether database object still valid (.e. hasn’t disconnected cleared).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-18","dir":"Articles","previous_headings":"Is this DBMS object still valid?","what":"Value","title":"DBI specification","text":"dbIsValid() returns logical scalar, TRUE object specified dbObj valid, FALSE otherwise. DBIConnection object initially valid, becomes invalid disconnecting dbDisconnect(). invalid connection object (e.g., drivers object saved file restored), method also returns FALSE. DBIResult object valid call dbSendQuery(), stays valid even rows fetched; clearing dbClearResult() invalidates . DBIResult object also valid call dbSendStatement(), stays valid querying number rows affected; clearing dbClearResult() invalidates . connection database system dropped (e.g., due connectivity problems, server failure, etc.), dbIsValid() return FALSE. tested automatically.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-19","dir":"Articles","previous_headings":"Is this DBMS object still valid?","what":"Examples","title":"DBI specification","text":"","code":"dbIsValid(RSQLite::SQLite()) con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbIsValid(con) rs <- dbSendQuery(con, \"SELECT 1\") dbIsValid(rs) dbClearResult(rs) dbIsValid(rs) dbDisconnect(con) dbIsValid(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"completion-status","dir":"Articles","previous_headings":"","what":"Completion status","title":"DBI specification","text":"section describes behavior following method:","code":"dbHasCompleted(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-19","dir":"Articles","previous_headings":"Completion status","what":"Description","title":"DBI specification","text":"method returns operation completed. SELECT query completed rows fetched. data manipulation statement always completed.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-19","dir":"Articles","previous_headings":"Completion status","what":"Value","title":"DBI specification","text":"dbHasCompleted() returns logical scalar. query initiated dbSendQuery() non-empty result set, dbHasCompleted() returns FALSE initially TRUE calling dbFetch() without limit. query initiated dbSendStatement(), dbHasCompleted() always returns TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow-4","dir":"Articles","previous_headings":"Completion status","what":"The data retrieval flow","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell ’re done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-17","dir":"Articles","previous_headings":"Completion status","what":"Failure modes","title":"DBI specification","text":"Attempting query completion status result set cleared dbClearResult() gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-16","dir":"Articles","previous_headings":"Completion status","what":"Specification","title":"DBI specification","text":"completion status query guaranteed set FALSE attempting fetch past end entire result. Therefore, query empty result set, initial return value unspecified, result value TRUE trying fetch one row. Similarly, query result set length n, return value unspecified fetching n rows, result value TRUE trying fetch one row.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-20","dir":"Articles","previous_headings":"Completion status","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") dbHasCompleted(rs) ret1 <- dbFetch(rs, 10) dbHasCompleted(rs) ret2 <- dbFetch(rs) dbHasCompleted(rs) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"get-the-statement-associated-with-a-result-set","dir":"Articles","previous_headings":"","what":"Get the statement associated with a result set","title":"DBI specification","text":"section describes behavior following method:","code":"dbGetStatement(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-20","dir":"Articles","previous_headings":"Get the statement associated with a result set","what":"Description","title":"DBI specification","text":"Returns statement passed dbSendQuery() dbSendStatement().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-20","dir":"Articles","previous_headings":"Get the statement associated with a result set","what":"Value","title":"DBI specification","text":"dbGetStatement() returns string, query used either dbSendQuery() dbSendStatement().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-18","dir":"Articles","previous_headings":"Get the statement associated with a result set","what":"Failure modes","title":"DBI specification","text":"Attempting query statement result set cleared dbClearResult() gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-21","dir":"Articles","previous_headings":"Get the statement associated with a result set","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") dbGetStatement(rs) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-number-of-rows-fetched-so-far","dir":"Articles","previous_headings":"","what":"The number of rows fetched so far","title":"DBI specification","text":"section describes behavior following method:","code":"dbGetRowCount(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-21","dir":"Articles","previous_headings":"The number of rows fetched so far","what":"Description","title":"DBI specification","text":"Returns total number rows actually fetched calls dbFetch() result set.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-21","dir":"Articles","previous_headings":"The number of rows fetched so far","what":"Value","title":"DBI specification","text":"dbGetRowCount() returns scalar number (integer numeric), number rows fetched far. calling dbSendQuery(), row count initially zero. call dbFetch() without limit, row count matches total number rows returned. Fetching limited number rows increases number rows number rows returned, even fetching past end result set. queries empty result set, zero returned even fetching. data manipulation statements issued dbSendStatement(), zero returned calling dbFetch().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-19","dir":"Articles","previous_headings":"The number of rows fetched so far","what":"Failure modes","title":"DBI specification","text":"Attempting get row count result set cleared dbClearResult() gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-22","dir":"Articles","previous_headings":"The number of rows fetched so far","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") dbGetRowCount(rs) ret1 <- dbFetch(rs, 10) dbGetRowCount(rs) ret2 <- dbFetch(rs) dbGetRowCount(rs) nrow(ret1) + nrow(ret2) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-number-of-rows-affected","dir":"Articles","previous_headings":"","what":"The number of rows affected","title":"DBI specification","text":"section describes behavior following method:","code":"dbGetRowsAffected(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-22","dir":"Articles","previous_headings":"The number of rows affected","what":"Description","title":"DBI specification","text":"method returns number rows added, deleted, updated data manipulation statement.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-22","dir":"Articles","previous_headings":"The number of rows affected","what":"Value","title":"DBI specification","text":"dbGetRowsAffected() returns scalar number (integer numeric), number rows affected data manipulation statement issued dbSendStatement(). value available directly call change calling dbFetch(). NA_integer_ NA_numeric_ allowed number rows affected known. queries issued dbSendQuery(), zero returned call dbFetch(). NA values allowed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-command-execution-flow-3","dir":"Articles","previous_headings":"The number of rows affected","what":"The command execution flow","title":"DBI specification","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-20","dir":"Articles","previous_headings":"The number of rows affected","what":"Failure modes","title":"DBI specification","text":"Attempting get rows affected result set cleared dbClearResult() gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-23","dir":"Articles","previous_headings":"The number of rows affected","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendStatement(con, \"DELETE FROM mtcars\") dbGetRowsAffected(rs) nrow(mtcars) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"information-about-result-types","dir":"Articles","previous_headings":"","what":"Information about result types","title":"DBI specification","text":"section describes behavior following method:","code":"dbColumnInfo(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-23","dir":"Articles","previous_headings":"Information about result types","what":"Description","title":"DBI specification","text":"Produces data.frame describes output query. data.frame many rows output fields result set, column data.frame describes aspect result set field (field name, type, etc.)","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-23","dir":"Articles","previous_headings":"Information about result types","what":"Value","title":"DBI specification","text":"dbColumnInfo() returns data frame least two columns \"name\" \"type\" (order) (optional columns start dot). \"name\" \"type\" columns contain names types R columns data frame returned dbFetch(). \"type\" column type character information. compute \"type\" column, instead use dbFetch(res, n = 0) create zero-row data frame initialized correct data types.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"the-data-retrieval-flow-5","dir":"Articles","previous_headings":"Information about result types","what":"The data retrieval flow","title":"DBI specification","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ⁠?⁠ ⁠\\$1⁠, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell ’re done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-21","dir":"Articles","previous_headings":"Information about result types","what":"Failure modes","title":"DBI specification","text":"attempt query columns closed result set raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-17","dir":"Articles","previous_headings":"Information about result types","what":"Specification","title":"DBI specification","text":"column named row_names treated like column. column names always consistent data returned dbFetch(). query returns unnamed columns, non-empty non-NA names assigned. Column names correspond SQL R keywords left unchanged.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-24","dir":"Articles","previous_headings":"Information about result types","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") rs <- dbSendQuery(con, \"SELECT 1 AS a, 2 AS b\") dbColumnInfo(rs) dbFetch(rs) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"begincommitrollback-sql-transactions","dir":"Articles","previous_headings":"","what":"Begin/commit/rollback SQL transactions","title":"DBI specification","text":"section describes behavior following methods:","code":"dbBegin(conn, ...) dbCommit(conn, ...) dbRollback(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-24","dir":"Articles","previous_headings":"Begin/commit/rollback SQL transactions","what":"Description","title":"DBI specification","text":"transaction encapsulates several SQL statements atomic unit. initiated dbBegin() either made persistent dbCommit() undone dbRollback(). case, DBMS guarantees either none statements permanent effect. helps ensuring consistency write operations multiple tables.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-9","dir":"Articles","previous_headings":"Begin/commit/rollback SQL transactions","what":"Details","title":"DBI specification","text":"database engines implement transaction management, case methods implemented specific DBIConnection subclass.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-24","dir":"Articles","previous_headings":"Begin/commit/rollback SQL transactions","what":"Value","title":"DBI specification","text":"dbBegin(), dbCommit() dbRollback() return TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-22","dir":"Articles","previous_headings":"Begin/commit/rollback SQL transactions","what":"Failure modes","title":"DBI specification","text":"implementations expected raise error case failure, tested. way, generics throw error closed invalid connection. addition, call dbCommit() dbRollback() without prior call dbBegin() raises error. Nested transactions supported DBI, attempt call dbBegin() twice yields error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-18","dir":"Articles","previous_headings":"Begin/commit/rollback SQL transactions","what":"Specification","title":"DBI specification","text":"Actual support transactions may vary backends. transaction initiated call dbBegin() committed call dbCommit(). Data written transaction must persist transaction committed. example, record missing transaction started created transaction must exist transaction, also new connection. transaction can also aborted dbRollback(). data written transaction must removed transaction rolled back. example, record missing transaction started created transaction must exist anymore rollback. Disconnection connection open transaction effectively rolls back transaction. data written transaction must removed transaction rolled back. behavior specified arguments passed functions. particular, RSQLite issues named transactions support nesting name argument set. transaction isolation level specified DBI.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-25","dir":"Articles","previous_headings":"Begin/commit/rollback SQL transactions","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cash\", data.frame(amount = 100)) dbWriteTable(con, \"account\", data.frame(amount = 2000)) # All operations are carried out as logical unit: dbBegin(con) withdrawal <- 300 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) dbCommit(con) dbReadTable(con, \"cash\") dbReadTable(con, \"account\") # Rolling back after detecting negative value on account: dbBegin(con) withdrawal <- 5000 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) if (dbReadTable(con, \"account\")\\$amount >= 0) { dbCommit(con) } else { dbRollback(con) } dbReadTable(con, \"cash\") dbReadTable(con, \"account\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"self-contained-sql-transactions","dir":"Articles","previous_headings":"","what":"Self-contained SQL transactions","title":"DBI specification","text":"section describes behavior following methods:","code":"dbWithTransaction(conn, code, ...) dbBreak()"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-25","dir":"Articles","previous_headings":"Self-contained SQL transactions","what":"Description","title":"DBI specification","text":"Given transactions implemented, function allows pass code run transaction. default method dbWithTransaction() calls dbBegin() executing code, dbCommit() successful completion, dbRollback() case error. advantage don’t remember dbBegin() dbCommit() dbRollback() – taken care . special function dbBreak() allows early exit rollback, can called inside dbWithTransaction().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"details-10","dir":"Articles","previous_headings":"Self-contained SQL transactions","what":"Details","title":"DBI specification","text":"DBI implements dbWithTransaction(), backends need override generic implement specialized handling.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-25","dir":"Articles","previous_headings":"Self-contained SQL transactions","what":"Value","title":"DBI specification","text":"dbWithTransaction() returns value executed code.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"failure-modes-23","dir":"Articles","previous_headings":"Self-contained SQL transactions","what":"Failure modes","title":"DBI specification","text":"Failure initiate transaction (e.g., connection closed invalid dbBegin() called already) gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"specification-19","dir":"Articles","previous_headings":"Self-contained SQL transactions","what":"Specification","title":"DBI specification","text":"dbWithTransaction() initiates transaction dbBegin(), executes code given code argument, commits transaction dbCommit(). code raises error, transaction instead aborted dbRollback(), error propagated. code calls dbBreak(), execution code stops transaction silently aborted. side effects caused code (creation new variables) propagate calling environment.","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-26","dir":"Articles","previous_headings":"Self-contained SQL transactions","what":"Examples","title":"DBI specification","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cash\", data.frame(amount = 100)) dbWriteTable(con, \"account\", data.frame(amount = 2000)) # All operations are carried out as logical unit: dbWithTransaction( con, { withdrawal <- 300 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) } ) # The code is executed as if in the current environment: withdrawal # The changes are committed to the database after successful execution: dbReadTable(con, \"cash\") dbReadTable(con, \"account\") # Rolling back with dbBreak(): dbWithTransaction( con, { withdrawal <- 5000 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) if (dbReadTable(con, \"account\")\\$amount < 0) { dbBreak() } } ) # These changes were not committed to the database: dbReadTable(con, \"cash\") dbReadTable(con, \"account\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"get-dbms-metadata","dir":"Articles","previous_headings":"","what":"Get DBMS metadata","title":"DBI specification","text":"section describes behavior following method:","code":"dbGetInfo(dbObj, ...)"},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"description-26","dir":"Articles","previous_headings":"Get DBMS metadata","what":"Description","title":"DBI specification","text":"Retrieves information objects class DBIDriver, DBIConnection DBIResult.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"value-26","dir":"Articles","previous_headings":"Get DBMS metadata","what":"Value","title":"DBI specification","text":"objects class DBIDriver, dbGetInfo() returns named list contains least following components: driver.version: package version DBI backend, client.version: version DBMS client library. objects class DBIConnection, dbGetInfo() returns named list contains least following components: db.version: version database server, dbname: database name, username: username connect database, host: hostname database server, port: port database server. must contain password component. Components applicable set NA. objects class DBIResult, dbGetInfo() returns named list contains least following components: statatment: statement used dbSendQuery() dbExecute(), returned dbGetStatement(), row.count: number rows fetched far (queries), returned dbGetRowCount(), rows.affected: number rows affected (statements), returned dbGetRowsAffected() .completed: logical indicates query statement completed, returned dbHasCompleted().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"implementation-notes-2","dir":"Articles","previous_headings":"Get DBMS metadata","what":"Implementation notes","title":"DBI specification","text":"default implementation ⁠DBIResult objects⁠ constructs list return values corresponding methods, dbGetStatement(), dbGetRowCount(), dbGetRowsAffected(), dbHasCompleted().","code":""},{"path":"https://dbi.r-dbi.org/dev/articles/spec.html","id":"examples-27","dir":"Articles","previous_headings":"Get DBMS metadata","what":"Examples","title":"DBI specification","text":"","code":"dbGetInfo(RSQLite::SQLite())"},{"path":"https://dbi.r-dbi.org/dev/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"R Special Interest Group Databases (R-SIG-DB). Author. Hadley Wickham. Author. Kirill Müller. Author, maintainer. R Consortium. Funder.","code":""},{"path":"https://dbi.r-dbi.org/dev/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"R Special Interest Group Databases (R-SIG-DB), Wickham H, Müller K (2024). DBI: R Database Interface. R package version 1.2.3.9001, https://github.com/r-dbi/DBI, https://dbi.r-dbi.org.","code":"@Manual{, title = {DBI: R Database Interface}, author = {{R Special Interest Group on Databases (R-SIG-DB)} and Hadley Wickham and Kirill Müller}, year = {2024}, note = {R package version 1.2.3.9001, https://github.com/r-dbi/DBI}, url = {https://dbi.r-dbi.org}, }"},{"path":"https://dbi.r-dbi.org/dev/index.html","id":"dbi","dir":"","previous_headings":"","what":"R Database Interface","title":"R Database Interface","text":"DBI package helps connecting R database management systems (DBMS). DBI separates connectivity DBMS “front-end” “back-end”. package defines interface implemented DBI backends : RPostgres, RMariaDB, RSQLite, odbc, bigrquery, many , see list backends. R scripts packages use DBI access various databases DBI backends. interface defines small set classes methods similar spirit Perl’s DBI, Java’s JDBC, Python’s DB-API, Microsoft’s ODBC. supports following operations: connect/disconnect DBMS create execute statements DBMS extract results/output statements error/exception handling information (meta-data) database objects transaction management (optional)","code":""},{"path":"https://dbi.r-dbi.org/dev/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"R Database Interface","text":"users want access database need install DBI directly. installed automatically install one database backends: RPostgres PostgreSQL, RMariaDB MariaDB MySQL, RSQLite SQLite, odbc databases can access via ODBC, bigrquery, … . can install released version DBI CRAN : development version GitHub :","code":"install.packages(\"DBI\") # install.packages(\"devtools\") devtools::install_github(\"r-dbi/DBI\")"},{"path":"https://dbi.r-dbi.org/dev/index.html","id":"example","dir":"","previous_headings":"","what":"Example","title":"R Database Interface","text":"following example illustrates DBI capabilities:","code":"library(DBI) # Create an ephemeral in-memory RSQLite database con <- dbConnect(RSQLite::SQLite(), dbname = \":memory:\") dbListTables(con) #> character(0) dbWriteTable(con, \"mtcars\", mtcars) dbListTables(con) #> [1] \"mtcars\" dbListFields(con, \"mtcars\") #> [1] \"mpg\" \"cyl\" \"disp\" \"hp\" \"drat\" \"wt\" \"qsec\" \"vs\" \"am\" \"gear\" #> [11] \"carb\" dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> [ reached 'max' / getOption(\"max.print\") -- omitted 23 rows ] # You can fetch all results: res <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbFetch(res) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> [ reached 'max' / getOption(\"max.print\") -- omitted 2 rows ] dbClearResult(res) # Or a chunk at a time res <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = 4\") while (!dbHasCompleted(res)) { chunk <- dbFetch(res, n = 5) print(nrow(chunk)) } #> [1] 5 #> [1] 5 #> [1] 1 dbClearResult(res) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/index.html","id":"class-structure","dir":"","previous_headings":"","what":"Class structure","title":"R Database Interface","text":"four main DBI classes. Three extended individual database backends: DBIObject: common base class DBI. DBIDriver: base class representing overall DBMS properties. Typically generator functions instantiate driver objects like RSQLite(), RPostgreSQL(), RMySQL() etc. DBIConnection: represents connection specific database DBIResult: result DBMS query statement. classes virtual: instantiated directly instead must subclassed.","code":""},{"path":"https://dbi.r-dbi.org/dev/index.html","id":"further-reading","dir":"","previous_headings":"","what":"Further Reading","title":"R Database Interface","text":"Databases using R describes tools best practices ecosystem. DBI project site hosts blog recent developments presented. history DBI David James, driving force behind development DBI, many packages implement . Please note DBI project released Contributor Code Conduct. contributing project, agree abide terms.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/ANSI.html","id":null,"dir":"Reference","previous_headings":"","what":"A dummy DBI connector that simulates ANSI-SQL compliance — ANSI","title":"A dummy DBI connector that simulates ANSI-SQL compliance — ANSI","text":"dummy DBI connector simulates ANSI-SQL compliance","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/ANSI.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A dummy DBI connector that simulates ANSI-SQL compliance — ANSI","text":"","code":"ANSI()"},{"path":"https://dbi.r-dbi.org/dev/reference/ANSI.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"A dummy DBI connector that simulates ANSI-SQL compliance — ANSI","text":"","code":"ANSI() #> "},{"path":"https://dbi.r-dbi.org/dev/reference/DBI-package.html","id":null,"dir":"Reference","previous_headings":"","what":"DBI: R Database Interface — DBI-package","title":"DBI: R Database Interface — DBI-package","text":"DBI defines interface communication R relational database management systems. classes package virtual need extended various R/DBMS implementations (-called DBI backends).","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBI-package.html","id":"definition","dir":"Reference","previous_headings":"","what":"Definition","title":"DBI: R Database Interface — DBI-package","text":"DBI backend R package imports DBI methods packages. better worse, names many existing backends start ‘R’, e.g., RSQLite, RMySQL, RSQLServer; backend author adopt convention .","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBI-package.html","id":"dbi-classes-and-methods","dir":"Reference","previous_headings":"","what":"DBI classes and methods","title":"DBI: R Database Interface — DBI-package","text":"backend defines three classes, subclasses DBIDriver, DBIConnection, DBIResult. backend provides implementation methods base classes defined implemented DBI. methods defined DBI reexported (package can used without attach DBI), ellipsis ... formals extensibility.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBI-package.html","id":"construction-of-the-dbidriver-object","dir":"Reference","previous_headings":"","what":"Construction of the DBIDriver object","title":"DBI: R Database Interface — DBI-package","text":"backend must support creation instance DBIDriver subclass constructor function. default, name package name without leading ‘R’ (exists), e.g., SQLite RSQLite package. However, backend authors may choose different name. constructor must exported, must function callable without arguments. DBI recommends define constructor empty argument list.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/DBI-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"DBI: R Database Interface — DBI-package","text":"Maintainer: Kirill Müller kirill@cynkra.com (ORCID) Authors: R Special Interest Group Databases (R-SIG-DB) Hadley Wickham contributors: R Consortium [funder]","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBI-package.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"DBI: R Database Interface — DBI-package","text":"","code":"RSQLite::SQLite() #> "},{"path":"https://dbi.r-dbi.org/dev/reference/DBIConnection-class.html","id":null,"dir":"Reference","previous_headings":"","what":"DBIConnection class — DBIConnection-class","title":"DBIConnection class — DBIConnection-class","text":"virtual class encapsulates connection DBMS, provides access dynamic queries, result sets, DBMS session management (transactions), etc.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBIConnection-class.html","id":"implementation-note","dir":"Reference","previous_headings":"","what":"Implementation note","title":"DBIConnection class — DBIConnection-class","text":"Individual drivers free implement single multiple simultaneous connections.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/DBIConnection-class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"DBIConnection class — DBIConnection-class","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") con #> #> Path: :memory: #> Extensions: TRUE dbDisconnect(con) if (FALSE) { # \\dontrun{ con <- dbConnect(RPostgreSQL::PostgreSQL(), \"username\", \"password\") con dbDisconnect(con) } # }"},{"path":"https://dbi.r-dbi.org/dev/reference/DBIConnector-class.html","id":null,"dir":"Reference","previous_headings":"","what":"DBIConnector class — DBIConnector-class","title":"DBIConnector class — DBIConnector-class","text":"Wraps objects DBIDriver class include connection options. purpose class store driver connection options. database connection can established call dbConnect(), passing object without additional arguments.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBIConnector-class.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"DBIConnector class — DBIConnector-class","text":"prevent leakage passwords credentials, class supports delayed evaluation. arguments can optionally function (callable without arguments). case, function evaluated transparently connecting dbGetConnectArgs().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/DBIConnector-class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"DBIConnector class — DBIConnector-class","text":"","code":"# Create a connector: cnr <- new(\"DBIConnector\", .drv = RSQLite::SQLite(), .conn_args = list(dbname = \":memory:\") ) cnr #> #> Arguments: #> $dbname #> [1] \":memory:\" #> # Establish a connection through this connector: con <- dbConnect(cnr) con #> #> Path: :memory: #> Extensions: TRUE # Access the database through this connection: dbGetQuery(con, \"SELECT 1 AS a\") #> a #> 1 1 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/DBIDriver-class.html","id":null,"dir":"Reference","previous_headings":"","what":"DBIDriver class — DBIDriver-class","title":"DBIDriver class — DBIDriver-class","text":"Base class DBMS drivers (e.g., RSQLite, MySQL, PostgreSQL). virtual class DBIDriver defines operations creating connections defining data type mappings. Actual driver classes, instance RPostgres, RMariaDB, etc. implement operations DBMS-specific manner.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/DBIObject-class.html","id":null,"dir":"Reference","previous_headings":"","what":"DBIObject class — DBIObject-class","title":"DBIObject class — DBIObject-class","text":"Base class DBI classes (e.g., drivers, connections). virtual Class: objects may created .","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBIObject-class.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"DBIObject class — DBIObject-class","text":"generally, DBI defines small set classes generics allows users applications access DBMS common interface. virtual classes DBIDriver individual drivers extend, DBIConnection represent instances DBMS connections, DBIResult represent result DBMS statement. three classes extend basic class DBIObject, serves root parent class hierarchy.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBIObject-class.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"DBIObject class — DBIObject-class","text":"implementation MUST provide methods following generics: dbGetInfo(). MAY also provide methods : summary(). Print concise description object. default method invokes dbGetInfo(dbObj) prints name-value pairs one per line. Individual implementations may tailor appropriately.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/DBIObject-class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"DBIObject class — DBIObject-class","text":"","code":"drv <- RSQLite::SQLite() con <- dbConnect(drv) rs <- dbSendQuery(con, \"SELECT 1\") is(drv, \"DBIObject\") ## True #> [1] TRUE is(con, \"DBIObject\") ## True #> [1] TRUE is(rs, \"DBIObject\") #> [1] TRUE dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/DBIResult-class.html","id":null,"dir":"Reference","previous_headings":"","what":"DBIResult class — DBIResult-class","title":"DBIResult class — DBIResult-class","text":"virtual class describes result state execution DBMS statement (statement, query non-query). result set keeps track whether statement produces output many rows affected operation, many rows fetched (statement query), whether rows fetch, etc.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBIResult-class.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"DBIResult class — DBIResult-class","text":"Individual drivers free allow single multiple active results per connection. default show method displays summary query using DBI generics.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/DBIResultArrow-class.html","id":null,"dir":"Reference","previous_headings":"","what":"DBIResultArrow class — DBIResultArrow-class","title":"DBIResultArrow class — DBIResultArrow-class","text":"virtual class describes result state execution DBMS statement (statement, query non-query) returning data Arrow object.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/DBIResultArrow-class.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"DBIResultArrow class — DBIResultArrow-class","text":"Individual drivers free allow single multiple active results per connection. default show method displays summary query using DBI generics.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/Id.html","id":null,"dir":"Reference","previous_headings":"","what":"Refer to a table nested in a hierarchy (e.g. within a schema) — Id-class","title":"Refer to a table nested in a hierarchy (e.g. within a schema) — Id-class","text":"Objects class Id single slot name, character vector. dbQuoteIdentifier() method converts Id objects strings. Support Id objects depends database backend. can used following methods name table argument: dbCreateTable() dbAppendTable() dbReadTable() dbWriteTable() dbExistsTable() dbRemoveTable() Objects class also returned dbListObjects().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/Id.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Refer to a table nested in a hierarchy (e.g. within a schema) — Id-class","text":"","code":"Id(...)"},{"path":"https://dbi.r-dbi.org/dev/reference/Id.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Refer to a table nested in a hierarchy (e.g. within a schema) — Id-class","text":"... Components hierarchy, e.g. cluster, catalog, schema, table, depending database backend. concepts, see https://stackoverflow.com/questions/7022755/","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/Id.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Refer to a table nested in a hierarchy (e.g. within a schema) — Id-class","text":"","code":"# Identifies a table in a specific schema: Id(\"dbo\", \"Customer\") #> \"dbo\".\"Customer\" # You can name the components if you want, but it's not needed Id(table = \"Customer\", schema = \"dbo\") #> \"dbo\".\"Customer\" # Create a SQL expression for an identifier: dbQuoteIdentifier(ANSI(), Id(\"nycflights13\", \"flights\")) #> \"nycflights13\".\"flights\" # Write a table in a specific schema: if (FALSE) { # \\dontrun{ dbWriteTable(con, Id(\"myschema\", \"mytable\"), data.frame(a = 1)) } # }"},{"path":"https://dbi.r-dbi.org/dev/reference/SQL.html","id":null,"dir":"Reference","previous_headings":"","what":"SQL quoting — SQL","title":"SQL quoting — SQL","text":"set classes generics make possible flexibly deal SQL escaping needs. default, user supplied input query escaped using either dbQuoteIdentifier() dbQuoteString() depending whether refers table variable name, literal string. functions may return object SQL class, tells DBI functions character string need escaped anymore, prevent double escaping. SQL class associated SQL() constructor function.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/SQL.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"SQL quoting — SQL","text":"","code":"SQL(x, ..., names = NULL)"},{"path":"https://dbi.r-dbi.org/dev/reference/SQL.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"SQL quoting — SQL","text":"x character vector label escaped SQL. ... arguments passed methods. otherwise used. names Names returned object, must length x.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/SQL.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"SQL quoting — SQL","text":"object class SQL.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/SQL.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"SQL quoting — SQL","text":"DBI provides default generics SQL-92 compatible quoting. database uses different convention, need provide methods. Note way S4 dispatch finds methods SQL inherits character, implement (e.g.) method dbQuoteString(MyConnection, character), also need implement dbQuoteString(MyConnection, SQL) - simply return x unchanged.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/SQL.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"SQL quoting — SQL","text":"","code":"dbQuoteIdentifier(ANSI(), \"SELECT\") #> \"SELECT\" dbQuoteString(ANSI(), \"SELECT\") #> 'SELECT' # SQL vectors are always passed through as is var_name <- SQL(\"SELECT\") var_name #> SELECT dbQuoteIdentifier(ANSI(), var_name) #> SELECT dbQuoteString(ANSI(), var_name) #> SELECT # This mechanism is used to prevent double escaping dbQuoteString(ANSI(), dbQuoteString(ANSI(), \"SELECT\")) #> 'SELECT'"},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Insert rows into a table — dbAppendTable","title":"Insert rows into a table — dbAppendTable","text":"dbAppendTable() method assumes table created beforehand, e.g. dbCreateTable(). default implementation calls sqlAppendTableTemplate() dbExecute() param argument. Use dbAppendTableArrow() append data Arrow stream.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Insert rows into a table — dbAppendTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbAppendTable(\"AdbiConnection\", \"\", \"\") bigrquery::dbAppendTable(\"BigQueryConnection\", \"AsIs\", \"data.frame\") bigrquery::dbAppendTable(\"BigQueryConnection\", \"character\", \"data.frame\") bigrquery::dbAppendTable(\"BigQueryConnection\", \"Id\", \"data.frame\") DatabaseConnector::dbAppendTable(\"DatabaseConnectorConnection\", \"character\", \"\") duckdb::dbAppendTable(\"duckdb_connection\", \"\", \"\") odbc::dbAppendTable(\"OdbcConnection\", \"\", \"\") pool::dbAppendTable(\"Pool\", \"\", \"\") RMariaDB::dbAppendTable(\"MariaDBConnection\", \"\", \"\") RPostgres::dbAppendTable(\"PqConnection\", \"\", \"\") RPresto::dbAppendTable(\"PrestoConnection\", \"\", \"data.frame\") RSQLite::dbAppendTable(\"SQLiteConnection\", \"\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Insert rows into a table — dbAppendTable","text":"","code":"dbAppendTable(conn, name, value, ..., row.names = NULL)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Insert rows into a table — dbAppendTable","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') value data.frame (coercible data.frame). ... parameters passed methods. row.names Must NULL.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Insert rows into a table — dbAppendTable","text":"dbAppendTable() returns scalar numeric.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Insert rows into a table — dbAppendTable","text":"Backends compliant ANSI SQL 99 use ? placeholder prepared queries need override . Backends different SQL syntax use ? placeholder prepared queries can override sqlAppendTable(). backends (different placeholders entirely different ways create tables) need override dbAppendTable() method. row.names argument supported method. Process values sqlRownamesToColumn() calling method.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Insert rows into a table — dbAppendTable","text":"table exist, new data values data frame different column names, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar. Invalid values row.names argument (non-scalars, unsupported data types, NA) also raise error. Passing value argument different NULL row.names argument (particular TRUE, NA, string) raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Insert rows into a table — dbAppendTable","text":"SQL keywords can used freely table names, column names, data. Quotes, commas, spaces, special characters newlines tabs, can also used data, , database supports non-syntactic identifiers, also table names column names. following data types must supported least, read identically dbReadTable(): integer numeric (behavior Inf NaN specified) logical NA NULL 64-bit values (using \"bigint\" field type); result can converted numeric, may lose precision, converted character vector, gives full decimal representation written another table read unchanged character (UTF-8 native encodings), supporting empty strings (non-empty strings) factor (returned character, warning) list raw (supported database) objects type blob::blob (supported database) date (supported database; returned Date) also dates prior 1970 1900 2038 time (supported database; returned objects inherit difftime) timestamp (supported database; returned POSIXct respecting time zone necessarily preserving input time zone), also timestamps prior 1970 1900 2038 respecting time zone necessarily preserving input time zone) Mixing column types table supported. name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbAppendTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done support databases allow non-syntactic names objects: row.names argument must NULL, default value. Row names ignored. value argument must data frame subset columns existing table. order columns matter.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Insert rows into a table — dbAppendTable","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbCreateTable(con, \"iris\", iris) dbAppendTable(con, \"iris\", iris) #> Warning: Factors converted to character #> [1] 150 dbReadTable(con, \"iris\") #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 5.1 3.5 1.4 0.2 setosa #> 2 4.9 3.0 1.4 0.2 setosa #> 3 4.7 3.2 1.3 0.2 setosa #> 4 4.6 3.1 1.5 0.2 setosa #> 5 5.0 3.6 1.4 0.2 setosa #> 6 5.4 3.9 1.7 0.4 setosa #> 7 4.6 3.4 1.4 0.3 setosa #> 8 5.0 3.4 1.5 0.2 setosa #> 9 4.4 2.9 1.4 0.2 setosa #> 10 4.9 3.1 1.5 0.1 setosa #> 11 5.4 3.7 1.5 0.2 setosa #> 12 4.8 3.4 1.6 0.2 setosa #> 13 4.8 3.0 1.4 0.1 setosa #> 14 4.3 3.0 1.1 0.1 setosa #> 15 5.8 4.0 1.2 0.2 setosa #> 16 5.7 4.4 1.5 0.4 setosa #> 17 5.4 3.9 1.3 0.4 setosa #> 18 5.1 3.5 1.4 0.3 setosa #> 19 5.7 3.8 1.7 0.3 setosa #> 20 5.1 3.8 1.5 0.3 setosa #> 21 5.4 3.4 1.7 0.2 setosa #> 22 5.1 3.7 1.5 0.4 setosa #> 23 4.6 3.6 1.0 0.2 setosa #> 24 5.1 3.3 1.7 0.5 setosa #> 25 4.8 3.4 1.9 0.2 setosa #> 26 5.0 3.0 1.6 0.2 setosa #> 27 5.0 3.4 1.6 0.4 setosa #> 28 5.2 3.5 1.5 0.2 setosa #> 29 5.2 3.4 1.4 0.2 setosa #> 30 4.7 3.2 1.6 0.2 setosa #> 31 4.8 3.1 1.6 0.2 setosa #> 32 5.4 3.4 1.5 0.4 setosa #> 33 5.2 4.1 1.5 0.1 setosa #> 34 5.5 4.2 1.4 0.2 setosa #> 35 4.9 3.1 1.5 0.2 setosa #> 36 5.0 3.2 1.2 0.2 setosa #> 37 5.5 3.5 1.3 0.2 setosa #> 38 4.9 3.6 1.4 0.1 setosa #> 39 4.4 3.0 1.3 0.2 setosa #> 40 5.1 3.4 1.5 0.2 setosa #> 41 5.0 3.5 1.3 0.3 setosa #> 42 4.5 2.3 1.3 0.3 setosa #> 43 4.4 3.2 1.3 0.2 setosa #> 44 5.0 3.5 1.6 0.6 setosa #> 45 5.1 3.8 1.9 0.4 setosa #> 46 4.8 3.0 1.4 0.3 setosa #> 47 5.1 3.8 1.6 0.2 setosa #> 48 4.6 3.2 1.4 0.2 setosa #> 49 5.3 3.7 1.5 0.2 setosa #> 50 5.0 3.3 1.4 0.2 setosa #> 51 7.0 3.2 4.7 1.4 versicolor #> 52 6.4 3.2 4.5 1.5 versicolor #> 53 6.9 3.1 4.9 1.5 versicolor #> 54 5.5 2.3 4.0 1.3 versicolor #> 55 6.5 2.8 4.6 1.5 versicolor #> 56 5.7 2.8 4.5 1.3 versicolor #> 57 6.3 3.3 4.7 1.6 versicolor #> 58 4.9 2.4 3.3 1.0 versicolor #> 59 6.6 2.9 4.6 1.3 versicolor #> 60 5.2 2.7 3.9 1.4 versicolor #> 61 5.0 2.0 3.5 1.0 versicolor #> 62 5.9 3.0 4.2 1.5 versicolor #> 63 6.0 2.2 4.0 1.0 versicolor #> 64 6.1 2.9 4.7 1.4 versicolor #> 65 5.6 2.9 3.6 1.3 versicolor #> 66 6.7 3.1 4.4 1.4 versicolor #> 67 5.6 3.0 4.5 1.5 versicolor #> 68 5.8 2.7 4.1 1.0 versicolor #> 69 6.2 2.2 4.5 1.5 versicolor #> 70 5.6 2.5 3.9 1.1 versicolor #> 71 5.9 3.2 4.8 1.8 versicolor #> 72 6.1 2.8 4.0 1.3 versicolor #> 73 6.3 2.5 4.9 1.5 versicolor #> 74 6.1 2.8 4.7 1.2 versicolor #> 75 6.4 2.9 4.3 1.3 versicolor #> 76 6.6 3.0 4.4 1.4 versicolor #> 77 6.8 2.8 4.8 1.4 versicolor #> 78 6.7 3.0 5.0 1.7 versicolor #> 79 6.0 2.9 4.5 1.5 versicolor #> 80 5.7 2.6 3.5 1.0 versicolor #> 81 5.5 2.4 3.8 1.1 versicolor #> 82 5.5 2.4 3.7 1.0 versicolor #> 83 5.8 2.7 3.9 1.2 versicolor #> 84 6.0 2.7 5.1 1.6 versicolor #> 85 5.4 3.0 4.5 1.5 versicolor #> 86 6.0 3.4 4.5 1.6 versicolor #> 87 6.7 3.1 4.7 1.5 versicolor #> 88 6.3 2.3 4.4 1.3 versicolor #> 89 5.6 3.0 4.1 1.3 versicolor #> 90 5.5 2.5 4.0 1.3 versicolor #> 91 5.5 2.6 4.4 1.2 versicolor #> 92 6.1 3.0 4.6 1.4 versicolor #> 93 5.8 2.6 4.0 1.2 versicolor #> 94 5.0 2.3 3.3 1.0 versicolor #> 95 5.6 2.7 4.2 1.3 versicolor #> 96 5.7 3.0 4.2 1.2 versicolor #> 97 5.7 2.9 4.2 1.3 versicolor #> 98 6.2 2.9 4.3 1.3 versicolor #> 99 5.1 2.5 3.0 1.1 versicolor #> 100 5.7 2.8 4.1 1.3 versicolor #> 101 6.3 3.3 6.0 2.5 virginica #> 102 5.8 2.7 5.1 1.9 virginica #> 103 7.1 3.0 5.9 2.1 virginica #> 104 6.3 2.9 5.6 1.8 virginica #> 105 6.5 3.0 5.8 2.2 virginica #> 106 7.6 3.0 6.6 2.1 virginica #> 107 4.9 2.5 4.5 1.7 virginica #> 108 7.3 2.9 6.3 1.8 virginica #> 109 6.7 2.5 5.8 1.8 virginica #> 110 7.2 3.6 6.1 2.5 virginica #> 111 6.5 3.2 5.1 2.0 virginica #> 112 6.4 2.7 5.3 1.9 virginica #> 113 6.8 3.0 5.5 2.1 virginica #> 114 5.7 2.5 5.0 2.0 virginica #> 115 5.8 2.8 5.1 2.4 virginica #> 116 6.4 3.2 5.3 2.3 virginica #> 117 6.5 3.0 5.5 1.8 virginica #> 118 7.7 3.8 6.7 2.2 virginica #> 119 7.7 2.6 6.9 2.3 virginica #> 120 6.0 2.2 5.0 1.5 virginica #> 121 6.9 3.2 5.7 2.3 virginica #> 122 5.6 2.8 4.9 2.0 virginica #> 123 7.7 2.8 6.7 2.0 virginica #> 124 6.3 2.7 4.9 1.8 virginica #> 125 6.7 3.3 5.7 2.1 virginica #> 126 7.2 3.2 6.0 1.8 virginica #> 127 6.2 2.8 4.8 1.8 virginica #> 128 6.1 3.0 4.9 1.8 virginica #> 129 6.4 2.8 5.6 2.1 virginica #> 130 7.2 3.0 5.8 1.6 virginica #> 131 7.4 2.8 6.1 1.9 virginica #> 132 7.9 3.8 6.4 2.0 virginica #> 133 6.4 2.8 5.6 2.2 virginica #> 134 6.3 2.8 5.1 1.5 virginica #> 135 6.1 2.6 5.6 1.4 virginica #> 136 7.7 3.0 6.1 2.3 virginica #> 137 6.3 3.4 5.6 2.4 virginica #> 138 6.4 3.1 5.5 1.8 virginica #> 139 6.0 3.0 4.8 1.8 virginica #> 140 6.9 3.1 5.4 2.1 virginica #> 141 6.7 3.1 5.6 2.4 virginica #> 142 6.9 3.1 5.1 2.3 virginica #> 143 5.8 2.7 5.1 1.9 virginica #> 144 6.8 3.2 5.9 2.3 virginica #> 145 6.7 3.3 5.7 2.5 virginica #> 146 6.7 3.0 5.2 2.3 virginica #> 147 6.3 2.5 5.0 1.9 virginica #> 148 6.5 3.0 5.2 2.0 virginica #> 149 6.2 3.4 5.4 2.3 virginica #> 150 5.9 3.0 5.1 1.8 virginica dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"dbAppendTableArrow() method assumes table created beforehand, e.g. dbCreateTableArrow(). default implementation calls dbAppendTable() chunk stream. Use dbAppendTable() append data data.frame.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbAppendTableArrow(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"","code":"dbAppendTableArrow(conn, name, value, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') value object coercible nanoarrow::as_nanoarrow_array_stream(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"dbAppendTableArrow() returns scalar numeric.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"table exist, new data values data frame different column names, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"SQL keywords can used freely table names, column names, data. Quotes, commas, spaces, special characters newlines tabs, can also used data, , database supports non-syntactic identifiers, also table names column names. following data types must supported least, read identically dbReadTable(): integer numeric (behavior Inf NaN specified) logical NA NULL 64-bit values (using \"bigint\" field type); result can converted numeric, may lose precision, converted character vector, gives full decimal representation written another table read unchanged character (UTF-8 native encodings), supporting empty strings (non-empty strings) factor (possibly returned character) objects type blob::blob (supported database) date (supported database; returned Date) also dates prior 1970 1900 2038 time (supported database; returned objects inherit difftime) timestamp (supported database; returned POSIXct respecting time zone necessarily preserving input time zone), also timestamps prior 1970 1900 2038 respecting time zone necessarily preserving input time zone) Mixing column types table supported. name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbAppendTableArrow() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done support databases allow non-syntactic names objects: value argument must data frame subset columns existing table. order columns matter.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbAppendTableArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Insert rows into a table from an Arrow stream — dbAppendTableArrow","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbCreateTableArrow(con, \"iris\", iris[0, ]) dbAppendTableArrow(con, \"iris\", iris[1:5, ]) #> [1] 5 dbReadTable(con, \"iris\") #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 5.1 3.5 1.4 0.2 setosa #> 2 4.9 3.0 1.4 0.2 setosa #> 3 4.7 3.2 1.3 0.2 setosa #> 4 4.6 3.1 1.5 0.2 setosa #> 5 5.0 3.6 1.4 0.2 setosa dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":null,"dir":"Reference","previous_headings":"","what":"Bind values to a parameterized/prepared statement — dbBind","title":"Bind values to a parameterized/prepared statement — dbBind","text":"parametrized prepared statements, dbSendQuery(), dbSendQueryArrow(), dbSendStatement() functions can called statements contain placeholders values. dbBind() dbBindArrow() functions bind placeholders actual values, intended called result set calling dbFetch() dbFetchArrow(). values passed dbBind() lists data frames, dbBindArrow() stream created nanoarrow::as_nanoarrow_array_stream(). dbBindArrow() experimental, *Arrow functions. dbSendQuery() compatible dbBindArrow(), dbSendQueryArrow() compatible dbBind().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Bind values to a parameterized/prepared statement — dbBind","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbBind(\"AdbiResult\") adbi::dbBind(\"AdbiResultArrow\") bigrquery::dbBind(\"BigQueryResult\") duckdb::dbBind(\"duckdb_result\") odbc::dbBind(\"OdbcResult\") RMariaDB::dbBind(\"MariaDBResult\") RPostgres::dbBind(\"PqResult\") RSQLite::dbBind(\"SQLiteResult\") sparklyr::dbBind(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Bind values to a parameterized/prepared statement — dbBind","text":"","code":"dbBind(res, params, ...) dbBindArrow(res, params, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Bind values to a parameterized/prepared statement — dbBind","text":"res object inheriting DBIResult. params dbBind(), list values, named unnamed, data frame, one element/column per query parameter. dbBindArrow(), values nanoarrow stream, one column per query parameter. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Bind values to a parameterized/prepared statement — dbBind","text":"dbBind() returns result set, invisibly, queries issued dbSendQuery() dbSendQueryArrow() also data manipulation statements issued dbSendStatement().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Bind values to a parameterized/prepared statement — dbBind","text":"DBI supports parametrized (prepared) queries statements via dbBind() dbBindArrow() generics. Parametrized queries different normal queries allow arbitrary number placeholders, later substituted actual values. Parametrized queries (statements) serve two purposes: query can executed different values. DBMS may cache intermediate information query, execution plan, execute faster. Separation query syntax parameters protects SQL injection. placeholder format currently specified DBI; future, uniform placeholder syntax may supported. Consult backend documentation supported formats. automated testing, backend authors specify placeholder syntax placeholder_pattern tweak. Known examples : ? (positional matching order appearance) RMariaDB RSQLite $1 (positional matching index) RPostgres RSQLite :name $name (named matching) RSQLite","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"the-data-retrieval-flow","dir":"Reference","previous_headings":"","what":"The data retrieval flow","title":"Bind values to a parameterized/prepared statement — dbBind","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"the-data-retrieval-flow-for-arrow-streams","dir":"Reference","previous_headings":"","what":"The data retrieval flow for Arrow streams","title":"Bind values to a parameterized/prepared statement — dbBind","text":"section gives complete overview flow execution queries return tabular data Arrow stream. flow, except repeated calling dbBindArrow() dbBind(), implemented dbGetQueryArrow(), sufficient unless parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQueryArrow() create result set object class DBIResultArrow. Optionally, bind query parameters dbBindArrow() dbBind(). required query contains placeholders ? $1, depending database backend. Use dbFetchArrow() get data stream. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"the-command-execution-flow","dir":"Reference","previous_headings":"","what":"The command execution flow","title":"Bind values to a parameterized/prepared statement — dbBind","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Bind values to a parameterized/prepared statement — dbBind","text":"Calling dbBind() query without parameters raises error. Binding many enough values, parameters wrong names unequal length, also raises error. placeholders query named, parameter values must names (must empty NA), vice versa, otherwise error raised. behavior mixing placeholders different types (particular mixing positional named placeholders) specified. Calling dbBind() result set already cleared dbClearResult() also raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Bind values to a parameterized/prepared statement — dbBind","text":"DBI clients execute parametrized statements follows: Call dbSendQuery(), dbSendQueryArrow() dbSendStatement() query statement contains placeholders, store returned DBIResult object variable. Mixing placeholders (particular, named unnamed ones) recommended. good practice register call dbClearResult() via .exit() right calling dbSendQuery() dbSendStatement() (see last enumeration item). dbBind() dbBindArrow() called, returned result set object following behavior: dbFetch() raises error (dbSendQuery() dbSendQueryArrow()) dbGetRowCount() returns zero (dbSendQuery() dbSendQueryArrow()) dbGetRowsAffected() returns integer NA (dbSendStatement()) dbIsValid() returns TRUE dbHasCompleted() returns FALSE Call dbBind() dbBindArrow(): dbBind(), params argument must list elements lengths contain values supported backend. data.frame internally stored list. dbBindArrow(), params argument must nanoarrow array stream, one column per query parameter. Retrieve data number affected rows DBIResult object. queries issued dbSendQuery() dbSendQueryArrow(), call dbFetch(). statements issued dbSendStatements(), call dbGetRowsAffected(). (Execution begins immediately dbBind() call, statement processed entirely function returns.) Repeat 2. 3. necessary. Close result set via dbClearResult(). elements params argument need scalars, vectors arbitrary length (including length 0) supported. queries, calling dbFetch() binding parameters returns concatenated results, equivalent binding fetching set values connecting via rbind(). data manipulation statements, dbGetRowsAffected() returns total number rows affected binding non-scalar parameters. dbBind() also accepts repeated calls result set queries data manipulation statements, even results fetched calls dbBind(), queries data manipulation statements. placeholders query named, order params argument important. least following data types accepted input (including NA): integer numeric logical Boolean values character (also special characters spaces, newlines, quotes, backslashes) factor (bound character, warning) Date (also stored internally integer) POSIXct timestamps POSIXlt timestamps difftime values (also units seconds value stored integer) lists raw blobs (NULL entries SQL NULL values) objects type blob::blob","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbBind.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Bind values to a parameterized/prepared statement — dbBind","text":"","code":"# Data frame flow: con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"iris\", iris) # Using the same query for different values iris_result <- dbSendQuery(con, \"SELECT * FROM iris WHERE [Petal.Width] > ?\") dbBind(iris_result, list(2.3)) dbFetch(iris_result) #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 6.3 3.3 6.0 2.5 virginica #> 2 7.2 3.6 6.1 2.5 virginica #> 3 5.8 2.8 5.1 2.4 virginica #> 4 6.3 3.4 5.6 2.4 virginica #> 5 6.7 3.1 5.6 2.4 virginica #> 6 6.7 3.3 5.7 2.5 virginica dbBind(iris_result, list(3)) dbFetch(iris_result) #> [1] Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> <0 rows> (or 0-length row.names) dbClearResult(iris_result) # Executing the same statement with different values at once iris_result <- dbSendStatement(con, \"DELETE FROM iris WHERE [Species] = $species\") dbBind(iris_result, list(species = c(\"setosa\", \"versicolor\", \"unknown\"))) dbGetRowsAffected(iris_result) #> [1] 100 dbClearResult(iris_result) nrow(dbReadTable(con, \"iris\")) #> [1] 50 dbDisconnect(con) # Arrow flow: con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"iris\", iris) # Using the same query for different values iris_result <- dbSendQueryArrow(con, \"SELECT * FROM iris WHERE [Petal.Width] > ?\") dbBindArrow( iris_result, nanoarrow::as_nanoarrow_array_stream(data.frame(2.3, fix.empty.names = FALSE)) ) as.data.frame(dbFetchArrow(iris_result)) #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 6.3 3.3 6.0 2.5 virginica #> 2 7.2 3.6 6.1 2.5 virginica #> 3 5.8 2.8 5.1 2.4 virginica #> 4 6.3 3.4 5.6 2.4 virginica #> 5 6.7 3.1 5.6 2.4 virginica #> 6 6.7 3.3 5.7 2.5 virginica dbBindArrow( iris_result, nanoarrow::as_nanoarrow_array_stream(data.frame(3, fix.empty.names = FALSE)) ) as.data.frame(dbFetchArrow(iris_result)) #> [1] Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> <0 rows> (or 0-length row.names) dbClearResult(iris_result) # Executing the same statement with different values at once iris_result <- dbSendStatement(con, \"DELETE FROM iris WHERE [Species] = $species\") dbBindArrow(iris_result, nanoarrow::as_nanoarrow_array_stream(data.frame( species = c(\"setosa\", \"versicolor\", \"unknown\") ))) dbGetRowsAffected(iris_result) #> [1] 100 dbClearResult(iris_result) nrow(dbReadTable(con, \"iris\")) #> [1] 50 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCallProc.html","id":null,"dir":"Reference","previous_headings":"","what":"Call an SQL stored procedure — dbCallProc","title":"Call an SQL stored procedure — dbCallProc","text":"Deprecated since 2014","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCallProc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Call an SQL stored procedure — dbCallProc","text":"","code":"dbCallProc(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCallProc.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Call an SQL stored procedure — dbCallProc","text":"conn DBIConnection object, returned dbConnect(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCallProc.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Call an SQL stored procedure — dbCallProc","text":"recommended way calling stored procedure now dbGetQuery result set returned dbExecute data manipulation cases result set returned","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCanConnect.html","id":null,"dir":"Reference","previous_headings":"","what":"Check if a connection to a DBMS can be established — dbCanConnect","title":"Check if a connection to a DBMS can be established — dbCanConnect","text":"Like dbConnect(), checks validity without actually returning connection object. default implementation opens connection disconnects success, individual backends might implement lighter-weight check.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCanConnect.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Check if a connection to a DBMS can be established — dbCanConnect","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. AzureKusto::dbCanConnect(\"AzureKustoDriver\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCanConnect.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check if a connection to a DBMS can be established — dbCanConnect","text":"","code":"dbCanConnect(drv, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCanConnect.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check if a connection to a DBMS can be established — dbCanConnect","text":"drv object inherits DBIDriver, existing DBIConnection object (order clone existing connection). ... authentication arguments needed DBMS instance; typically include user, password, host, port, dbname, etc. details see appropriate DBIDriver.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCanConnect.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check if a connection to a DBMS can be established — dbCanConnect","text":"scalar logical. FALSE, \"reason\" attribute indicates reason failure.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbCanConnect.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Check if a connection to a DBMS can be established — dbCanConnect","text":"","code":"# SQLite only needs a path to the database. (Here, \":memory:\" is a special # path that creates an in-memory database.) Other database drivers # will require more details (like user, password, host, port, etc.) dbCanConnect(RSQLite::SQLite(), \":memory:\") #> [1] TRUE"},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":null,"dir":"Reference","previous_headings":"","what":"Clear a result set — dbClearResult","title":"Clear a result set — dbClearResult","text":"Frees resources (local remote) associated result set. step mandatory objects obtained calling dbSendQuery() dbSendStatement().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Clear a result set — dbClearResult","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbClearResult(\"AdbiResult\") adbi::dbClearResult(\"AdbiResultArrow\") bigrquery::dbClearResult(\"BigQueryResult\") DatabaseConnector::dbClearResult(\"DatabaseConnectorDbiResult\") DatabaseConnector::dbClearResult(\"DatabaseConnectorJdbcResult\") dittodb::dbClearResult(\"DBIMockResult\") duckdb::dbClearResult(\"duckdb_result\") lazysf::dbClearResult(\"SFSQLResult\") odbc::dbClearResult(\"OdbcResult\") RAthena::dbClearResult(\"AthenaResult\") RJDBC::dbClearResult(\"JDBCResult\") RMariaDB::dbClearResult(\"MariaDBResult\") RMySQL::dbClearResult(\"MySQLResult\") RPostgres::dbClearResult(\"PqResult\") RPostgreSQL::dbClearResult(\"PostgreSQLResult\") RPresto::dbClearResult(\"PrestoResult\") RSQLite::dbClearResult(\"SQLiteResult\") sergeant::dbClearResult(\"DrillResult\") sparklyr::dbClearResult(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Clear a result set — dbClearResult","text":"","code":"dbClearResult(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Clear a result set — dbClearResult","text":"res object inheriting DBIResult. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Clear a result set — dbClearResult","text":"dbClearResult() returns TRUE, invisibly, result sets obtained dbSendQuery(), dbSendStatement(), dbSendQueryArrow(),","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"the-data-retrieval-flow","dir":"Reference","previous_headings":"","what":"The data retrieval flow","title":"Clear a result set — dbClearResult","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"the-command-execution-flow","dir":"Reference","previous_headings":"","what":"The command execution flow","title":"Clear a result set — dbClearResult","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Clear a result set — dbClearResult","text":"attempt close already closed result set issues warning dbSendQuery(), dbSendStatement(), dbSendQueryArrow(),","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Clear a result set — dbClearResult","text":"dbClearResult() frees resources associated retrieving result query update operation. DBI backend can expect call dbClearResult() dbSendQuery() dbSendStatement() call.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbClearResult.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Clear a result set — dbClearResult","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") rs <- dbSendQuery(con, \"SELECT 1\") print(dbFetch(rs)) #> 1 #> 1 1 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":null,"dir":"Reference","previous_headings":"","what":"Information about result types — dbColumnInfo","title":"Information about result types — dbColumnInfo","text":"Produces data.frame describes output query. data.frame many rows output fields result set, column data.frame describes aspect result set field (field name, type, etc.)","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Information about result types — dbColumnInfo","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbColumnInfo(\"AdbiResult\") adbi::dbColumnInfo(\"AdbiResultArrow\") AzureKusto::dbColumnInfo(\"AzureKustoResult\") bigrquery::dbColumnInfo(\"BigQueryResult\") DatabaseConnector::dbColumnInfo(\"DatabaseConnectorDbiResult\") DatabaseConnector::dbColumnInfo(\"DatabaseConnectorJdbcResult\") dittodb::dbColumnInfo(\"DBIMockResult\") duckdb::dbColumnInfo(\"duckdb_result\") odbc::dbColumnInfo(\"OdbcResult\") RAthena::dbColumnInfo(\"AthenaResult\") RJDBC::dbColumnInfo(\"JDBCResult\") RMariaDB::dbColumnInfo(\"MariaDBResult\") RMySQL::dbColumnInfo(\"MySQLConnection\") RMySQL::dbColumnInfo(\"MySQLResult\") RPostgres::dbColumnInfo(\"PqResult\") RPostgreSQL::dbColumnInfo(\"PostgreSQLResult\") RSQLite::dbColumnInfo(\"SQLiteResult\") sparklyr::dbColumnInfo(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Information about result types — dbColumnInfo","text":"","code":"dbColumnInfo(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Information about result types — dbColumnInfo","text":"res object inheriting DBIResult. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Information about result types — dbColumnInfo","text":"dbColumnInfo() returns data frame least two columns \"name\" \"type\" (order) (optional columns start dot). \"name\" \"type\" columns contain names types R columns data frame returned dbFetch(). \"type\" column type character information. compute \"type\" column, instead use dbFetch(res, n = 0) create zero-row data frame initialized correct data types.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"the-data-retrieval-flow","dir":"Reference","previous_headings":"","what":"The data retrieval flow","title":"Information about result types — dbColumnInfo","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Information about result types — dbColumnInfo","text":"attempt query columns closed result set raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Information about result types — dbColumnInfo","text":"column named row_names treated like column. column names always consistent data returned dbFetch(). query returns unnamed columns, non-empty non-NA names assigned. Column names correspond SQL R keywords left unchanged.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbColumnInfo.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Information about result types — dbColumnInfo","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") rs <- dbSendQuery(con, \"SELECT 1 AS a, 2 AS b\") dbColumnInfo(rs) #> name type #> 1 a integer #> 2 b integer dbFetch(rs) #> a b #> 1 1 2 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a connection to a DBMS — dbConnect","title":"Create a connection to a DBMS — dbConnect","text":"Connect DBMS going appropriate authentication procedure. implementations may allow multiple connections open, may invoke function repeatedly assigning output different objects. authentication mechanism left unspecified, check documentation individual drivers details. Use dbCanConnect() check connection can established.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Create a connection to a DBMS — dbConnect","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbConnect(\"AdbiDriver\") AzureKusto::dbConnect(\"AzureKustoDriver\") bigrquery::dbConnect(\"BigQueryDriver\") bigrquery::dbConnect(\"bq_dataset\") DatabaseConnector::dbConnect(\"DatabaseConnectorDriver\") duckdb::dbConnect(\"duckdb_driver\") lazysf::dbConnect(\"SFSQLDriver\") odbc::dbConnect(\"DatabricksOdbcDriver\") odbc::dbConnect(\"OdbcDriver\") odbc::dbConnect(\"Snowflake\") RAthena::dbConnect(\"AthenaDriver\") RH2::dbConnect(\"H2Driver\") RJDBC::dbConnect(\"JDBCDriver\") RMariaDB::dbConnect(\"MariaDBDriver\") RMySQL::dbConnect(\"MySQLConnection\") RMySQL::dbConnect(\"MySQLDriver\") RPostgres::dbConnect(\"PqDriver\") RPostgres::dbConnect(\"RedshiftDriver\") RPostgreSQL::dbConnect(\"character\") RPostgreSQL::dbConnect(\"PostgreSQLConnection\") RPostgreSQL::dbConnect(\"PostgreSQLDriver\") RPresto::dbConnect(\"PrestoDriver\") RSQLite::dbConnect(\"SQLiteConnection\") RSQLite::dbConnect(\"SQLiteDriver\") sergeant::dbConnect(\"DrillDriver\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a connection to a DBMS — dbConnect","text":"","code":"dbConnect(drv, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a connection to a DBMS — dbConnect","text":"drv object inherits DBIDriver, existing DBIConnection object (order clone existing connection). ... authentication arguments needed DBMS instance; typically include user, password, host, port, dbname, etc. details see appropriate DBIDriver.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a connection to a DBMS — dbConnect","text":"dbConnect() returns S4 object inherits DBIConnection. object used communicate database engine. format() method defined connection object. returns string consists single line text.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Create a connection to a DBMS — dbConnect","text":"DBI recommends using following argument names authentication parameters, NULL default: user user name (default: current user) password password host host name (default: local connection) port port number (default: local connection) dbname name database host, database file name defaults provide reasonable behavior, particular local connection host = NULL. DBMS (e.g., PostgreSQL), different TCP/IP connection localhost. addition, DBI supports bigint argument governs 64-bit integer data returned. following values supported: \"integer\": always return integer, silently overflow \"numeric\": always return numeric, silently round \"character\": always return decimal representation character \"integer64\": return data type can coerced using .integer() (warning overflow), .numeric() .character()","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbConnect.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a connection to a DBMS — dbConnect","text":"","code":"# SQLite only needs a path to the database. (Here, \":memory:\" is a special # path that creates an in-memory database.) Other database drivers # will require more details (like user, password, host, port, etc.) con <- dbConnect(RSQLite::SQLite(), \":memory:\") con #> #> Path: :memory: #> Extensions: TRUE dbListTables(con) #> character(0) dbDisconnect(con) # Bad, for subtle reasons: # This code fails when RSQLite isn't loaded yet, # because dbConnect() doesn't know yet about RSQLite. dbListTables(con <- dbConnect(RSQLite::SQLite(), \":memory:\")) #> character(0)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a table in the database — dbCreateTable","title":"Create a table in the database — dbCreateTable","text":"default dbCreateTable() method calls sqlCreateTable() dbExecute(). Use dbCreateTableArrow() create table Arrow schema.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Create a table in the database — dbCreateTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. AzureKusto::dbCreateTable(\"AzureKustoConnection\") bigrquery::dbCreateTable(\"BigQueryConnection\") DatabaseConnector::dbCreateTable(\"DatabaseConnectorConnection\") pool::dbCreateTable(\"Pool\") RPresto::dbCreateTable(\"PrestoConnection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a table in the database — dbCreateTable","text":"","code":"dbCreateTable(conn, name, fields, ..., row.names = NULL, temporary = FALSE)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a table in the database — dbCreateTable","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') fields Either character vector data frame. named character vector: Names column names, values types. Names escaped dbQuoteIdentifier(). Field types unescaped. data frame: field types generated using dbDataType(). ... parameters passed methods. row.names Must NULL. temporary TRUE, generate temporary table.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a table in the database — dbCreateTable","text":"dbCreateTable() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a table in the database — dbCreateTable","text":"Backends compliant ANSI SQL 99 need override . Backends different SQL syntax can override sqlCreateTable(), backends entirely different ways create tables need override method. row.names argument supported method. Process values sqlRownamesToColumn() calling method. argument order different sqlCreateTable() method, latter adapted later release DBI.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Create a table in the database — dbCreateTable","text":"table exists, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar. Invalid values row.names temporary arguments (non-scalars, unsupported data types, NA, incompatible values, duplicate names) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Create a table in the database — dbCreateTable","text":"following arguments part dbCreateTable() generic (improve compatibility across backends) part DBI specification: temporary (default: FALSE) must provided named arguments. See \"Specification\" \"Value\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Create a table in the database — dbCreateTable","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbCreateTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done value argument can : data frame, named list SQL types temporary argument TRUE, table available second connection gone reconnecting. backends support argument. regular, non-temporary table visible second connection, pre-existing connection, reconnecting database. SQL keywords can used freely table names, column names, data. Quotes, commas, spaces can also used table names column names, database supports non-syntactic identifiers. row.names argument must missing NULL, default value. values row.names argument (particular TRUE, NA, string) raise error.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a table in the database — dbCreateTable","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbCreateTable(con, \"iris\", iris) dbReadTable(con, \"iris\") #> [1] Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> <0 rows> (or 0-length row.names) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a table in the database based on an Arrow object — dbCreateTableArrow","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"default dbCreateTableArrow() method determines R data types Arrow schema associated Arrow object, calls dbCreateTable(). Backends implement dbAppendTableArrow() typically also implement generic. Use dbCreateTable() create table column types defined data frame.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbCreateTableArrow(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"","code":"dbCreateTableArrow(conn, name, value, ..., temporary = FALSE)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') value object schema can determined via nanoarrow::infer_nanoarrow_schema(). ... parameters passed methods. temporary TRUE, generate temporary table.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"dbCreateTableArrow() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"table exists, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar. Invalid values temporary argument (non-scalars, unsupported data types, NA, incompatible values, duplicate names) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"following arguments part dbCreateTableArrow() generic (improve compatibility across backends) part DBI specification: temporary (default: FALSE) must provided named arguments. See \"Specification\" \"Value\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbCreateTableArrow() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done value argument can : data frame, nanoarrow array nanoarrow array stream (still contain data call) nanoarrow schema temporary argument TRUE, table available second connection gone reconnecting. backends support argument. regular, non-temporary table visible second connection, pre-existing connection, reconnecting database. SQL keywords can used freely table names, column names, data. Quotes, commas, spaces can also used table names column names, database supports non-syntactic identifiers.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbCreateTableArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a table in the database based on an Arrow object — dbCreateTableArrow","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") ptype <- data.frame(a = numeric()) dbCreateTableArrow(con, \"df\", nanoarrow::infer_nanoarrow_schema(ptype)) dbReadTable(con, \"df\") #> [1] a #> <0 rows> (or 0-length row.names) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":null,"dir":"Reference","previous_headings":"","what":"Determine the SQL data type of an object — dbDataType","title":"Determine the SQL data type of an object — dbDataType","text":"Returns SQL string describes SQL data type used object. default implementation generic determines SQL type R object according SQL 92 specification, may serve starting point driver implementations. DBI also provides implementation data.frame return character vector giving type column dataframe.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Determine the SQL data type of an object — dbDataType","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbDataType(\"AdbiConnection\", \"\") adbi::dbDataType(\"AdbiDriver\", \"\") bigrquery::dbDataType(\"BigQueryConnection\", \"\") bigrquery::dbDataType(\"BigQueryDriver\", \"\") duckdb::dbDataType(\"duckdb_connection\", \"\") duckdb::dbDataType(\"duckdb_driver\", \"\") lazysf::dbDataType(\"SFSQLDriver\", \"\") odbc::dbDataType(\"OdbcConnection\", \"\") odbc::dbDataType(\"OdbcConnection\", \"data.frame\") odbc::dbDataType(\"OdbcDriver\", \"\") odbc::dbDataType(\"OdbcDriver\", \"data.frame\") odbc::dbDataType(\"OdbcDriver\", \"list\") pool::dbDataType(\"Pool\", \"\") RAthena::dbDataType(\"AthenaConnection\", \"\") RAthena::dbDataType(\"AthenaConnection\", \"data.frame\") RAthena::dbDataType(\"AthenaDriver\", \"\") RAthena::dbDataType(\"AthenaDriver\", \"list\") RH2::dbDataType(\"H2Connection\", \"\") RJDBC::dbDataType(\"JDBCConnection\", \"\") RMariaDB::dbDataType(\"MariaDBConnection\", \"\") RMariaDB::dbDataType(\"MariaDBDriver\", \"\") RMySQL::dbDataType(\"MySQLConnection\", \"\") RMySQL::dbDataType(\"MySQLDriver\", \"\") RPostgres::dbDataType(\"PqConnection\", \"\") RPostgres::dbDataType(\"PqDriver\", \"\") RPostgreSQL::dbDataType(\"PostgreSQLObject\", \"\") RPresto::dbDataType(\"PrestoDriver\", \"\") RSQLite::dbDataType(\"SQLiteConnection\", \"\") RSQLite::dbDataType(\"SQLiteDriver\", \"\") sergeant::dbDataType(\"DrillConnection\", \"\") sf::dbDataType(\"DBIObject\", \"sf\") sf::dbDataType(\"PostgreSQLConnection\", \"sf\") sparklyr::dbDataType(\"spark_connection\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Determine the SQL data type of an object — dbDataType","text":"","code":"dbDataType(dbObj, obj, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Determine the SQL data type of an object — dbDataType","text":"dbObj object inheriting DBIDriver DBIConnection obj R object whose SQL type want determine. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Determine the SQL data type of an object — dbDataType","text":"dbDataType() returns SQL type corresponds obj argument non-empty character string. data frames, character vector one element per column returned.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Determine the SQL data type of an object — dbDataType","text":"data types supported databases different data types R, mapping primitive types straightforward: many fixed varying length character types mapped character vectors Fixed-precision (non-IEEE) numbers mapped either numeric integer vectors. Notice many DBMS follow IEEE arithmetic, potential problems /overflows loss precision.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Determine the SQL data type of an object — dbDataType","text":"error raised invalid values obj argument NULL value.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Determine the SQL data type of an object — dbDataType","text":"backend can override dbDataType() generic driver class. generic expects arbitrary object second argument. query values returned default implementation, run example(dbDataType, package = \"DBI\"). backend needs override generic, must accept basic R data types second argument, namely logical, integer, numeric, character, dates (see Dates), date-time (see DateTimeClasses), difftime. database supports blobs, method also must accept lists raw vectors, blob::blob objects. -objects (.e., wrapped ()) must supported return results unwrapped counterparts. SQL data type factor ordered character. behavior object types specified. data types returned dbDataType() usable SQL statement form \"CREATE TABLE test (...)\".","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbDataType.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Determine the SQL data type of an object — dbDataType","text":"","code":"dbDataType(ANSI(), 1:5) #> [1] \"INT\" dbDataType(ANSI(), 1) #> [1] \"DOUBLE\" dbDataType(ANSI(), TRUE) #> [1] \"SMALLINT\" dbDataType(ANSI(), Sys.Date()) #> [1] \"DATE\" dbDataType(ANSI(), Sys.time()) #> [1] \"TIMESTAMP\" dbDataType(ANSI(), Sys.time() - as.POSIXct(Sys.Date())) #> [1] \"TIME\" dbDataType(ANSI(), c(\"x\", \"abc\")) #> [1] \"TEXT\" dbDataType(ANSI(), list(raw(10), raw(20))) #> [1] \"BLOB\" dbDataType(ANSI(), I(3)) #> [1] \"DOUBLE\" dbDataType(ANSI(), iris) #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> \"DOUBLE\" \"DOUBLE\" \"DOUBLE\" \"DOUBLE\" \"TEXT\" con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbDataType(con, 1:5) #> [1] \"INTEGER\" dbDataType(con, 1) #> [1] \"REAL\" dbDataType(con, TRUE) #> [1] \"INTEGER\" dbDataType(con, Sys.Date()) #> [1] \"REAL\" dbDataType(con, Sys.time()) #> [1] \"REAL\" dbDataType(con, Sys.time() - as.POSIXct(Sys.Date())) #> [1] \"REAL\" dbDataType(con, c(\"x\", \"abc\")) #> [1] \"TEXT\" dbDataType(con, list(raw(10), raw(20))) #> [1] \"BLOB\" dbDataType(con, I(3)) #> [1] \"REAL\" dbDataType(con, iris) #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> \"DOUBLE\" \"DOUBLE\" \"DOUBLE\" \"DOUBLE\" \"TEXT\" dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":null,"dir":"Reference","previous_headings":"","what":"Disconnect (close) a connection — dbDisconnect","title":"Disconnect (close) a connection — dbDisconnect","text":"closes connection, discards pending work, frees resources (e.g., memory, sockets).","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Disconnect (close) a connection — dbDisconnect","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbDisconnect(\"AdbiConnection\") AzureKusto::dbDisconnect(\"AzureKustoDriver\") bigrquery::dbDisconnect(\"BigQueryConnection\") DatabaseConnector::dbDisconnect(\"DatabaseConnectorConnection\") dittodb::dbDisconnect(\"DBIMockConnection\") duckdb::dbDisconnect(\"duckdb_connection\") implyr::dbDisconnect(\"src_impala\") lazysf::dbDisconnect(\"SFSQLConnection\") odbc::dbDisconnect(\"OdbcConnection\") pool::dbDisconnect(\"Pool\") RAthena::dbDisconnect(\"AthenaConnection\") RJDBC::dbDisconnect(\"JDBCConnection\") RMariaDB::dbDisconnect(\"MariaDBConnection\") RMySQL::dbDisconnect(\"MySQLConnection\") RPostgres::dbDisconnect(\"PqConnection\") RPostgreSQL::dbDisconnect(\"PostgreSQLConnection\") RPresto::dbDisconnect(\"PrestoConnection\") RSQLite::dbDisconnect(\"SQLiteConnection\") sergeant::dbDisconnect(\"DrillConnection\") sparklyr::dbDisconnect(\"spark_connection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Disconnect (close) a connection — dbDisconnect","text":"","code":"dbDisconnect(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Disconnect (close) a connection — dbDisconnect","text":"conn DBIConnection object, returned dbConnect(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Disconnect (close) a connection — dbDisconnect","text":"dbDisconnect() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Disconnect (close) a connection — dbDisconnect","text":"warning issued garbage collection connection released without calling dbDisconnect(), tested automatically. least one warning issued immediately calling dbDisconnect() already disconnected invalid connection.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbDisconnect.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Disconnect (close) a connection — dbDisconnect","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbDriver.html","id":null,"dir":"Reference","previous_headings":"","what":"Load and unload database drivers — dbDriver","title":"Load and unload database drivers — dbDriver","text":"methods deprecated, please consult documentation individual backends construction driver instances. dbDriver() helper method used create new driver object given name database corresponding R package. works convention: DBI-extending packages provide exported object name package. dbDriver() just looks object right places: know database connecting , call function directly. dbUnloadDriver() implemented modern backends.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDriver.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load and unload database drivers — dbDriver","text":"","code":"dbDriver(drvName, ...) dbUnloadDriver(drv, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbDriver.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load and unload database drivers — dbDriver","text":"drvName character name driver instantiate. ... arguments passed driver drvName. drv object inherits DBIDriver created dbDriver.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDriver.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load and unload database drivers — dbDriver","text":"case dbDriver, driver object whose class extends DBIDriver. object may used create connections actual DBMS engine. case dbUnloadDriver, logical indicating whether operation succeeded .","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbDriver.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load and unload database drivers — dbDriver","text":"client part database communication initialized (typically dynamically loading C code, etc.) note connecting database engine needs done calls dbConnect.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbDriver.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load and unload database drivers — dbDriver","text":"","code":"# Create a RSQLite driver with a string d <- dbDriver(\"SQLite\") d #> # But better, access the object directly RSQLite::SQLite() #> "},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":null,"dir":"Reference","previous_headings":"","what":"Change database state — dbExecute","title":"Change database state — dbExecute","text":"Executes statement returns number rows affected. dbExecute() comes default implementation (work backends) calls dbSendStatement(), dbGetRowsAffected(), ensuring result always freed dbClearResult(). passing query parameters, see dbBind(), particular \"command execution flow\" section.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Change database state — dbExecute","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. AzureKusto::dbExecute(\"AzureKustoConnection\", \"character\") bigrquery::dbExecute(\"BigQueryConnection\", \"character\") DatabaseConnector::dbExecute(\"DatabaseConnectorConnection\", \"character\") implyr::dbExecute(\"src_impala\", \"character\") odbc::dbExecute(\"OdbcConnection\", \"character\") pool::dbExecute(\"Pool\", \"\") RAthena::dbExecute(\"AthenaConnection\", \"character\") sparklyr::dbExecute(\"spark_connection\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Change database state — dbExecute","text":"","code":"dbExecute(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Change database state — dbExecute","text":"conn DBIConnection object, returned dbConnect(). statement character string containing SQL. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Change database state — dbExecute","text":"dbExecute() always returns scalar numeric specifies number rows affected statement.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Change database state — dbExecute","text":"can also use dbExecute() call stored procedure performs data manipulation actions return result set. execute stored procedure returns result set, data manipulation query also returns result set INSERT ... RETURNING ..., use dbGetQuery() instead.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"Change database state — dbExecute","text":"Subclasses override method provide sort performance optimization.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Change database state — dbExecute","text":"error raised issuing statement closed invalid connection, syntax statement invalid, statement non-NA string.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Change database state — dbExecute","text":"following arguments part dbExecute() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See \"Specification\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Change database state — dbExecute","text":"param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"specification-for-the-immediate-argument","dir":"Reference","previous_headings":"","what":"Specification for the immediate argument","title":"Change database state — dbExecute","text":"immediate argument supports distinguishing \"direct\" \"prepared\" APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via \"direct\" API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed \"special\" query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbExecute.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Change database state — dbExecute","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cars\", head(cars, 3)) dbReadTable(con, \"cars\") # there are 3 rows #> speed dist #> 1 4 2 #> 2 4 10 #> 3 7 4 dbExecute( con, \"INSERT INTO cars (speed, dist) VALUES (1, 1), (2, 2), (3, 3)\" ) #> [1] 3 dbReadTable(con, \"cars\") # there are now 6 rows #> speed dist #> 1 4 2 #> 2 4 10 #> 3 7 4 #> 4 1 1 #> 5 2 2 #> 6 3 3 # Pass values using the param argument: dbExecute( con, \"INSERT INTO cars (speed, dist) VALUES (?, ?)\", params = list(4:7, 5:8) ) #> [1] 4 dbReadTable(con, \"cars\") # there are now 10 rows #> speed dist #> 1 4 2 #> 2 4 10 #> 3 7 4 #> 4 1 1 #> 5 2 2 #> 6 3 3 #> 7 4 5 #> 8 5 6 #> 9 6 7 #> 10 7 8 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Does a table exist? — dbExistsTable","title":"Does a table exist? — dbExistsTable","text":"Returns table given name exists database.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Does a table exist? — dbExistsTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbExistsTable(\"AdbiConnection\", \"character\") adbi::dbExistsTable(\"AdbiConnection\", \"Id\") adbi::dbExistsTable(\"AdbiConnection\", \"SQL\") AzureKusto::dbExistsTable(\"AzureKustoConnection\", \"\") bigrquery::dbExistsTable(\"BigQueryConnection\", \"AsIs\") bigrquery::dbExistsTable(\"BigQueryConnection\", \"character\") bigrquery::dbExistsTable(\"BigQueryConnection\", \"Id\") DatabaseConnector::dbExistsTable(\"DatabaseConnectorConnection\", \"character\") dittodb::dbExistsTable(\"DBIMockConnection\", \"character\") dittodb::dbExistsTable(\"DBIMockConnection\", \"Id\") duckdb::dbExistsTable(\"duckdb_connection\", \"character\") lazysf::dbExistsTable(\"SFSQLConnection\", \"\") odbc::dbExistsTable(\"Microsoft SQL Server\", \"character\") odbc::dbExistsTable(\"Microsoft SQL Server\", \"Id\") odbc::dbExistsTable(\"Microsoft SQL Server\", \"SQL\") odbc::dbExistsTable(\"OdbcConnection\", \"character\") odbc::dbExistsTable(\"OdbcConnection\", \"Id\") odbc::dbExistsTable(\"OdbcConnection\", \"SQL\") pool::dbExistsTable(\"Pool\", \"\") RAthena::dbExistsTable(\"AthenaConnection\", \"character\") RJDBC::dbExistsTable(\"JDBCConnection\", \"\") RMariaDB::dbExistsTable(\"MariaDBConnection\", \"character\") RMySQL::dbExistsTable(\"MySQLConnection\", \"character\") RPostgres::dbExistsTable(\"PqConnection\", \"character\") RPostgres::dbExistsTable(\"PqConnection\", \"Id\") RPostgreSQL::dbExistsTable(\"PostgreSQLConnection\", \"character\") RPresto::dbExistsTable(\"PrestoConnection\", \"\") RSQLite::dbExistsTable(\"SQLiteConnection\", \"character\") RSQLite::dbExistsTable(\"SQLiteConnection\", \"Id\") sparklyr::dbExistsTable(\"spark_connection\", \"character\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Does a table exist? — dbExistsTable","text":"","code":"dbExistsTable(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Does a table exist? — dbExistsTable","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Does a table exist? — dbExistsTable","text":"dbExistsTable() returns logical scalar, TRUE table view specified name argument exists, FALSE otherwise. includes temporary tables supported database.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Does a table exist? — dbExistsTable","text":"error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Does a table exist? — dbExistsTable","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbExistsTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done tables listed dbListTables(), dbExistsTable() returns TRUE.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbExistsTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Does a table exist? — dbExistsTable","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbExistsTable(con, \"iris\") #> [1] FALSE dbWriteTable(con, \"iris\", iris) dbExistsTable(con, \"iris\") #> [1] TRUE dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":null,"dir":"Reference","previous_headings":"","what":"Fetch records from a previously executed query — dbFetch","title":"Fetch records from a previously executed query — dbFetch","text":"Fetch next n elements (rows) result set return data.frame.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Fetch records from a previously executed query — dbFetch","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbFetch(\"AdbiResult\", \"\") AzureKusto::dbFetch(\"AzureKustoResult\", \"\") bigrquery::dbFetch(\"BigQueryResult\", \"\") DatabaseConnector::dbFetch(\"DatabaseConnectorDbiResult\", \"\") DatabaseConnector::dbFetch(\"DatabaseConnectorJdbcResult\", \"\") dittodb::dbFetch(\"DBIMockResult\", \"\") duckdb::dbFetch(\"duckdb_result\", \"\") lazysf::dbFetch(\"SFSQLResult\", \"\") odbc::dbFetch(\"OdbcResult\", \"\") RAthena::dbFetch(\"AthenaResult\", \"\") RMariaDB::dbFetch(\"MariaDBResult\", \"\") RMySQL::dbFetch(\"MySQLResult\", \"missing\") RMySQL::dbFetch(\"MySQLResult\", \"numeric\") RPostgres::dbFetch(\"PqResult\", \"\") RPresto::dbFetch(\"PrestoResult\", \"missing\") RPresto::dbFetch(\"PrestoResult\", \"numeric\") RSQLite::dbFetch(\"SQLiteResult\", \"\") sergeant::dbFetch(\"DrillResult\", \"\") sparklyr::dbFetch(\"DBISparkResult\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fetch records from a previously executed query — dbFetch","text":"","code":"dbFetch(res, n = -1, ...) fetch(res, n = -1, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fetch records from a previously executed query — dbFetch","text":"res object inheriting DBIResult, created dbSendQuery(). n maximum number records retrieve per fetch. Use n = -1 n = Inf retrieve pending records. implementations may recognize special values. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fetch records from a previously executed query — dbFetch","text":"dbFetch() always returns data.frame many rows records fetched many columns fields result set, even result single value one zero rows. Passing n = NA supported returns arbitrary number rows (least one) specified driver, remaining rows result set.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fetch records from a previously executed query — dbFetch","text":"fetch() provided compatibility older DBI clients - new code strongly encouraged use dbFetch(). default implementation dbFetch() calls fetch() compatible existing code. Modern backends implement dbFetch() .","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"the-data-retrieval-flow","dir":"Reference","previous_headings":"","what":"The data retrieval flow","title":"Fetch records from a previously executed query — dbFetch","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Fetch records from a previously executed query — dbFetch","text":"attempt fetch closed result set raises error. n argument atomic whole number greater equal -1 Inf, error raised, subsequent call dbFetch() proper n argument succeeds. Calling dbFetch() result set data manipulation query created dbSendStatement() can fetched return empty data frame, warning.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Fetch records from a previously executed query — dbFetch","text":"Fetching multi-row queries one columns default returns entire result. Multi-row queries can also fetched progressively passing whole number (integer numeric) n argument. value Inf n argument supported also returns full result. rows available fetched, result returned full without warning. fewer rows requested returned, fetches return data frame zero rows. zero rows fetched, columns data frame still fully typed. Fetching fewer rows available permitted, warning issued clearing result set. column named row_names treated like column. column types returned data frame depend data returned: integer (coercible integer) integer values -2^31 2^31 - 1, NA SQL NULL values numeric numbers fractional component, NA SQL NULL values logical Boolean values (backends may return integer); NA SQL NULL values character text, NA SQL NULL values lists raw blobs NULL entries SQL NULL values coercible using .Date() dates, NA SQL NULL values (also applies return value SQL function current_date) coercible using hms::as_hms() times, NA SQL NULL values (also applies return value SQL function current_time) coercible using .POSIXct() timestamps, NA SQL NULL values (also applies return value SQL function current_timestamp) dates timestamps supported backend, following R types used: Date dates (also applies return value SQL function current_date) POSIXct timestamps (also applies return value SQL function current_timestamp) R built-type lossless support full range 64-bit larger integers. 64-bit integers returned query, following rules apply: Values returned container support full range valid 64-bit values (integer64 class bit64 package) Coercion numeric always returns number close possible true value Loss precision converting numeric gives warning Conversion character always returns lossless decimal representation data","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetch.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fetch records from a previously executed query — dbFetch","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) # Fetch all results rs <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbFetch(rs) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 10 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 11 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 dbClearResult(rs) # Fetch in chunks rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") while (!dbHasCompleted(rs)) { chunk <- dbFetch(rs, 10) print(nrow(chunk)) } #> [1] 10 #> [1] 10 #> [1] 10 #> [1] 2 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"Fetch result set return Arrow object. Use dbFetchArrowChunk() fetch results chunks.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbFetchArrow(\"AdbiResultArrow\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"","code":"dbFetchArrow(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"res object inheriting DBIResultArrow, created dbSendQueryArrow(). ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"dbFetchArrow() always returns object coercible data.frame many rows records fetched many columns fields result set, even result single value one zero rows.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"the-data-retrieval-flow-for-arrow-streams","dir":"Reference","previous_headings":"","what":"The data retrieval flow for Arrow streams","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"section gives complete overview flow execution queries return tabular data Arrow stream. flow, except repeated calling dbBindArrow() dbBind(), implemented dbGetQueryArrow(), sufficient unless parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQueryArrow() create result set object class DBIResultArrow. Optionally, bind query parameters dbBindArrow() dbBind(). required query contains placeholders ? $1, depending database backend. Use dbFetchArrow() get data stream. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"attempt fetch closed result set raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"Fetching multi-row queries one columns default returns entire result. object returned dbFetchArrow() can also passed nanoarrow::as_nanoarrow_array_stream() create nanoarrow array stream object can used read result set batches. chunk size implementation-specific.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fetch records from a previously executed query as an Arrow object — dbFetchArrow","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) # Fetch all results rs <- dbSendQueryArrow(con, \"SELECT * FROM mtcars WHERE cyl = 4\") as.data.frame(dbFetchArrow(rs)) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 10 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 11 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":null,"dir":"Reference","previous_headings":"","what":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"Fetch next chunk result set return Arrow object. chunk size implementation-specific. Use dbFetchArrow() fetch results.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbFetchArrowChunk(\"AdbiResultArrow\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"","code":"dbFetchArrowChunk(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"res object inheriting DBIResultArrow, created dbSendQueryArrow(). ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"dbFetchArrowChunk() always returns object coercible data.frame many rows records fetched many columns fields result set, even result single value one zero rows.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"the-data-retrieval-flow-for-arrow-streams","dir":"Reference","previous_headings":"","what":"The data retrieval flow for Arrow streams","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"section gives complete overview flow execution queries return tabular data Arrow stream. flow, except repeated calling dbBindArrow() dbBind(), implemented dbGetQueryArrow(), sufficient unless parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQueryArrow() create result set object class DBIResultArrow. Optionally, bind query parameters dbBindArrow() dbBind(). required query contains placeholders ? $1, depending database backend. Use dbFetchArrow() get data stream. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"attempt fetch closed result set raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"Fetching multi-row queries one columns returns next chunk. size chunk implementation-specific. object returned dbFetchArrowChunk() can also passed nanoarrow::as_nanoarrow_array() create nanoarrow array object. chunk size implementation-specific.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbFetchArrowChunk.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fetch the next batch of records from a previously executed query as an Arrow object — dbFetchArrowChunk","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) # Fetch all results rs <- dbSendQueryArrow(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbHasCompleted(rs) #> [1] FALSE as.data.frame(dbFetchArrowChunk(rs)) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 10 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 11 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 dbHasCompleted(rs) #> [1] TRUE as.data.frame(dbFetchArrowChunk(rs)) #> [1] mpg cyl disp hp drat wt qsec vs am gear carb #> <0 rows> (or 0-length row.names) dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetConnectArgs.html","id":null,"dir":"Reference","previous_headings":"","what":"Get connection arguments — dbGetConnectArgs","title":"Get connection arguments — dbGetConnectArgs","text":"Returns arguments stored DBIConnector object inspection, optionally evaluating . function called dbConnect() usually need called directly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetConnectArgs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get connection arguments — dbGetConnectArgs","text":"","code":"dbGetConnectArgs(drv, eval = TRUE, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetConnectArgs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get connection arguments — dbGetConnectArgs","text":"drv object inheriting DBIConnector. eval Set FALSE return functions generate argument instead evaluating . ... arguments passed methods. otherwise used.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetConnectArgs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get connection arguments — dbGetConnectArgs","text":"","code":"cnr <- new(\"DBIConnector\", .drv = RSQLite::SQLite(), .conn_args = list(dbname = \":memory:\", password = function() \"supersecret\") ) dbGetConnectArgs(cnr) #> $dbname #> [1] \":memory:\" #> #> $password #> [1] \"supersecret\" #> dbGetConnectArgs(cnr, eval = FALSE) #> $dbname #> [1] \":memory:\" #> #> $password #> function() \"supersecret\" #> #>"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetDBIVersion.html","id":null,"dir":"Reference","previous_headings":"","what":"Determine the current version of the package. — dbGetDBIVersion","title":"Determine the current version of the package. — dbGetDBIVersion","text":"Determine current version package.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetDBIVersion.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Determine the current version of the package. — dbGetDBIVersion","text":"","code":"dbGetDBIVersion()"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetException.html","id":null,"dir":"Reference","previous_headings":"","what":"Get DBMS exceptions — dbGetException","title":"Get DBMS exceptions — dbGetException","text":"DEPRECATED. Backends use R's condition system signal errors warnings.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetException.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get DBMS exceptions — dbGetException","text":"","code":"dbGetException(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetException.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get DBMS exceptions — dbGetException","text":"conn DBIConnection object, returned dbConnect(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetException.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get DBMS exceptions — dbGetException","text":"list elements errorNum (integer error number) errorMsg (character string) describing last error connection conn.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":null,"dir":"Reference","previous_headings":"","what":"Get DBMS metadata — dbGetInfo","title":"Get DBMS metadata — dbGetInfo","text":"Retrieves information objects class DBIDriver, DBIConnection DBIResult.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Get DBMS metadata — dbGetInfo","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbGetInfo(\"AdbiConnection\") adbi::dbGetInfo(\"AdbiDriver\") bigrquery::dbGetInfo(\"BigQueryConnection\") bigrquery::dbGetInfo(\"BigQueryDriver\") DatabaseConnector::dbGetInfo(\"DatabaseConnectorConnection\") DatabaseConnector::dbGetInfo(\"DatabaseConnectorDriver\") dittodb::dbGetInfo(\"DBIMockConnection\") dittodb::dbGetInfo(\"DBIMockResult\") duckdb::dbGetInfo(\"duckdb_connection\") duckdb::dbGetInfo(\"duckdb_driver\") duckdb::dbGetInfo(\"duckdb_result\") lazysf::dbGetInfo(\"SFSQLDriver\") odbc::dbGetInfo(\"OdbcConnection\") odbc::dbGetInfo(\"OdbcDriver\") pool::dbGetInfo(\"Pool\") RAthena::dbGetInfo(\"AthenaConnection\") RAthena::dbGetInfo(\"AthenaResult\") RJDBC::dbGetInfo(\"JDBCConnection\") RJDBC::dbGetInfo(\"JDBCDriver\") RJDBC::dbGetInfo(\"JDBCResult\") RMariaDB::dbGetInfo(\"MariaDBConnection\") RMariaDB::dbGetInfo(\"MariaDBDriver\") RMySQL::dbGetInfo(\"MySQLConnection\") RMySQL::dbGetInfo(\"MySQLDriver\") RMySQL::dbGetInfo(\"MySQLResult\") RPostgres::dbGetInfo(\"PqConnection\") RPostgres::dbGetInfo(\"PqDriver\") RPostgreSQL::dbGetInfo(\"PostgreSQLConnection\") RPostgreSQL::dbGetInfo(\"PostgreSQLDriver\") RPostgreSQL::dbGetInfo(\"PostgreSQLResult\") RPresto::dbGetInfo(\"PrestoConnection\") RPresto::dbGetInfo(\"PrestoDriver\") RPresto::dbGetInfo(\"PrestoResult\") RSQLite::dbGetInfo(\"SQLiteConnection\") RSQLite::dbGetInfo(\"SQLiteDriver\") sergeant::dbGetInfo(\"DrillConnection\") sergeant::dbGetInfo(\"DrillDriver\") sparklyr::dbGetInfo(\"spark_connection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get DBMS metadata — dbGetInfo","text":"","code":"dbGetInfo(dbObj, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get DBMS metadata — dbGetInfo","text":"dbObj object inheriting DBIObject, .e. DBIDriver, DBIConnection, DBIResult ... arguments methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get DBMS metadata — dbGetInfo","text":"objects class DBIDriver, dbGetInfo() returns named list contains least following components: driver.version: package version DBI backend, client.version: version DBMS client library. objects class DBIConnection, dbGetInfo() returns named list contains least following components: db.version: version database server, dbname: database name, username: username connect database, host: hostname database server, port: port database server. must contain password component. Components applicable set NA. objects class DBIResult, dbGetInfo() returns named list contains least following components: statatment: statement used dbSendQuery() dbExecute(), returned dbGetStatement(), row.count: number rows fetched far (queries), returned dbGetRowCount(), rows.affected: number rows affected (statements), returned dbGetRowsAffected() .completed: logical indicates query statement completed, returned dbHasCompleted().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"Get DBMS metadata — dbGetInfo","text":"default implementation DBIResult objects constructs list return values corresponding methods, dbGetStatement(), dbGetRowCount(), dbGetRowsAffected(), dbHasCompleted().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetInfo.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get DBMS metadata — dbGetInfo","text":"","code":"dbGetInfo(RSQLite::SQLite()) #> $driver.version #> [1] ‘2.3.7’ #> #> $client.version #> [1] ‘3.46.0’ #>"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":null,"dir":"Reference","previous_headings":"","what":"Retrieve results from a query — dbGetQuery","title":"Retrieve results from a query — dbGetQuery","text":"Returns result query data frame. dbGetQuery() comes default implementation (work backends) calls dbSendQuery(), dbFetch(), ensuring result always freed dbClearResult(). retrieving chunked/paged results passing query parameters, see dbSendQuery(), particular \"data retrieval flow\" section. retrieving results Arrow object, see dbGetQueryArrow().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Retrieve results from a query — dbGetQuery","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. AzureKusto::dbGetQuery(\"AzureKustoConnection\", \"character\") DatabaseConnector::dbGetQuery(\"DatabaseConnectorConnection\", \"character\") dittodb::dbGetQuery(\"DBIMockRPostgreSQLConnection\", \"character\") implyr::dbGetQuery(\"src_impala\", \"character\") odbc::dbGetQuery(\"OdbcConnection\", \"character\") pool::dbGetQuery(\"Pool\", \"\") RAthena::dbGetQuery(\"AthenaConnection\", \"character\") RH2::dbGetQuery(\"H2Connection\", \"character\") RJDBC::dbGetQuery(\"JDBCConnection\", \"character\") RPostgreSQL::dbGetQuery(\"PostgreSQLConnection\", \"character\") RPresto::dbGetQuery(\"PrestoConnection\", \"character\") sparklyr::dbGetQuery(\"spark_connection\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Retrieve results from a query — dbGetQuery","text":"","code":"dbGetQuery(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Retrieve results from a query — dbGetQuery","text":"conn DBIConnection object, returned dbConnect(). statement character string containing SQL. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Retrieve results from a query — dbGetQuery","text":"dbGetQuery() always returns data.frame, many rows records fetched many columns fields result set, even result single value one zero rows.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Retrieve results from a query — dbGetQuery","text":"method SELECT queries (incl. SQL statements return SELECT-alike result, e.g., execution stored procedure data manipulation queries like INSERT ... RETURNING ...). execute stored procedure return result set, use dbExecute(). backends may support data manipulation statements method compatibility reasons. However, callers strongly advised use dbExecute() data manipulation statements.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"Retrieve results from a query — dbGetQuery","text":"Subclasses override method provide sort performance optimization.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Retrieve results from a query — dbGetQuery","text":"error raised issuing query closed invalid connection, syntax query invalid, query non-NA string. n argument atomic whole number greater equal -1 Inf, error raised, subsequent call dbGetQuery() proper n argument succeeds.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Retrieve results from a query — dbGetQuery","text":"following arguments part dbGetQuery() generic (improve compatibility across backends) part DBI specification: n (default: -1) params (default: NULL) immediate (default: NULL) must provided named arguments. See \"Specification\" \"Value\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Retrieve results from a query — dbGetQuery","text":"column named row_names treated like column. n argument specifies number rows fetched. omitted, fetching multi-row queries one columns returns entire result. value Inf n argument supported also returns full result. rows available fetched (passing large value n), result returned full without warning. zero rows requested, columns data frame still fully typed. Fetching fewer rows available permitted, warning issued. param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"specification-for-the-immediate-argument","dir":"Reference","previous_headings":"","what":"Specification for the immediate argument","title":"Retrieve results from a query — dbGetQuery","text":"immediate argument supports distinguishing \"direct\" \"prepared\" APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via \"direct\" API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed \"special\" query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQuery.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Retrieve results from a query — dbGetQuery","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) dbGetQuery(con, \"SELECT * FROM mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 #> 11 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 #> 12 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 #> 13 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 #> 14 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 #> 15 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 #> 16 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 #> 17 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 #> 18 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 19 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 20 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 21 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 #> 23 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 #> 24 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 #> 25 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 #> 26 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 27 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 28 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 29 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 #> 30 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 #> 31 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 #> 32 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 dbGetQuery(con, \"SELECT * FROM mtcars\", n = 6) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 # Pass values using the param argument: # (This query runs eight times, once for each different # parameter. The resulting rows are combined into a single # data frame.) dbGetQuery( con, \"SELECT COUNT(*) FROM mtcars WHERE cyl = ?\", params = list(1:8) ) #> COUNT(*) #> 1 0 #> 2 0 #> 3 0 #> 4 11 #> 5 0 #> 6 7 #> 7 0 #> 8 14 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"Returns result query Arrow object. dbGetQueryArrow() comes default implementation (work backends) calls dbSendQueryArrow(), dbFetchArrow(), ensuring result always freed dbClearResult(). passing query parameters, see dbSendQueryArrow(), particular \"data retrieval flow Arrow streams\" section. retrieving results data frame, see dbGetQuery().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbGetQueryArrow(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"","code":"dbGetQueryArrow(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"conn DBIConnection object, returned dbConnect(). statement character string containing SQL. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"dbGetQueryArrow() always returns object coercible data.frame, many rows records fetched many columns fields result set, even result single value one zero rows.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"method SELECT queries (incl. SQL statements return SELECT-alike result, e.g., execution stored procedure data manipulation queries like INSERT ... RETURNING ...). execute stored procedure return result set, use dbExecute(). backends may support data manipulation statements method. However, callers strongly advised use dbExecute() data manipulation statements.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"implementation-notes","dir":"Reference","previous_headings":"","what":"Implementation notes","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"Subclasses override method provide sort performance optimization.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"error raised issuing query closed invalid connection, syntax query invalid, query non-NA string. object returned dbGetQueryArrow() can also passed nanoarrow::as_nanoarrow_array_stream() create nanoarrow array stream object can used read result set batches. chunk size implementation-specific.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"following arguments part dbGetQueryArrow() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See \"Specification\" \"Value\" sections details usage. param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"specification-for-the-immediate-argument","dir":"Reference","previous_headings":"","what":"Specification for the immediate argument","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"immediate argument supports distinguishing \"direct\" \"prepared\" APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via \"direct\" API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed \"special\" query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetQueryArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Retrieve results from a query as an Arrow object — dbGetQueryArrow","text":"","code":"# Retrieve data as arrow table con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) dbGetQueryArrow(con, \"SELECT * FROM mtcars\") #> > #> $ get_schema:function () #> $ get_next :function (schema = x$get_schema(), validate = TRUE) #> $ release :function () dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":null,"dir":"Reference","previous_headings":"","what":"The number of rows fetched so far — dbGetRowCount","title":"The number of rows fetched so far — dbGetRowCount","text":"Returns total number rows actually fetched calls dbFetch() result set.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"The number of rows fetched so far — dbGetRowCount","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbGetRowCount(\"AdbiResult\") adbi::dbGetRowCount(\"AdbiResultArrow\") bigrquery::dbGetRowCount(\"BigQueryResult\") DatabaseConnector::dbGetRowCount(\"DatabaseConnectorDbiResult\") DatabaseConnector::dbGetRowCount(\"DatabaseConnectorJdbcResult\") duckdb::dbGetRowCount(\"duckdb_result\") odbc::dbGetRowCount(\"OdbcResult\") RMariaDB::dbGetRowCount(\"MariaDBResult\") RMySQL::dbGetRowCount(\"MySQLResult\") RPostgres::dbGetRowCount(\"PqResult\") RPostgreSQL::dbGetRowCount(\"PostgreSQLResult\") RPresto::dbGetRowCount(\"PrestoResult\") RSQLite::dbGetRowCount(\"SQLiteResult\") sparklyr::dbGetRowCount(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"The number of rows fetched so far — dbGetRowCount","text":"","code":"dbGetRowCount(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"The number of rows fetched so far — dbGetRowCount","text":"res object inheriting DBIResult. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"The number of rows fetched so far — dbGetRowCount","text":"dbGetRowCount() returns scalar number (integer numeric), number rows fetched far. calling dbSendQuery(), row count initially zero. call dbFetch() without limit, row count matches total number rows returned. Fetching limited number rows increases number rows number rows returned, even fetching past end result set. queries empty result set, zero returned even fetching. data manipulation statements issued dbSendStatement(), zero returned calling dbFetch().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"The number of rows fetched so far — dbGetRowCount","text":"Attempting get row count result set cleared dbClearResult() gives error.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowCount.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"The number of rows fetched so far — dbGetRowCount","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") dbGetRowCount(rs) #> [1] 0 ret1 <- dbFetch(rs, 10) dbGetRowCount(rs) #> [1] 10 ret2 <- dbFetch(rs) dbGetRowCount(rs) #> [1] 32 nrow(ret1) + nrow(ret2) #> [1] 32 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":null,"dir":"Reference","previous_headings":"","what":"The number of rows affected — dbGetRowsAffected","title":"The number of rows affected — dbGetRowsAffected","text":"method returns number rows added, deleted, updated data manipulation statement.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"The number of rows affected — dbGetRowsAffected","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbGetRowsAffected(\"AdbiResult\") adbi::dbGetRowsAffected(\"AdbiResultArrow\") bigrquery::dbGetRowsAffected(\"BigQueryResult\") DatabaseConnector::dbGetRowsAffected(\"DatabaseConnectorDbiResult\") DatabaseConnector::dbGetRowsAffected(\"DatabaseConnectorJdbcResult\") dittodb::dbGetRowsAffected(\"DBIMockResult\") duckdb::dbGetRowsAffected(\"duckdb_result\") odbc::dbGetRowsAffected(\"OdbcResult\") RMariaDB::dbGetRowsAffected(\"MariaDBResult\") RMySQL::dbGetRowsAffected(\"MySQLResult\") RPostgres::dbGetRowsAffected(\"PqResult\") RPostgreSQL::dbGetRowsAffected(\"PostgreSQLResult\") RPresto::dbGetRowsAffected(\"PrestoResult\") RSQLite::dbGetRowsAffected(\"SQLiteResult\") sparklyr::dbGetRowsAffected(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"The number of rows affected — dbGetRowsAffected","text":"","code":"dbGetRowsAffected(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"The number of rows affected — dbGetRowsAffected","text":"res object inheriting DBIResult. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"The number of rows affected — dbGetRowsAffected","text":"dbGetRowsAffected() returns scalar number (integer numeric), number rows affected data manipulation statement issued dbSendStatement(). value available directly call change calling dbFetch(). NA_integer_ NA_numeric_ allowed number rows affected known. queries issued dbSendQuery(), zero returned call dbFetch(). NA values allowed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"the-command-execution-flow","dir":"Reference","previous_headings":"","what":"The command execution flow","title":"The number of rows affected — dbGetRowsAffected","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"The number of rows affected — dbGetRowsAffected","text":"Attempting get rows affected result set cleared dbClearResult() gives error.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetRowsAffected.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"The number of rows affected — dbGetRowsAffected","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendStatement(con, \"DELETE FROM mtcars\") dbGetRowsAffected(rs) #> [1] 32 nrow(mtcars) #> [1] 32 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the statement associated with a result set — dbGetStatement","title":"Get the statement associated with a result set — dbGetStatement","text":"Returns statement passed dbSendQuery() dbSendStatement().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Get the statement associated with a result set — dbGetStatement","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbGetStatement(\"AdbiResult\") adbi::dbGetStatement(\"AdbiResultArrow\") bigrquery::dbGetStatement(\"BigQueryResult\") DatabaseConnector::dbGetStatement(\"DatabaseConnectorDbiResult\") DatabaseConnector::dbGetStatement(\"DatabaseConnectorJdbcResult\") duckdb::dbGetStatement(\"duckdb_result\") odbc::dbGetStatement(\"OdbcResult\") RAthena::dbGetStatement(\"AthenaResult\") RMariaDB::dbGetStatement(\"MariaDBResult\") RMySQL::dbGetStatement(\"MySQLResult\") RPostgres::dbGetStatement(\"PqResult\") RPostgreSQL::dbGetStatement(\"PostgreSQLResult\") RPresto::dbGetStatement(\"PrestoResult\") RSQLite::dbGetStatement(\"SQLiteResult\") sergeant::dbGetStatement(\"DrillResult\") sparklyr::dbGetStatement(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the statement associated with a result set — dbGetStatement","text":"","code":"dbGetStatement(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the statement associated with a result set — dbGetStatement","text":"res object inheriting DBIResult. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the statement associated with a result set — dbGetStatement","text":"dbGetStatement() returns string, query used either dbSendQuery() dbSendStatement().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Get the statement associated with a result set — dbGetStatement","text":"Attempting query statement result set cleared dbClearResult() gives error.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbGetStatement.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the statement associated with a result set — dbGetStatement","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") dbGetStatement(rs) #> [1] \"SELECT * FROM mtcars\" dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":null,"dir":"Reference","previous_headings":"","what":"Completion status — dbHasCompleted","title":"Completion status — dbHasCompleted","text":"method returns operation completed. SELECT query completed rows fetched. data manipulation statement always completed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Completion status — dbHasCompleted","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbHasCompleted(\"AdbiResult\") adbi::dbHasCompleted(\"AdbiResultArrow\") bigrquery::dbHasCompleted(\"BigQueryResult\") DatabaseConnector::dbHasCompleted(\"DatabaseConnectorDbiResult\") DatabaseConnector::dbHasCompleted(\"DatabaseConnectorJdbcResult\") dittodb::dbHasCompleted(\"DBIMockResult\") duckdb::dbHasCompleted(\"duckdb_result\") lazysf::dbHasCompleted(\"SFSQLResult\") odbc::dbHasCompleted(\"OdbcResult\") RAthena::dbHasCompleted(\"AthenaResult\") RJDBC::dbHasCompleted(\"JDBCResult\") RMariaDB::dbHasCompleted(\"MariaDBResult\") RMySQL::dbHasCompleted(\"MySQLResult\") RPostgres::dbHasCompleted(\"PqResult\") RPostgreSQL::dbHasCompleted(\"PostgreSQLResult\") RPresto::dbHasCompleted(\"PrestoResult\") RSQLite::dbHasCompleted(\"SQLiteResult\") sergeant::dbHasCompleted(\"DrillResult\") sparklyr::dbHasCompleted(\"DBISparkResult\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Completion status — dbHasCompleted","text":"","code":"dbHasCompleted(res, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Completion status — dbHasCompleted","text":"res object inheriting DBIResult. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Completion status — dbHasCompleted","text":"dbHasCompleted() returns logical scalar. query initiated dbSendQuery() non-empty result set, dbHasCompleted() returns FALSE initially TRUE calling dbFetch() without limit. query initiated dbSendStatement(), dbHasCompleted() always returns TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"the-data-retrieval-flow","dir":"Reference","previous_headings":"","what":"The data retrieval flow","title":"Completion status — dbHasCompleted","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Completion status — dbHasCompleted","text":"Attempting query completion status result set cleared dbClearResult() gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Completion status — dbHasCompleted","text":"completion status query guaranteed set FALSE attempting fetch past end entire result. Therefore, query empty result set, initial return value unspecified, result value TRUE trying fetch one row. Similarly, query result set length n, return value unspecified fetching n rows, result value TRUE trying fetch one row.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbHasCompleted.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Completion status — dbHasCompleted","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars\") dbHasCompleted(rs) #> [1] FALSE ret1 <- dbFetch(rs, 10) dbHasCompleted(rs) #> [1] FALSE ret2 <- dbFetch(rs) dbHasCompleted(rs) #> [1] TRUE dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsReadOnly.html","id":null,"dir":"Reference","previous_headings":"","what":"Is this DBMS object read only? — dbIsReadOnly","title":"Is this DBMS object read only? — dbIsReadOnly","text":"generic tests whether database object read .","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsReadOnly.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Is this DBMS object read only? — dbIsReadOnly","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbIsReadOnly(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsReadOnly.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Is this DBMS object read only? — dbIsReadOnly","text":"","code":"dbIsReadOnly(dbObj, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsReadOnly.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Is this DBMS object read only? — dbIsReadOnly","text":"dbObj object inheriting DBIObject, .e. DBIDriver, DBIConnection, DBIResult ... arguments methods.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsReadOnly.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Is this DBMS object read only? — dbIsReadOnly","text":"","code":"dbIsReadOnly(ANSI()) #> [1] FALSE"},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsValid.html","id":null,"dir":"Reference","previous_headings":"","what":"Is this DBMS object still valid? — dbIsValid","title":"Is this DBMS object still valid? — dbIsValid","text":"generic tests whether database object still valid (.e. disconnected cleared).","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsValid.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Is this DBMS object still valid? — dbIsValid","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbIsValid(\"AdbiConnection\") adbi::dbIsValid(\"AdbiDriver\") adbi::dbIsValid(\"AdbiResult\") adbi::dbIsValid(\"AdbiResultArrow\") bigrquery::dbIsValid(\"BigQueryConnection\") bigrquery::dbIsValid(\"BigQueryDriver\") bigrquery::dbIsValid(\"BigQueryResult\") DatabaseConnector::dbIsValid(\"DatabaseConnectorDbiConnection\") DatabaseConnector::dbIsValid(\"DatabaseConnectorJdbcConnection\") duckdb::dbIsValid(\"duckdb_connection\") duckdb::dbIsValid(\"duckdb_driver\") duckdb::dbIsValid(\"duckdb_result\") lazysf::dbIsValid(\"SFSQLDriver\") odbc::dbIsValid(\"OdbcConnection\") odbc::dbIsValid(\"OdbcDriver\") odbc::dbIsValid(\"OdbcResult\") pool::dbIsValid(\"Pool\") RAthena::dbIsValid(\"AthenaConnection\") RAthena::dbIsValid(\"AthenaResult\") RJDBC::dbIsValid(\"JDBCConnection\") RJDBC::dbIsValid(\"JDBCResult\") RMariaDB::dbIsValid(\"MariaDBConnection\") RMariaDB::dbIsValid(\"MariaDBDriver\") RMariaDB::dbIsValid(\"MariaDBResult\") RMySQL::dbIsValid(\"MySQLConnection\") RMySQL::dbIsValid(\"MySQLDriver\") RMySQL::dbIsValid(\"MySQLResult\") RPostgres::dbIsValid(\"PqConnection\") RPostgres::dbIsValid(\"PqDriver\") RPostgres::dbIsValid(\"PqResult\") RPresto::dbIsValid(\"PrestoResult\") RSQLite::dbIsValid(\"SQLiteConnection\") RSQLite::dbIsValid(\"SQLiteDriver\") RSQLite::dbIsValid(\"SQLiteResult\") sergeant::dbIsValid(\"DrillConnection\") sparklyr::dbIsValid(\"DBISparkResult\") sparklyr::dbIsValid(\"spark_connection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsValid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Is this DBMS object still valid? — dbIsValid","text":"","code":"dbIsValid(dbObj, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsValid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Is this DBMS object still valid? — dbIsValid","text":"dbObj object inheriting DBIObject, .e. DBIDriver, DBIConnection, DBIResult ... arguments methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsValid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Is this DBMS object still valid? — dbIsValid","text":"dbIsValid() returns logical scalar, TRUE object specified dbObj valid, FALSE otherwise. DBIConnection object initially valid, becomes invalid disconnecting dbDisconnect(). invalid connection object (e.g., drivers object saved file restored), method also returns FALSE. DBIResult object valid call dbSendQuery(), stays valid even rows fetched; clearing dbClearResult() invalidates . DBIResult object also valid call dbSendStatement(), stays valid querying number rows affected; clearing dbClearResult() invalidates . connection database system dropped (e.g., due connectivity problems, server failure, etc.), dbIsValid() return FALSE. tested automatically.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbIsValid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Is this DBMS object still valid? — dbIsValid","text":"","code":"dbIsValid(RSQLite::SQLite()) #> [1] TRUE con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbIsValid(con) #> [1] TRUE rs <- dbSendQuery(con, \"SELECT 1\") dbIsValid(rs) #> [1] TRUE dbClearResult(rs) dbIsValid(rs) #> [1] FALSE dbDisconnect(con) dbIsValid(con) #> [1] FALSE"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListConnections.html","id":null,"dir":"Reference","previous_headings":"","what":"List currently open connections — dbListConnections","title":"List currently open connections — dbListConnections","text":"DEPRECATED, drivers longer required implement method. Keep track connections opened require list.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListConnections.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List currently open connections — dbListConnections","text":"","code":"dbListConnections(drv, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListConnections.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List currently open connections — dbListConnections","text":"drv object inheriting DBIDriver ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListConnections.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"List currently open connections — dbListConnections","text":"list","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":null,"dir":"Reference","previous_headings":"","what":"List field names of a remote table — dbListFields","title":"List field names of a remote table — dbListFields","text":"Returns field names remote table character vector.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"List field names of a remote table — dbListFields","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbListFields(\"AdbiConnection\", \"character\") adbi::dbListFields(\"AdbiConnection\", \"Id\") adbi::dbListFields(\"AdbiConnection\", \"SQL\") AzureKusto::dbListFields(\"AzureKustoConnection\", \"character\") bigrquery::dbListFields(\"BigQueryConnection\", \"AsIs\") bigrquery::dbListFields(\"BigQueryConnection\", \"character\") bigrquery::dbListFields(\"BigQueryConnection\", \"Id\") DatabaseConnector::dbListFields(\"DatabaseConnectorConnection\", \"character\") dittodb::dbListFields(\"DBIMockConnection\", \"\") dittodb::dbListFields(\"DBIMockConnection\", \"character\") dittodb::dbListFields(\"DBIMockConnection\", \"Id\") duckdb::dbListFields(\"duckdb_connection\", \"character\") odbc::dbListFields(\"OdbcConnection\", \"character\") odbc::dbListFields(\"OdbcConnection\", \"Id\") odbc::dbListFields(\"OdbcConnection\", \"SQL\") pool::dbListFields(\"Pool\", \"\") RAthena::dbListFields(\"AthenaConnection\", \"character\") RJDBC::dbListFields(\"JDBCConnection\", \"\") RMySQL::dbListFields(\"MySQLConnection\", \"character\") RMySQL::dbListFields(\"MySQLResult\", \"missing\") RPostgres::dbListFields(\"PqConnection\", \"character\") RPostgres::dbListFields(\"PqConnection\", \"Id\") RPostgreSQL::dbListFields(\"PostgreSQLConnection\", \"character\") RPostgreSQL::dbListFields(\"PostgreSQLResult\", \"missing\") RPresto::dbListFields(\"PrestoConnection\", \"\") RPresto::dbListFields(\"PrestoConnection\", \"character\") RPresto::dbListFields(\"PrestoConnection\", \"dbplyr_schema\") RPresto::dbListFields(\"PrestoConnection\", \"Id\") RPresto::dbListFields(\"PrestoConnection\", \"SQL\") RPresto::dbListFields(\"PrestoResult\", \"missing\") sergeant::dbListFields(\"DrillConnection\", \"character\") sergeant::dbListFields(\"DrillResult\", \"missing\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List field names of a remote table — dbListFields","text":"","code":"dbListFields(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List field names of a remote table — dbListFields","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"List field names of a remote table — dbListFields","text":"dbListFields() returns character vector enumerates fields table correct order. also works temporary tables supported database. returned names suitable quoting dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"List field names of a remote table — dbListFields","text":"table exist, error raised. Invalid types name argument (e.g., character length equal one, numeric) lead error. error also raised calling method closed invalid connection.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"List field names of a remote table — dbListFields","text":"name argument can string return value dbQuoteIdentifier() value table column return value dbListObjects() is_prefix FALSE column named row_names treated like column.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbListFields.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"List field names of a remote table — dbListFields","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) dbListFields(con, \"mtcars\") #> [1] \"mpg\" \"cyl\" \"disp\" \"hp\" \"drat\" \"wt\" \"qsec\" \"vs\" \"am\" \"gear\" #> [11] \"carb\" dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":null,"dir":"Reference","previous_headings":"","what":"List remote objects — dbListObjects","title":"List remote objects — dbListObjects","text":"Returns names remote objects accessible connection data frame. include temporary objects, database backends (particular RMariaDB RMySQL) support . Compared dbListTables(), method also enumerates tables views schemas, returns fully qualified identifiers access objects. allows exploration database objects available current user, including can accessed giving full namespace.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"List remote objects — dbListObjects","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbListObjects(\"Pool\") RMariaDB::dbListObjects(\"MariaDBConnection\") RPostgres::dbListObjects(\"PqConnection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List remote objects — dbListObjects","text":"","code":"dbListObjects(conn, prefix = NULL, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List remote objects — dbListObjects","text":"conn DBIConnection object, returned dbConnect(). prefix fully qualified path database's namespace, NULL. argument processed dbUnquoteIdentifier(). given method return objects accessible prefix. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"List remote objects — dbListObjects","text":"dbListObjects() returns data frame columns table is_prefix (order), optionally columns dot (.) prefix. table column type list. object list suitable use argument dbQuoteIdentifier(). is_prefix column logical. data frame contains one row object (schema, table view) accessible prefix (passed) global namespace (prefix omitted). Tables added dbWriteTable() part data frame. soon table removed database, also removed data frame database objects. applies temporary objects supported database. returned names suitable quoting dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"List remote objects — dbListObjects","text":"error raised calling method closed invalid connection.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"List remote objects — dbListObjects","text":"prefix column indicates table value refers table prefix. call default prefix = NULL, table values is_prefix == FALSE correspond tables returned dbListTables(), table object can quoted dbQuoteIdentifier(). result quoting can passed dbUnquoteIdentifier(). (backends may convenient use Id class, required.) Values table column is_prefix == TRUE can passed prefix argument another call dbListObjects(). data frame returned dbListObject() call prefix argument set, table values is_prefix FALSE can used call dbExistsTable() returns TRUE.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbListObjects.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"List remote objects — dbListObjects","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbListObjects(con) #> [1] table is_prefix #> <0 rows> (or 0-length row.names) dbWriteTable(con, \"mtcars\", mtcars) dbListObjects(con) #> table is_prefix #> 1 \"mtcars\" FALSE dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListResults.html","id":null,"dir":"Reference","previous_headings":"","what":"A list of all pending results — dbListResults","title":"A list of all pending results — dbListResults","text":"DEPRECATED. DBI currenty supports one open result set per connection, need keep track result sets open need functionality.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListResults.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A list of all pending results — dbListResults","text":"","code":"dbListResults(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListResults.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A list of all pending results — dbListResults","text":"conn DBIConnection object, returned dbConnect(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListResults.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A list of all pending results — dbListResults","text":"list. results active, empty list. single result active, list one element.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":null,"dir":"Reference","previous_headings":"","what":"List remote tables — dbListTables","title":"List remote tables — dbListTables","text":"Returns unquoted names remote tables accessible connection. include views temporary objects, database backends (particular RMariaDB RMySQL) support .","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"List remote tables — dbListTables","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbListTables(\"AdbiConnection\") AzureKusto::dbListTables(\"AzureKustoConnection\") bigrquery::dbListTables(\"BigQueryConnection\") DatabaseConnector::dbListTables(\"DatabaseConnectorConnection\") dittodb::dbListTables(\"DBIMockConnection\") duckdb::dbListTables(\"duckdb_connection\") lazysf::dbListTables(\"SFSQLConnection\") odbc::dbListTables(\"Microsoft SQL Server\") odbc::dbListTables(\"OdbcConnection\") pool::dbListTables(\"Pool\") RAthena::dbListTables(\"AthenaConnection\") RJDBC::dbListTables(\"JDBCConnection\") RMariaDB::dbListTables(\"MariaDBConnection\") RMySQL::dbListTables(\"MySQLConnection\") RPostgres::dbListTables(\"PqConnection\") RPostgreSQL::dbListTables(\"PostgreSQLConnection\") RPresto::dbListTables(\"PrestoConnection\") RSQLite::dbListTables(\"SQLiteConnection\") sparklyr::dbListTables(\"spark_connection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List remote tables — dbListTables","text":"","code":"dbListTables(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List remote tables — dbListTables","text":"conn DBIConnection object, returned dbConnect(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"List remote tables — dbListTables","text":"dbListTables() returns character vector enumerates tables views database. Tables added dbWriteTable() part list. soon table removed database, also removed list database tables. applies temporary tables supported database. returned names suitable quoting dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"List remote tables — dbListTables","text":"error raised calling method closed invalid connection.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbListTables.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"List remote tables — dbListTables","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbListTables(con) #> character(0) dbWriteTable(con, \"mtcars\", mtcars) dbListTables(con) #> [1] \"mtcars\" dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":null,"dir":"Reference","previous_headings":"","what":"Quote identifiers — dbQuoteIdentifier","title":"Quote identifiers — dbQuoteIdentifier","text":"Call method generate string suitable use query column table name, make sure generate valid SQL protect SQL injection attacks. inverse operation dbUnquoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Quote identifiers — dbQuoteIdentifier","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbQuoteIdentifier(\"AdbiConnection\", \"character\") bigrquery::dbQuoteIdentifier(\"BigQueryConnection\", \"character\") bigrquery::dbQuoteIdentifier(\"BigQueryConnection\", \"SQL\") DatabaseConnector::dbQuoteIdentifier(\"DatabaseConnectorConnection\", \"character\") dittodb::dbQuoteIdentifier(\"DBIMockRPostgresConnection\", \"character\") dittodb::dbQuoteIdentifier(\"DBIMockRPostgresConnection\", \"SQL\") duckdb::dbQuoteIdentifier(\"duckdb_connection\", \"\") duckdb::dbQuoteIdentifier(\"duckdb_connection\", \"character\") duckdb::dbQuoteIdentifier(\"duckdb_connection\", \"Id\") duckdb::dbQuoteIdentifier(\"duckdb_connection\", \"SQL\") implyr::dbQuoteIdentifier(\"impala_connection\", \"character\") implyr::dbQuoteIdentifier(\"impala_connection\", \"dbplyr_table_ident\") odbc::dbQuoteIdentifier(\"OdbcConnection\", \"character\") pool::dbQuoteIdentifier(\"Pool\", \"\") RMariaDB::dbQuoteIdentifier(\"MariaDBConnection\", \"character\") RMariaDB::dbQuoteIdentifier(\"MariaDBConnection\", \"Id\") RMariaDB::dbQuoteIdentifier(\"MariaDBConnection\", \"SQL\") RMySQL::dbQuoteIdentifier(\"MySQLConnection\", \"character\") RPostgres::dbQuoteIdentifier(\"PqConnection\", \"character\") RPostgres::dbQuoteIdentifier(\"PqConnection\", \"Id\") RPostgres::dbQuoteIdentifier(\"PqConnection\", \"SQL\") RPresto::dbQuoteIdentifier(\"PrestoConnection\", \"dbplyr_schema\") RSQLite::dbQuoteIdentifier(\"SQLiteConnection\", \"character\") RSQLite::dbQuoteIdentifier(\"SQLiteConnection\", \"SQL\") sparklyr::dbQuoteIdentifier(\"spark_connection\", \"character\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Quote identifiers — dbQuoteIdentifier","text":"","code":"dbQuoteIdentifier(conn, x, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Quote identifiers — dbQuoteIdentifier","text":"conn DBIConnection object, returned dbConnect(). x character vector, SQL Id object quote identifier. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Quote identifiers — dbQuoteIdentifier","text":"dbQuoteIdentifier() returns object can coerced character, length input. empty character vector function returns length-0 object. names input argument preserved output. passing returned object dbQuoteIdentifier() x argument, returned unchanged. Passing objects class SQL also return unchanged. (backends may convenient return SQL objects achieve behavior, required.)","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Quote identifiers — dbQuoteIdentifier","text":"error raised input contains NA, empty string.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Quote identifiers — dbQuoteIdentifier","text":"Calling dbGetQuery() query format SELECT 1 ... returns data frame identifier, unquoted, column name. Quoted identifiers can used table column names SQL queries, particular queries like SELECT 1 ... SELECT * (SELECT 1) .... method must use quoting mechanism unambiguously different quoting mechanism used strings, query like SELECT ... (SELECT 1 ...) throws error column names match. method can quote column names contain special characters space, dot, comma, quotes used mark strings identifiers, database supports . case, checking validity identifier performed executing query, dbQuoteIdentifier().","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteIdentifier.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Quote identifiers — dbQuoteIdentifier","text":"","code":"# Quoting ensures that arbitrary input is safe for use in a query name <- \"Robert'); DROP TABLE Students;--\" dbQuoteIdentifier(ANSI(), name) #> \"Robert'); DROP TABLE Students;--\" # Use Id() to specify other components such as the schema id_name <- Id(schema = \"schema_name\", table = \"table_name\") id_name #> \"schema_name\".\"table_name\" dbQuoteIdentifier(ANSI(), id_name) #> \"schema_name\".\"table_name\" # SQL vectors are always passed through as is var_name <- SQL(\"select\") var_name #> select dbQuoteIdentifier(ANSI(), var_name) #> select # This mechanism is used to prevent double escaping dbQuoteIdentifier(ANSI(), dbQuoteIdentifier(ANSI(), name)) #> \"Robert'); DROP TABLE Students;--\""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":null,"dir":"Reference","previous_headings":"","what":"Quote literal values — dbQuoteLiteral","title":"Quote literal values — dbQuoteLiteral","text":"Call methods generate string suitable use query literal value correct type, make sure generate valid SQL protect SQL injection attacks.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Quote literal values — dbQuoteLiteral","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbQuoteLiteral(\"AdbiConnection\", \"character\") bigrquery::dbQuoteLiteral(\"BigQueryConnection\", \"logical\") duckdb::dbQuoteLiteral(\"duckdb_connection\", \"\") pool::dbQuoteLiteral(\"Pool\", \"\") RMariaDB::dbQuoteLiteral(\"MariaDBConnection\", \"\") RPostgres::dbQuoteLiteral(\"PqConnection\", \"\") RPresto::dbQuoteLiteral(\"PrestoConnection\", \"\") sparklyr::dbQuoteLiteral(\"spark_connection\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Quote literal values — dbQuoteLiteral","text":"","code":"dbQuoteLiteral(conn, x, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Quote literal values — dbQuoteLiteral","text":"conn DBIConnection object, returned dbConnect(). x vector quote string. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Quote literal values — dbQuoteLiteral","text":"dbQuoteLiteral() returns object can coerced character, length input. empty integer, numeric, character, logical, date, time, blob vector, function returns length-0 object. passing returned object dbQuoteLiteral() x argument, returned unchanged. Passing objects class SQL also return unchanged. (backends may convenient return SQL objects achieve behavior, required.)","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Quote literal values — dbQuoteLiteral","text":"Passing list x argument raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Quote literal values — dbQuoteLiteral","text":"returned expression can used SELECT ... query, value dbGetQuery(paste0(\"SELECT \", dbQuoteLiteral(x)))[[1]] must equal x scalar integer, numeric, string, logical. x NA, result must merely satisfy .na(). literals \"NA\" \"NULL\" treated specially. NA translated unquoted SQL NULL, query SELECT * (SELECT 1) ... NULL returns one row.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteLiteral.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Quote literal values — dbQuoteLiteral","text":"","code":"# Quoting ensures that arbitrary input is safe for use in a query name <- \"Robert'); DROP TABLE Students;--\" dbQuoteLiteral(ANSI(), name) #> 'Robert''); DROP TABLE Students;--' # NAs become NULL dbQuoteLiteral(ANSI(), c(1:3, NA)) #> 1 #> 2 #> 3 #> NULL # Logicals become integers by default dbQuoteLiteral(ANSI(), c(TRUE, FALSE, NA)) #> 1 #> 0 #> NULL # Raw vectors become hex strings by default dbQuoteLiteral(ANSI(), list(as.raw(1:3), NULL)) #> X'010203' #> NULL # SQL vectors are always passed through as is var_name <- SQL(\"select\") var_name #> select dbQuoteLiteral(ANSI(), var_name) #> select # This mechanism is used to prevent double escaping dbQuoteLiteral(ANSI(), dbQuoteLiteral(ANSI(), name)) #> 'Robert''); DROP TABLE Students;--'"},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":null,"dir":"Reference","previous_headings":"","what":"Quote literal strings — dbQuoteString","title":"Quote literal strings — dbQuoteString","text":"Call method generate string suitable use query string literal, make sure generate valid SQL protect SQL injection attacks.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Quote literal strings — dbQuoteString","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbQuoteString(\"AdbiConnection\", \"character\") bigrquery::dbQuoteString(\"BigQueryConnection\", \"character\") bigrquery::dbQuoteString(\"BigQueryConnection\", \"SQL\") DatabaseConnector::dbQuoteString(\"DatabaseConnectorConnection\", \"character\") dittodb::dbQuoteString(\"DBIMockMariaDBConnection\", \"character\") dittodb::dbQuoteString(\"DBIMockMariaDBConnection\", \"SQL\") dittodb::dbQuoteString(\"DBIMockRPostgresConnection\", \"character\") dittodb::dbQuoteString(\"DBIMockRPostgresConnection\", \"SQL\") odbc::dbQuoteString(\"Hive\", \"character\") pool::dbQuoteString(\"Pool\", \"\") RAthena::dbQuoteString(\"AthenaConnection\", \"character\") RAthena::dbQuoteString(\"AthenaConnection\", \"Date\") RAthena::dbQuoteString(\"AthenaConnection\", \"POSIXct\") RMariaDB::dbQuoteString(\"MariaDBConnection\", \"character\") RMariaDB::dbQuoteString(\"MariaDBConnection\", \"SQL\") RMySQL::dbQuoteString(\"MySQLConnection\", \"character\") RMySQL::dbQuoteString(\"MySQLConnection\", \"SQL\") RPostgres::dbQuoteString(\"PqConnection\", \"character\") RPostgres::dbQuoteString(\"PqConnection\", \"SQL\") sparklyr::dbQuoteString(\"spark_connection\", \"character\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Quote literal strings — dbQuoteString","text":"","code":"dbQuoteString(conn, x, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Quote literal strings — dbQuoteString","text":"conn DBIConnection object, returned dbConnect(). x character vector quote string. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Quote literal strings — dbQuoteString","text":"dbQuoteString() returns object can coerced character, length input. empty character vector function returns length-0 object. passing returned object dbQuoteString() x argument, returned unchanged. Passing objects class SQL also return unchanged. (backends may convenient return SQL objects achieve behavior, required.)","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Quote literal strings — dbQuoteString","text":"Passing numeric, integer, logical, raw vector, list x argument raises error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Quote literal strings — dbQuoteString","text":"returned expression can used SELECT ... query, scalar character x value dbGetQuery(paste0(\"SELECT \", dbQuoteString(x)))[[1]] must identical x, even x contains spaces, tabs, quotes (single double), backticks, newlines (combination) result dbQuoteString() call coerced back character (even repeatedly). x NA, result must merely satisfy .na(). strings \"NA\" \"NULL\" treated specially. NA translated unquoted SQL NULL, query SELECT * (SELECT 1) ... NULL returns one row.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbQuoteString.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Quote literal strings — dbQuoteString","text":"","code":"# Quoting ensures that arbitrary input is safe for use in a query name <- \"Robert'); DROP TABLE Students;--\" dbQuoteString(ANSI(), name) #> 'Robert''); DROP TABLE Students;--' # NAs become NULL dbQuoteString(ANSI(), c(\"x\", NA)) #> 'x' #> NULL # SQL vectors are always passed through as is var_name <- SQL(\"select\") var_name #> select dbQuoteString(ANSI(), var_name) #> select # This mechanism is used to prevent double escaping dbQuoteString(ANSI(), dbQuoteString(ANSI(), name)) #> 'Robert''); DROP TABLE Students;--'"},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Read database tables as data frames — dbReadTable","title":"Read database tables as data frames — dbReadTable","text":"Reads database table data frame, optionally converting column row names converting column names valid R identifiers. Use dbReadTableArrow() instead obtain Arrow object.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Read database tables as data frames — dbReadTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. AzureKusto::dbReadTable(\"AzureKustoConnection\", \"character\") bigrquery::dbReadTable(\"BigQueryConnection\", \"AsIs\") bigrquery::dbReadTable(\"BigQueryConnection\", \"character\") bigrquery::dbReadTable(\"BigQueryConnection\", \"Id\") DatabaseConnector::dbReadTable(\"DatabaseConnectorConnection\", \"character\") lazysf::dbReadTable(\"SFSQLConnection\", \"character\") pool::dbReadTable(\"Pool\", \"\") RJDBC::dbReadTable(\"JDBCConnection\", \"\") RJDBC::dbReadTable(\"JDBCConnection\", \"character\") RMariaDB::dbReadTable(\"MariaDBConnection\", \"character\") RMySQL::dbReadTable(\"MySQLConnection\", \"character\") RPostgres::dbReadTable(\"PqConnection\", \"character\") RPostgreSQL::dbReadTable(\"PostgreSQLConnection\", \"character\") RPresto::dbReadTable(\"PrestoConnection\", \"\") RPresto::dbReadTable(\"PrestoConnection\", \"character\") RPresto::dbReadTable(\"PrestoConnection\", \"dbplyr_schema\") RPresto::dbReadTable(\"PrestoConnection\", \"Id\") RPresto::dbReadTable(\"PrestoConnection\", \"SQL\") RSQLite::dbReadTable(\"SQLiteConnection\", \"character\") sparklyr::dbReadTable(\"spark_connection\", \"character\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read database tables as data frames — dbReadTable","text":"","code":"dbReadTable(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read database tables as data frames — dbReadTable","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Read database tables as data frames — dbReadTable","text":"dbReadTable() returns data frame contains complete data remote table, effectively result calling dbGetQuery() SELECT * . empty table returned data frame zero rows. presence rownames depends row.names argument, see sqlColumnToRownames() details: FALSE NULL, returned data frame row names. TRUE, column named \"row_names\" converted row names. NA, column named \"row_names\" converted row names exists, otherwise translation occurs. string, specifies name column remote table contains row names. default row.names = FALSE. database supports identifiers special characters, columns returned data frame converted valid R identifiers check.names argument TRUE, check.names = FALSE, returned table non-syntactic column names without quotes.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Read database tables as data frames — dbReadTable","text":"function returns data frame. Use dbReadTableArrow() obtain Arrow object.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Read database tables as data frames — dbReadTable","text":"error raised table exist. error raised row.names TRUE \"row_names\" column exists, error raised row.names set string corresponding column exists. error raised calling method closed invalid connection. error raised name processed dbQuoteIdentifier() results non-scalar. Unsupported values row.names check.names (non-scalars, unsupported data types, NA check.names) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Read database tables as data frames — dbReadTable","text":"following arguments part dbReadTable() generic (improve compatibility across backends) part DBI specification: row.names (default: FALSE) check.names must provided named arguments. See \"Value\" section details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Read database tables as data frames — dbReadTable","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbReadTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Read database tables as data frames — dbReadTable","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars[1:10, ]) dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Read database tables as Arrow objects — dbReadTableArrow","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"Reads database table Arrow object. Use dbReadTable() instead obtain data frame.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbReadTableArrow(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"","code":"dbReadTableArrow(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"dbReadTableArrow() returns Arrow object contains complete data remote table, effectively result calling dbGetQueryArrow() SELECT * . empty table returned Arrow object zero rows.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"function returns Arrow object. Convert data frame .data.frame() use dbReadTable() obtain data frame.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"error raised table exist. error raised calling method closed invalid connection. error raised name processed dbQuoteIdentifier() results non-scalar.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbReadTableArrow() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbReadTableArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Read database tables as Arrow objects — dbReadTableArrow","text":"","code":"# Read data as Arrow table con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars[1:10, ]) dbReadTableArrow(con, \"mtcars\") #> > #> $ get_schema:function () #> $ get_next :function (schema = x$get_schema(), validate = TRUE) #> $ release :function () dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Remove a table from the database — dbRemoveTable","title":"Remove a table from the database — dbRemoveTable","text":"Remove remote table (e.g., created dbWriteTable()) database.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Remove a table from the database — dbRemoveTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbRemoveTable(\"AdbiConnection\", \"character\") adbi::dbRemoveTable(\"AdbiConnection\", \"Id\") AzureKusto::dbRemoveTable(\"AzureKustoConnection\", \"\") bigrquery::dbRemoveTable(\"BigQueryConnection\", \"AsIs\") bigrquery::dbRemoveTable(\"BigQueryConnection\", \"character\") bigrquery::dbRemoveTable(\"BigQueryConnection\", \"Id\") DatabaseConnector::dbRemoveTable(\"DatabaseConnectorConnection\", \"\") dittodb::dbRemoveTable(\"DBIMockConnection\", \"character\") duckdb::dbRemoveTable(\"duckdb_connection\", \"character\") odbc::dbRemoveTable(\"OdbcConnection\", \"character\") pool::dbRemoveTable(\"Pool\", \"\") RAthena::dbRemoveTable(\"AthenaConnection\", \"character\") RJDBC::dbRemoveTable(\"JDBCConnection\", \"\") RMariaDB::dbRemoveTable(\"MariaDBConnection\", \"character\") RMySQL::dbRemoveTable(\"MySQLConnection\", \"character\") RPostgres::dbRemoveTable(\"PqConnection\", \"character\") RPostgreSQL::dbRemoveTable(\"PostgreSQLConnection\", \"character\") RPresto::dbRemoveTable(\"PrestoConnection\", \"\") RSQLite::dbRemoveTable(\"SQLiteConnection\", \"character\") sparklyr::dbRemoveTable(\"spark_connection\", \"character\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Remove a table from the database — dbRemoveTable","text":"","code":"dbRemoveTable(conn, name, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Remove a table from the database — dbRemoveTable","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Remove a table from the database — dbRemoveTable","text":"dbRemoveTable() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Remove a table from the database — dbRemoveTable","text":"table exist, error raised. attempt remove view function may result error. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Remove a table from the database — dbRemoveTable","text":"following arguments part dbRemoveTable() generic (improve compatibility across backends) part DBI specification: temporary (default: FALSE) fail_if_missing (default: TRUE) arguments must provided named arguments. temporary TRUE, call dbRemoveTable() consider temporary tables. backends support argument. particular, permanent tables name left untouched. fail_if_missing FALSE, call dbRemoveTable() succeeds table exist.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Remove a table from the database — dbRemoveTable","text":"table removed dbRemoveTable() appear list tables returned dbListTables(), dbExistsTable() returns FALSE. removal propagates immediately connections database. function can also used remove temporary table. name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbRemoveTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbRemoveTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Remove a table from the database — dbRemoveTable","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbExistsTable(con, \"iris\") #> [1] FALSE dbWriteTable(con, \"iris\", iris) dbExistsTable(con, \"iris\") #> [1] TRUE dbRemoveTable(con, \"iris\") dbExistsTable(con, \"iris\") #> [1] FALSE dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":null,"dir":"Reference","previous_headings":"","what":"Execute a query on a given database connection — dbSendQuery","title":"Execute a query on a given database connection — dbSendQuery","text":"dbSendQuery() method submits synchronously executes SQL query database engine. extract records — need use dbFetch() method, must call dbClearResult() finish fetching records need. interactive use, almost always prefer dbGetQuery(). Use dbSendQueryArrow() dbGetQueryArrow() instead retrieve results Arrow object.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Execute a query on a given database connection — dbSendQuery","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbSendQuery(\"AdbiConnection\", \"character\") AzureKusto::dbSendQuery(\"AzureKustoConnection\", \"\") bigrquery::dbSendQuery(\"BigQueryConnection\", \"character\") DatabaseConnector::dbSendQuery(\"DatabaseConnectorDbiConnection\", \"character\") DatabaseConnector::dbSendQuery(\"DatabaseConnectorJdbcConnection\", \"character\") dittodb::dbSendQuery(\"DBIMockConnection\", \"character\") dittodb::dbSendQuery(\"DBIMockConnection\", \"SQL\") duckdb::dbSendQuery(\"duckdb_connection\", \"character\") lazysf::dbSendQuery(\"SFSQLConnection\", \"\") odbc::dbSendQuery(\"OdbcConnection\", \"character\") pool::dbSendQuery(\"Pool\", \"\") RAthena::dbSendQuery(\"AthenaConnection\", \"character\") RH2::dbSendQuery(\"H2Connection\", \"character\") RJDBC::dbSendQuery(\"JDBCConnection\", \"character\") RMariaDB::dbSendQuery(\"MariaDBConnection\", \"character\") RMySQL::dbSendQuery(\"MySQLConnection\", \"character\") RPostgres::dbSendQuery(\"PqConnection\", \"\") RPostgreSQL::dbSendQuery(\"PostgreSQLConnection\", \"character\") RPresto::dbSendQuery(\"PrestoConnection\", \"character\") RSQLite::dbSendQuery(\"SQLiteConnection\", \"character\") sergeant::dbSendQuery(\"DrillConnection\", \"\") sparklyr::dbSendQuery(\"spark_connection\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Execute a query on a given database connection — dbSendQuery","text":"","code":"dbSendQuery(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Execute a query on a given database connection — dbSendQuery","text":"conn DBIConnection object, returned dbConnect(). statement character string containing SQL. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Execute a query on a given database connection — dbSendQuery","text":"dbSendQuery() returns S4 object inherits DBIResult. result set can used dbFetch() extract records. finished using result, make sure clear dbClearResult().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Execute a query on a given database connection — dbSendQuery","text":"method SELECT queries . backends may support data manipulation queries method compatibility reasons. However, callers strongly encouraged use dbSendStatement() data manipulation statements. query submitted database server DBMS executes , possibly generating vast amounts data. data live driver-specific: drivers may choose leave output server transfer piecemeal R, others may transfer data client – necessarily memory R manages. See individual drivers' dbSendQuery() documentation details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"the-data-retrieval-flow","dir":"Reference","previous_headings":"","what":"The data retrieval flow","title":"Execute a query on a given database connection — dbSendQuery","text":"section gives complete overview flow execution queries return tabular data data frames. flow, except repeated calling dbBind() dbBindArrow(), implemented dbGetQuery(), sufficient unless want access results paged way parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQuery() create result set object class DBIResult. Optionally, bind query parameters dbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbColumnInfo() retrieve structure result set without retrieving actual data. Use dbFetch() get entire result set, page results, remaining rows. Fetching zero rows also possible retrieve structure result set data frame. step can called multiple times. forward paging supported, need cache previous pages need navigate backwards. Use dbHasCompleted() tell done. method returns TRUE rows available fetching. Repeat last four steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Execute a query on a given database connection — dbSendQuery","text":"error raised issuing query closed invalid connection, query non-NA string. error also raised syntax query invalid query parameters given (passing params argument) immediate argument set TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Execute a query on a given database connection — dbSendQuery","text":"following arguments part dbSendQuery() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See \"Specification\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Execute a query on a given database connection — dbSendQuery","text":"warnings occur normal conditions. done, DBIResult object must cleared call dbClearResult(). Failure clear result set leads warning connection closed. backend supports one open result set per connection, issuing second query invalidates already open result set raises warning. newly opened result set valid must cleared dbClearResult(). param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"specification-for-the-immediate-argument","dir":"Reference","previous_headings":"","what":"Specification for the immediate argument","title":"Execute a query on a given database connection — dbSendQuery","text":"immediate argument supports distinguishing \"direct\" \"prepared\" APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via \"direct\" API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed \"special\" query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQuery.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Execute a query on a given database connection — dbSendQuery","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbFetch(rs) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 10 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 11 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 dbClearResult(rs) # Pass one set of values with the param argument: rs <- dbSendQuery( con, \"SELECT * FROM mtcars WHERE cyl = ?\", params = list(4L) ) dbFetch(rs) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 10 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 11 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 dbClearResult(rs) # Pass multiple sets of values with dbBind(): rs <- dbSendQuery(con, \"SELECT * FROM mtcars WHERE cyl = ?\") dbBind(rs, list(6L)) dbFetch(rs) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 4 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 5 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 #> 6 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 #> 7 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 dbBind(rs, list(8L)) dbFetch(rs) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 2 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 3 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 #> 4 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 #> 5 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 #> 6 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 #> 7 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 #> 8 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 #> 9 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 #> 10 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 #> 11 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 #> 12 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 #> 13 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 #> 14 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"dbSendQueryArrow() method submits synchronously executes SQL query database engine. extract records — need use dbFetchArrow() method, must call dbClearResult() finish fetching records need. interactive use, almost always prefer dbGetQueryArrow(). Use dbSendQuery() dbGetQuery() instead retrieve results data frame.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbSendQueryArrow(\"AdbiConnection\") pool::dbSendQueryArrow(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"","code":"dbSendQueryArrow(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"conn DBIConnection object, returned dbConnect(). statement character string containing SQL. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"dbSendQueryArrow() returns S4 object inherits DBIResultArrow. result set can used dbFetchArrow() extract records. finished using result, make sure clear dbClearResult().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"method SELECT queries . backends may support data manipulation queries method compatibility reasons. However, callers strongly encouraged use dbSendStatement() data manipulation statements.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"the-data-retrieval-flow-for-arrow-streams","dir":"Reference","previous_headings":"","what":"The data retrieval flow for Arrow streams","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"section gives complete overview flow execution queries return tabular data Arrow stream. flow, except repeated calling dbBindArrow() dbBind(), implemented dbGetQueryArrow(), sufficient unless parameterized query want reuse. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendQueryArrow() create result set object class DBIResultArrow. Optionally, bind query parameters dbBindArrow() dbBind(). required query contains placeholders ? $1, depending database backend. Use dbFetchArrow() get data stream. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"error raised issuing query closed invalid connection, query non-NA string. error also raised syntax query invalid query parameters given (passing params argument) immediate argument set TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"following arguments part dbSendQueryArrow() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See \"Specification\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"warnings occur normal conditions. done, DBIResult object must cleared call dbClearResult(). Failure clear result set leads warning connection closed. backend supports one open result set per connection, issuing second query invalidates already open result set raises warning. newly opened result set valid must cleared dbClearResult(). param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"specification-for-the-immediate-argument","dir":"Reference","previous_headings":"","what":"Specification for the immediate argument","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"immediate argument supports distinguishing \"direct\" \"prepared\" APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via \"direct\" API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed \"special\" query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendQueryArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Execute a query on a given database connection for retrieval via Arrow — dbSendQueryArrow","text":"","code":"# Retrieve data as arrow table con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars) rs <- dbSendQueryArrow(con, \"SELECT * FROM mtcars WHERE cyl = 4\") dbFetchArrow(rs) #> > #> $ get_schema:function () #> $ get_next :function (schema = x$get_schema(), validate = TRUE) #> $ release :function () dbClearResult(rs) dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":null,"dir":"Reference","previous_headings":"","what":"Execute a data manipulation statement on a given database connection — dbSendStatement","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"dbSendStatement() method submits synchronously executes SQL data manipulation statement (e.g., UPDATE, DELETE, INSERT , DROP TABLE, ...) database engine. query number affected rows, call dbGetRowsAffected() returned result object. must also call dbClearResult() . interactive use, almost always prefer dbExecute().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbSendStatement(\"AdbiConnection\", \"character\") AzureKusto::dbSendStatement(\"AzureKustoConnection\", \"character\") DatabaseConnector::dbSendStatement(\"DatabaseConnectorConnection\", \"character\") dittodb::dbSendStatement(\"DBIMockConnection\", \"character\") odbc::dbSendStatement(\"OdbcConnection\", \"character\") pool::dbSendStatement(\"Pool\", \"\") RAthena::dbSendStatement(\"AthenaConnection\", \"character\") RMariaDB::dbSendStatement(\"MariaDBConnection\", \"character\") sparklyr::dbSendStatement(\"spark_connection\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"","code":"dbSendStatement(conn, statement, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"conn DBIConnection object, returned dbConnect(). statement character string containing SQL. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"dbSendStatement() returns S4 object inherits DBIResult. result set can used dbGetRowsAffected() determine number rows affected query. finished using result, make sure clear dbClearResult().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"dbSendStatement() comes default implementation simply forwards dbSendQuery(), support backends implement latter.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"the-command-execution-flow","dir":"Reference","previous_headings":"","what":"The command execution flow","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"section gives complete overview flow execution SQL statements side effects stored procedures, inserting deleting data, setting database connection options. flow, except repeated calling dbBindArrow(), implemented dbExecute(), sufficient non-parameterized queries. flow requires active connection established dbConnect(). See also vignette(\"dbi-advanced\") walkthrough. Use dbSendStatement() create result set object class DBIResult. queries need pass immediate = TRUE. Optionally, bind query parameters withdbBind() dbBindArrow(). required query contains placeholders ? $1, depending database backend. Optionally, use dbGetRowsAffected() retrieve number rows affected query. Repeat last two steps necessary. Use dbClearResult() clean result set object. step mandatory even rows fetched error occurred processing. good practice use .exit() withr::defer() ensure step always executed.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"error raised issuing statement closed invalid connection, statement non-NA string. error also raised syntax query invalid query parameters given (passing params argument) immediate argument set TRUE.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"following arguments part dbSendStatement() generic (improve compatibility across backends) part DBI specification: params (default: NULL) immediate (default: NULL) must provided named arguments. See \"Specification\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"warnings occur normal conditions. done, DBIResult object must cleared call dbClearResult(). Failure clear result set leads warning connection closed. backend supports one open result set per connection, issuing second query invalidates already open result set raises warning. newly opened result set valid must cleared dbClearResult(). param argument allows passing query parameters, see dbBind() details.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"specification-for-the-immediate-argument","dir":"Reference","previous_headings":"","what":"Specification for the immediate argument","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"immediate argument supports distinguishing \"direct\" \"prepared\" APIs offered many database drivers. Passing immediate = TRUE leads immediate execution query statement, via \"direct\" API (supported driver). default NULL means backend choose whatever API makes sense database, (relevant) tries API first attempt fails. successful second attempt result message suggests passing correct immediate argument. Examples possible behaviors: DBI backend defaults immediate = TRUE internally query without parameters passed: query executed query parameters passed: params given: rejected immediately database syntax error query, backend tries immediate = FALSE (gives message) params given: query executed using immediate = FALSE DBI backend defaults immediate = FALSE internally query without parameters passed: simple query: query executed \"special\" query (setting config options): fails, backend tries immediate = TRUE (gives message) query parameters passed: params given: waiting parameters via dbBind() params given: query executed","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbSendStatement.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Execute a data manipulation statement on a given database connection — dbSendStatement","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cars\", head(cars, 3)) rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (1, 1), (2, 2), (3, 3)\" ) dbHasCompleted(rs) #> [1] TRUE dbGetRowsAffected(rs) #> [1] 3 dbClearResult(rs) dbReadTable(con, \"cars\") # there are now 6 rows #> speed dist #> 1 4 2 #> 2 4 10 #> 3 7 4 #> 4 1 1 #> 5 2 2 #> 6 3 3 # Pass one set of values directly using the param argument: rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (?, ?)\", params = list(4L, 5L) ) dbClearResult(rs) # Pass multiple sets of values using dbBind(): rs <- dbSendStatement( con, \"INSERT INTO cars (speed, dist) VALUES (?, ?)\" ) dbBind(rs, list(5:6, 6:7)) dbBind(rs, list(7L, 8L)) dbClearResult(rs) dbReadTable(con, \"cars\") # there are now 10 rows #> speed dist #> 1 4 2 #> 2 4 10 #> 3 7 4 #> 4 1 1 #> 5 2 2 #> 6 3 3 #> 7 4 5 #> 8 5 6 #> 9 6 7 #> 10 7 8 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSetDataMappings.html","id":null,"dir":"Reference","previous_headings":"","what":"Set data mappings between an DBMS and R. — dbSetDataMappings","title":"Set data mappings between an DBMS and R. — dbSetDataMappings","text":"generic deprecated since working implementation ever produced.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSetDataMappings.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set data mappings between an DBMS and R. — dbSetDataMappings","text":"","code":"dbSetDataMappings(res, flds, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbSetDataMappings.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set data mappings between an DBMS and R. — dbSetDataMappings","text":"res object inheriting DBIResult. flds field description object returned dbColumnInfo. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbSetDataMappings.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Set data mappings between an DBMS and R. — dbSetDataMappings","text":"Sets one conversion functions handle translation DBMS data types R objects. needed non-primitive data, since DBI drivers handle common base types (integers, numeric, strings, etc.) details conversion functions (e.g., arguments, whether can invoke initializers /destructors) specified.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":null,"dir":"Reference","previous_headings":"","what":"Unquote identifiers — dbUnquoteIdentifier","title":"Unquote identifiers — dbUnquoteIdentifier","text":"Call method convert SQL object created dbQuoteIdentifier() back list Id objects.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Unquote identifiers — dbUnquoteIdentifier","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbUnquoteIdentifier(\"AdbiConnection\", \"\") odbc::dbUnquoteIdentifier(\"Microsoft SQL Server\", \"SQL\") pool::dbUnquoteIdentifier(\"Pool\", \"\") RMariaDB::dbUnquoteIdentifier(\"MariaDBConnection\", \"SQL\") RPostgres::dbUnquoteIdentifier(\"PqConnection\", \"SQL\") RSQLite::dbUnquoteIdentifier(\"SQLiteConnection\", \"SQL\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Unquote identifiers — dbUnquoteIdentifier","text":"","code":"dbUnquoteIdentifier(conn, x, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Unquote identifiers — dbUnquoteIdentifier","text":"conn DBIConnection object, returned dbConnect(). x SQL Id object. ... arguments passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Unquote identifiers — dbUnquoteIdentifier","text":"dbUnquoteIdentifier() returns list objects length input. empty vector, function returns length-0 object. names input argument preserved output. x value returned dbUnquoteIdentifier(), calling dbUnquoteIdentifier(..., dbQuoteIdentifier(..., x)) returns list(x). x object class Id, calling dbUnquoteIdentifier(..., x) returns list(x). (backends may convenient return Id objects achieve behavior, required.) Plain character vectors can also passed dbUnquoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Unquote identifiers — dbUnquoteIdentifier","text":"error raised character vectors missing value passed x argument.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Unquote identifiers — dbUnquoteIdentifier","text":"character vector length one, quoting (dbQuoteIdentifier()) unquoting quoting first element identical just quoting. also true strings contain special characters space, dot, comma, quotes used mark strings identifiers, database supports . Unquoting simple strings (consisting letters) wrapped SQL() quoting via dbQuoteIdentifier() gives result just quoting string. Similarly, unquoting expressions form SQL(\"schema.table\") quoting gives result quoting identifier constructed Id(\"schema\", \"table\").","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbUnquoteIdentifier.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Unquote identifiers — dbUnquoteIdentifier","text":"","code":"# Unquoting allows to understand the structure of a # possibly complex quoted identifier dbUnquoteIdentifier( ANSI(), SQL(c('\"Catalog\".\"Schema\".\"Table\"', '\"Schema\".\"Table\"', '\"UnqualifiedTable\"')) ) #> [[1]] #> \"Catalog\".\"Schema\".\"Table\" #> #> [[2]] #> \"Schema\".\"Table\" #> #> [[3]] #> \"UnqualifiedTable\" #> # The returned object is always a list, # also for Id objects dbUnquoteIdentifier(ANSI(), Id(\"Catalog\", \"Schema\", \"Table\")) #> [[1]] #> \"Catalog\".\"Schema\".\"Table\" #> # Quoting and unquoting are inverses dbQuoteIdentifier( ANSI(), dbUnquoteIdentifier(ANSI(), SQL(\"UnqualifiedTable\"))[[1]] ) #> \"UnqualifiedTable\" dbQuoteIdentifier( ANSI(), dbUnquoteIdentifier(ANSI(), Id(\"Schema\", \"Table\"))[[1]] ) #> \"Schema\".\"Table\""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":null,"dir":"Reference","previous_headings":"","what":"Self-contained SQL transactions — dbWithTransaction","title":"Self-contained SQL transactions — dbWithTransaction","text":"Given transactions implemented, function allows pass code run transaction. default method dbWithTransaction() calls dbBegin() executing code, dbCommit() successful completion, dbRollback() case error. advantage remember dbBegin() dbCommit() dbRollback() – taken care . special function dbBreak() allows early exit rollback, can called inside dbWithTransaction().","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Self-contained SQL transactions — dbWithTransaction","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbWithTransaction(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Self-contained SQL transactions — dbWithTransaction","text":"","code":"dbWithTransaction(conn, code, ...) dbBreak()"},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Self-contained SQL transactions — dbWithTransaction","text":"conn DBIConnection object, returned dbConnect(). code arbitrary block R code. ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Self-contained SQL transactions — dbWithTransaction","text":"dbWithTransaction() returns value executed code.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Self-contained SQL transactions — dbWithTransaction","text":"DBI implements dbWithTransaction(), backends need override generic implement specialized handling.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Self-contained SQL transactions — dbWithTransaction","text":"Failure initiate transaction (e.g., connection closed invalid dbBegin() called already) gives error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Self-contained SQL transactions — dbWithTransaction","text":"dbWithTransaction() initiates transaction dbBegin(), executes code given code argument, commits transaction dbCommit(). code raises error, transaction instead aborted dbRollback(), error propagated. code calls dbBreak(), execution code stops transaction silently aborted. side effects caused code (creation new variables) propagate calling environment.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWithTransaction.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Self-contained SQL transactions — dbWithTransaction","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cash\", data.frame(amount = 100)) dbWriteTable(con, \"account\", data.frame(amount = 2000)) # All operations are carried out as logical unit: dbWithTransaction( con, { withdrawal <- 300 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) } ) #> [1] 1 # The code is executed as if in the current environment: withdrawal #> [1] 300 # The changes are committed to the database after successful execution: dbReadTable(con, \"cash\") #> amount #> 1 400 dbReadTable(con, \"account\") #> amount #> 1 1700 # Rolling back with dbBreak(): dbWithTransaction( con, { withdrawal <- 5000 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) if (dbReadTable(con, \"account\")$amount < 0) { dbBreak() } } ) # These changes were not committed to the database: dbReadTable(con, \"cash\") #> amount #> 1 400 dbReadTable(con, \"account\") #> amount #> 1 1700 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Copy data frames to database tables — dbWriteTable","title":"Copy data frames to database tables — dbWriteTable","text":"Writes, overwrites appends data frame database table, optionally converting row names column specifying SQL data types fields.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Copy data frames to database tables — dbWriteTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbWriteTable(\"AdbiConnection\", \"character\", \"data.frame\") adbi::dbWriteTable(\"AdbiConnection\", \"Id\", \"data.frame\") adbi::dbWriteTable(\"AdbiConnection\", \"SQL\", \"data.frame\") AzureKusto::dbWriteTable(\"AzureKustoConnection\", \"\", \"\") bigrquery::dbWriteTable(\"BigQueryConnection\", \"AsIs\", \"data.frame\") bigrquery::dbWriteTable(\"BigQueryConnection\", \"character\", \"data.frame\") bigrquery::dbWriteTable(\"BigQueryConnection\", \"Id\", \"data.frame\") DatabaseConnector::dbWriteTable(\"DatabaseConnectorConnection\", \"\", \"\") dittodb::dbWriteTable(\"DBIMockConnection\", \"character\", \"data.frame\") duckdb::dbWriteTable(\"duckdb_connection\", \"character\", \"data.frame\") odbc::dbWriteTable(\"OdbcConnection\", \"character\", \"data.frame\") odbc::dbWriteTable(\"OdbcConnection\", \"Id\", \"data.frame\") odbc::dbWriteTable(\"OdbcConnection\", \"SQL\", \"data.frame\") pool::dbWriteTable(\"Pool\", \"\", \"\") RAthena::dbWriteTable(\"AthenaConnection\", \"character\", \"data.frame\") RAthena::dbWriteTable(\"AthenaConnection\", \"Id\", \"data.frame\") RAthena::dbWriteTable(\"AthenaConnection\", \"SQL\", \"data.frame\") RH2::dbWriteTable(\"H2Connection\", \"character\", \"\") RH2::dbWriteTable(\"H2Connection\", \"character\", \"data.frame\") RJDBC::dbWriteTable(\"JDBCConnection\", \"\", \"\") RMariaDB::dbWriteTable(\"MariaDBConnection\", \"character\", \"character\") RMariaDB::dbWriteTable(\"MariaDBConnection\", \"character\", \"data.frame\") RMySQL::dbWriteTable(\"MySQLConnection\", \"character\", \"character\") RMySQL::dbWriteTable(\"MySQLConnection\", \"character\", \"data.frame\") RPostgres::dbWriteTable(\"PqConnection\", \"character\", \"data.frame\") RPostgreSQL::dbWriteTable(\"PostgreSQLConnection\", \"character\", \"character\") RPostgreSQL::dbWriteTable(\"PostgreSQLConnection\", \"character\", \"data.frame\") RPresto::dbWriteTable(\"PrestoConnection\", \"\", \"data.frame\") RSQLite::dbWriteTable(\"SQLiteConnection\", \"character\", \"character\") RSQLite::dbWriteTable(\"SQLiteConnection\", \"character\", \"data.frame\") sf::dbWriteTable(\"DBIObject\", \"character\", \"sf\") sf::dbWriteTable(\"PostgreSQLConnection\", \"character\", \"sf\") sparklyr::dbWriteTable(\"spark_connection\", \"\", \"\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Copy data frames to database tables — dbWriteTable","text":"","code":"dbWriteTable(conn, name, value, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Copy data frames to database tables — dbWriteTable","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') value data.frame (coercible data.frame). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Copy data frames to database tables — dbWriteTable","text":"dbWriteTable() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Copy data frames to database tables — dbWriteTable","text":"function expects data frame. Use dbWriteTableArrow() write Arrow object. function useful want create load table time. Use dbAppendTable() dbAppendTableArrow() appending data existing table, dbCreateTable() dbCreateTableArrow() creating table, dbExistsTable() dbRemoveTable() overwriting tables. DBI standardizes writing data frames dbWriteTable(). backends might implement methods can consume CSV files data formats. details, see documentation individual methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Copy data frames to database tables — dbWriteTable","text":"table exists, append overwrite arguments unset, append = TRUE data frame new data different column names, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar. Invalid values additional arguments row.names, overwrite, append, field.types, temporary (non-scalars, unsupported data types, NA, incompatible values, duplicate missing names, incompatible columns) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Copy data frames to database tables — dbWriteTable","text":"following arguments part dbWriteTable() generic (improve compatibility across backends) part DBI specification: row.names (default: FALSE) overwrite (default: FALSE) append (default: FALSE) field.types (default: NULL) temporary (default: FALSE) must provided named arguments. See \"Specification\" \"Value\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Copy data frames to database tables — dbWriteTable","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbWriteTable() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done value argument must data frame subset columns existing table append = TRUE. order columns matter append = TRUE. overwrite argument TRUE, existing table name overwritten. argument change behavior table exist yet. append argument TRUE, rows existing table preserved, new data appended. table exist yet, created. temporary argument TRUE, table available second connection gone reconnecting. backends support argument. regular, non-temporary table visible second connection, pre-existing connection, reconnecting database. SQL keywords can used freely table names, column names, data. Quotes, commas, spaces, special characters newlines tabs, can also used data, , database supports non-syntactic identifiers, also table names column names. following data types must supported least, read identically dbReadTable(): integer numeric (behavior Inf NaN specified) logical NA NULL 64-bit values (using \"bigint\" field type); result can converted numeric, may lose precision, converted character vector, gives full decimal representation written another table read unchanged character (UTF-8 native encodings), supporting empty strings non-empty string factor (returned character) list raw (supported database) objects type blob::blob (supported database) date (supported database; returned Date), also dates prior 1970 1900 2038 time (supported database; returned objects inherit difftime) timestamp (supported database; returned POSIXct respecting time zone necessarily preserving input time zone), also timestamps prior 1970 1900 2038 respecting time zone necessarily preserving input time zone) Mixing column types table supported. field.types argument must named character vector one entry column. indicates SQL data type used new column. column missed field.types, type inferred input data dbDataType(). interpretation rownames depends row.names argument, see sqlRownamesToColumn() details: FALSE NULL, row names ignored. TRUE, row names converted column named \"row_names\", even input data frame natural row names 1 nrow(...). NA, column named \"row_names\" created data custom row names, extra column created case natural row names. string, specifies name column remote table contains row names, even input data frame natural row names. default row.names = FALSE.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Copy data frames to database tables — dbWriteTable","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"mtcars\", mtcars[1:5, ]) dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 dbWriteTable(con, \"mtcars\", mtcars[6:10, ], append = TRUE) dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 dbWriteTable(con, \"mtcars\", mtcars[1:10, ], overwrite = TRUE) dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 # No row names dbWriteTable(con, \"mtcars\", mtcars[1:10, ], overwrite = TRUE, row.names = FALSE) dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4"},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":null,"dir":"Reference","previous_headings":"","what":"Copy Arrow objects to database tables — dbWriteTableArrow","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"Writes, overwrites appends Arrow object database table.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::dbWriteTableArrow(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"","code":"dbWriteTableArrow(conn, name, value, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"conn DBIConnection object, returned dbConnect(). name table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') value nanoarray stream, object coercible nanoarray stream nanoarrow::as_nanoarrow_array_stream(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"dbWriteTableArrow() returns TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"function expects Arrow object. Convert data frame Arrow object nanoarrow::as_nanoarrow_array_stream() use dbWriteTable() write data frame. function useful want create load table time. Use dbAppendTableArrow() appending data existing table, dbCreateTableArrow() creating table specifying field types, dbRemoveTable() overwriting tables.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"table exists, append overwrite arguments unset, append = TRUE data frame new data different column names, error raised; remote table remains unchanged. error raised calling method closed invalid connection. error also raised name processed dbQuoteIdentifier() results non-scalar. Invalid values additional arguments overwrite, append, temporary (non-scalars, unsupported data types, NA, incompatible values, incompatible columns) also raise error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"additional-arguments","dir":"Reference","previous_headings":"","what":"Additional arguments","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"following arguments part dbWriteTableArrow() generic (improve compatibility across backends) part DBI specification: overwrite (default: FALSE) append (default: FALSE) temporary (default: FALSE) must provided named arguments. See \"Specification\" \"Value\" sections details usage.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"name argument processed follows, support databases allow non-syntactic names objects: unquoted table name string: dbWriteTableArrow() quoting, perhaps calling dbQuoteIdentifier(conn, x = name) result call dbQuoteIdentifier(): quoting done value argument must data frame subset columns existing table append = TRUE. order columns matter append = TRUE. overwrite argument TRUE, existing table name overwritten. argument change behavior table exist yet. append argument TRUE, rows existing table preserved, new data appended. table exist yet, created. temporary argument TRUE, table available second connection gone reconnecting. backends support argument. regular, non-temporary table visible second connection, pre-existing connection, reconnecting database. SQL keywords can used freely table names, column names, data. Quotes, commas, spaces, special characters newlines tabs, can also used data, , database supports non-syntactic identifiers, also table names column names. following data types must supported least, read identically dbReadTable(): integer numeric (behavior Inf NaN specified) logical NA NULL 64-bit values (using \"bigint\" field type); result can converted numeric, may lose precision, converted character vector, gives full decimal representation written another table read unchanged character (UTF-8 native encodings), supporting empty strings non-empty string factor (possibly returned character) objects type blob::blob (supported database) date (supported database; returned Date), also dates prior 1970 1900 2038 time (supported database; returned objects inherit difftime) timestamp (supported database; returned POSIXct respecting time zone necessarily preserving input time zone), also timestamps prior 1970 1900 2038 respecting time zone necessarily preserving input time zone) Mixing column types table supported.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/dbWriteTableArrow.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Copy Arrow objects to database tables — dbWriteTableArrow","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTableArrow(con, \"mtcars\", nanoarrow::as_nanoarrow_array_stream(mtcars[1:5, ])) dbReadTable(con, \"mtcars\") #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/dot-SQL92Keywords.html","id":null,"dir":"Reference","previous_headings":"","what":"Keywords according to the SQL-92 standard — .SQL92Keywords","title":"Keywords according to the SQL-92 standard — .SQL92Keywords","text":"character vector SQL-92 keywords, uppercase.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dot-SQL92Keywords.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Keywords according to the SQL-92 standard — .SQL92Keywords","text":"","code":".SQL92Keywords"},{"path":"https://dbi.r-dbi.org/dev/reference/dot-SQL92Keywords.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Keywords according to the SQL-92 standard — .SQL92Keywords","text":"object class character length 220.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/dot-SQL92Keywords.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Keywords according to the SQL-92 standard — .SQL92Keywords","text":"","code":"\"SELECT\" %in% .SQL92Keywords #> [1] TRUE"},{"path":"https://dbi.r-dbi.org/dev/reference/hidden_aliases.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal page for hidden aliases — hidden_aliases","title":"Internal page for hidden aliases — hidden_aliases","text":"S4 methods require documentation entry clutter index.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/hidden_aliases.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal page for hidden aliases — hidden_aliases","text":"","code":"# S4 method for class 'DBIObject' SQLKeywords(dbObj, ...) # S4 method for class 'missing' SQLKeywords(dbObj, ...) # S4 method for class 'DBIConnection' dbAppendTableArrow(conn, name, value, ...) # S4 method for class 'DBIConnection' dbAppendTable(conn, name, value, ..., row.names = NULL) # S4 method for class 'DBIResult' dbBindArrow(res, params, ...) # S4 method for class 'DBIResultArrowDefault' dbBindArrow(res, params, ...) # S4 method for class 'DBIResultArrow' dbBind(res, params, ...) # S4 method for class 'DBIDriver' dbCanConnect(drv, ...) # S4 method for class 'DBIResultArrow' dbClearResult(res, ...) # S4 method for class 'DBIConnector' dbConnect(drv, ...) # S4 method for class 'DBIConnection' dbCreateTableArrow(conn, name, value, ..., temporary = FALSE) # S4 method for class 'DBIConnection' dbCreateTable(conn, name, fields, ..., row.names = NULL, temporary = FALSE) # S4 method for class 'DBIConnector' dbDataType(dbObj, obj, ...) # S4 method for class 'DBIObject' dbDataType(dbObj, obj, ...) # S4 method for class 'character' dbDriver(drvName, ...) # S4 method for class 'DBIConnection,character' dbExecute(conn, statement, ...) # S4 method for class 'DBIConnection,Id' dbExistsTable(conn, name, ...) # S4 method for class 'DBIResultArrow' dbFetchArrowChunk(res, ...) # S4 method for class 'DBIResultArrow' dbFetchArrow(res, ...) # S4 method for class 'DBIResult' dbFetch(res, n = -1, ...) # S4 method for class 'DBIResultArrow' dbFetch(res, n = -1, ...) # S4 method for class 'DBIConnector' dbGetConnectArgs(drv, eval = TRUE, ...) # S4 method for class 'DBIResult' dbGetInfo(dbObj, ...) # S4 method for class 'DBIResultArrow' dbGetInfo(dbObj, ...) # S4 method for class 'DBIConnection' dbGetQueryArrow(conn, statement, ...) # S4 method for class 'DBIConnection,character' dbGetQuery(conn, statement, ..., n = -1L) # S4 method for class 'DBIResultArrow' dbGetRowCount(res, ...) # S4 method for class 'DBIResultArrow' dbGetRowsAffected(res, ...) # S4 method for class 'DBIResultArrow' dbGetStatement(res, ...) # S4 method for class 'DBIResultArrow' dbHasCompleted(res, ...) # S4 method for class 'DBIConnector' dbIsReadOnly(dbObj, ...) # S4 method for class 'DBIObject' dbIsReadOnly(dbObj, ...) # S4 method for class 'DBIResultArrowDefault' dbIsValid(dbObj, ...) # S4 method for class 'DBIConnection,Id' dbListFields(conn, name, ...) # S4 method for class 'DBIConnection,character' dbListFields(conn, name, ...) # S4 method for class 'DBIConnection' dbListObjects(conn, prefix = NULL, ...) # S4 method for class 'DBIConnection,ANY' dbQuoteIdentifier(conn, x, ...) # S4 method for class 'DBIConnection,character' dbQuoteIdentifier(conn, x, ...) # S4 method for class 'DBIConnection,SQL' dbQuoteIdentifier(conn, x, ...) # S4 method for class 'DBIConnection,Id' dbQuoteIdentifier(conn, x, ...) # S4 method for class 'DBIConnection' dbQuoteLiteral(conn, x, ...) # S4 method for class 'DBIConnection,ANY' dbQuoteString(conn, x, ...) # S4 method for class 'DBIConnection,character' dbQuoteString(conn, x, ...) # S4 method for class 'DBIConnection,SQL' dbQuoteString(conn, x, ...) # S4 method for class 'DBIConnection' dbReadTableArrow(conn, name, ...) # S4 method for class 'DBIConnection,Id' dbReadTable(conn, name, ...) # S4 method for class 'DBIConnection,character' dbReadTable(conn, name, ..., row.names = FALSE, check.names = TRUE) # S4 method for class 'DBIConnection,Id' dbRemoveTable(conn, name, ...) # S4 method for class 'DBIConnection' dbSendQueryArrow(conn, statement, params = NULL, ...) # S4 method for class 'DBIConnection,character' dbSendStatement(conn, statement, ...) # S4 method for class 'DBIConnection' dbUnquoteIdentifier(conn, x, ...) # S4 method for class 'DBIConnection' dbWithTransaction(conn, code) # S4 method for class 'DBIConnection' dbWriteTableArrow( conn, name, value, append = FALSE, overwrite = FALSE, ..., temporary = FALSE ) # S4 method for class 'DBIConnection,Id' dbWriteTable(conn, name, value, ...) # S4 method for class 'DBIObject,character' isSQLKeyword( dbObj, name, keywords = .SQL92Keywords, case = c(\"lower\", \"upper\", \"any\")[3], ... ) # S4 method for class 'DBIObject,character' make.db.names( dbObj, snames, keywords = .SQL92Keywords, unique = TRUE, allow.keywords = TRUE, ... ) # S4 method for class 'AnsiConnection' show(object) # S4 method for class 'DBIConnection' show(object) # S4 method for class 'DBIConnector' show(object) # S4 method for class 'DBIDriver' show(object) # S4 method for class 'DBIResult' show(object) # S4 method for class 'Id' show(object) # S4 method for class 'SQL' show(object) # S4 method for class 'DBIConnection' sqlAppendTable(con, table, values, row.names = NA, ...) # S4 method for class 'DBIConnection' sqlCreateTable(con, table, fields, row.names = NA, temporary = FALSE, ...) # S4 method for class 'DBIConnection' sqlData(con, value, row.names = NA, ...) # S4 method for class 'DBIConnection' sqlInterpolate(conn, sql, ..., .dots = list()) # S4 method for class 'DBIConnection' sqlParseVariables(conn, sql, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/hidden_aliases.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal page for hidden aliases — hidden_aliases","text":"n Number rows fetch, default -1 object Table object print","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":null,"dir":"Reference","previous_headings":"","what":"Make R identifiers into legal SQL identifiers — make.db.names.default","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"methods DEPRECATED. Please use dbQuoteIdentifier() (possibly dbQuoteString()) instead.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"","code":"make.db.names.default( snames, keywords = .SQL92Keywords, unique = TRUE, allow.keywords = TRUE ) isSQLKeyword.default( name, keywords = .SQL92Keywords, case = c(\"lower\", \"upper\", \"any\")[3] ) isSQLKeyword( dbObj, name, keywords = .SQL92Keywords, case = c(\"lower\", \"upper\", \"any\")[3], ... ) make.db.names( dbObj, snames, keywords = .SQL92Keywords, unique = TRUE, allow.keywords = TRUE, ... )"},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"snames character vector R identifiers (symbols) need make SQL identifiers. keywords character vector SQL keywords, default .SQL92Keywords defined DBI. unique logical describing whether resulting set SQL names unique. default TRUE. Following SQL 92 standard, uniqueness SQL identifiers determined regardless whether letters upper lower case. allow.keywords logical describing whether SQL keywords allowed resulting set SQL names. default TRUE name character vector database identifier candidates need determine whether legal SQL identifiers . case character string specifying whether make comparison lower case, upper case, two. defaults . dbObj DBI object (e.g., DBIDriver). ... argument passed driver implementation.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"make.db.names returns character vector legal SQL identifiers corresponding snames argument. SQLKeywords returns character vector known keywords database-engine associated dbObj. isSQLKeyword returns logical vector parallel name.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"algorithm make.db.names first invokes make.names replaces occurrence dot . underscore _. allow.keywords FALSE identifiers collide SQL keywords, small integer appended identifier form \"_n\". set SQL keywords stored character vector .SQL92Keywords reflects SQL ANSI/ISO standard documented \"X/Open SQL RDA\", 1994, ISBN 1-872630-68-8. Users can easily override update vector.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":"bugs","dir":"Reference","previous_headings":"","what":"Bugs","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"current mapping guaranteed fully reversible: SQL identifiers get mapped R identifiers make.names back SQL make.db.names() equal original SQL identifiers (e.g., compound SQL identifiers form username.tablename loose dot “.”).","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/make.db.names.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Make R identifiers into legal SQL identifiers — make.db.names.default","text":"set SQL keywords stored character vector .SQL92Keywords reflects SQL ANSI/ISO standard documented \"X/Open SQL RDA\", 1994, ISBN 1-872630-68-8. Users can easily override update vector.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/rownames.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert row names back and forth between columns — rownames","title":"Convert row names back and forth between columns — rownames","text":"functions provide reasonably automatic way preserving row names data frame back--forth translation SQL table. default, row names converted explicit column called \"row_names\", query returning column called \"row_names\" automatically set row names. methods mostly useful backend implementers.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/rownames.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert row names back and forth between columns — rownames","text":"","code":"sqlRownamesToColumn(df, row.names = NA) sqlColumnToRownames(df, row.names = NA)"},{"path":"https://dbi.r-dbi.org/dev/reference/rownames.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert row names back and forth between columns — rownames","text":"df data frame row.names Either TRUE, FALSE, NA string. TRUE, always translate row names column called \"row_names\". FALSE, never translate row names. NA, translate rownames character vector. string equivalent TRUE, allows override default name. backward compatibility, NULL equivalent FALSE.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/rownames.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert row names back and forth between columns — rownames","text":"","code":"# If have row names sqlRownamesToColumn(head(mtcars)) #> row_names mpg cyl disp hp drat wt qsec vs am gear carb #> 1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 #> 6 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 sqlRownamesToColumn(head(mtcars), FALSE) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 sqlRownamesToColumn(head(mtcars), \"ROWNAMES\") #> ROWNAMES mpg cyl disp hp drat wt qsec vs am gear carb #> 1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 #> 6 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 # If don't have sqlRownamesToColumn(head(iris)) #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 5.1 3.5 1.4 0.2 setosa #> 2 4.9 3.0 1.4 0.2 setosa #> 3 4.7 3.2 1.3 0.2 setosa #> 4 4.6 3.1 1.5 0.2 setosa #> 5 5.0 3.6 1.4 0.2 setosa #> 6 5.4 3.9 1.7 0.4 setosa sqlRownamesToColumn(head(iris), TRUE) #> row_names Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 1 5.1 3.5 1.4 0.2 setosa #> 2 2 4.9 3.0 1.4 0.2 setosa #> 3 3 4.7 3.2 1.3 0.2 setosa #> 4 4 4.6 3.1 1.5 0.2 setosa #> 5 5 5.0 3.6 1.4 0.2 setosa #> 6 6 5.4 3.9 1.7 0.4 setosa sqlRownamesToColumn(head(iris), \"ROWNAMES\") #> ROWNAMES Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 1 5.1 3.5 1.4 0.2 setosa #> 2 2 4.9 3.0 1.4 0.2 setosa #> 3 3 4.7 3.2 1.3 0.2 setosa #> 4 4 4.6 3.1 1.5 0.2 setosa #> 5 5 5.0 3.6 1.4 0.2 setosa #> 6 6 5.4 3.9 1.7 0.4 setosa"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlAppendTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Compose query to insert rows into a table — sqlAppendTable","title":"Compose query to insert rows into a table — sqlAppendTable","text":"sqlAppendTable() generates single SQL string inserts data frame existing table. sqlAppendTableTemplate() generates template suitable use dbBind(). default methods ANSI SQL 99 compliant. methods mostly useful backend implementers.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlAppendTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Compose query to insert rows into a table — sqlAppendTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::sqlAppendTable(\"Pool\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlAppendTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compose query to insert rows into a table — sqlAppendTable","text":"","code":"sqlAppendTable(con, table, values, row.names = NA, ...) sqlAppendTableTemplate( con, table, values, row.names = NA, prefix = \"?\", ..., pattern = \"\" )"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlAppendTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compose query to insert rows into a table — sqlAppendTable","text":"con database connection. table table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') values data frame. Factors converted character vectors. Character vectors escaped dbQuoteString(). row.names Either TRUE, FALSE, NA string. TRUE, always translate row names column called \"row_names\". FALSE, never translate row names. NA, translate rownames character vector. string equivalent TRUE, allows override default name. backward compatibility, NULL equivalent FALSE. ... arguments used individual methods. prefix Parameter prefix use placeholders. pattern Parameter pattern use placeholders: \"\": pattern \"1\": position anything else: field name","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlAppendTable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compose query to insert rows into a table — sqlAppendTable","text":"row.names argument must passed explicitly order avoid compatibility warning. default changed later release.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlAppendTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compose query to insert rows into a table — sqlAppendTable","text":"","code":"sqlAppendTable(ANSI(), \"iris\", head(iris)) #> Warning: Do not rely on the default value of the row.names argument for sqlAppendTable(), it will change in the future. #> INSERT INTO \"iris\" #> (\"Sepal.Length\", \"Sepal.Width\", \"Petal.Length\", \"Petal.Width\", \"Species\") #> VALUES #> (5.1, 3.5, 1.4, 0.2, 'setosa'), #> (4.9, 3, 1.4, 0.2, 'setosa'), #> (4.7, 3.2, 1.3, 0.2, 'setosa'), #> (4.6, 3.1, 1.5, 0.2, 'setosa'), #> (5, 3.6, 1.4, 0.2, 'setosa'), #> (5.4, 3.9, 1.7, 0.4, 'setosa') sqlAppendTable(ANSI(), \"mtcars\", head(mtcars)) #> Warning: Do not rely on the default value of the row.names argument for sqlAppendTable(), it will change in the future. #> INSERT INTO \"mtcars\" #> (\"row_names\", \"mpg\", \"cyl\", \"disp\", \"hp\", \"drat\", \"wt\", \"qsec\", \"vs\", \"am\", \"gear\", \"carb\") #> VALUES #> ('Mazda RX4', 21, 6, 160, 110, 3.9, 2.62, 16.46, 0, 1, 4, 4), #> ('Mazda RX4 Wag', 21, 6, 160, 110, 3.9, 2.875, 17.02, 0, 1, 4, 4), #> ('Datsun 710', 22.8, 4, 108, 93, 3.85, 2.32, 18.61, 1, 1, 4, 1), #> ('Hornet 4 Drive', 21.4, 6, 258, 110, 3.08, 3.215, 19.44, 1, 0, 3, 1), #> ('Hornet Sportabout', 18.7, 8, 360, 175, 3.15, 3.44, 17.02, 0, 0, 3, 2), #> ('Valiant', 18.1, 6, 225, 105, 2.76, 3.46, 20.22, 1, 0, 3, 1) sqlAppendTable(ANSI(), \"mtcars\", head(mtcars), row.names = FALSE) #> INSERT INTO \"mtcars\" #> (\"mpg\", \"cyl\", \"disp\", \"hp\", \"drat\", \"wt\", \"qsec\", \"vs\", \"am\", \"gear\", \"carb\") #> VALUES #> (21, 6, 160, 110, 3.9, 2.62, 16.46, 0, 1, 4, 4), #> (21, 6, 160, 110, 3.9, 2.875, 17.02, 0, 1, 4, 4), #> (22.8, 4, 108, 93, 3.85, 2.32, 18.61, 1, 1, 4, 1), #> (21.4, 6, 258, 110, 3.08, 3.215, 19.44, 1, 0, 3, 1), #> (18.7, 8, 360, 175, 3.15, 3.44, 17.02, 0, 0, 3, 2), #> (18.1, 6, 225, 105, 2.76, 3.46, 20.22, 1, 0, 3, 1) sqlAppendTableTemplate(ANSI(), \"iris\", iris) #> Warning: Do not rely on the default value of the `row.names` argument to `sqlAppendTableTemplate()`, it will change in the future. #> INSERT INTO \"iris\" #> (\"Sepal.Length\", \"Sepal.Width\", \"Petal.Length\", \"Petal.Width\", \"Species\") #> VALUES #> (?, ?, ?, ?, ?) sqlAppendTableTemplate(ANSI(), \"mtcars\", mtcars) #> Warning: Do not rely on the default value of the `row.names` argument to `sqlAppendTableTemplate()`, it will change in the future. #> INSERT INTO \"mtcars\" #> (\"row_names\", \"mpg\", \"cyl\", \"disp\", \"hp\", \"drat\", \"wt\", \"qsec\", \"vs\", \"am\", \"gear\", \"carb\") #> VALUES #> (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) sqlAppendTableTemplate(ANSI(), \"mtcars\", mtcars, row.names = FALSE) #> INSERT INTO \"mtcars\" #> (\"mpg\", \"cyl\", \"disp\", \"hp\", \"drat\", \"wt\", \"qsec\", \"vs\", \"am\", \"gear\", \"carb\") #> VALUES #> (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlCreateTable.html","id":null,"dir":"Reference","previous_headings":"","what":"Compose query to create a simple table — sqlCreateTable","title":"Compose query to create a simple table — sqlCreateTable","text":"Exposes interface simple CREATE TABLE commands. default method ANSI SQL 99 compliant. method mostly useful backend implementers.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlCreateTable.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Compose query to create a simple table — sqlCreateTable","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. odbc::sqlCreateTable(\"DB2/AIX64\") odbc::sqlCreateTable(\"HDB\") odbc::sqlCreateTable(\"Microsoft SQL Server\") odbc::sqlCreateTable(\"OdbcConnection\") odbc::sqlCreateTable(\"Oracle\") odbc::sqlCreateTable(\"Teradata\") pool::sqlCreateTable(\"Pool\") RAthena::sqlCreateTable(\"AthenaConnection\") RPresto::sqlCreateTable(\"PrestoConnection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlCreateTable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compose query to create a simple table — sqlCreateTable","text":"","code":"sqlCreateTable(con, table, fields, row.names = NA, temporary = FALSE, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlCreateTable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compose query to create a simple table — sqlCreateTable","text":"con database connection. table table name, passed dbQuoteIdentifier(). Options : character string unquoted DBMS table name, e.g. \"table_name\", call Id() components fully qualified table name, e.g. Id(schema = \"my_schema\", table = \"table_name\") call SQL() quoted fully qualified table name given verbatim, e.g. SQL('\"my_schema\".\"table_name\"') fields Either character vector data frame. named character vector: Names column names, values types. Names escaped dbQuoteIdentifier(). Field types unescaped. data frame: field types generated using dbDataType(). row.names Either TRUE, FALSE, NA string. TRUE, always translate row names column called \"row_names\". FALSE, never translate row names. NA, translate rownames character vector. string equivalent TRUE, allows override default name. backward compatibility, NULL equivalent FALSE. temporary TRUE, generate temporary table. ... arguments used individual methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlCreateTable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compose query to create a simple table — sqlCreateTable","text":"row.names argument must passed explicitly order avoid compatibility warning. default changed later release.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlCreateTable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compose query to create a simple table — sqlCreateTable","text":"","code":"sqlCreateTable(ANSI(), \"my-table\", c(a = \"integer\", b = \"text\")) #> Warning: Do not rely on the default value of the row.names argument for sqlCreateTable(), it will change in the future. #> CREATE TABLE \"my-table\" ( #> \"a\" integer, #> \"b\" text #> ) #> sqlCreateTable(ANSI(), \"my-table\", iris) #> Warning: Do not rely on the default value of the row.names argument for sqlCreateTable(), it will change in the future. #> CREATE TABLE \"my-table\" ( #> \"Sepal.Length\" DOUBLE, #> \"Sepal.Width\" DOUBLE, #> \"Petal.Length\" DOUBLE, #> \"Petal.Width\" DOUBLE, #> \"Species\" TEXT #> ) #> # By default, character row names are converted to a row_names colum sqlCreateTable(ANSI(), \"mtcars\", mtcars[, 1:5]) #> Warning: Do not rely on the default value of the row.names argument for sqlCreateTable(), it will change in the future. #> CREATE TABLE \"mtcars\" ( #> \"row_names\" TEXT, #> \"mpg\" DOUBLE, #> \"cyl\" DOUBLE, #> \"disp\" DOUBLE, #> \"hp\" DOUBLE, #> \"drat\" DOUBLE #> ) #> sqlCreateTable(ANSI(), \"mtcars\", mtcars[, 1:5], row.names = FALSE) #> CREATE TABLE \"mtcars\" ( #> \"mpg\" DOUBLE, #> \"cyl\" DOUBLE, #> \"disp\" DOUBLE, #> \"hp\" DOUBLE, #> \"drat\" DOUBLE #> ) #>"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlData.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert a data frame into form suitable for upload to an SQL database — sqlData","title":"Convert a data frame into form suitable for upload to an SQL database — sqlData","text":"generic method coerces R objects vectors suitable upload database. output vary little method method depending whether main upload device single SQL string multiple parameterized queries. method mostly useful backend implementers.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlData.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Convert a data frame into form suitable for upload to an SQL database — sqlData","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. odbc::sqlData(\"OdbcConnection\") pool::sqlData(\"Pool\") RAthena::sqlData(\"AthenaConnection\") RMariaDB::sqlData(\"MariaDBConnection\") RPostgres::sqlData(\"PqConnection\") RSQLite::sqlData(\"SQLiteConnection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlData.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert a data frame into form suitable for upload to an SQL database — sqlData","text":"","code":"sqlData(con, value, row.names = NA, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlData.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert a data frame into form suitable for upload to an SQL database — sqlData","text":"con database connection. value data frame row.names Either TRUE, FALSE, NA string. TRUE, always translate row names column called \"row_names\". FALSE, never translate row names. NA, translate rownames character vector. string equivalent TRUE, allows override default name. backward compatibility, NULL equivalent FALSE. ... arguments used individual methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlData.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Convert a data frame into form suitable for upload to an SQL database — sqlData","text":"default method: Converts factors characters Quotes strings dbQuoteIdentifier() Converts columns strings dbQuoteLiteral() Replaces NA NULL","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlData.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert a data frame into form suitable for upload to an SQL database — sqlData","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") sqlData(con, head(iris)) #> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> 1 5.1 3.5 1.4 0.2 'setosa' #> 2 4.9 3.0 1.4 0.2 'setosa' #> 3 4.7 3.2 1.3 0.2 'setosa' #> 4 4.6 3.1 1.5 0.2 'setosa' #> 5 5.0 3.6 1.4 0.2 'setosa' #> 6 5.4 3.9 1.7 0.4 'setosa' sqlData(con, head(mtcars)) #> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":null,"dir":"Reference","previous_headings":"","what":"Safely interpolate values into an SQL string — sqlInterpolate","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"Accepts query string placeholders values, returns string values embedded. function careful quote inputs dbQuoteLiteral() protect SQL injection attacks. Placeholders can specified one two syntaxes: ?: occurrence standalone ? replaced value ?name1, ?name2, ...: values given named arguments named list, names used match values Mixing ? ?name syntaxes error. number names values supplied must correspond placeholders used query.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. pool::sqlInterpolate(\"Pool\") sparklyr::sqlInterpolate(\"spark_connection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"","code":"sqlInterpolate(conn, sql, ..., .dots = list())"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"conn DBIConnection object, returned dbConnect(). sql SQL string containing variables interpolate. Variables must start question mark can valid R identifier, .e. must start letter ., followed letter, digit, . _. ..., .dots Values (...) list (.dots) interpolate string. Names required sql uses ?name syntax placeholders. values first escaped dbQuoteLiteral() prior interpolation protect SQL injection attacks. Arguments created SQL() dbQuoteIdentifier() remain unchanged.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"sql query values ... .dots safely embedded.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":"backend-authors","dir":"Reference","previous_headings":"","what":"Backend authors","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"implementing SQL backend non-ANSI quoting rules, need implement method sqlParseVariables(). Failure expose SQL injection attacks, (rarely) result errors matching supplied interpolated variables.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlInterpolate.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Safely interpolate values into an SQL string — sqlInterpolate","text":"","code":"sql <- \"SELECT * FROM X WHERE name = ?name\" sqlInterpolate(ANSI(), sql, name = \"Hadley\") #> SELECT * FROM X WHERE name = 'Hadley' # This is safe because the single quote has been double escaped sqlInterpolate(ANSI(), sql, name = \"H'); DROP TABLE--;\") #> SELECT * FROM X WHERE name = 'H''); DROP TABLE--;' # Using paste0() could lead to dangerous SQL with carefully crafted inputs # (SQL injection) name <- \"H'); DROP TABLE--;\" paste0(\"SELECT * FROM X WHERE name = '\", name, \"'\") #> [1] \"SELECT * FROM X WHERE name = 'H'); DROP TABLE--;'\" # Use SQL() or dbQuoteIdentifier() to avoid escaping sql2 <- \"SELECT * FROM ?table WHERE name in ?names\" sqlInterpolate(ANSI(), sql2, table = dbQuoteIdentifier(ANSI(), \"X\"), names = SQL(\"('a', 'b')\") ) #> SELECT * FROM \"X\" WHERE name in ('a', 'b') # Don't use SQL() to escape identifiers to avoid SQL injection sqlInterpolate(ANSI(), sql2, table = SQL(\"X; DELETE FROM X; SELECT * FROM X\"), names = SQL(\"('a', 'b')\") ) #> SELECT * FROM X; DELETE FROM X; SELECT * FROM X WHERE name in ('a', 'b') # Use dbGetQuery() or dbExecute() to process these queries: if (requireNamespace(\"RSQLite\", quietly = TRUE)) { con <- dbConnect(RSQLite::SQLite()) sql <- \"SELECT ?value AS value\" query <- sqlInterpolate(con, sql, value = 3) print(dbGetQuery(con, query)) dbDisconnect(con) } #> value #> 1 3"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlParseVariables.html","id":null,"dir":"Reference","previous_headings":"","what":"Parse interpolated variables from SQL. — sqlCommentSpec","title":"Parse interpolated variables from SQL. — sqlCommentSpec","text":"implementing backend uses non-ANSI quoting commenting rules, need implement method sqlParseVariables calls sqlParseVariablesImpl appropriate quote comment specifications.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlParseVariables.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Parse interpolated variables from SQL. — sqlCommentSpec","text":"","code":"sqlCommentSpec(start, end, endRequired) sqlQuoteSpec(start, end, escape = \"\", doubleEscape = TRUE) sqlParseVariablesImpl(sql, quotes, comments) sqlParseVariables(conn, sql, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/sqlParseVariables.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Parse interpolated variables from SQL. — sqlCommentSpec","text":"start, end Start end characters quotes comments endRequired ending character comment required? escape character can used escape quoting characters? Defaults \"\", .e. nothing. doubleEscape Can quoting characters escaped doubling ? Defaults TRUE. sql SQL parse (character string) quotes list QuoteSpec calls defining quoting specification. comments list CommentSpec calls defining commenting specification.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/sqlParseVariables.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Parse interpolated variables from SQL. — sqlCommentSpec","text":"","code":"# Use [] for quoting and no comments sqlParseVariablesImpl(\"[?a]\", list(sqlQuoteSpec(\"[\", \"]\", \"\\\\\", FALSE)), list() ) #> $start #> integer(0) #> #> $end #> integer(0) #> # Standard quotes, use # for commenting sqlParseVariablesImpl(\"# ?a\\n?b\", list(sqlQuoteSpec(\"'\", \"'\"), sqlQuoteSpec('\"', '\"')), list(sqlCommentSpec(\"#\", \"\\n\", FALSE)) ) #> $start #> [1] 6 #> #> $end #> [1] 7 #>"},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":null,"dir":"Reference","previous_headings":"","what":"Begin/commit/rollback SQL transactions — dbBegin","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"transaction encapsulates several SQL statements atomic unit. initiated dbBegin() either made persistent dbCommit() undone dbRollback(). case, DBMS guarantees either none statements permanent effect. helps ensuring consistency write operations multiple tables.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"methods-in-other-packages","dir":"Reference","previous_headings":"","what":"Methods in other packages","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"documentation page describes generics. Refer documentation pages linked documentation methods implemented various backend packages. adbi::dbBegin(\"AdbiConnection\") adbi::dbCommit(\"AdbiConnection\") adbi::dbRollback(\"AdbiConnection\") bigrquery::dbBegin(\"BigQueryConnection\") bigrquery::dbCommit(\"BigQueryConnection\") bigrquery::dbRollback(\"BigQueryConnection\") DatabaseConnector::dbBegin(\"DatabaseConnectorConnection\") DatabaseConnector::dbCommit(\"DatabaseConnectorConnection\") DatabaseConnector::dbRollback(\"DatabaseConnectorConnection\") dittodb::dbBegin(\"DBIMockConnection\") dittodb::dbCommit(\"DBIMockConnection\") dittodb::dbRollback(\"DBIMockConnection\") duckdb::dbBegin(\"duckdb_connection\") duckdb::dbCommit(\"duckdb_connection\") duckdb::dbRollback(\"duckdb_connection\") odbc::dbBegin(\"OdbcConnection\") odbc::dbCommit(\"OdbcConnection\") odbc::dbRollback(\"OdbcConnection\") pool::dbBegin(\"Pool\") pool::dbCommit(\"Pool\") pool::dbRollback(\"Pool\") RJDBC::dbBegin(\"JDBCConnection\") RJDBC::dbCommit(\"JDBCConnection\") RJDBC::dbRollback(\"JDBCConnection\") RMariaDB::dbBegin(\"MariaDBConnection\") RMariaDB::dbCommit(\"MariaDBConnection\") RMariaDB::dbRollback(\"MariaDBConnection\") RMySQL::dbBegin(\"MySQLConnection\") RMySQL::dbCommit(\"MySQLConnection\") RMySQL::dbRollback(\"MySQLConnection\") RPostgres::dbBegin(\"PqConnection\") RPostgres::dbCommit(\"PqConnection\") RPostgres::dbRollback(\"PqConnection\") RPostgreSQL::dbBegin(\"PostgreSQLConnection\") RPostgreSQL::dbCommit(\"PostgreSQLConnection\") RPostgreSQL::dbRollback(\"PostgreSQLConnection\") RSQLite::dbBegin(\"SQLiteConnection\") RSQLite::dbCommit(\"SQLiteConnection\") RSQLite::dbRollback(\"SQLiteConnection\") sparklyr::dbBegin(\"spark_connection\") sparklyr::dbCommit(\"spark_connection\") sparklyr::dbRollback(\"spark_connection\")","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"","code":"dbBegin(conn, ...) dbCommit(conn, ...) dbRollback(conn, ...)"},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"conn DBIConnection object, returned dbConnect(). ... parameters passed methods.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"dbBegin(), dbCommit() dbRollback() return TRUE, invisibly.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"database engines implement transaction management, case methods implemented specific DBIConnection subclass.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"failure-modes","dir":"Reference","previous_headings":"","what":"Failure modes","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"implementations expected raise error case failure, tested. way, generics throw error closed invalid connection. addition, call dbCommit() dbRollback() without prior call dbBegin() raises error. Nested transactions supported DBI, attempt call dbBegin() twice yields error.","code":""},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"specification","dir":"Reference","previous_headings":"","what":"Specification","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"Actual support transactions may vary backends. transaction initiated call dbBegin() committed call dbCommit(). Data written transaction must persist transaction committed. example, record missing transaction started created transaction must exist transaction, also new connection. transaction can also aborted dbRollback(). data written transaction must removed transaction rolled back. example, record missing transaction started created transaction must exist anymore rollback. Disconnection connection open transaction effectively rolls back transaction. data written transaction must removed transaction rolled back. behavior specified arguments passed functions. particular, RSQLite issues named transactions support nesting name argument set. transaction isolation level specified DBI.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/reference/transactions.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Begin/commit/rollback SQL transactions — dbBegin","text":"","code":"con <- dbConnect(RSQLite::SQLite(), \":memory:\") dbWriteTable(con, \"cash\", data.frame(amount = 100)) dbWriteTable(con, \"account\", data.frame(amount = 2000)) # All operations are carried out as logical unit: dbBegin(con) withdrawal <- 300 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) #> [1] 1 dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) #> [1] 1 dbCommit(con) dbReadTable(con, \"cash\") #> amount #> 1 400 dbReadTable(con, \"account\") #> amount #> 1 1700 # Rolling back after detecting negative value on account: dbBegin(con) withdrawal <- 5000 dbExecute(con, \"UPDATE cash SET amount = amount + ?\", list(withdrawal)) #> [1] 1 dbExecute(con, \"UPDATE account SET amount = amount - ?\", list(withdrawal)) #> [1] 1 if (dbReadTable(con, \"account\")$amount >= 0) { dbCommit(con) } else { dbRollback(con) } dbReadTable(con, \"cash\") #> amount #> 1 400 dbReadTable(con, \"account\") #> amount #> 1 1700 dbDisconnect(con)"},{"path":"https://dbi.r-dbi.org/dev/security.html","id":null,"dir":"","previous_headings":"","what":"Process for reporting security vulnerabilities","title":"Process for reporting security vulnerabilities","text":"reporting security vulnerability, please e-mail package maintainer krlmlr+r@mailbox.org instructions. include confidential information e-mail.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-1239001-2024-06-02","dir":"Changelog","previous_headings":"","what":"DBI 1.2.3.9001 (2024-06-02)","title":"DBI 1.2.3.9001 (2024-06-02)","text":"Merge branch ‘cran-1.2.3’.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-1239000-2024-06-02","dir":"Changelog","previous_headings":"","what":"DBI 1.2.3.9000 (2024-06-02)","title":"DBI 1.2.3.9000 (2024-06-02)","text":"Merge branch ‘cran-1.2.3’.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"bug-fixes-1-2-3","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"DBI 1.2.3 (2024-06-02)","text":"dbQuoteLiteral() uses format \"%Y-%m-%d %H-%M-%S%z\" understood databases (#467, #474).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-2-3","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.2.3 (2024-06-02)","text":"Use relational-data.org replacement relational.fit.cvut.cz. Set BS version explicitly now (@maelle, #478). Include dbGetInfo() spec (#477). Fix typos (@salim-b, #469, @MichaelChirico, #482).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"bug-fixes-1-2-2","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"DBI 1.2.2 (2024-02-09)","text":"Id() assign empty names components arguments unnamed (#464). Add spec version control avoid weird pandoc errors CRAN (#465).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"bug-fixes-1-2-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"DBI 1.2.1 (2024-01-12)","text":"Fix dbWriteTableArrow() according spec (#457). Fix type inference default method dbCreateTableArrow() (#450).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"features-1-2-1","dir":"Changelog","previous_headings":"","what":"Features","title":"DBI 1.2.1 (2024-01-12)","text":"dbAppendTableArrow() returns number rows (#454). Add temporary argument dbCreateTableArrow() (#453). Avoid coercing params default implementation dbSendQueryArrow() (#447). Use nanoarrow::infer_nanoarrow_schema() default method dbCreateTable() (#445).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"chore-1-2-1","dir":"Changelog","previous_headings":"","what":"Chore","title":"DBI 1.2.1 (2024-01-12)","text":"Add badge DBIResultArrow class (#452). Change maintainer e-mail.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-2-1","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.2.1 (2024-01-12)","text":"Finalize Arrow vignette (#451, #455). Document new Arrow generics (#444, #449). Use dbitemplate (@maelle, #442).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"breaking-changes-1-2-0","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"DBI 1.2.0 (2023-12-20)","text":"dbUnquoteIdentifier() creates Id() objects without component names allows non-NA character input (#421, #422).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"features-1-2-0","dir":"Changelog","previous_headings":"","what":"Features","title":"DBI 1.2.0 (2023-12-20)","text":"New generics dbSendQueryArrow(), dbFetchArrow(), dbGetQueryArrow(), dbReadTableArrow(), dbWriteTableArrow() (@nbenn, #390), dbCreateTableArrow(), dbAppendTableArrow() (#396), dbBindArrow() (#415) dbFetchArrowChunk() (#424), default implementations via nanoarrow (#414). Id() now accepts unnamed components (#417). names provided, components arranged SQL order (@eauleaf, #427). New dbIsValid() method \"DBIResultArrowDefault\" objects implemented DBI (#425). Implement dbiDataType() objects class \"blob\".","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-2-0","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.2.0 (2023-12-20)","text":"Update pkgdown template (@maelle, #428, #438, #437). Clarify repeated parameter binding (#430). Deal sundown https://relational.fit.cvut.cz (#423). Correct vignette titles (#419). Harmonize table documentation (#400). Tweak typo, add families data retrieval command execution.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"testing-1-2-0","dir":"Changelog","previous_headings":"","what":"Testing","title":"DBI 1.2.0 (2023-12-20)","text":"Enable BLOB tests arrow >= 10.0.0 (#395). Run DBItest SQLite part checks (#431). Fix checks without suggested packages (#420). Fix Windows tests GHA (#406). testthat::use_testthat(3) (#416).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"features-1-1-3","dir":"Changelog","previous_headings":"","what":"Features","title":"DBI 1.1.3 (2022-06-18)","text":"dbAppendTable() accepts Id (#381, @renkun-ken).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-1-3","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.1.3 (2022-06-18)","text":"?dbSendQuery related methods gain section “data retrieval flow” (#386). ?dbSendStatement related methods gain section “command execution flow” (#386).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"features-1-1-2","dir":"Changelog","previous_headings":"","what":"Features","title":"DBI 1.1.2 (2021-12-19)","text":"Use dbQuoteLiteral() default method sqlData() (#362, #371). Update specification changes DBItest 1.7.2 (#367).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-1-2","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.1.2 (2021-12-19)","text":"pkgdown documentation DBI generics (e.g. ?dbConnect) contains clickable links known backends (except ROracle), explanatory sentence (#360). ?Id gains better examples (#295, #370). Elaborate status dbWriteTable() documentation (#352, #372). Make method definition similar S3. setMethod() calls refer top-level functions (#368). ?dbReadTable pages gain pointers Id() SQL() (#359).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-1-1","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.1.1 (2021-01-04)","text":"Expand “Get started” vignette two tutorials, basic advanced (#332, @jawond).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"bug-fixes-1-1-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"DBI 1.1.1 (2021-01-04)","text":"dbAppendTable() now allows columns named sep (#336). dbAppendTable() shows better error message input zero columns (#313). sqlInterpolate() now correctly interprets consecutive comments (#329, @rnorberg). dbQuoteLiteral() works difftime objects (#325). dbQuoteLiteral() quotes dates YYYY-MM-DD without time zone (#331).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"internal-1-1-1","dir":"Changelog","previous_headings":"","what":"Internal","title":"DBI 1.1.1 (2021-01-04)","text":"Switch GitHub Actions (#326). Update URL DESCRIPTION.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"new-features-1-1-0","dir":"Changelog","previous_headings":"","what":"New features","title":"DBI 1.1.0 (2019-12-15)","text":"New DBIConnector class (#280). Specify immediate argument dbSendQuery(), dbGetQuery(), dbSendStatement() dbExecute() (#268). Use specification dbGetInfo() (#271). dbUnquoteIdentifier() now supports Id() objects catalog members (#266, @raffscallion). also handles unquoted identifiers form table, schema.table catalog.schema.table, compatibility dbplyr.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-1-1-0","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 1.1.0 (2019-12-15)","text":"New DBI intro article (#286, @cutterkom). Add pkgdown reference index (#288). DBI specification https://dbi.r-dbi.org/dev/articles/spec now comes table contents code formatting. Update examples refer params instead param (#235). Improved documentation sqlInterpolate() (#100). Add usage SQL() sqlInterpolate() examples (#259, @renkun-ken). Improve documentation Id.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"internal-1-1-0","dir":"Changelog","previous_headings":"","what":"Internal","title":"DBI 1.1.0 (2019-12-15)","text":"Add tests dbUnquoteIdentifier() (#279, @baileych). sqlInterpolate() uses dbQuoteLiteral() instead checking type input. Avoid partial argument match dbWriteTable() (#246, @richfitz).","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"new-generics-1-0-0","dir":"Changelog","previous_headings":"","what":"New generics","title":"DBI 1.0.0 (2018-05-02)","text":"New dbAppendTable() default calls sqlAppendTableTemplate() dbExecute() param argument, without support row.names argument (#74). New dbCreateTable() default calls sqlCreateTable() dbExecute(), without support row.names argument (#74). New dbCanConnect() generic default implementation (#87). New dbIsReadOnly() generic default implementation (#190, @anhqle).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"changes-1-0-0","dir":"Changelog","previous_headings":"","what":"Changes","title":"DBI 1.0.0 (2018-05-02)","text":"sqlAppendTable() now accepts lists values argument, support lists SQL objects R 3.1. Add default implementation dbListFields(DBIConnection, Id), relies dbQuoteIdentifier(DBIConnection, Id) (#75).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-updates-1-0-0","dir":"Changelog","previous_headings":"","what":"Documentation updates","title":"DBI 1.0.0 (2018-05-02)","text":"DBI specification vignette rendered correctly installed package (#234). Update docs cope stored procedures (#242, @aryoda). Add “Additional arguments” sections examples dbGetQuery(), dbSendQuery(), dbExecute() dbSendStatement(). dbColumnInfo() method now fully specified (#75). dbListFields() method now fully specified (#75). dynamic list methods help pages doesn’t contain methods DBI anymore.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"bug-fixes-1-0-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"DBI 1.0.0 (2018-05-02)","text":"Pass missing value argument secondary dbWriteTable() call (#737, @jimhester). Id class now uses
    printing. default dbUnquoteIdentifier() implementation now complies spec.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"breaking-changes-0-8","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"DBI 0.8 (2018-02-24)","text":"SQL() now strips names output names argument unset. dbReadTable(), dbWriteTable(), dbExistsTable(), dbRemoveTable(), dbListFields() generics now specialize first two arguments support implementations Id S4 class type second argument. packages may need update documentation satisfy R CMD check .","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"new-generics-0-8","dir":"Changelog","previous_headings":"","what":"New generics","title":"DBI 0.8 (2018-02-24)","text":"Schema support: Export Id(), new generics dbListObjects() dbUnquoteIdentifier(), methods Id call dbQuoteIdentifier() forward (#220). New dbQuoteLiteral() generic. default implementation uses switchpatch avoid dispatch ambiguities, forwards dbQuoteString() character vectors. Backends may override methods also dispatch second argument, case also override \"SQL\" class necessary (#172).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"default-implementations-0-8","dir":"Changelog","previous_headings":"","what":"Default implementations","title":"DBI 0.8 (2018-02-24)","text":"Default implementations dbQuoteIdentifier() dbQuoteLiteral() preserve names, default implementation dbQuoteString() strips names (#173). Specialized methods dbQuoteString() dbQuoteIdentifier() available , compatibility clients use getMethod() access (#218). Add default implementation dbListFields(). default implementation dbReadTable() now row.names = FALSE default also supports row.names = NULL (#186).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"api-changes-0-8","dir":"Changelog","previous_headings":"","what":"API changes","title":"DBI 0.8 (2018-02-24)","text":"SQL() function gains optional names argument can used assign names SQL strings.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"deprecated-generics-0-8","dir":"Changelog","previous_headings":"","what":"Deprecated generics","title":"DBI 0.8 (2018-02-24)","text":"dbListConnections() soft-deprecated documentation. dbListResults() deprecated documentation (#58). dbGetException() soft-deprecated documentation (#51). deprecated print.list.pairs() removed.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"bug-fixes-0-8","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"DBI 0.8 (2018-02-24)","text":"Fix dbDataType() AsIs object (#198, @yutannihilation). Fix dbQuoteString() dbQuoteIdentifier() ignore invalid UTF-8 strings (r-dbi/DBItest#156).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"documentation-0-8","dir":"Changelog","previous_headings":"","what":"Documentation","title":"DBI 0.8 (2018-02-24)","text":"Help pages generics now contain dynamic list methods implemented DBI backends (#162). sqlInterpolate() now supports named positional variables (#216, @hannesmuehleisen). Point db.rstudio.com (@wibeasley, #209). Reflect new ‘r-dbi’ organization DESCRIPTION (@wibeasley, #207).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"internal-0-8","dir":"Changelog","previous_headings":"","what":"Internal","title":"DBI 0.8 (2018-02-24)","text":"Using switchpatch second argument default implementations dbQuoteString() dbQuoteIdentifier().","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-07-2017-06-17","dir":"Changelog","previous_headings":"","what":"DBI 0.7 (2017-06-17)","title":"DBI 0.7 (2017-06-17)","text":"Import updated specs DBItest. default implementation dbGetQuery() now accepts n argument forwards dbFetch(). warning pending rows issued anymore (#76). Require R >= 3.0.0 (slots argument setClass()) (#169, @mvkorpel).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-06-1-2017-04-01","dir":"Changelog","previous_headings":"","what":"DBI 0.6-1 (2017-04-01)","title":"DBI 0.6-1 (2017-04-01)","text":"Fix dbReadTable() backends provide implementation (#171).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-06-2017-03-08","dir":"Changelog","previous_headings":"","what":"DBI 0.6 (2017-03-08)","title":"DBI 0.6 (2017-03-08)","text":"Deprecated dbDriver() dbUnloadDriver() documentation (#21). Renamed arguments sqlInterpolate() sqlParseVariables() consistent rest interface, added .dots argument sqlParseVariables. DBI drivers now expected implement sqlParseVariables(conn, sql, ..., .dots) sqlInterpolate(conn, sql, ...) (#147). Removed valueClass = \"logical\" generics return value meaningless, allow backends return invisibly (#135). Avoiding using braces definitions generics possible, standard generics can detected (#146). Added default implementation dbReadTable(). standard generics required ellipsis (test), future extensibility. Improved default implementation dbQuoteString() dbQuoteIdentifier() (#77). Removed tryCatch() call dbGetQuery() (#113). Finalized first draft DBI specification, now vignette. methods now draw documentation DBItest, behavior finally decided don’t yet yet. Removed max.connections requirement documentation (#56). Improved dbBind() documentation example (#136). Change omegahat.org URL omegahat.net, particular document still doesn’t exist new domain. Use roxygen2 inheritance copy DBI specification package. Use tic package building documentation. Use markdown documentation.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-05-1-2016-09-09","dir":"Changelog","previous_headings":"","what":"DBI 0.5-1 (2016-09-09)","title":"DBI 0.5-1 (2016-09-09)","text":"Documentation example updates.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-05-2016-08-11-cran-release","dir":"Changelog","previous_headings":"","what":"DBI 0.5 (2016-08-11, CRAN release)","title":"DBI 0.5 (2016-08-11, CRAN release)","text":"dbDataType() maps character values \"TEXT\" default (#102). default implementation dbQuoteString() doesn’t call encodeString() anymore: Neither SQLite Postgres understand e.g. \\n string literal, SQLite, Postgres, MySQL accept embedded newline (#121). New dbSendStatement() generic, forwards dbSendQuery() default (#20, #132). New dbExecute(), calls dbSendStatement() default (#109, @bborgesr). New dbWithTransaction() calls dbBegin() dbCommit(), dbRollback() failure (#110, @bborgesr). New dbBreak() function allows aborting within dbWithTransaction() (#115, #133). Export dbFetch() dbQuoteString() methods. One example per function (except functions scheduled deprecation) (#67). Consistent layout identifier naming. Better documentation generics adding links class related generics “See also” section “DBI… generics” (#130). S4 documentation directed hidden page unclutter documentation index (#59). Fix two minor vignette typos (#124, @mdsumner). Add package documentation. Remove misleading parts dbConnect() documentation (#118). Remove misleading link dbDataType() documentation. Remove full stop documentation titles. New help topic “DBIspec” contains full DBI specification (currently work progress) (#129). HTML documentation generated staticdocs now uploaded https://rstats-db.github.io/DBI build “production” branch (#131). minor changes fixes. Use contains argument instead representation() denote base classes (#93). Remove redundant declaration transaction methods (#110, @bborgesr).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-04-1-2016-05-07-cran-release","dir":"Changelog","previous_headings":"","what":"DBI 0.4-1 (2016-05-07, CRAN release)","title":"DBI 0.4-1 (2016-05-07, CRAN release)","text":"default show() implementations silently ignore errors. DBI drivers (e.g., RPostgreSQL) might fail implement dbIsValid() methods used.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"dbi-04-2016-04-30","dir":"Changelog","previous_headings":"","what":"DBI 0.4 (2016-04-30)","title":"DBI 0.4 (2016-04-30)","text":"New package maintainer: Kirill Müller. dbGetInfo() gains default method extracts information dbGetStatement(), dbGetRowsAffected(), dbHasCompleted(), dbGetRowCount(). means drivers longer need implement dbGetInfo() (may deprecated anyway point) (#55). dbDataType() dbQuoteString() now properly exported. default implementation dbDataType() (powered dbiDataType()) now also supports difftime AsIs objects lists raw (#70). Default dbGetQuery() method now always calls dbFetch(), tryCatch() block. New generic dbBind() binding values parameterised query. DBI gains number SQL generation functions. make easier write backends implementing common operations slightly tricky absolutely correctly. sqlCreateTable() sqlAppendTable() create tables data frame insert rows existing table. power implementations dbWriteTable(). sqlAppendTable() useful databases support parameterised queries. sqlRownamesToColumn() sqlColumnToRownames() provide standard way translating row names database. sqlInterpolate() sqlParseVariables() allows databases without native parameterised queries use parameterised queries avoid SQL injection attacks. sqlData() new generic converts data frame data frame suitable sending database. used (e.g.) ensure character vectors encoded UTF-8, convert R varible types (like factor) types supported database. sqlParseVariablesImpl() now implemented purely R, full test coverage (#83, @hannesmuehleisen). dbiCheckCompliance() removed, functionality now available DBItest package (#80). Added default show() methods driver, connection results. New concrete ANSIConnection class ANSI() function generate dummy ANSI compliant connection useful testing. Default dbQuoteString() dbQuoteIdentifer() methods now use encodeString() special characters like \\n correctly escaped. dbQuoteString() converts NA (unquoted) NULL. initial DBI proposal DBI version 1 specification now included vignette. mostly historical interest. new DBItest package described vignette. Deprecated print.list.pairs(). Removed unused dbi_dep().","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-031","dir":"Changelog","previous_headings":"","what":"Version 0.3.1","title":"Version 0.3.1","text":"Actually export dbIsValid() :/ dbGetQuery() uses dbFetch() default implementation.","code":""},{"path":[]},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"new-and-enhanced-generics-0-3-0","dir":"Changelog","previous_headings":"","what":"New and enhanced generics","title":"Version 0.3.0","text":"dbIsValid() returns logical value describing whether connection result set (object) still valid. (#12). dbQuoteString() dbQuoteIdentifier() implement database specific quoting mechanisms. dbFetch() added alias fetch() provide consistent name. Implementers define methods fetch() dbFetch() fetch() deprecated 2015. now, default method dbFetch() calls fetch(). dbBegin() begins transaction (#17). supported, DB specific methods throw error (dbCommit() dbRollback()).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"new-default-methods-0-3-0","dir":"Changelog","previous_headings":"","what":"New default methods","title":"Version 0.3.0","text":"dbGetStatement(), dbGetRowsAffected(), dbHasCompleted(), dbGetRowCount() gain default methods extract appropriate elements dbGetInfo(). means drivers longer need implement methods (#13). dbGetQuery() gains default method DBIConnection uses dbSendQuery(), fetch() dbClearResult().","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"deprecated-features-0-3-0","dir":"Changelog","previous_headings":"","what":"Deprecated features","title":"Version 0.3.0","text":"following functions soft-deprecated. going away, developers use DBI begin preparing. formal deprecation process begin July 2015, function emit warnings use. fetch() replaced dbFetch(). make.db.names(), isSQLKeyword() SQLKeywords(): black list based approach fundamentally flawed; instead quote strings identifiers dbQuoteIdentifier() dbQuoteString(). dbGetDBIVersion() deprecated since ’s now just thin wrapper around packageVersion(\"DBI\"). dbSetDataMappings() (#9) dbCallProc() (#7) deprecated implementations ever provided.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"other-improvements-0-3-0","dir":"Changelog","previous_headings":"","what":"Other improvements","title":"Version 0.3.0","text":"dbiCheckCompliance() makes easier implementors check package compliance DBI specification. examples now use RSQLite package can easily try code samples (#4). dbDriver() gains effective search mechanism doesn’t rely packages loaded (#1). DBI converted use roxygen2 documentation, now functions documentation files. love feedback make documentation better!","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-02-7","dir":"Changelog","previous_headings":"","what":"Version 0.2-7","title":"Version 0.2-7","text":"Trivial changes (updated package fields, daj)","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-02-6","dir":"Changelog","previous_headings":"","what":"Version 0.2-6","title":"Version 0.2-6","text":"Removed deprecated Rd files (thanks Prof. Ripley)","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-02-5","dir":"Changelog","previous_headings":"","what":"Version 0.2-5","title":"Version 0.2-5","text":"Code cleanups contributed Matthias Burger: avoid partial argument name matching use TRUE/FALSE, T/F. Change behavior make.db.names.default quote SQL keywords allow.keywords FALSE. Previously, SQL keywords name mangled underscores digit. Now quoted using ‘“’.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-02-4","dir":"Changelog","previous_headings":"","what":"Version 0.2-4","title":"Version 0.2-4","text":"Changed license GPL LPGL Fixed trivial typo documentation","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-10","dir":"Changelog","previous_headings":"","what":"Version 0.1-10","title":"Version 0.1-10","text":"Fixed documentation typos.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-9","dir":"Changelog","previous_headings":"","what":"Version 0.1-9","title":"Version 0.1-9","text":"Trivial changes.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-8","dir":"Changelog","previous_headings":"","what":"Version 0.1-8","title":"Version 0.1-8","text":"trivial change due package.description() deprecated 1.9.0.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-7","dir":"Changelog","previous_headings":"","what":"Version 0.1-7","title":"Version 0.1-7","text":"substantial re-formatting documentation due incompatibilities introduced 1.8.0 S4 method documentation. contents changed (modulo fixing typos). Thanks Kurt Hornik John Chambers help.","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-6","dir":"Changelog","previous_headings":"","what":"Version 0.1-6","title":"Version 0.1-6","text":"Trivial documentation changes (R CMD check’s sake)","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-5","dir":"Changelog","previous_headings":"","what":"Version 0.1-5","title":"Version 0.1-5","text":"Removed duplicated setGeneric(“dbSetDataMappings”)","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-4","dir":"Changelog","previous_headings":"","what":"Version 0.1-4","title":"Version 0.1-4","text":"Removed “valueClass” generic functions, namely, dbListConnections, dbListResults, dbGetException, dbGetQuery, dbGetInfo. reason methods generics potentially return different classes objects (e.g., call dbGetInfo(res) return list name-value pairs, dbGetInfo(res, “statement”) character vector). Added 00Index inst/doc Added dbGetDBIVersion() (simple wrapper package.description).","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-3","dir":"Changelog","previous_headings":"","what":"Version 0.1-3","title":"Version 0.1-3","text":"??? Minor changes?","code":""},{"path":"https://dbi.r-dbi.org/dev/news/index.html","id":"version-01-2","dir":"Changelog","previous_headings":"","what":"Version 0.1-2","title":"Version 0.1-2","text":"implementation based version 4 classes methods. Incorporated (mostly Tim Keitt’s) comments.","code":""}] diff --git a/dev/security.html b/dev/security.html index 4fe83d36..5a24a48c 100644 --- a/dev/security.html +++ b/dev/security.html @@ -1,12 +1,19 @@ Process for reporting security vulnerabilities • DBISkip to contents + +
    +
    +

    For reporting a security vulnerability, please e-mail the package maintainer at for further instructions. Do not include confidential information in the e-mail.

    +
    + +
    + + + + +